dolphindb 3.1.11 → 3.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InspectOptions as UtilInspectOptions } from 'util'\n\nimport type { Dayjs } from 'dayjs'\n\nimport {\n concat, assert, inspect, typed_array_to_buffer, connect_websocket, Lock, genid, seq, zip_object,\n WebSocketOpen, WebSocketClosed, WebSocketClosing, type WebSocket, type WebSocketConnectionError,\n decode, delay, check, empty\n} from 'xshell'\n\nimport { t } from './i18n/index.ts'\n\nimport {\n date2str, datehour2str, datetime2str, ddb_tensor_bytes, DdbChartType, DdbDurationUnit, DdbForm,\n DdbFunctionType, DdbType, DdbVoidType, dictables, function_definition_pattern, generate_array_type,\n get_big_int_128, get_time_ddbobj, get_duration_unit, get_type_name, int1282str, ipaddr2str, \n is_decimal_null_value, is_decimal_type, minute2str, month2str, nanotime2str, nanotimestamp2str, \n nulls, second2str, set_big_int_128, time2str, timestamp2str, uuid2str, type ConvertOptions, \n type DdbDecimal128Value, type DdbDecimal32Value, type DdbDecimal32VectorValue, \n type DdbDecimal64Value, type DdbDecimal64VectorValue, type DdbDurationValue, \n type DdbDurationVectorValue, type DdbFunctionDefValue, type DdbMatrixData, type DdbRpcType, \n type DdbScalarValue, type DdbSymbolExtendedValue, type DdbTableData, type DdbTensorData, \n type DdbTensorValue, type IotVectorItemValue, type TensorData, type DdbExtObjValue,\n type ConvertableDdbTimeValue, get_times_ddbobj, funcdefs\n} from './common.ts'\n\nexport * from './common.ts'\n\n\nexport interface DdbDecimal128VectorValue {\n scale: number\n \n data: BigInt128Array\n}\n\nexport type DdbDecimalVectorValue = DdbDecimal32VectorValue | DdbDecimal64VectorValue | DdbDecimal128VectorValue\n\n\nexport type DdbVectorValue = \n null |\n Uint8Array | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array | BigInt64Array | BigInt128Array |\n string[] | // string[]\n Uint8Array[] | // blob\n DdbObj[] | // any\n IotVectorItemValue |\n DdbSymbolExtendedValue | \n DdbArrayVectorValue |\n DdbDecimalVectorValue |\n DdbDurationVectorValue\n\n\nexport interface DdbArrayVectorBlock {\n unit: 1 | 2 | 4\n rows: number\n lengths: Uint8Array | Uint16Array | Uint32Array\n data: Int8Array | Int16Array | Int32Array | Float32Array | Float64Array | BigInt64Array | BigInt128Array\n}\n\nexport type DdbArrayVectorValue = DdbArrayVectorBlock[] & /* decimal 数据会有这个属性 */ { scale?: number }\n\n\nexport interface DdbMatrixValue {\n rows: DdbVectorObj | null\n cols: DdbVectorObj | null\n data: DdbVectorValue\n}\n\n\nexport type DdbDictValue = [DdbVectorObj, DdbVectorObj]\n\n\nexport interface DdbChartValue {\n /** 原属性 chartType original: chartType */\n type: DdbChartType\n \n stacking: boolean\n \n /** 直方图 (Histogram), plotHist 函数返回的 chart 可能具有该属性 \n 原属性 binStart \n 数值类型的 DdbObj 都有可能? \n */\n bin_start?: DdbObj\n \n /** 原属性 binEnd */\n bin_end?: DdbObj\n \n /** 原属性 binCount */\n bin_count?: DdbObj\n \n titles: {\n chart: string\n x_axis: string\n y_axis: string\n }\n \n extras?: {\n multi_y_axes: boolean\n }\n \n data: DdbMatrixObj\n}\n\n\nexport type DdbValue = DdbScalarValue | DdbVectorValue | DdbMatrixValue | DdbDictValue | DdbChartValue | DdbTensorValue | DdbExtObjValue\n\n\nexport type DdbStringObj = DdbObj<string>\n\nexport type DdbVectorObj <TValue extends DdbVectorValue = DdbVectorValue> = DdbObj<TValue>\n\nexport type DdbVectorAnyObj = DdbVectorObj<DdbObj[]>\nexport type DdbVectorStringObj = DdbVectorObj<string[]>\n\nexport type DdbTableObj <TColumns extends DdbVectorObj[] = DdbVectorObj[]> = DdbObj<TColumns>\n\nexport type DdbDictObj <TKeys extends DdbVectorObj = DdbVectorObj, TValues extends DdbVectorObj = DdbVectorObj> = DdbObj<[TKeys, TValues]>\n\nexport type DdbMatrixObj <TValue extends DdbMatrixValue = DdbMatrixValue> = DdbObj<TValue>\n\nexport type DdbChartObj = DdbObj<DdbChartValue>\n\nexport type DdbTensorObj = DdbObj<DdbTensorValue>\n\n\nexport type DdbIotAnyVector = DdbObj<IotVectorItemValue>\n\n\nexport type Convertable = DdbObj | string | boolean | null | undefined\n\n\n/** 可以表示所有 DolphinDB 数据库中的数据类型 Can represent data types in all DolphinDB databases */\nexport class DdbObj <TValue extends DdbValue = DdbValue> {\n static dec = new TextDecoder('utf-8')\n \n static enc = new TextEncoder()\n \n /** 维护已解析的 symbol base,比如流数据中后续的 symbol 向量可能只发送一个 base.id, base.size == 0, 依赖之前发送的 symbol base ?\n 只是暂存,如果一张表有多个 symbol 列,可能这个 symbol base 会被复用,不同的对象之间 symbol base 一般不复用\n */\n static symbol_bases: Record<number, string[]> = { }\n \n /** little endian (client) */\n static le_client = Boolean(\n new Uint8Array(\n Uint32Array.of(1).buffer\n )[0]\n )\n \n /** 是否为小端 (little endian) */\n le = DdbObj.le_client\n \n /** 数据形式 https://www.dolphindb.cn/cn/help/DataTypesandStructures/DataForms/index.html */\n form: DdbForm\n \n /** 数据类型 https://www.dolphindb.cn/cn/help/DataTypesandStructures/DataTypes/index.html */\n type: DdbType\n \n /** 占用 parse 时传入的 buf 的长度 */\n length: number\n \n /** table name / column name */\n name?: string\n \n /** 最低维、第 1 维\n - vector: rows = n, cols = 1\n - pair: rows = 2, cols = 1\n - matrix: rows = n, cols = m\n - set: 同 vector\n - dict: 包含 keys, values 向量\n - table: 同 matrix */\n rows?: number\n \n /** 第 2 维 */\n cols?: number\n \n /** 实际数据。不同的 DdbForm, DdbType 使用 DdbValue 中不同的类型来表示实际数据 \n The actual data. Different DdbForm, DdbType use different types in DdbValue to represent actual data */\n value: TValue\n \n /** 原始二进制数据,仅在 parse_object 为 false 时通过 parse_message 生成的顶层对象有这个属性 */\n buffer?: Uint8Array\n \n \n constructor (data: Partial<DdbObj> & { form: DdbForm, type: DdbType /* (parse 对象时必须设置) , length: number */ }) {\n Object.assign(this, data)\n }\n \n \n static parse (buf: Uint8Array, le: boolean) {\n if (!buf.length)\n return new this({\n le,\n form: DdbForm.scalar,\n type: DdbType.void,\n length: 0,\n value: null\n })\n \n const type = buf[0]\n const form = buf[1]\n \n if (buf.length <= 2) \n return new this({\n le,\n form,\n type,\n length: 2,\n value: null,\n })\n \n \n // set 里面 data 嵌套了一个 vector, 跳过 vector 的 type 和 form\n const i_data = form === DdbForm.set ? 4 : 2\n const buf_data = buf.subarray(i_data)\n \n switch (form) {\n case DdbForm.scalar: {\n const [length, value] = this.parse_scalar(buf_data, le, type)\n return new this({\n le,\n form, \n type,\n length: i_data + length,\n value,\n })\n }\n \n case DdbForm.vector:\n case DdbForm.pair:\n case DdbForm.set: {\n let vector = this.parse_vector(buf_data, le, type)\n vector.length += i_data\n vector.form = form\n return vector\n }\n \n \n case DdbForm.table: {\n // table([\n // [1, 2] as a,\n // [1, 2] as b\n // ])\n \n // <Buffer \n // 00 06 form = table\n // 02 00 00 00 02 00 00 00 rows = 2, cols = 2\n // 00 行名称\n // 61 00 62 00 列名称 a, b\n \n // 04 01 form = vector, type = int\n // 02 00 00 00 01 00 00 00 cols = 2, rows = 1\n // 01 00 00 00 02 00 00 00 \n \n // 04 01 \n // 02 00 00 00 01 00 00 00 \n // 01 00 00 00 02 00 00 00>\n \n const dv = new DataView(buf.buffer, buf.byteOffset + i_data)\n \n const rows = dv.getUint32(0, le)\n const cols = dv.getUint32(4, le)\n const i_name_tail = buf_data.indexOf(0, 8)\n const name = this.dec.decode(\n buf_data.subarray(8, i_name_tail)\n )\n \n const i_items_start = i_name_tail + 1\n \n const [len_items, colnames] = this.parse_vector_items(\n buf_data.subarray(i_items_start),\n le,\n DdbType.string,\n cols\n ) as [number, string[]]\n \n let value = new Array(cols)\n let i_start = i_items_start + len_items\n for (let i = 0; i < cols; i++) {\n const type = buf_data[i_start] as DdbType\n \n if (type === DdbType.compressed)\n throw new Error(t(\n '{{form}}<{{type}}> 暂时不支持解析', \n { form: 'table', type: 'compress' }\n ))\n \n let col = this.parse_vector(\n buf_data.subarray(i_start + 2),\n le,\n type)\n \n col.length += 2\n \n col.name = colnames[i]\n \n value[i] = col\n \n i_start += col.length\n }\n \n return new this({\n le,\n form,\n type,\n length: i_data + i_start,\n name,\n rows,\n cols,\n value,\n })\n }\n \n \n case DdbForm.dict: \n case DdbForm.chart: {\n // <Buffer 19 05 type = any, form = dict\n // 12 01 keys.type = string, keys.form = vector\n // 03 00 00 00 01 00 00 00 keys.cols = 3, keys.rows = 1\n // 63 00 62 00 61 00 \n \n // 19 01 values.type = any, values.form = vector\n // 03 00 00 00 01 00 00 00 values.cols = 3, values.rows = 1\n // 04 00 03 00 00 00 04 00 02 00 00 00 04 00 01 00 00 00>\n \n let keys = this.parse_vector(\n buf_data.subarray(2),\n le,\n buf_data[0]\n )\n \n keys.length += 2\n \n let values = this.parse_vector(\n buf_data.subarray(keys.length + 2),\n le,\n buf_data[keys.length]\n )\n \n values.length += 2\n \n let dict = new this({\n le,\n form: DdbForm.dict,\n type,\n length: i_data + keys.length + values.length,\n rows: keys.rows,\n cols: 2,\n value: [\n keys,\n values\n ],\n })\n \n if (form === DdbForm.dict)\n return dict\n else {\n const {\n chartType: type,\n stacking,\n binStart: bin_start,\n binEnd: bin_end,\n binCount: bin_count,\n title: titles,\n extras,\n data,\n ... others\n } = dict.to_dict<{\n chartType: DdbObj<DdbChartType>\n stacking: DdbBool\n binStart: DdbObj\n binEnd: DdbObj\n binCount: DdbObj\n title: DdbVectorString\n extras?: DdbObj\n data: DdbMatrixObj\n }>()\n \n const [chart, x_axis, y_axis] = titles.value\n \n dict.form = DdbForm.chart\n \n dict.value = {\n type: type.value,\n stacking: stacking.value,\n titles: {\n chart,\n x_axis,\n y_axis,\n },\n ... bin_start ? { bin_start, bin_end, } : { },\n ... bin_count ? { bin_count } : { },\n ... extras ? (() => {\n const { multiYAxes: multi_y_axes = false, ...extras_others } = extras.to_dict<{ multiYAxes: boolean }>({ strip: true })\n \n return {\n extras: {\n multi_y_axes,\n ...extras_others,\n }\n }\n })() : { },\n data,\n ...others,\n }\n \n return dict\n }\n }\n \n \n case DdbForm.matrix: {\n // rename!(\n // 1..9$3:3,\n // [1, 2, 3],\n // ['c1', 'c2', 'c3']\n // )\n \n // <Buffer 04 03 type = int, form = matrix\n // 03 has_row_label (& 0x01) = 1, has_col_label (& 0x02) = 1\n \n // row labels\n // 04 01 type = int, form = vector\n // 03 00 00 00 01 00 00 00 rows = 3, cols = 1\n // 01 00 00 00 02 00 00 00 03 00 00 00 vector values\n \n // col labels\n // 12 01 type = string, form = vector\n // 03 00 00 00 01 00 00 00 rows = 3, cols = 1\n // 63 31 00 63 32 00 63 33 00 \n \n // matrix data\n // 04 03 type = matrix.type, form = matrix\n // 03 00 00 00 03 00 00 00 rows = 3, cols = 3\n \n const dv = new DataView(buf.buffer, buf.byteOffset + i_data)\n \n const label_flags = buf_data[0]\n const has_row_labels = Boolean(label_flags & 0x01)\n const has_col_labels = Boolean(label_flags & 0x02)\n \n let row_labels: DdbVectorObj | null = null\n let col_labels: DdbVectorObj | null = null\n \n let offset = 1\n \n if (has_row_labels) {\n row_labels = this.parse_vector(\n buf_data.subarray(offset + 2),\n le,\n buf_data[offset] as DdbType\n )\n row_labels.length += 2\n offset += row_labels.length\n }\n \n if (has_col_labels) {\n col_labels = this.parse_vector(\n buf_data.subarray(offset + 2),\n le,\n buf_data[offset] as DdbType\n )\n col_labels.length += 2\n offset += col_labels.length\n }\n \n assert(buf_data[offset] === type, 'matrix.datatype === matrix.type')\n \n const rows = dv.getUint32(offset + 2, le)\n const cols = dv.getUint32(offset + 6, le)\n \n const [len_items, data] = this.parse_vector_items(\n buf_data.subarray(offset + 10),\n le,\n type,\n rows * cols // 假设小于 2**32\n )\n \n offset += 10 + len_items\n \n return new this({\n le,\n form, \n type,\n length: i_data + offset,\n rows,\n cols,\n value: {\n rows: row_labels,\n cols: col_labels,\n data,\n },\n })\n }\n \n case DdbForm.tensor: {\n // 元数据\n const tensorType = buf[2]\n const deviceType = buf[3]\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const tensorFlags = dv.getUint32(4, le)\n const dimensions = dv.getInt32(8, le)\n const shapes: number[] = [ ]\n const strides: number[] = [ ]\n const shapeStart = 12\n const stridesStart = shapeStart + dimensions * 8\n const preserveValueStart = stridesStart + dimensions * 8\n const preserveValue = dv.getBigInt64(preserveValueStart, le)\n const storageStart = preserveValueStart + 8\n const elemCount = dv.getBigInt64(storageStart, le)\n const dataStart = storageStart + 8\n for (let d = 0; d < dimensions; d++) {\n const getNumOffset = d * 8\n shapes.push(Number(dv.getBigInt64(shapeStart + getNumOffset, le)))\n strides.push(Number(dv.getBigInt64(stridesStart + getNumOffset, le)))\n }\n const dataBuffer = buf.subarray(dataStart)\n return new this({\n le,\n form,\n type,\n length: i_data + buf_data.length,\n value: {\n data_type: type, \n tensor_type: tensorType, \n device_type: deviceType,\n tensor_flags: tensorFlags,\n dimensions, \n shape: shapes, \n strides, \n preserve_value: preserveValue,\n elem_count: Number(elemCount), \n data: dataBuffer\n }\n })\n }\n \n case DdbForm.extobj: {\n const dv = new DataView(buf_data.buffer, buf_data.byteOffset, buf_data.byteLength)\n \n const version_and_size = dv.getUint32(4, le)\n \n const length = version_and_size & 0x00ffffff\n \n return new this({\n le,\n form,\n type,\n \n // 低 24 位为 size\n length: i_data + 8 + length,\n \n value: {\n type: buf_data.subarray(0, 4),\n version: (version_and_size >>> 24) & 0xff,\n data: buf_data.subarray(8, 8 + length)\n }\n })\n }\n \n default:\n return new this({\n le,\n form,\n type,\n length: i_data + buf_data.length,\n value: buf_data\n })\n }\n }\n \n \n static parse_scalar (buf: Uint8Array, le: boolean, type: DdbType): [number, DdbScalarValue] {\n switch (type) {\n case DdbType.bool: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const value = dv.getInt8(0)\n return [1, value === nulls.int8 ? null : Boolean(value)]\n }\n \n \n case DdbType.void:\n case DdbType.char: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const value = dv.getInt8(0)\n return [1, value === nulls.int8 ? null : value]\n }\n \n \n case DdbType.short: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const value = dv.getInt16(0, le)\n return [2, value === nulls.int16 ? null : value]\n }\n \n \n case DdbType.int:\n // datetime\n case DdbType.date:\n case DdbType.month:\n case DdbType.time:\n case DdbType.minute:\n case DdbType.second:\n case DdbType.datetime: \n case DdbType.datehour: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const value = dv.getInt32(0, le)\n return [4, value === nulls.int32 ? null : value]\n }\n \n \n case DdbType.float: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const value = dv.getFloat32(0, le)\n return [4, value === nulls.float32 ? null : value]\n }\n \n \n case DdbType.double: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const value = dv.getFloat64(0, le)\n return [8, value === nulls.double ? null : value]\n }\n \n \n case DdbType.long:\n // timestamp\n case DdbType.timestamp:\n case DdbType.nanotime:\n case DdbType.nanotimestamp: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const value = dv.getBigInt64(0, le)\n return [8, value === nulls.int64 ? null : value]\n }\n \n \n case DdbType.string:\n case DdbType.symbol:\n case DdbType.code:\n case DdbType.handle:\n \n // sqlDS 函数会返回包含 datasource 的 any vector\n case DdbType.datasource:\n \n case DdbType.functiondef: \n \n // mysql 插件 connect 方法会返回 resource 类型的对象\n case DdbType.resource: {\n const i_head = type === DdbType.functiondef ? 1 : 0\n let i_zero = buf.indexOf(0, i_head)\n let i_end: number // 整个字符串(包括 0)的末尾,excluding\n if (i_zero === -1)\n i_end = i_zero = buf.length\n else\n i_end = i_zero + 1\n // 调整了 i_zero 到字符串(不包括 0)的末尾,excluding\n \n const str = this.dec.decode(\n buf.subarray(i_head, i_zero)\n )\n \n return [\n i_end,\n type === DdbType.functiondef ?\n {\n type: buf[0] as DdbFunctionType,\n name: str\n }\n :\n str\n ]\n }\n \n \n case DdbType.uuid:\n case DdbType.ipaddr:\n case DdbType.int128:\n return [16, buf.slice(0, 16)]\n \n \n case DdbType.blob: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const length = dv.getUint32(0, le)\n \n return [4 + length, buf.slice(4, 4 + length)]\n }\n \n \n case DdbType.complex:\n case DdbType.point: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n return [16, [dv.getFloat64(0, le), dv.getFloat64(8, le)]]\n }\n \n \n case DdbType.duration: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n return [8, { unit: dv.getUint32(4, le), data: dv.getInt32(0, le) } as DdbDurationValue]\n }\n \n \n case DdbType.decimal32: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const data = dv.getInt32(4, le)\n return [8, { scale: dv.getInt32(0, le), data: data === nulls.int32 ? null : data } as DdbDecimal32Value]\n }\n \n case DdbType.decimal64: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n \n const data = dv.getBigInt64(4, le)\n \n return [12, { scale: dv.getInt32(0, le), data: data === nulls.int64 ? null : data } as DdbDecimal64Value]\n }\n \n case DdbType.decimal128: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n \n const data = get_big_int_128(dv, 4, le)\n \n return [20, { scale: dv.getInt32(0, le), data: data === nulls.int128 ? null : data }]\n }\n \n \n default:\n throw new Error(String(DdbType[type] || type) + t(' 暂时不支持解析'))\n }\n }\n \n \n /** parse: rows, cols, items \n 返回的 ddbobj.length 不包括 vector 的 type 和 form */\n static parse_vector (buf: Uint8Array, le: boolean, type: DdbType): DdbVectorObj {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n \n const rows = dv.getUint32(0, le)\n \n let i_items_start = 8\n \n if (type < 64 || type >= 128) { // 普通数组\n const [len_items, value] = this.parse_vector_items(\n buf.subarray(i_items_start),\n le,\n type,\n rows\n )\n \n return new this({\n le,\n form: DdbForm.vector,\n type,\n length: i_items_start + len_items,\n cols: 1,\n rows: type === DdbType.iotany ? (value as IotVectorItemValue).length : rows,\n value,\n ... type === DdbType.iotany ? { buffer: buf } : { }\n })\n } else { // array vector\n // av = array(INT[], 0, 3)\n // append!(av, [1..4])\n // append!(av, [1..70000])\n // av\n \n // <Buffer 44 01 type = array vector, form = vector\n // 02 00 00 00 74 11 01 00 rows = 2, cols = 70004 (0x011174)\n \n // block 0\n // 01 00 block.rows = 1\n // 04 block.unit = 4\n // 00 reserved\n // 04 00 00 00 block.lengths = [4]\n // 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 block.data\n \n // block 1\n // 01 00 block.rows = 1\n // 04 block.unit = 4\n // 00 reserved\n // 70 11 01 00 block.lengths = [70000 (0x00011170)]\n // 01 00 00 00 02 00 00 00 ... 279992 more bytes> block.data\n \n \n // decimal array vector\n \n // a = array(DECIMAL32(2)[], 0, 10)\n // append!(a, [\n // [1, 2, 3], \n // [4, 5], \n // [6, 7, 8],\n // [9, 10]\n // ])\n // print(a)\n // a\n \n // [[1.00,2.00,3.00],[4.00,5.00],[6.00,7.00,8.00],[9.00,10.00]]\n \n // <Buffer 65 01 type = 101 = 64 + 37 (decimal32) , form = vector\n // 04 00 00 00 0a 00 00 00 rows = 4, cols = 10\n \n // scale (只有 decimal32 才有)\n // 02 00 00 00 scale = 2\n \n // block 0\n // 04 00 block.rows = 4\n // 01 block.unit = 1\n // 00 reserved\n // 03 02 03 02 block.lengths = [3, 2, 3, 2]\n // 64 00 00 00 c8 00 00 00 2c 01 00 00 90 01 00 00 f4 01 00 00 58 02 00 00 bc 02 00 00 ... 12 more bytes> [100, 200, 300, ...]\n \n // block 1\n // ...\n \n const type_ = type - 64\n \n const cols = dv.getUint32(4, le)\n \n let blocks: DdbArrayVectorValue = [ ]\n \n // decimal 会在所有 blocks 之前多一个 scale\n if (is_decimal_type(type_)) {\n blocks.scale = dv.getInt32(i_items_start, le)\n i_items_start += 4\n }\n \n let i_block_start = i_items_start\n \n // 解析一个 block\n for (let i_row = 0; i_row < rows; ) {\n /** 对应 array vector 中元素个数 */\n const rows = dv.getUint16(i_block_start, le)\n \n /** 每个 length 占用的字节数 */\n const unit = dv.getUint8(i_block_start + 2)\n \n /** array vector 每个元素的子元素长度 */\n let lengths: Uint32Array | Uint16Array | Uint8Array\n \n const i_lengths_start = i_block_start + 4\n const i_data_start = i_lengths_start + rows * unit\n \n const lengths_buf = buf.slice(i_lengths_start, i_data_start)\n \n switch (unit) {\n case 1:\n lengths = lengths_buf\n break\n \n case 2:\n lengths = new Uint16Array(lengths_buf.buffer)\n break\n \n case 4:\n lengths = new Uint32Array(lengths_buf.buffer)\n break\n \n default:\n throw new Error(t('array vector 存在非法 unit: {{unit}}', { unit }))\n }\n \n let total_length = 0\n for (const x of lengths)\n total_length += x\n \n let len_items: number\n let data: DdbVectorValue\n \n switch (type_) {\n case DdbType.decimal32:\n len_items = total_length * 4\n data = new Int32Array(buf.buffer.slice(buf.byteOffset + i_data_start, buf.byteOffset + i_data_start + len_items))\n break\n case DdbType.decimal64:\n len_items = total_length * 8\n data = new BigInt64Array(buf.buffer.slice(buf.byteOffset + i_data_start, buf.byteOffset + i_data_start + len_items))\n break\n case DdbType.decimal128:\n len_items = total_length * 16\n data = new BigInt128Array(buf.buffer.slice(buf.byteOffset + i_data_start, buf.byteOffset + i_data_start + len_items))\n break\n default:\n [len_items, data] = this.parse_vector_items(buf.subarray(i_data_start), le, type - 64, total_length)\n }\n \n blocks.push({\n unit,\n rows,\n lengths,\n data: data as Int8Array | Int16Array | Int32Array | Float32Array | Float64Array | BigInt64Array | BigInt128Array\n })\n \n i_block_start = i_data_start + len_items\n \n i_row += rows\n }\n \n \n return new this({\n le,\n form: DdbForm.vector,\n type,\n length: i_block_start,\n cols,\n rows,\n value: blocks\n })\n }\n }\n \n \n /** 有可能没有字节对齐,不能直接使用原有 message 的 arraybuffer, 统一复制出来,让原有 arraybuffer 被回收掉比较好 */\n static parse_vector_items (\n buf: Uint8Array, \n le: boolean,\n type: DdbType, \n length: number\n ): [\n number, \n DdbVectorValue\n ] {\n switch (type) {\n case DdbType.void:\n return [0, null]\n \n case DdbType.bool:\n case DdbType.char:\n return [\n length,\n new Int8Array(\n buf.buffer.slice(\n buf.byteOffset,\n buf.byteOffset + length))\n ]\n \n case DdbType.short:\n return [\n 2 * length,\n new Int16Array(\n buf.buffer.slice(\n buf.byteOffset,\n buf.byteOffset + 2 * length\n )\n )\n ]\n \n \n case DdbType.int:\n // datetime\n case DdbType.date:\n case DdbType.month:\n case DdbType.time:\n case DdbType.minute:\n case DdbType.second:\n case DdbType.datetime:\n case DdbType.datehour:\n return [\n 4 * length,\n new Int32Array(\n buf.buffer.slice(\n buf.byteOffset,\n buf.byteOffset + 4 * length))\n ]\n \n \n case DdbType.float:\n return [\n 4 * length,\n new Float32Array(\n buf.buffer.slice(\n buf.byteOffset,\n buf.byteOffset + 4 * length\n )\n )\n ]\n \n \n case DdbType.double:\n return [\n 8 * length,\n new Float64Array(\n buf.buffer.slice(\n buf.byteOffset, \n buf.byteOffset + 8 * length\n )\n )\n ]\n \n \n case DdbType.long:\n // timestamp\n case DdbType.timestamp:\n case DdbType.nanotime:\n case DdbType.nanotimestamp:\n return [\n 8 * length,\n new BigInt64Array(\n buf.buffer.slice(\n buf.byteOffset,\n buf.byteOffset + 8 * length\n )\n )\n ]\n \n \n case DdbType.string:\n case DdbType.symbol:\n case DdbType.handle:\n case DdbType.datasource:\n case DdbType.code: {\n let value = new Array<string>(length)\n let i_head = 0, i_tail = i_head\n for (let i = 0; i < length; i++) {\n i_tail = buf.indexOf(0, i_head)\n value[i] = this.dec.decode(\n buf.subarray(i_head, i_tail)\n )\n i_head = i_tail + 1\n }\n return [i_head, value]\n }\n \n \n case DdbType.symbol_extended: {\n // <Buffer 91 01 type = symbol extended, form = vector\n // 05 00 00 00 01 00 00 00 row = 5, col = 1\n \n // buf:\n // 00 00 00 00 symbol base id = 0 (uint32)\n // 02 00 00 00 symbol base size = 2\n // 00 61 61 00 以 \\0 分割的字符串\n // 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00>\n \n const dv = new DataView(buf.buffer, buf.byteOffset)\n const base_id = dv.getUint32(0, le)\n const base_size = dv.getUint32(4, le)\n \n let base_length = 0\n let base = this.symbol_bases[base_id]\n \n // base_size 为 0 时复用之前的 symbol base\n if (base_size) {\n [base_length, base] = this.parse_vector_items(\n buf.subarray(8),\n le,\n DdbType.string,\n base_size\n ) as [number, string[]]\n \n this.symbol_bases[base_id] = base\n }\n \n const value_start = 8 + base_length\n const value_end = value_start + length * 4\n \n const data = new Uint32Array(\n buf.buffer.slice(\n buf.byteOffset + value_start,\n buf.byteOffset + value_end\n )\n )\n \n return [\n value_end,\n {\n base_id,\n base,\n data\n }\n ]\n }\n \n \n case DdbType.uuid:\n case DdbType.ipaddr:\n case DdbType.int128:\n return [\n 16 * length,\n new Uint8Array(\n buf.buffer.slice(\n buf.byteOffset,\n buf.byteOffset + 16 * length\n )\n )\n ]\n \n \n case DdbType.blob: {\n // <Buffer 20 01 type = blob, form = vector\n // 02 00 00 00 01 00 00 00 cols = 2, rows = 1\n // 04 00 00 00 61 62 63 64 \n // 04 00 00 00 61 62 63 64>\n \n let value = new Array<Uint8Array>(length)\n const dv = new DataView(buf.buffer, buf.byteOffset)\n let i_head = 0\n for (let i = 0; i < length; i++) {\n const sublen = dv.getUint32(i_head, le)\n const i_blob_head = i_head + 4\n const i_blob_tail = i_blob_head + sublen\n value[i] = buf.slice(i_blob_head, i_blob_tail)\n i_head = i_blob_tail\n }\n \n return [i_head, value]\n }\n \n \n case DdbType.complex:\n case DdbType.point: \n return [\n 16 * length,\n new Float64Array(\n buf.buffer.slice(\n buf.byteOffset,\n buf.byteOffset + 16 * length\n )\n )\n ]\n \n \n case DdbType.any: {\n // [1, 2, 'a', 'aaa']\n // any[4](<Buffer \n // 04 00 DdbType.int, DdbForm.scalar\n // 01 00 00 00 \n // 04 00 DdbType.int, DdbForm.scalar\n // 02 00 00 00 \n // 02 00 DdbType.char, DdbForm.scalar\n // 61 \n // 12 00 DdbType.string, DdbForm.scalar\n // 61 61 61 00>)\n \n \n let values = new Array<DdbObj>(length)\n let i_head = 0\n for (let i = 0; i < length; i++) {\n const obj = this.parse(\n buf.subarray(i_head),\n le\n )\n values[i] = obj\n i_head += obj.length\n }\n \n return [\n i_head,\n values\n ]\n }\n \n \n case DdbType.iotany: {\n const [len, anys] = this.parse_vector_items(buf, le, DdbType.any, length)\n const metas = anys[0].data()\n \n assert(metas.length >= 2, t('iotany 的 meta vector 长度至少为 2'))\n \n const size = metas[0]\n // let sub_vec_count = meta_vec[1]\n \n let sub_vecs = new Map<DdbType, DdbVectorValue>()\n \n for (let i = 1; i < length; i++) {\n const sub_vector = anys[i]\n const sub_type = sub_vector.type\n sub_vecs.set(\n sub_type,\n sub_vector.data()\n )\n }\n \n return [\n len,\n seq(\n size,\n i => {\n const type = metas[i + size + 2] as DdbType\n return type === DdbType.void ? null : sub_vecs.get(type)[metas[i + 2]]\n })\n ]\n }\n \n \n // 25 01 type = decimal32, form = vector\n // 02 00 00 00 01 00 00 00\n // 00 00 00 00 scale = 0\n // 01 00 00 00 data[0] = 1\n // 3a 01 00 00 data[1] = 0x013a = 314\n case DdbType.decimal32: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n \n return [\n 4 + 4 * length,\n {\n scale: dv.getInt32(0, le),\n data: new Int32Array(\n buf.buffer.slice(\n buf.byteOffset + 4,\n buf.byteOffset + 4 + 4 * length\n )\n )\n } as DdbDecimal32VectorValue\n ]\n }\n \n case DdbType.decimal64: {\n const dv = new DataView(\n buf.buffer,\n buf.byteOffset\n )\n \n return [\n 4 + 8 * length,\n {\n scale: dv.getInt32(0, le),\n data: new BigInt64Array(\n buf.buffer.slice(\n buf.byteOffset + 4,\n buf.byteOffset + 4 + 8 * length\n )\n )\n } as DdbDecimal64VectorValue\n ]\n }\n \n case DdbType.decimal128: {\n const dv = new DataView(\n buf.buffer,\n buf.byteOffset\n )\n \n return [\n 4 + 16 * length,\n {\n scale: dv.getInt32(0, le),\n data: new BigInt128Array(\n buf.buffer.slice(\n buf.byteOffset + 4,\n buf.byteOffset + 4 + 16 * length\n )\n )\n } as DdbDecimal128VectorValue\n ]\n }\n \n // 以下情况时, DdbType.duration 实际会返回一个 any vector\n // [2y, 1M, 3d, 7H, 11m, 12s, 15ms, 16us, 17ns]\n // <Buffer 19 01 type = any, form = vector\n // 09 00 00 00 01 00 00 00 rows = 9, cols = 1\n // 24 00 type = DdbType.duration, form = scalar\n // 02 00 00 00 09 00 00 00 \n // 24 00 01 00 00 00 08 00 00 00 24 00 03 00 00 00 06 00 00 00 24 00 07 00 00 00 05 00 00 00 ... 50 more bytes>\n // 其余情况 (目前仅 pair) 下, 会返回特殊的 duration 序列化\n // 4 bytes data 4 bytes unit\n // 01 00 00 00 data: 1 \n // 01 00 00 00 unit: 1\n // 02 00 00 00 data: 2\n // 02 00 00 00 unit: 2\n case DdbType.duration: { \n const dv = new DataView(buf.buffer, buf.byteOffset)\n \n let durations: DdbDurationVectorValue = [ ]\n \n for (let i = 0; i < length; i++)\n durations.push({\n data: dv.getInt32(0 + 8 * i, le),\n unit: dv.getInt32(4 + 8 * i, le)\n })\n \n return [8 * length, durations]\n }\n \n case DdbType.compressed:\n return [\n length,\n new Uint8Array(\n buf.buffer.slice(\n buf.byteOffset,\n buf.byteOffset + length\n )\n )\n ]\n \n default:\n throw new Error(t(\n '{{form}}<{{type}}> 暂时不支持解析', \n { form: 'vector', type: get_type_name(type) }\n ))\n }\n }\n \n \n pack (): Uint8Array {\n const { form, type, value } = this\n \n let header = new Uint8Array(2)\n header[0] = type\n header[1] = form\n \n const body = (() => {\n switch (form) {\n case DdbForm.scalar:\n switch (type) {\n case DdbType.void:\n return [Uint8Array.of(Number(value))]\n \n case DdbType.bool:\n return [\n Int8Array.of(\n value === null ?\n nulls.int8\n :\n Number(value)\n )\n ]\n \n \n case DdbType.char:\n return [\n Int8Array.of(\n (value === null ?\n nulls.int8\n :\n value as number\n )\n )\n ]\n \n \n case DdbType.short:\n return [\n Int16Array.of(\n value === null ?\n nulls.int16\n :\n value as number\n )\n ]\n \n \n case DdbType.int:\n // datetime\n case DdbType.date:\n case DdbType.month:\n case DdbType.time:\n case DdbType.minute:\n case DdbType.second:\n case DdbType.datetime:\n case DdbType.datehour:\n return [\n Int32Array.of(\n value === null ?\n nulls.int32\n :\n value as number\n )\n ]\n \n \n case DdbType.float:\n return [\n Float32Array.of(\n value === null ?\n nulls.float32\n :\n value as number\n )\n ]\n \n \n case DdbType.double:\n return [\n Float64Array.of(\n value === null ?\n nulls.double\n :\n value as number\n )\n ]\n \n \n case DdbType.long:\n // timestamp\n case DdbType.timestamp:\n case DdbType.nanotime:\n case DdbType.nanotimestamp:\n return [\n BigInt64Array.of(\n value === null ?\n nulls.int64\n :\n value as bigint\n )\n ]\n \n \n case DdbType.string:\n case DdbType.symbol:\n case DdbType.code:\n case DdbType.handle:\n case DdbType.datasource:\n case DdbType.resource:\n assert(!(value as string).includes('\\0'), t('pack 时字符串中间不能含有 \\\\0, 否则上传给 DolphinDB 会导致连接断开'))\n \n return [\n DdbObj.enc.encode(value as string),\n Uint8Array.of(0),\n ]\n \n case DdbType.functiondef:\n return [\n Uint8Array.of((value as DdbFunctionDefValue).type),\n DdbObj.enc.encode((value as DdbFunctionDefValue).name),\n Uint8Array.of(0)\n ]\n \n case DdbType.uuid:\n case DdbType.ipaddr:\n case DdbType.int128:\n return [this.value as Uint8Array]\n \n \n case DdbType.blob:\n return [Uint32Array.of((this.value as Uint8Array).byteLength), this.value as Uint8Array]\n \n \n case DdbType.complex:\n case DdbType.point:\n return [Float64Array.from(this.value as [number, number])]\n \n \n case DdbType.duration: {\n const { unit, data } = this.value as DdbDurationValue\n return [Int32Array.of(data, unit)]\n }\n \n case DdbType.decimal32: {\n const { scale, data } = this.value as DdbDecimal32Value\n return [Int32Array.of(scale, data === null ? nulls.int32 : data)]\n }\n \n case DdbType.decimal64: {\n const { scale, data } = this.value as DdbDecimal64Value\n return [Int32Array.of(scale), BigInt64Array.of(data === null ? nulls.int64 : data)]\n }\n \n case DdbType.decimal128: {\n const { scale, data } = value as DdbDecimal128Value\n return [Int32Array.of(scale), BigInt128Array.of(data === null ? nulls.int128 : data)]\n }\n \n default:\n throw new Error(String(DdbType[type] || type) + t(' 暂时不支持序列化'))\n }\n \n \n case DdbForm.vector:\n case DdbForm.pair:\n // pack array vector\n if (form === DdbForm.vector && 64 <= type && type < 128)\n return [\n Uint32Array.of(this.rows, this.cols),\n ... (is_decimal_type(type - 64)) ? \n [Int32Array.of((this.value as DdbArrayVectorValue).scale)]\n :\n [ ],\n ... (this.value as DdbArrayVectorValue).map(block => ([\n Uint16Array.of(block.rows),\n Uint8Array.of(block.unit, 0),\n block.lengths,\n block.data as any\n ])).flat()\n ]\n \n if (form === DdbForm.vector && type === DdbType.iotany) \n return [this.buffer]\n \n return [\n Uint32Array.of(this.rows, 1),\n ... DdbObj.pack_vector_body(value as DdbVectorValue, type, this.rows)\n ]\n \n \n case DdbForm.set:\n return [new DdbObj({ ...this, form: DdbForm.vector }).pack()]\n \n \n case DdbForm.table:\n return [\n Uint32Array.of(this.rows, this.cols),\n DdbObj.enc.encode(this.name || ''),\n \n // column names\n Uint8Array.of(0),\n ...DdbObj.pack_vector_body(\n (this.value as DdbObj[]).map((col, i) => \n col.name || `col${i}`),\n DdbType.string,\n this.cols\n ),\n \n // column vectors\n ...(this.value as DdbObj[]).map(col => \n col.pack())\n ]\n \n \n case DdbForm.dict:\n return [(value as DdbDictValue)[0].pack(), (value as DdbDictValue)[1].pack()]\n \n case DdbForm.chart: {\n const {\n type,\n stacking,\n bin_start, bin_end, bin_count,\n titles: { chart, x_axis, y_axis },\n extras,\n data\n } = this.value as DdbChartValue\n \n const {\n value: [keys, values]\n } = new DdbDict({\n chartType: new DdbInt(type),\n stacking,\n ... bin_start ? { binStart: bin_start, binEnd: bin_end } : { },\n ... bin_count ? { binCount: bin_count } : { },\n title: new DdbVectorString([chart, x_axis, y_axis]),\n ... extras ? (() => {\n const { multi_y_axes, ...extras_other } = extras\n return { extras: new DdbDict({ multiYAxes: multi_y_axes, ...extras_other }) }\n })() : { },\n data,\n })\n \n return [keys.pack(), values.pack()]\n }\n \n case DdbForm.matrix: {\n const { rows, cols, data } = value as DdbMatrixValue\n \n return [\n Uint8Array.of(\n (rows ? 0x01 : 0x00) | (cols ? 0x02 : 0x00),\n ),\n ... rows ? [rows.pack()] : [ ],\n ... cols ? [cols.pack()] : [ ],\n Uint8Array.of(this.type, this.form),\n Uint32Array.of(this.rows, this.cols),\n ... DdbObj.pack_vector_body(data, this.type, this.rows * this.cols)\n ]\n }\n \n case DdbForm.tensor: {\n const { le, value } = this\n const { tensor_type, device_type, tensor_flags, dimensions, shape, strides, preserve_value, elem_count, data } = value as DdbTensorValue\n \n // 计算总的字节长度\n const totalLength = 10 + dimensions * 8 * 2 + 8 + 8 + data.length // 12 字节元数据 + 维度信息 + 保留值和元素数量 + 数据部分\n \n const buffer = new ArrayBuffer(totalLength)\n const dv = new DataView(buffer)\n const uint8Array = new Uint8Array(buffer)\n \n // 写入元数据\n // uint8Array[0] = type;\n // uint8Array[1] = form;\n uint8Array[0] = tensor_type\n uint8Array[1] = device_type\n dv.setUint32(2, tensor_flags, le)\n dv.setInt32(6, dimensions, le)\n \n // 写入形状和步长\n const shapeStart = 10\n const stridesStart = shapeStart + dimensions * 8\n for (let d = 0; d < dimensions; d++) {\n dv.setBigInt64(shapeStart + d * 8, BigInt(shape[d]), le)\n dv.setBigInt64(stridesStart + d * 8, BigInt(strides[d]), le)\n }\n \n // 写入保留值和元素数量\n const preserveValueStart = stridesStart + dimensions * 8\n dv.setBigInt64(preserveValueStart, preserve_value, le)\n const storageStart = preserveValueStart + 8\n dv.setBigInt64(storageStart, BigInt(elem_count), le)\n \n // 写入数据\n const dataStart = storageStart + 8\n uint8Array.set(data, dataStart)\n \n return [uint8Array]\n }\n \n case DdbForm.extobj: {\n const { data, type: exttype, version } = value as DdbExtObjValue\n \n let version_and_size = new Uint8Array(4)\n version_and_size.dataview.setUint32(0, (version << 24) | data.length, this.le)\n \n return [exttype, version_and_size, data]\n }\n \n default:\n throw new Error(t('{{form}} 暂不支持序列化', { form: DdbForm[form] || `form ${form}` }))\n }\n })()\n \n \n if (!body)\n return new Uint8Array(0)\n \n return concat([header, ...body])\n }\n \n \n static pack_vector_body (\n value: DdbVectorValue,\n type: DdbType,\n length: number\n ): ArrayBufferView[] {\n switch (type) {\n case DdbType.void:\n return [ ]\n \n case DdbType.bool:\n case DdbType.char:\n return [value as Int8Array]\n \n \n case DdbType.short:\n return [value as Int16Array]\n \n \n case DdbType.int:\n // datetime\n case DdbType.date:\n case DdbType.month:\n case DdbType.time:\n case DdbType.minute:\n case DdbType.second:\n case DdbType.datetime:\n case DdbType.datehour:\n return [value as Int32Array]\n \n \n case DdbType.float:\n return [value as Float32Array]\n \n \n case DdbType.double:\n return [value as Float64Array]\n \n case DdbType.long:\n // timestamp\n case DdbType.timestamp:\n case DdbType.nanotime:\n case DdbType.nanotimestamp:\n return [value as BigInt64Array]\n \n \n case DdbType.string:\n case DdbType.symbol:\n case DdbType.handle:\n case DdbType.datasource:\n case DdbType.code: {\n let bufs = new Array<Uint8Array>(length * 2)\n for (let i = 0; i < length; i++) {\n const s = (value as string[])[i]\n assert(!s.includes('\\0'), t('pack 时字符串中间不能含有 \\\\0, 否则上传给 DolphinDB 会导致连接断开'))\n bufs[2 * i] = this.enc.encode(s)\n bufs[2 * i + 1] = Uint8Array.of(0)\n }\n return bufs\n }\n \n \n case DdbType.uuid:\n case DdbType.ipaddr:\n case DdbType.int128:\n case DdbType.compressed:\n return [value as Uint8Array]\n \n \n case DdbType.blob: {\n let bufs = new Array<ArrayBufferView>(length * 2)\n for (let i = 0; i < length; i++) {\n const blob_value = (value as Uint8Array[])[i]\n bufs[2 * i] = Uint32Array.of(blob_value.length)\n bufs[2 * i + 1] = blob_value\n }\n return bufs\n }\n \n \n case DdbType.complex:\n case DdbType.point: \n return [value as Float64Array]\n \n case DdbType.duration: {\n let bufs = new Int32Array(length * 2)\n for (let i = 0; i < length; i++) {\n const { data, unit } = (value as DdbDurationValue[])[i]\n bufs[2 * i] = data\n bufs[2 * i + 1] = unit\n }\n return [bufs]\n }\n \n case DdbType.any: {\n // [1, 2, 'a', 'aaa']\n // any[4](<Buffer \n // 04 00 DdbType.int, DdbForm.scalar\n // 01 00 00 00 \n // 04 00 DdbType.int, DdbForm.scalar\n // 02 00 00 00 \n // 02 00 DdbType.char, DdbForm.scalar\n // 61 \n // 12 00 DdbType.string, DdbForm.scalar\n // 61 61 61 00>)\n \n let bufs = new Array<Uint8Array>(length)\n for (let i = 0; i < length; i++)\n bufs[i] = (value as DdbObj[])[i].pack()\n return bufs\n }\n \n \n case DdbType.symbol_extended: {\n const { base_id, base, data } = value as DdbSymbolExtendedValue\n \n return [\n Uint32Array.of(\n base_id || 0,\n base.length,\n ),\n ...this.pack_vector_body(base, DdbType.string, base.length),\n data\n ]\n }\n \n case DdbType.decimal32:\n case DdbType.decimal64:\n case DdbType.decimal128: {\n const { scale, data } = value as DdbDecimal32VectorValue | DdbDecimal64VectorValue | DdbDecimal128VectorValue\n return [Int32Array.of(scale), data]\n }\n \n default:\n throw new Error(t('vector {{type}} 暂不支持序列化', { type: get_type_name(type) }))\n }\n }\n \n \n /** 将 DdbObj 转换为 js 原生数据类型 \n - 标量对应 number, bigint 或者字符串 (其中时间类型转换为常用的字符串表示)\n - 数组对应 js 原生数组\n - 表格对应 TResult, 可以传入 table: 'full' 配置返回包含列名,列类型的 DdbTableData 结构\n - 矩阵对应 DdbMatrixData\n - 字典对应普通的 js 对象 Record<string, any>\n - 图对应 DdbChartValue */\n data <TResult extends any[]> (this: DdbVectorObj, options?: ConvertOptions): TResult\n data <TResult = any> (this: DdbObj, options?: ConvertOptions): TResult\n data <TResult = any> (this: DdbObj, options?: ConvertOptions): TResult {\n const { form, type, value, le, rows, name } = this\n \n switch (form) {\n case DdbForm.scalar:\n return convert(type, value, le, options) as TResult\n \n case DdbForm.vector:\n case DdbForm.pair:\n case DdbForm.set: {\n const data = converts(type, value as DdbVectorValue, rows, le, options)\n return (form === DdbForm.set ? new Set(data) : data) as TResult\n }\n \n case DdbForm.table: {\n const cols = value as DdbVectorObj[]\n const jscols = cols.map(col => col.data(options))\n const columns = cols.select('name')\n \n const data = seq(rows, i =>\n zip_object(\n columns,\n seq(cols.length, j => jscols[j][i])\n ))\n \n return options?.table === 'full' ?\n {\n name: name || '',\n columns,\n types: cols.select('type'),\n data\n } satisfies DdbTableData as TResult\n :\n data as TResult\n }\n \n case DdbForm.dict: {\n const [keys, values] = value as DdbDictValue\n \n return zip_object(keys.data(options), values.data(options)) as TResult\n }\n \n case DdbForm.chart:\n return value as DdbChartValue as TResult\n \n case DdbForm.matrix: {\n const ncolumns = this.cols\n const { rows: _rows, cols: _cols, data } = value as DdbMatrixValue\n \n const jsdata = converts(type, data, rows * ncolumns, le, options)\n \n return {\n type,\n \n nrows: rows,\n \n ncolumns,\n \n rows: _rows?.data(options),\n \n columns: _cols?.data(options),\n \n data: seq(rows, i => \n seq(ncolumns, j => \n jsdata[j * rows + i]))\n } satisfies DdbMatrixData as TResult\n }\n \n case DdbForm.tensor: {\n const { \n data_type, \n tensor_type, \n device_type,\n tensor_flags,\n dimensions, \n shape, \n strides, \n preserve_value,\n elem_count,\n data, \n } = this.value as DdbTensorValue\n \n const dataByte: number = ddb_tensor_bytes[data_type]\n \n return { \n data_type, \n tensor_type, \n device_type,\n tensor_flags,\n dimensions, \n shape, \n strides, \n preserve_value,\n elem_count,\n data: DdbObj.parse_tensor({ currentDim: 0, dimensions, rawData: data, le: this.le, dataByte, dataType: data_type, shape, strides })\n } satisfies DdbTensorData as TResult\n }\n \n case DdbForm.extobj:\n // return (this.value as DdbExtObjValue).data as TResult\n return `ExtObj<${get_type_name(type)}>` as TResult\n \n default:\n throw new Error(t('{{form}} {{type}} 暂不支持 data()', { form: DdbForm[form] || form, type: get_type_name(type) }))\n }\n }\n \n /** 构建 Tensor\n @param buildParams 构建参数\n @param limit 限制每个维度最大元素个数(仅用于 log,不作他用)\n @returns */\n static parse_tensor (\n buildParams: {\n currentDim: number\n dimensions: number\n rawData: Uint8Array\n le: boolean\n dataByte: number\n dataType: DdbType\n shape: number[]\n strides: number[]\n },\n limit = -1\n ): TensorData {\n const { currentDim, dimensions, rawData, le, dataByte, dataType, shape, strides } = buildParams\n const tensor: TensorData = [ ]\n const dv = new DataView(rawData.buffer, rawData.byteOffset)\n for (let i = 0; i < shape[currentDim]; i++)\n if (currentDim >= dimensions - 1) {\n \n if (limit > 0 && i >= limit) {\n tensor.push('...')\n break\n }\n \n // 直接转换到对应的数组\n const offset = i * dataByte * Number(strides[currentDim])\n switch (dataType) {\n case DdbType.bool: {\n const value = dv.getInt8(offset)\n tensor.push(value === nulls.int8 ? null : Boolean(value))\n break\n }\n case DdbType.char: {\n const value = dv.getInt8(offset)\n tensor.push(convert(dataType, value, le) as string)\n break\n }\n case DdbType.short: {\n const value = dv.getInt16(offset, le)\n tensor.push(value === nulls.int16 ? null : value)\n break\n }\n case DdbType.int: {\n const value = dv.getInt32(offset, le)\n tensor.push(value === nulls.int32 ? null : value)\n break\n }\n case DdbType.long: {\n const value = dv.getBigInt64(offset, le)\n tensor.push(value === nulls.int64 ? null : value)\n break\n }\n case DdbType.float: {\n const value = dv.getFloat32(offset, le)\n tensor.push(value === nulls.float32 ? null : value)\n break\n }\n case DdbType.double: {\n const value = dv.getFloat64(offset, le)\n tensor.push(value === nulls.double ? null : value)\n break\n }\n }\n } else {\n // 起点\n const start = strides[currentDim] * i * dataByte\n // 终点\n const end = start + strides[currentDim] * 1 * dataByte\n tensor.push(DdbObj.parse_tensor({\n currentDim: currentDim + 1,\n dimensions,\n rawData: rawData.subarray(Number(start), Number(end)),\n le,\n dataByte,\n shape,\n strides,\n dataType\n }, limit))\n }\n \n return tensor\n }\n \n \n [inspect.custom] (depth: number, _options: InspectOptions, _inspect) {\n let options = { nullstr: true, ..._options }\n \n const type = this.inspect_type()\n \n const data = (() => {\n switch (this.form) {\n case DdbForm.scalar:\n return format(this.type, this.value, this.le, options)\n \n case DdbForm.vector:\n case DdbForm.pair:\n case DdbForm.set: {\n const form = this.form\n \n function format_array (items: string[], ellipsis: boolean) {\n const str_items = items.join(', ') + (ellipsis ? ', ...' : '')\n \n return form === DdbForm.pair ?\n str_items\n :\n str_items.bracket('square')\n }\n \n \n if (64 <= this.type && this.type < 128) { // array vector\n // 因为 array vector 目前只支持:Logical, Integral(不包括 INT128, COMPRESS 类型), Floating, Temporal\n // 都对应 TypedArray 中的一格,所以直接根据 index 去取即可\n // av = array(INT[], 0, 5)\n // append!(av, [1..1])\n // append!(av, [1..70000])\n // append!(av, [1..1])\n // append!(av, [1..500])\n // ...\n // av\n const type_ = this.type - 64\n \n options = { ...options, grouping: false }\n \n const limit = 10\n \n const nullstr = inspect(null, options)\n \n let array_items = new Array(\n Math.min(limit, this.rows)\n )\n \n let i_items = 0\n \n for (const { lengths, data } of this.value as DdbArrayVectorValue) {\n let acc_len = 0\n \n for (const length of lengths) {\n let items = new Array(\n Math.min(limit, length)\n )\n \n for (let i = 0; i < items.length; i++)\n switch (type_) {\n case DdbType.decimal32:\n case DdbType.decimal64:\n case DdbType.decimal128:\n const x = data[acc_len + i]\n \n if (is_decimal_null_value(type_, x))\n items[i] = nullstr\n else {\n const { scale } = this.value as DdbArrayVectorValue\n \n const s = String(x < 0 ? -x : x).padStart(scale, '0')\n \n const str = (x < 0 ? '-' : '') + (scale ? `${s.slice(0, -scale) || '0'}.${s.slice(-scale)}` : s)\n \n items[i] = options.colors ? str.green : str\n }\n \n break\n \n case DdbType.complex:\n case DdbType.point: {\n const index = acc_len + i\n items[i] = format(\n type_,\n data.subarray(2 * index, 2 * (index + 1)),\n this.le,\n options\n )\n break\n }\n \n case DdbType.uuid:\n case DdbType.int128:\n case DdbType.ipaddr: {\n const index = acc_len + i\n items[i] = format(\n type_,\n data.subarray(16 * index, 16 * (index + 1)),\n this.le,\n options\n )\n break\n }\n \n default:\n items[i] = format(type_, data[acc_len + i], this.le, options)\n break\n }\n \n array_items[i_items++] = format_array(items, length > limit)\n \n acc_len += length\n }\n \n if (i_items >= limit)\n break\n }\n \n return format_array(\n array_items,\n this.rows > limit\n )\n }\n \n switch (this.type) {\n case DdbType.symbol_extended: {\n const limit = 50 as const\n \n const { base, data } = this.value as DdbSymbolExtendedValue\n \n let items = new Array(\n Math.min(limit, data.length)\n )\n \n for (let i = 0; i < items.length; i++)\n items[i] = inspect(base[data[i]], options)\n \n return format_array(\n items,\n data.length > limit\n )\n }\n \n case DdbType.void:\n return format(this.type, this.value, this.le, options)\n \n case DdbType.uuid: \n case DdbType.int128: \n case DdbType.ipaddr: {\n const limit = 10 as const\n \n const value = this.value as Uint8Array\n \n const len_data = value.length / 16\n \n let items = new Array(\n Math.min(limit, len_data)\n )\n \n for (let i = 0; i < items.length; i++)\n items[i] = format(\n this.type,\n value.subarray(16 * i, 16 * (i + 1)),\n this.le,\n options\n )\n \n return format_array(\n items,\n len_data > limit\n )\n }\n \n case DdbType.complex:\n case DdbType.point: {\n const limit = 20 as const\n \n const value = this.value as Float64Array\n \n const len_data = value.length / 2\n \n let items = new Array(\n Math.min(limit, len_data)\n )\n \n for (let i = 0; i < items.length; i++)\n items[i] = format(\n this.type,\n value.subarray(2 * i, 2 * (i + 1)),\n this.le,\n options\n )\n \n return format_array(\n items,\n len_data > limit\n )\n }\n \n case DdbType.decimal32: \n case DdbType.decimal64:\n case DdbType.decimal128: {\n const limit = 50 as const\n \n const { data } = this.value as DdbDecimal32VectorValue | DdbDecimal64VectorValue | DdbDecimal128VectorValue\n \n let items = new Array(Math.min(limit, data.length))\n \n for (let i = 0; i < items.length; i++)\n items[i] = formati(this as DdbObj<DdbDecimalVectorValue>, i, options)\n \n return format_array(items, data.length > limit)\n }\n \n default: {\n const limit = this.type === DdbType.compressed ? 5 : 50 as const\n \n let items = new Array(\n Math.min(limit, (this.value as any[]).length)\n )\n \n for (let i = 0; i < items.length; i++)\n items[i] = format(this.type, this.value[i], this.le, options)\n \n return format_array(\n items,\n (this.value as any[]).length > limit\n )\n }\n }\n \n }\n \n case DdbForm.tensor: {\n const tensorVal: DdbTensorValue = this.value as unknown as DdbTensorValue\n const retd = DdbObj.parse_tensor({ \n currentDim: 0, \n dimensions: tensorVal.dimensions, \n rawData: tensorVal.data, \n le: this.le, \n dataByte: ddb_tensor_bytes[tensorVal.data_type], \n dataType: tensorVal.data_type, \n shape: tensorVal.shape, \n strides: tensorVal.strides }, 5)\n return inspect(retd, options).replaceAll(\"\\'...\\'\", '...')\n }\n }\n \n if (this.value instanceof Uint8Array)\n return inspect(\n typed_array_to_buffer(this.value),\n options\n )\n \n return inspect(this.value, options)\n })()\n \n // 如果类型为 string 则不需要加上类型名\n if (this.form === DdbForm.scalar && this.type === DdbType.string)\n return data\n else\n return `${options.colors ? type.blue : type}(${ this.name ? `${inspect(this.name, options)}, ` : '' }${data})`\n }\n \n \n inspect_type () {\n const tname = DdbType[this.type]\n \n switch (this.form) {\n case DdbForm.scalar:\n if (this.type === DdbType.functiondef)\n return `functiondef<${DdbFunctionType[(this.value as DdbFunctionDefValue).type]}>`\n \n return tname\n \n case DdbForm.vector:\n if (64 <= this.type && this.type < 128)\n return `${DdbType[this.type - 64]}[][${this.rows}]`\n return `${tname}[${this.rows}]`\n \n case DdbForm.pair:\n return `pair<${tname}>`\n \n case DdbForm.set:\n return `set<${tname}>[${this.rows}]`\n \n case DdbForm.table:\n return `table[${this.rows}r][${this.cols}c]`\n \n case DdbForm.dict:\n return `dict<${DdbType[(this.value[0] as DdbObj).type]}, ${DdbType[(this.value[1] as DdbObj).type]}>[${this.rows}]`\n \n case DdbForm.chart:\n return `chart<${DdbChartType[(this.value as DdbChartValue).type]}>`\n \n case DdbForm.matrix:\n return `matrix<${tname}>[${this.rows}r][${this.cols}c]`\n \n case DdbForm.tensor:\n return `tensor<${generate_array_type(DdbType[(this.value as DdbTensorValue).data_type], (this.value as DdbTensorValue).shape)}>`\n \n default:\n return `${DdbForm[this.form]} ${tname}`\n }\n }\n \n \n /** 自动转换 Convertable 为 DdbObj */\n static to_ddbobj (value: Convertable): DdbObj {\n if (value && value instanceof DdbObj)\n return value\n \n if (value === undefined)\n return new DdbVoid()\n \n if (value === null)\n return new DdbVoid(DdbVoidType.null)\n \n const type = typeof value\n \n switch (type) {\n case 'string':\n return new DdbString(value as string)\n \n case 'boolean':\n return new DdbBool(value as boolean)\n \n default: \n throw new Error(t('不能自动转换 {{type}} 至 DdbObj', { type }))\n }\n }\n \n \n /** 转换 js 数组为 DdbObj[] */\n static to_ddbobjs (values: Convertable[]) {\n return values.map(value => this.to_ddbobj(value))\n }\n \n \n /** 将 table 转换为 rows,空值转换为 null \n @deprecated 用 data() */\n to_rows <T extends Record<string, any> = Record<string, any>> () {\n assert(this.form === DdbForm.table, t('form 必须是 DdbForm.table, 否则不能 to_rows'))\n \n let rows = new Array<T>(this.rows)\n \n for (let i = 0; i < this.rows; i++) {\n let row: any = { }\n for (let j = 0; j < this.cols; j++) {\n const { type, name, value: values } = (this as DdbTableObj).value[j] // column\n \n switch (type) {\n case DdbType.bool: {\n const value = values[i]\n row[name] = value === nulls.int8 ?\n null\n :\n Boolean(value)\n break\n }\n \n case DdbType.char:\n row[name] = values[i] === nulls.int8 ? null : values[i]\n break\n \n case DdbType.short:\n row[name] = values[i] === nulls.int16 ? null : values[i]\n break \n \n case DdbType.int:\n case DdbType.date:\n case DdbType.month:\n case DdbType.time:\n case DdbType.minute:\n case DdbType.second:\n case DdbType.datetime:\n case DdbType.datehour:\n row[name] = values[i] === nulls.int32 ? null : values[i]\n break\n \n case DdbType.long:\n case DdbType.timestamp:\n case DdbType.nanotime:\n case DdbType.nanotimestamp:\n row[name] = values[i] === nulls.int64 ? null : values[i]\n break\n \n case DdbType.int128:\n row[name] = values[i] === nulls.int128 ? null : values[i]\n break\n \n case DdbType.float:\n row[name] = values[i] === nulls.float32 ? null : values[i]\n break\n \n case DdbType.double:\n row[name] = values[i] === nulls.double ? null : values[i]\n break\n \n case DdbType.decimal32: \n case DdbType.decimal64:\n case DdbType.decimal128: \n row[name] = is_decimal_null_value(type, values[i]) ? null : values[i]\n break\n \n case DdbType.ipaddr:\n row[name] = (values as Uint8Array).subarray(16 * i, 16 * (i + 1))\n break\n \n case DdbType.symbol_extended: {\n const { base, data } = values as DdbSymbolExtendedValue\n row[name] = base[data[i]]\n break\n }\n \n default:\n row[name] = values[i]\n }\n }\n rows[i] = row\n }\n \n return rows\n }\n \n \n /** 将 dict<string, any> 自动转换为 js object (Record<string, any>) Automatically convert dict<string, any> to js object (Record<string, any>) \n @deprecated 用 data()\n - options?:\n - strip?: `false` 是否将 dict<string, any> 中的 value 直接提取、剥离出来作为 js object 的 value (丢弃 DdbObj 中的其余信息,只保留 value) \n - deep?: `false` 是否递归转换 \n Whether to convert recursively */\n to_dict <T extends Record<string, DdbObj> = Record<string, DdbObj>> (): T\n to_dict <T extends Record<string, any> = Record<string, any>> (options: { strip: true }): T\n to_dict <T extends Record<string, any> = Record<string, any>> (options?: { strip?: boolean, deep?: boolean }): T\n to_dict <T = Record<string, any>> ({\n strip,\n deep,\n }: {\n strip?: boolean\n deep?: boolean\n } = { }) {\n assert(this.form === DdbForm.dict, t('this.form 必须是 DdbForm.dict, 否则不能调用 to_dict 转换为 js object'))\n \n const [{ value: keys, type: key_type }, { value: values, type: value_type }] = this.value as DdbDictValue\n \n assert(key_type === DdbType.string && dictables.has(value_type), t('当前只支持自动转换 dict<string, any | ...dictables> 为 js object'))\n assert(!(deep && !strip), t('deep = true 时必须设置 strip = true'))\n \n let obj = { }\n \n for (let i = 0; i < this.rows; i++) {\n const key = keys[i]\n \n if (value_type === DdbType.any) {\n let value: DdbObj = values[i]\n if (deep && value.form === DdbForm.dict)\n obj[key] = value.to_dict({ strip, deep })\n else\n obj[key] = strip ? value.value : value\n } else\n obj[key] = values[i]\n }\n \n return obj as T\n }\n}\n\n\nexport interface InspectOptions extends UtilInspectOptions {\n /** `util.inspect.defaultOptions.colors` */\n colors?: boolean\n \n /** `null` decimal places 小数位数 */\n decimals?: number\n \n /** `true` 决定格式化后的数据是否有千分位 */\n grouping?: boolean\n \n /** timestamp 类型转换为字符串表示时显示到秒还是毫秒 */\n timestamp?: 's' | 'ms'\n}\n\n\n/** 整数一定用这个 number formatter, InspectOptions.decimals 不传也用这个 */\nlet default_formatter = new Intl.NumberFormat('en-US', { maximumFractionDigits: 20 })\n\n\nlet _decimals = 20\n\nlet _grouping = true\n\n/** 缓存,为了优化性能,通常 options.decimals 都是不变的 */\nlet _formatter = new Intl.NumberFormat('en-US', { maximumFractionDigits: 20 })\n\n\n/** 根据 DdbType 格式化单个元素 (value) 为字符串,空值返回 'null' 字符串 */\nexport function format (type: DdbType, value: DdbValue, le: boolean, options: InspectOptions = { }): string {\n const { grouping = true, timestamp = 'ms' } = options\n const formatter = (() => {\n const decimals = options.decimals ?? _decimals\n \n if (decimals !== _decimals || grouping !== _grouping) {\n _decimals = decimals\n _grouping = grouping\n default_formatter = new Intl.NumberFormat('en-US', { maximumFractionDigits: 20, useGrouping: grouping })\n _formatter = new Intl.NumberFormat('en-US', {\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals,\n useGrouping: grouping\n })\n }\n \n return options.decimals === undefined || options.decimals === null ? default_formatter : _formatter\n })()\n \n \n function format_time (\n formatter: (value: number | bigint, format?: string) => string,\n _null: number | bigint\n ) {\n if (value === null || value === _null)\n return inspect(null, options)\n \n let str: string\n \n // formatter 可能会在 value 不属于 new Date() 有效值时,调用 抛出错误,这里统一处理\n try {\n str = formatter(value as number | bigint, (type === DdbType.timestamp && timestamp === 's') ? 'YYYY.MM.DD HH:mm:ss' : undefined)\n } catch (error) {\n if (error instanceof RangeError)\n str = 'Invalid Date'\n else\n throw error\n }\n \n return options.colors ? str.magenta : str\n }\n \n \n switch (type) {\n case DdbType.void: {\n const str = value === DdbVoidType.default ? 'default' : 'null'\n \n return options.colors ? str.grey : str\n }\n \n case DdbType.bool:\n return inspect(\n (value === null || value === nulls.int8) ?\n null\n :\n Boolean(value),\n options\n )\n \n case DdbType.char:\n return inspect(\n (value === null || value === nulls.int8) ?\n null\n :\n // ascii printable\n // http://facweb.cs.depaul.edu/sjost/it212/documents/ascii-pr.htm\n (32 <= (value as number) && (value as number) <= 126) ?\n String.fromCharCode(value as number)\n :\n value,\n options\n )\n \n case DdbType.short:\n return value === null || value === nulls.int16 ?\n inspect(null, options)\n :\n options.colors ?\n default_formatter.format(value as number).green\n :\n default_formatter.format(value as number)\n \n case DdbType.int:\n return value === null || value === nulls.int32 ?\n inspect(null, options)\n :\n options.colors ?\n default_formatter.format(value as number).green\n :\n default_formatter.format(value as number)\n \n case DdbType.long:\n return value === null || value === nulls.int64 ?\n inspect(null, options)\n :\n options.colors ?\n default_formatter.format(value as bigint).green\n :\n default_formatter.format(value as bigint)\n \n case DdbType.date:\n return format_time(date2str, nulls.int32)\n \n case DdbType.month:\n return format_time(month2str, nulls.int32)\n \n case DdbType.time:\n return format_time(time2str, nulls.int32)\n \n case DdbType.minute:\n return format_time(minute2str, nulls.int32)\n \n case DdbType.second:\n return format_time(second2str, nulls.int32)\n \n case DdbType.datetime:\n return format_time(datetime2str, nulls.int32)\n \n case DdbType.timestamp:\n return format_time(timestamp2str, nulls.int64)\n \n case DdbType.nanotime:\n return format_time(nanotime2str, nulls.int64)\n \n case DdbType.nanotimestamp:\n return format_time(nanotimestamp2str, nulls.int64)\n \n case DdbType.float:\n return value === null || value === nulls.float32 ?\n inspect(null, options)\n :\n options.colors ?\n formatter.format(value as number).green\n :\n formatter.format(value as number)\n \n case DdbType.double:\n return value === null || value === nulls.double ?\n inspect(null, options)\n :\n options.colors ?\n formatter.format(value as number).green\n :\n formatter.format(value as number)\n \n case DdbType.symbol:\n case DdbType.string:\n case DdbType.handle:\n case DdbType.datasource:\n case DdbType.code:\n case DdbType.resource:\n return inspect(value as string, options)\n \n case DdbType.uuid: \n return options.colors ?\n uuid2str(value as Uint8Array, le).cyan\n :\n uuid2str(value as Uint8Array, le)\n \n case DdbType.functiondef:\n return inspect(\n (value as DdbFunctionDefValue).name,\n options\n )\n \n case DdbType.datehour:\n return format_time(datehour2str, nulls.int32)\n \n case DdbType.ipaddr:\n return options.colors ?\n ipaddr2str(value as Uint8Array, le).cyan\n :\n ipaddr2str(value as Uint8Array, le)\n \n case DdbType.int128:\n return options.colors ?\n int1282str(value as Uint8Array, le).green\n :\n int1282str(value as Uint8Array, le)\n \n case DdbType.blob:\n return inspect(\n (value as Uint8Array).length > 100 ?\n DdbObj.dec.decode(\n (value as Uint8Array).subarray(0, 98)\n ) + '…'\n :\n DdbObj.dec.decode(value as Uint8Array),\n options\n )\n \n case DdbType.point: {\n const [x, y] = value as [number, number]\n return `(${format(DdbType.double, x, le, options)}, ${format(DdbType.double, y, le, options)})`\n }\n \n case DdbType.complex: {\n const [x, y] = value as [number, number]\n return `${format(DdbType.double, x, le, options)}${y >= 0 ? '+' : ''}${format(DdbType.double, y, le, options)}i`\n }\n \n case DdbType.duration: {\n const { data, unit } = value as DdbDurationValue\n const str = `${data}${DdbDurationUnit[unit] ?? get_duration_unit(unit)}`\n return options.colors ? str.magenta : str\n }\n \n case DdbType.decimal32: \n case DdbType.decimal64:\n case DdbType.decimal128: {\n const { scale, data } = value as DdbDecimal32Value | DdbDecimal64Value | DdbDecimal128Value\n \n if (\n data === null ||\n is_decimal_null_value(type, data)\n )\n return 'null'\n \n const s = String(data < 0 ? -data : data).padStart(scale, '0')\n \n const str = (data < 0 ? '-' : '') + (scale ? `${s.slice(0, -scale) || '0'}.${s.slice(-scale)}` : s)\n \n return options.colors ? str.green : str\n }\n \n default:\n return inspect(value, options)\n }\n}\n\n\n/** 格式化向量、集合中的第 index 项为字符串,空值返回 'null' 字符串 formatted vector, the index-th item in the collection is a string, a null value returns a 'null' string */\nexport function formati (obj: DdbVectorObj, index: number, options: InspectOptions = { }): string {\n assert(index < obj.rows, 'index < obj.rows')\n \n if (obj.type < 64 || obj.type >= 128) // 普通数组\n switch (obj.type) {\n case DdbType.symbol_extended: {\n const { base, data } = obj.value as DdbSymbolExtendedValue\n return format(DdbType.string, base[data[index]], obj.le, options)\n }\n \n case DdbType.void:\n return format(obj.type, obj.value, obj.le, options)\n \n case DdbType.uuid:\n case DdbType.int128:\n case DdbType.ipaddr:\n return format(\n obj.type,\n (obj.value as Uint8Array).subarray(16 * index, 16 * (index + 1)),\n obj.le,\n options\n )\n \n case DdbType.blob: {\n const value = obj.value[index] as Uint8Array\n return value.length > 100 ?\n DdbObj.dec.decode(value.subarray(0, 98)) + '…'\n :\n DdbObj.dec.decode(value)\n }\n \n case DdbType.complex:\n case DdbType.point:\n return format(\n obj.type,\n (obj.value as Float64Array).subarray(2 * index, 2 * (index + 1)),\n obj.le,\n options\n )\n \n case DdbType.decimal32:\n case DdbType.decimal64:\n case DdbType.decimal128: {\n const { scale, data } = obj.value as DdbDecimal128VectorValue\n \n const x = data[index]\n \n if (is_decimal_null_value(obj.type, x))\n return ''\n \n const s = String(x < 0 ? -x : x).padStart(scale, '0')\n \n const str = (x < 0 ? '-' : '') + (scale ? `${s.slice(0, -scale) || '0'}.${s.slice(-scale)}` : s)\n \n return options.colors ? str.green : str\n }\n \n default:\n return format(obj.type, obj.value[index], obj.le, options)\n }\n else { // array vector\n // 因为 array vector 目前只支持:Logical, Integral(不包括 INT128, COMPRESS 类型), Floating, Temporal\n // 都对应 TypedArray 中的一格,所以 lengths.length 等于 block 中的 row 的个数\n // av = array(INT[], 0, 5)\n // append!(av, [1..1])\n // append!(av, [1..70000])\n // append!(av, [1..1])\n // append!(av, [1..500])\n // ...\n // av\n \n const type_ = obj.type - 64\n \n let offset = 0\n \n const nullstr = inspect(null, options)\n \n for (const { lengths, data, rows } of obj.value as DdbArrayVectorValue) {\n let acc_len = 0\n \n if (offset + rows <= index) {\n offset += rows\n continue // 跳过这个 block\n }\n \n for (const length of lengths) {\n if (offset < index) {\n offset++\n acc_len += length\n continue\n }\n \n const limit = 10\n \n let items = new Array(Math.min(limit, length))\n \n for (let i = 0; i < items.length; i++)\n switch (type_) {\n case DdbType.decimal32:\n case DdbType.decimal64:\n case DdbType.decimal128:\n const x = data[acc_len + i]\n \n if (is_decimal_null_value(type_, x))\n items[i] = nullstr\n else {\n const { scale } = obj.value as DdbArrayVectorValue\n \n const s = String(x < 0 ? -x : x).padStart(scale, '0')\n \n const str = (x < 0 ? '-' : '') + (scale ? `${s.slice(0, -scale) || '0'}.${s.slice(-scale)}` : s)\n \n items[i] = options.colors ? str.green : str\n }\n \n break\n \n case DdbType.complex:\n case DdbType.point: {\n const index = acc_len + i\n items[i] = format(\n type_,\n data.subarray(2 * index, 2 * (index + 1)),\n obj.le,\n options\n )\n break\n }\n \n case DdbType.uuid:\n case DdbType.int128:\n case DdbType.ipaddr: {\n const index = acc_len + i\n items[i] = format(\n type_,\n data.subarray(16 * index, 16 * (index + 1)),\n obj.le,\n options\n )\n break\n }\n \n default:\n items[i] = format(type_, data[acc_len + i], obj.le, options)\n break\n }\n \n return (\n items.join(', ') + (length > limit ? ', ...' : '')\n ).bracket('square')\n }\n }\n }\n}\n\n\nexport function convert (type: DdbType, value: DdbValue, le: boolean, { blob = 'string', char = 'string', timestamp = 'ms' }: ConvertOptions = { }) {\n switch (type) {\n case DdbType.void:\n return value === DdbVoidType.null ? null : undefined\n \n case DdbType.char:\n return char === 'string'\n ? value === null || value === nulls.int8 \n ? ''\n : // ascii printable\n // http://facweb.cs.depaul.edu/sjost/it212/documents/ascii-pr.htm\n (32 <= (value as number) && (value as number) <= 126)\n ? String.fromCharCode(value as number)\n : `\\\\${value}`\n : value\n \n case DdbType.bool:\n return value === null || value === nulls.int8 ? null : Boolean(value)\n \n case DdbType.short:\n return value === null || value === nulls.int16 ? null : value\n \n case DdbType.int:\n return value === null || value === nulls.int32 ? null : value\n \n case DdbType.float:\n return value === null || value === nulls.float32 ? null : value\n \n case DdbType.double:\n return value === null || value === nulls.double ? null : value\n \n case DdbType.long:\n return value === null || value === nulls.int64 ? null : value\n \n case DdbType.functiondef:\n return (value as DdbFunctionDefValue).name\n \n case DdbType.string:\n case DdbType.symbol:\n case DdbType.code:\n case DdbType.handle:\n case DdbType.datasource:\n case DdbType.resource:\n case DdbType.compressed:\n return value\n \n case DdbType.blob:\n return blob === 'string' ? decode(value as Uint8Array) : value\n \n case DdbType.complex:\n case DdbType.point: {\n const [x, y] = value as [number, number]\n return [\n x === null || x === nulls.double ? null : x,\n y === null || y === nulls.double ? null : y,\n ]\n }\n \n \n case DdbType.date:\n case DdbType.month:\n case DdbType.time:\n case DdbType.minute:\n case DdbType.second:\n case DdbType.datetime:\n case DdbType.datehour:\n case DdbType.timestamp:\n case DdbType.nanotime:\n case DdbType.nanotimestamp:\n case DdbType.duration:\n \n case DdbType.uuid:\n case DdbType.ipaddr:\n case DdbType.int128:\n \n // decimal 类型转换为固定位数小数的 string 不丢失精度,一般也是展示用\n case DdbType.decimal32:\n case DdbType.decimal64:\n case DdbType.decimal128:\n return format(type, value, le, { colors: false, timestamp })\n \n default:\n throw new Error(String(DdbType[type] || type) + t(' 暂时不支持转换为 js 对象'))\n }\n}\n\n\n/** 转换一个向量到 js 原生数组 */\nexport function converts (type: DdbType, value: DdbVectorValue, rows: number, le: boolean, options?: ConvertOptions): any[] | Uint8Array {\n if (type < 64 || type >= 128)\n switch (type) {\n // 可以直接用下标取值再转换的类型\n case DdbType.bool:\n \n case DdbType.short:\n case DdbType.int:\n case DdbType.float:\n case DdbType.double:\n case DdbType.long:\n \n case DdbType.date:\n case DdbType.month:\n case DdbType.time:\n case DdbType.minute:\n case DdbType.second:\n case DdbType.datetime:\n case DdbType.datehour:\n case DdbType.timestamp:\n case DdbType.nanotime:\n case DdbType.nanotimestamp:\n case DdbType.duration:\n \n case DdbType.string:\n case DdbType.symbol:\n case DdbType.code:\n case DdbType.handle:\n case DdbType.datasource:\n case DdbType.resource:\n case DdbType.functiondef:\n \n case DdbType.blob:\n case DdbType.compressed:\n return Array.prototype.map.call(value, (x: number | bigint) => convert(type, x, le, options))\n \n case DdbType.char:\n if (options?.chars === 'binary')\n return value as Uint8Array\n else\n return Array.prototype.map.call(value, (x: number | bigint) => convert(type, x, le, options))\n \n case DdbType.void:\n return [ ]\n \n \n case DdbType.symbol_extended: {\n const { base, data } = value as DdbSymbolExtendedValue\n return Array.prototype.map.call(data, (x: number) => base[x])\n }\n \n case DdbType.complex:\n case DdbType.point:\n return seq(rows, i => {\n const x = (value as Float64Array)[2 * i]\n const y = (value as Float64Array)[2 * i + 1]\n \n return [x === nulls.double ? null : x, y === nulls.double ? null : y]\n })\n \n \n case DdbType.uuid:\n case DdbType.ipaddr:\n case DdbType.int128:\n return seq(rows, i => convert(\n type, \n (value as Uint8Array).subarray(16 * i, 16 * (i + 1)), \n le,\n options\n ))\n \n case DdbType.decimal32:\n case DdbType.decimal64:\n case DdbType.decimal128: {\n const { scale, data } = value as DdbDecimalVectorValue\n \n return Array.prototype.map.call(data, (x: number | bigint) => {\n if (is_decimal_null_value(type, x))\n return ''\n \n const s = String(x < 0 ? -x : x).padStart(scale, '0')\n \n return (x < 0 ? '-' : '') + (scale ? `${s.slice(0, -scale) || '0'}.${s.slice(-scale)}` : s)\n })\n }\n \n case DdbType.any:\n return (value as DdbObj[]).map(x => x.data(options))\n \n case DdbType.iotany:\n return value as any[]\n \n default:\n throw new Error(String(DdbType[type] || type) + '[]' + t(' 暂时不支持转换为 js 对象'))\n }\n else { // array vector\n const type_ = type - 64\n \n return (value as DdbArrayVectorValue).map(({ lengths, data, rows }) => {\n let acc_len = 0\n \n return Array.prototype.map.call(lengths, (length: number) => {\n switch (type_) {\n case DdbType.decimal32:\n case DdbType.decimal64:\n case DdbType.decimal128:\n return converts(\n type_, \n { scale: (value as DdbArrayVectorValue).scale, data: data.subarray(acc_len, acc_len += length) } as DdbDecimalVectorValue,\n length,\n le,\n options\n )\n \n case DdbType.complex:\n case DdbType.point:\n return converts(type_, data.subarray(acc_len, acc_len += 2 * length), length, le, options)\n \n case DdbType.uuid:\n case DdbType.int128:\n case DdbType.ipaddr:\n return converts(type_, data.subarray(acc_len, acc_len += 16 * length), length, le, options)\n \n default:\n return converts(type_, data.subarray(acc_len, acc_len += length), length, le, options)\n }\n })\n }).flat()\n }\n}\n\n\n/** 构造 void 类型,默认为 `DdbVoidType.undefined` */\nexport class DdbVoid extends DdbObj<undefined> {\n constructor (value = DdbVoidType.undefined) {\n super({\n form: DdbForm.scalar,\n type: DdbType.void,\n value,\n })\n }\n}\n\n\nexport class DdbBool extends DdbObj<boolean> {\n constructor (value: boolean | null) {\n super({\n form: DdbForm.scalar,\n type: DdbType.bool,\n value,\n })\n }\n}\n\nexport class DdbChar extends DdbObj<string> {\n constructor (value: string | number | null) {\n super({\n form: DdbForm.scalar,\n type: DdbType.char,\n value: typeof value === 'string' ?\n value.charCodeAt(0)\n :\n value\n })\n }\n}\n\nexport class DdbInt extends DdbObj<number> {\n constructor (value: number | null) {\n super({\n form: DdbForm.scalar,\n type: DdbType.int,\n value,\n })\n }\n}\n\nexport class DdbString extends DdbObj<string> {\n constructor (value: string) {\n super({\n form: DdbForm.scalar,\n type: DdbType.string,\n value\n })\n }\n}\n\nexport class DdbLong extends DdbObj<bigint> {\n constructor (value: bigint | number | null) {\n if (typeof value === 'number')\n value = BigInt(value)\n \n super({\n form: DdbForm.scalar,\n type: DdbType.long,\n value\n })\n }\n}\n\nexport class DdbDouble extends DdbObj<number> {\n constructor (value: number | null) {\n super({\n form: DdbForm.scalar,\n type: DdbType.double,\n value\n })\n }\n}\n\nexport class DdbDateTime extends DdbObj<number> {\n constructor (value?: null | number | string | Date | Dayjs) {\n super(get_time_ddbobj(DdbType.datetime, value))\n }\n}\n\nexport class DdbTimeStamp extends DdbObj<bigint> {\n constructor (value?: null | number | string | Date | Dayjs) {\n super(get_time_ddbobj(DdbType.timestamp, value))\n }\n}\n\nexport class DdbNanoTimeStamp extends DdbObj<bigint> {\n constructor (value?: null | number | string | Date | Dayjs) {\n super(get_time_ddbobj(DdbType.nanotimestamp, value))\n }\n}\n\nexport class DdbDate extends DdbObj<number> {\n constructor (value?: null | number | string | Date | Dayjs) {\n super(get_time_ddbobj(DdbType.date, value))\n }\n}\n\n\nexport class DdbBlob extends DdbObj<Uint8Array> {\n constructor (value: Uint8Array | ArrayBuffer) {\n assert(value, t('new DdbBlob 不能传空的 value'))\n super({\n form: DdbForm.scalar,\n type: DdbType.blob,\n value: value instanceof Uint8Array ? value : new Uint8Array(value)\n })\n }\n}\n\nexport class DdbPair extends DdbObj<Int32Array> {\n constructor (l: number | null, r: number | null = null) {\n super({\n form: DdbForm.pair,\n type: DdbType.int,\n rows: 2,\n cols: 1,\n value: Int32Array.of(\n l === null ? nulls.int32 : l,\n r === null ? nulls.int32 : r,\n )\n })\n }\n}\n\nexport class DdbFunction extends DdbObj<DdbFunctionDefValue> {\n constructor (name: string, type: DdbFunctionType) {\n super({\n form: DdbForm.scalar,\n type: DdbType.functiondef,\n value: { type, name }\n })\n }\n}\n\n\nexport class DdbVectorInt extends DdbObj<Int32Array> {\n constructor (ints: (number | null)[] | Int32Array, name?: string) {\n super({\n form: DdbForm.vector,\n type: DdbType.int,\n rows: ints.length,\n cols: 1,\n value: ints instanceof Int32Array ?\n ints\n :\n Int32Array.from(ints, v => \n v === null ?\n nulls.int32\n :\n v\n ),\n name,\n })\n }\n}\n\nexport class DdbVectorLong extends DdbObj<BigInt64Array> {\n constructor (longs: (number | null)[] | BigInt64Array, name?: string) {\n super({\n form: DdbForm.vector,\n type: DdbType.long,\n rows: longs.length,\n cols: 1,\n value: longs instanceof BigInt64Array ?\n longs\n :\n BigInt64Array.from(longs, v => \n v === null ?\n nulls.int64\n :\n BigInt(v)\n ),\n name,\n })\n }\n}\n\nexport class DdbVectorDouble extends DdbObj<Float64Array> {\n constructor (doubles: (number | null)[] | Float64Array, name?: string) {\n super({\n form: DdbForm.vector,\n type: DdbType.double,\n rows: doubles.length,\n cols: 1,\n value: doubles instanceof Float64Array ?\n doubles\n :\n Float64Array.from(doubles, v => \n v === null ?\n nulls.double\n :\n v\n ),\n name,\n })\n }\n}\n\nexport class DdbVectorString extends DdbObj<string[]> {\n constructor (strings: string[], name?: string) {\n super({\n form: DdbForm.vector,\n type: DdbType.string,\n rows: strings.length,\n cols: 1,\n value: strings,\n name,\n })\n }\n}\n\nexport class DdbVectorAny extends DdbObj {\n constructor (objs: (DdbObj | string | boolean)[], name?: string) {\n super({\n form: DdbForm.vector,\n type: DdbType.any,\n rows: objs.length,\n cols: 1,\n value: DdbObj.to_ddbobjs(objs),\n name,\n })\n }\n}\n\nexport class DdbVectorSymbol extends DdbObj <DdbSymbolExtendedValue> {\n constructor (strings: string[], name?: string) {\n let map = new Map<string, number>([\n ['', 0]\n ])\n \n let data = new Uint32Array(strings.length)\n \n for (let i = 0; i < strings.length; i++) {\n const x = strings[i]\n \n let index = map.get(x)\n \n if (index === undefined) {\n index = map.size\n map.set(x, index)\n }\n \n data[i] = index\n }\n \n super({\n form: DdbForm.vector,\n type: DdbType.symbol_extended,\n rows: strings.length,\n cols: 1,\n value: {\n base: [...map.keys()],\n base_id: null,\n data,\n },\n name\n })\n }\n}\n\nexport class DdbVectorChar extends DdbObj <Int8Array> {\n constructor (chars?: Uint8Array | Int8Array | ArrayBuffer, name?: string) {\n let ints: Int8Array\n if (!chars)\n ints = new Int8Array()\n else if (chars instanceof ArrayBuffer)\n ints = new Int8Array(chars)\n else if (chars instanceof Uint8Array)\n ints = new Int8Array(chars.buffer, chars.byteOffset, chars.byteLength)\n else {\n check(chars instanceof Int8Array)\n ints = chars\n }\n \n super({\n form: DdbForm.vector,\n type: DdbType.char,\n rows: ints.length,\n cols: 1,\n value: ints,\n name\n })\n }\n}\n\nexport class DdbVectorBool extends DdbObj <Int8Array> {\n constructor (bools?: (boolean | null)[], name?: string) {\n const length = bools?.length || 0\n \n let value = new Int8Array(length)\n \n for (let i = 0; i < length; ++i) {\n const x = bools[i]\n value[i] = empty(x) ? nulls.int8 : x ? 1 : 0\n }\n \n super({\n form: DdbForm.vector,\n type: DdbType.bool,\n rows: length,\n cols: 1,\n value,\n name\n })\n }\n}\n\nexport class DdbVectorDatetime extends DdbObj <Int32Array> {\n constructor (datetimes?: ConvertableDdbTimeValue[], name?: string) {\n super(get_times_ddbobj(DdbType.datetime, datetimes, name))\n }\n}\n\nexport class DdbVectorTimeStamp extends DdbObj <BigInt64Array> {\n constructor (timestamps?: ConvertableDdbTimeValue[], name?: string) {\n super(get_times_ddbobj(DdbType.timestamp, timestamps, name))\n }\n}\n\nexport class DdbVectorNanoTimeStamp extends DdbObj <BigInt64Array> {\n constructor (nanotimestamps?: ConvertableDdbTimeValue[], name?: string) {\n super(get_times_ddbobj(DdbType.nanotimestamp, nanotimestamps, name))\n }\n}\n\nexport class DdbVectorDate extends DdbObj <BigInt64Array> {\n constructor (dates?: ConvertableDdbTimeValue[], name?: string) {\n super(get_times_ddbobj(DdbType.date, dates, name))\n }\n}\n\nexport class DdbSetInt extends DdbObj<Int32Array> {\n constructor (ints: (number | null)[] | Set<number> | Int32Array) {\n super({\n form: DdbForm.set,\n type: DdbType.int,\n rows: ints instanceof Set ? \n ints.size\n :\n ints.length,\n cols: 1,\n value: ints instanceof Int32Array ?\n ints\n :\n Int32Array.from(ints, v => \n v === null ?\n nulls.int32\n :\n v\n ),\n })\n }\n}\n\nexport class DdbSetDouble extends DdbObj<Float64Array> {\n constructor (doubles: (number | null)[] | Set<number> | Float64Array) {\n super({\n form: DdbForm.set,\n type: DdbType.double,\n rows: doubles instanceof Set ? \n doubles.size\n :\n doubles.length,\n cols: 1,\n value: doubles instanceof Int32Array ?\n doubles\n :\n Int32Array.from(doubles, v => \n v === null ?\n nulls.int32\n :\n v\n ),\n })\n }\n}\n\nexport class DdbSetString extends DdbObj<string[]> {\n constructor (strings: string[] | Set<string>) {\n if (strings instanceof Set)\n strings = [...strings]\n \n super({\n form: DdbForm.set,\n type: DdbType.string,\n rows: strings.length,\n cols: 1,\n value: strings\n })\n }\n}\n\n/** 构造 DdbDict 对象,支持两种用法: Constructs a DdbDict object, which supports two usages:\n - 传入类型是 DdbVectorObj 的 keys, values 两个参数直接组成 dict<keys.type, values.type> 的 DdbDict \n The incoming type is the keys of DdbObj<DdbVectorValue>, and the two parameters of values directly form the DdbDict of dict<keys.type, values.type>\n - 传入 js object (类型是 Record<string, boolean | string | DdbObj>), 自动转换为 dict<string, any> 的 DdbDict \n Pass in js object (type is Record<string, boolean | string | DdbObj>), automatically converted to DdbDict of dict<string, any> */\nexport class DdbDict extends DdbObj<DdbDictValue> {\n constructor (obj: Record<string, boolean | string | DdbObj>)\n constructor (keys: DdbVectorObj, values: DdbVectorObj)\n constructor (arg0: DdbObj | Record<string, boolean | string | DdbObj>, arg1?: DdbObj) {\n if (arg1)\n super({\n form: DdbForm.dict,\n type: arg1.type,\n rows: (arg0 as DdbObj).rows,\n cols: 2,\n value: [arg0 as DdbObj, arg1] as DdbDictValue\n })\n else {\n const keys = Object.keys(arg0)\n super({\n form: DdbForm.dict,\n type: DdbType.any,\n rows: keys.length,\n cols: 2,\n value: [\n new DdbVectorString(keys),\n new DdbVectorAny(\n Object.values(arg0)\n )\n ] as DdbDictValue\n })\n }\n }\n}\n\n\nexport class DdbTable extends DdbObj<DdbObj[]> {\n constructor (columns: DdbObj[], name: string = '') {\n super({\n form: DdbForm.table,\n type: DdbType.void,\n rows: columns[0].rows,\n cols: columns.length,\n name,\n value: columns,\n })\n }\n}\n\n\nexport interface StreamingParams {\n table: string\n \n action?: string\n \n /** offset 是订阅任务开始后的第一条消息所在的位置。消息是流数据表中的行。\n 如果未指定,或设为-1,订阅将会从流数据表的当前行开始。\n 如果 offset = -2,系统会获取持久化到磁盘上的 offset,并从该位置开始订阅。注意:须同时设置 persistOffset = true,offset = -2 才会生效;否则 offset 会变为 -1。\n offset 与流数据表创建时的第一行对应。如果某些行因为内存限制被删除,在决定订阅开始的位置时,这些行仍然考虑在内。 */\n offset?: number\n \n filters?: {\n /** https://test.dolphindb.cn/zh/funcs/s/subscribeTable.html#:~:text=filter%20%E5%8F%82%E6%95%B0%E9%9C%80%E8%A6%81%E9%85%8D%E5%90%88%20setStreamTableFilterColumn%20%E5%87%BD%E6%95%B0%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8 */\n column?: DdbObj\n \n /** 过滤条件的 DolphinDB 表达式 https://dolphindb1.atlassian.net/wiki/spaces/dev/pages/760840447/WebSocketConsole */\n expression?: string\n }\n \n handler (message: StreamingMessage): any\n}\n\n\nexport interface StreamingMessage <TRows = any> extends StreamingParams {\n /** server 发送消息的时间 (nano seconds since epoch) The time the server sent the message (nano seconds since epoch) \n std::chrono::system_clock::now().time_since_epoch() / std::chrono::nanoseconds(1) */\n time: bigint\n \n /** message id */\n id: bigint\n \n /** 订阅主题,即一个订阅的名称。 Subscription topic, which is the name of a subscription.\n 它是一个字符串,由订阅表所在节点的别名、流数据表名称和订阅任务名称(如果指定了 actionName)组合而成,使用 `/` 分隔 \n It is a string consisting of the alias of the node where the subscription table is located, the stream data table name, and the subscription task name (if actionName is specified), separated by `/` */\n topic: string\n \n /** 流数据,类型是 any vector, 其中的每一个元素对应被订阅表的一个列 (没有 name),列 (DdbObj<DdbVectorValue>) 中的内容是新增的数据值 \n Stream data, the type is any vector, each element of which corresponds to a column (without name) of the subscribed table, and the content in the column (DdbObj<DdbVectorValue>) is the new data value */\n obj: DdbObj<DdbVectorObj[]>\n \n /** 流数据 */\n data: DdbTableData<TRows>\n \n window: {\n /** 建立连接开始 offset = 0, 随着 window 的移动逐渐增加 The establishment of the connection starts offset = 0, and gradually increases as the window moves */\n offset: number\n \n /** 历史数据 Historical data */\n data: TRows[]\n \n /** 每次接收到的 obj 组成的数组 An array of obj received each time */\n objs: DdbObj<DdbVectorObj[]>[]\n }\n \n /** 成功订阅后,后续推送过来的 message 解析错误,则会设置 error 并调用 handler \n After successfully subscribed, if the subsequently pushed message is parsed incorrectly, the error will be set and the handler will be called. */\n error?: Error\n}\n\nexport const winsize = 10000 as const\n\n\nexport interface DdbEvalOptions {\n urgent?: boolean\n listener?: DdbMessageListener\n parse_object?: boolean\n iife?: boolean\n}\n\nexport interface DdbExecuteOptions extends DdbEvalOptions, ConvertOptions { }\n\n\nexport interface DdbRpcOptions extends DdbEvalOptions {\n script?: string\n func?: string\n args?: Convertable[]\n vars?: string[]\n skip_connection_check?: boolean\n on_more_messages?: (buffer: Uint8Array) => void\n}\n\n\nexport class DdbConnectionError extends Error {\n override name = 'DdbConnectionError'\n \n override cause?: WebSocketConnectionError\n \n url: string\n \n // 这里不保留 ddb 的引用,会导致无法序列化\n \n constructor (url: string, error?: WebSocketConnectionError) {\n super(error?.message || `${url} ${t('连接出错了,可能由于网络原因连接已被关闭,或服务器断开连接')}`, { cause: error })\n \n this.url = url\n \n if (error)\n this.cause = error\n }\n}\n\n\nexport class DdbDatabaseError extends Error {\n override name = 'DdbDatabaseError'\n \n url: string\n \n // 这里不保留 ddb 的引用,会导致无法序列化\n \n id: number\n \n type: DdbRpcType\n \n options: DdbRpcOptions\n \n constructor (message: string, url: string, type: DdbRpcType, options: DdbRpcOptions, id: number) {\n super(message)\n this.url = url\n this.type = type\n this.options = options\n this.id = id\n }\n}\n\n\n/** SQL Standrd 标准类型 */\nexport enum SqlStandard {\n DolphinDB = 0,\n Oracle = 1,\n MySQL = 2\n}\n\n\nexport interface DdbOptions {\n autologin?: boolean\n username?: string\n password?: string\n python?: boolean\n kdb?: boolean\n sql?: SqlStandard\n streaming?: StreamingParams\n verbose?: boolean\n proxy?: string\n}\n\n\nexport interface DdbCallOptions extends DdbEvalOptions {\n node?: string\n nodes?: string[]\n add_node_alias?: boolean\n skip_connection_check?: boolean\n on_more_messages?: DdbRpcOptions['on_more_messages']\n}\n\nexport interface DdbInvokeOptions extends DdbCallOptions, ConvertOptions { }\n\n\nexport class DDB {\n /** 当前的 session id (http 或 tcp) */\n sid = '0'\n \n /** utf-8 text decoder */\n dec = new TextDecoder('utf-8')\n \n enc = new TextEncoder()\n \n \n /** DolphinDB WebSocket URL\n e.g. `ws://127.0.0.1:8848/`, `wss://dolphindb.com` */\n url: string\n \n /** 为所有 websocket 操作加锁,包括设置 this.on_message, this.on_error, websocket.send */\n lwebsocket = new Lock<WebSocket>()\n \n \n /** little endian (server) */\n le = true\n \n /** little endian (client) */\n static le_client = Boolean(\n new Uint8Array(\n Uint32Array.of(1).buffer\n )[0]\n )\n \n /** 是否在建立连接后自动登录,默认 true Whether to automatically log in after the connection is established, the default is true */\n autologin = true\n \n /** DolphinDB 登录用户名 DolphinDB username */\n username = 'admin'\n \n /** DolphinDB 登录密码 DolphinDB password */\n password = '123456'\n \n /** python session flag (2048) */\n python = false\n \n /** kdb session flag (4096) */\n kdb = false\n \n /** 是否为 dolphindb 语言 */\n dolphindb = true\n \n language: 'dolphindb' | 'python' | 'kdb' = 'dolphindb'\n \n /** 表示本次会话执行的 SQL 标准 */\n sql = SqlStandard.DolphinDB\n \n /** 是否为流数据连接,非流数据这个字段恒为 null Whether it is a streaming data connection, this field is always null for non-streaming data */\n streaming = null as StreamingParams\n \n /** 是否打印每个 rpc 的信息用于调试 */\n verbose = false\n \n /** websocket 连接所使用的 http 代理 */\n proxy: string\n \n \n // --- 内部选项, 状态\n print_message_buffer = false\n \n print_object_buffer = false\n \n print_message = true\n \n parse_object = true\n \n heartbeat_aborter?: AbortController\n \n \n /** 在 websocket 收到的第一个 error 时, \n 在 connect_websocket 的 on_error 回调中构造 DdbConnectionError 并保存到 DDB 对象上, \n 这个 error 的错误信息最准确 */\n error: DdbConnectionError\n \n /** DdbMessage listeners */\n listeners: DdbMessageListener[] = [ ]\n \n /** 首次 connect 连接的 promise, 后面的 connect 调用都返回这个 */\n pconnect: Promise<void>\n \n /** 首次定义 pnode_run 的 promise,保证并发调用 rpc 时只定义一次 pnode_run */\n ppnode_run: Promise<DdbVoid>\n \n /** 首次定义 invoke 的 promise,保证并发调用 rpc 时只定义一次 invoke */\n pinvoke: Promise<DdbVoid>\n \n /** 首次定义 jsrpc 的 promise,保证并发调用 rpc 时只定义一次 jsrpc */\n pjsrpc: Promise<DdbVoid>\n \n /** 函数定义缓存 */\n definitions = new Map<string, string>()\n \n /** 函数定义锁,保证并发调用时不重复定义,直接返回第一次定义的结果 */\n pdefinitions = new Map<string, Promise<string>>()\n \n \n get connected () {\n return !this.error && this.lwebsocket.resource?.readyState === WebSocketOpen\n }\n \n \n /**\n 使用 WebSocket URL 初始化连接到 DolphinDB 的实例(不建立实际的网络连接) \n Initialize an instance of DolphinDB Client using the WebSocket URL (without establishing an actual network connection) \n - url: DolphinDB WebSocket URL. e.g.:`ws://127.0.0.1:8848`\n - options?: DdbOptions\n - autologin?: 是否在建立连接后自动登录,默认 `true` Whether to log in automatically after establishing a connection, default `true`\n - username?: DolphinDB 登录用户名,默认 `'admin'` DolphinDB username, default `'admin'`\n - password?: DolphinDB 登录密码,默认 `'123456'` DolphinDB password, default `'123456'`\n - python?: 设置 python session flag,默认 `false` set python session flag, default `false`\n - kdb?: 设置 kdb session flag,默认 `false` set kdb session flag, default `false`\n - streaming?: 设置该选项后,该 WebSocket 连接只用于流数据 When this option is set, the WebSocket connection is only used for streaming data\n - verbose?: 是否打印每个 rpc 的信息用于调试\n - sql?: 设置当前会话执行的 sql 标准, 请使用 SqlStandard 枚举进行传参,默认 `DolphinDB`\n \n @example\n let ddb = new DDB('ws://127.0.0.1:8848')\n \n // 使用 HTTPS 加密 Encrypt with HTTPS\n let ddbsecure = new DDB('wss://dolphindb.com', {\n autologin: true,\n username: 'admin',\n password: '123456',\n python: false\n }) */\n constructor (url: string, options: DdbOptions = { }) {\n this.url = url\n \n if (options.verbose !== undefined)\n this.verbose = options.verbose\n \n if (options.autologin !== undefined)\n this.autologin = options.autologin\n \n if (options.username !== undefined)\n this.username = options.username\n \n if (options.password !== undefined)\n this.password = options.password\n \n if (options.python !== undefined && (this.python = Boolean(options.python))) {\n this.dolphindb = false\n this.language = 'python'\n }\n \n if (options.kdb !== undefined && (this.kdb = Boolean(options.kdb))) {\n this.dolphindb = false\n this.language = 'kdb'\n }\n \n if (options.sql !== undefined)\n this.sql = options.sql\n \n if (options.streaming !== undefined)\n this.streaming = options.streaming\n \n if (options.proxy)\n this.proxy = options.proxy\n }\n \n \n private on_message (buffer: Uint8Array, websocket: WebSocket) {\n throw new Error(t('这是在调用 this.rpc 之前默认的 on_message, 不应该被调用到,除非建立连接后 server 先推送了 message'))\n }\n \n \n private on_error () {\n // 这里的实现一定会被 connect, rpc 中的实现覆盖\n }\n \n \n /** 调用后会确保和数据库的连接是正常的 (this.connected === true),否则抛出错误 \n 这个方法是幂等的,首次调用建立实际的 WebSocket 连接到 URL 对应的 DolphinDB,然后执行自动登录, \n 如果是流数据连接,还会调用 publishTable 订阅流表 \n 后续调用检查上面的条件 \n 连接断开后禁止再次调用 connect 重连原有 ddb 对象,应该通过 new DDB() 的方式新建连接对象,原因是: \n 1. on_error 回调和某个 websocket 绑定了,不方便解绑后重新绑定\n 2. session 是有状态的,重连也无法恢复之前的状态\n 3. 断线后所有之前的 ddb.call, ddb.eval 都应该抛出连接错误\n \n After calling, it will ensure that the connection with the database is normal (this.connected === true), otherwise an error will be thrown \n This method is idempotent, the first call establishes an actual WebSocket connection to the DolphinDB corresponding to the URL, and subsequent calls check the above conditions \n After the connection is disconnected, it is forbidden to call connect again to reconnect the original ddb object. You should use new DDB() to create a new connection object because: \n 1. The on_error callback is bound to a certain websocket, and it is inconvenient to unbind and rebind\n 2. The session is stateful, and the previous state cannot be restored even after reconnection\n 3. After disconnection, all previous ddb.call, ddb.eval should throw a connection error */\n async connect () {\n if (this.connected)\n return\n \n if (this.error)\n throw this.error\n \n const { resource: websocket } = this.lwebsocket\n if (websocket && (websocket.readyState === WebSocketClosing || websocket.readyState === WebSocketClosed))\n throw this.error = new DdbConnectionError(this.url)\n \n return this.pconnect ??= new Promise<void>(async (resolve, reject) => {\n this.on_error = () => {\n reject(this.error /* 一定有,不需要再 || new DdbConnectionError(this) */)\n }\n \n try {\n let url = new URL(this.url)\n if (this.streaming?.filters?.expression)\n url.searchParams.set('filter', this.streaming.filters.expression.trim())\n \n // 连接建立之前应该不会有别的调用占用 this.lwebsocket\n this.lwebsocket.resource = await connect_websocket(url, {\n protocols: this.streaming ? ['streaming'] : this.dolphindb ? undefined : [this.language],\n \n proxy: this.proxy,\n \n on_message: (buffer: ArrayBuffer, websocket) => {\n this.on_message(new Uint8Array(buffer), websocket)\n },\n \n on_error: error => {\n this.error ??= new DdbConnectionError(this.url, error)\n this.heartbeat_aborter?.abort()\n this.on_error()\n },\n \n on_close: () => {\n this.heartbeat_aborter?.abort()\n }\n })\n } catch (error) {\n this.error ??= new DdbConnectionError(this.url, error)\n reject(this.error)\n return\n }\n \n try {\n assert(this.connected)\n \n await this.rpc('connect', { skip_connection_check: true })\n \n if (this.streaming)\n await this.subscribe()\n else\n // 定时执行一次空脚本作为心跳检查,避免因为 nat 超时导致 tcp 连接断开\n (async () => {\n this.heartbeat_aborter = new AbortController()\n \n while (true) {\n // 连接主动关闭时从循环退出防止影响 node.js 退出\n try {\n await delay(1000 * 60 * 4.5, { signal: this.heartbeat_aborter.signal })\n } catch {\n break\n }\n \n if (this.connected)\n try {\n await this.eval('')\n } catch (error) {\n console.log(t('{{time}} 心跳检测失败,连接已断开', { time: new Date().to_formal_str() }), error)\n break\n }\n else\n break\n }\n })()\n \n resolve()\n } catch (error) {\n this.error ??= error\n reject(error)\n }\n })\n }\n \n \n get_rpc_options ({\n urgent = false,\n secondary = false,\n async: _async = false,\n pickle = false,\n clear = false,\n api = false,\n compress = false,\n \n cancellable = true,\n priority = urgent ? 8 : 4,\n parallelism = 64,\n root_id = '',\n limit,\n }: {\n // --- flags ---\n urgent?: boolean\n \n /** API 提交的任务, secondary 必须为 false */\n secondary?: boolean\n \n /** 是否异步任务(不返回结果) */\n async?: boolean\n \n /** 让服务端以 pickle 协议返回数据 */\n pickle?: boolean\n \n /** 本次任务完成后 clear session memory */\n clear?: boolean\n \n /** 是否为 api client */\n api?: boolean\n \n compress?: boolean\n \n // --- flags end ---\n \n /** 任务是否可以取消 */\n cancellable?: boolean\n \n priority?: number\n \n /** `8` 0 ~ 64, 指定本任务并行度 */\n parallelism?: number\n \n /** 根任务编号,内部使用,API中固定为空 */\n root_id?: string\n \n /** 指定分块返回的块大小 */\n limit?: boolean\n } = { }) {\n let flag = 0\n \n if (urgent)\n flag += 1\n \n if (secondary)\n flag += 2\n \n if (_async)\n flag += 4\n \n if (pickle)\n flag += 8\n \n if (clear)\n flag += 16\n \n if (api)\n flag += 32\n \n if (compress)\n flag += 64\n \n // python session\n if (this.python)\n flag += 2048\n \n // kdb session\n if (this.kdb)\n flag += 4096\n \n // sql standrd\n flag += 2**19 * this.sql\n \n const options = [\n flag,\n cancellable ? 1 : 0,\n priority,\n parallelism,\n ... limit ? [\n root_id,\n limit,\n ] : [ ],\n ]\n \n return options.join('_')\n }\n \n \n disconnect () {\n this.heartbeat_aborter?.abort()\n \n const { resource } = this.lwebsocket\n \n if (resource) {\n const { readyState } = resource\n \n if (readyState !== WebSocketClosed && readyState !== WebSocketClosing)\n // 这里不获取 lock,直接关闭连接\n resource.close(1000)\n }\n }\n \n \n /** (内部使用的方法) rpc through websocket (function/script/variable command) \n 未连接到 DDB 时调用会自动连接,连接断开时调用会抛出 DdbConnectionError \n When the DDB is not connected, the call will be automatically connected. When the connection is disconnected, the call will throw the DdbConnectionError \n - type: API 类型: 'script' | 'function' | 'variable' | 'connect'\n - options:\n - urgent?: 决定 `行为标识` 那一行字符串的取值(只适用于 script 和 function)\n - vars?: type === 'variable' 时必传,variable 指令中待上传的变量名\n - listener?: 处理本次 rpc 期间的消息 (DdbMessage)\n - parse_object?: 在本次 rpc 期间设置 parse_object, 结束后恢复原有 \n 为 false 时返回的 DdbObj 仅含有 buffer 和 le,不做解析,以便后续转发、序列化 \n - skip_connection_check?: 在首次 await ddb.connect() 建立连接时不能再次调用 await this.connect() 确保连接状态,会导致循环依赖, \n 将这个 flag 设为 true 跳过连接状态检查 */\n async rpc <TResult extends DdbObj = DdbObj> (type: DdbRpcType, options: DdbRpcOptions) {\n // 保留调用栈信息\n const id = genid() % 1000\n \n let error = new DdbDatabaseError('', this.url, type, options, id)\n \n if (!options.skip_connection_check)\n await this.connect()\n \n const {\n script,\n func,\n args: _args = [ ],\n vars = [ ],\n urgent,\n listener,\n on_more_messages,\n } = options\n \n \n if (func === 'pnode_run')\n try {\n await (this.ppnode_run ??= this.eval<DdbVoid>(\n funcdefs.pnode_run[this.language], \n { urgent: true }))\n } catch (error) {\n this.ppnode_run = undefined\n throw error\n }\n \n \n // this 上的当前配置需要在 message 到达后使用,先保存起来\n const _listeners = [...this.listeners]\n \n \n // rpc 请求期间需要独占 websocket,所以设计了一个锁,申请之后才能使用\n // ddb 世界观:需要等待上一个 rpc 结果从 server 返回之后才能发起下一个调用 \n // 违反世界观可能造成: \n // 1. 并发多个请求只返回第一个结果(阻塞,需后续请求疏通)\n // 2. windows 下 ddb server 返回多个相同的结果\n \n // 既然上一个请求没有出现 websocket error,且函数开头已经调用了 await this.connect() 检查过,\n // 这里也乐观的认为 this.connected && !this.errored 为 true\n \n return this.lwebsocket.request(async websocket => {\n // 独占资源后先检查状态\n if (this.error)\n throw this.error\n \n const args = DdbObj.to_ddbobjs(_args)\n \n const rpc_id = `(id = ${id})`\n \n const command = this.enc.encode(\n (() => {\n switch (type) {\n case 'function':\n if (this.verbose)\n if (args.length)\n console.log(func, args.map(arg => arg.data()), rpc_id)\n else\n console.log(`${func}()`, rpc_id)\n \n assert(!func.includes('\\0'), t('发送至 DolphinDB 执行的脚本中间不能含有 \\\\0'))\n \n return 'function\\n' +\n `${func}\\n` +\n `${args.length}\\n` +\n `${Number(DDB.le_client)}\\n`\n \n case 'script':\n if (this.verbose)\n console.log(script, rpc_id)\n \n assert(!script.includes('\\0'), t('发送至 DolphinDB 执行的脚本中间不能含有 \\\\0'))\n \n return 'script\\n' +\n script\n \n case 'variable':\n if (this.verbose)\n vars.forEach((v, i) => {\n console.log(v, '=', args[i].data())\n })\n \n return 'variable\\n' +\n `${vars.join(',')}\\n` +\n `${vars.length}\\n` +\n `${Number(DDB.le_client)}\\n`\n \n case 'connect':\n if (this.verbose)\n console.log(\n 'connect()' + \n (this.autologin ? \n '\\n' + \n `login(${this.username.quote()}, ${this.password.quote()})`\n :\n '') +\n ` ${rpc_id}`\n )\n \n return 'connect\\n' +\n // 详见 InterProcessIO.cpp#APISocketConsole::parseScript 中的\n // Util::startWith \"connect\"\n (this.autologin ? \n 'login\\n' +\n this.username + '\\n' +\n this.password /* encrypted (可选参数) + '\\n' + 'false' */\n :\n '')\n }\n })()\n )\n \n // 使用资源发送请求并等待请求完成\n const result = await new Promise<TResult>((resolve, reject) => {\n let first_message = true\n \n this.on_error = () => {\n // 这里一定有了 this.error, 不需要再 || new DdbConnectionError(this)\n reject(this.error)\n }\n \n this.on_message = buffer => {\n if (!on_more_messages || first_message)\n try {\n if (this.print_message_buffer)\n console.log(typed_array_to_buffer(buffer))\n \n const message = this.parse_message(buffer, error)\n \n listener?.(message, this)\n for (let i = _listeners.length - 1; i >= 0; --i)\n _listeners[i](message, this)\n \n const { type, data } = message\n \n switch (type) {\n case 'print':\n if (this.print_message)\n console.log(data)\n break\n \n case 'object':\n first_message = false\n resolve(data as TResult)\n break\n \n case 'error':\n first_message = false\n reject(data)\n break\n }\n } catch (error) {\n // 这里的错误并非 websocket 错误,而是 rpc 错误\n reject(error)\n }\n else\n on_more_messages(buffer)\n }\n \n websocket.send(\n concat([\n this.enc.encode(`API2 ${this.sid} ${command.length} / ${this.get_rpc_options({ urgent })}\\n`),\n command,\n ... args.map(arg => arg.pack())\n ])\n )\n })\n \n if (this.verbose)\n console.log(result.data(), rpc_id)\n \n return result\n })\n }\n \n \n /** eval script through websocket (script command) \n - script?: 执行的脚本 Script to execute\n - options?: 执行选项 execution options\n - urgent?: 紧急 flag,确保提交的脚本使用 urgent worker 处理,防止被其它作业阻塞 \n Urgent flag to ensure that submitted scripts are processed by urgent workers to prevent being blocked by other jobs\n - listener?: 处理本次 rpc 期间的消息 (DdbMessage) Process messages during this rpc (DdbMessage)\n - parse_object?: 在该次 rpc 期间设置 parse_object, 结束后恢复原有,为 false 时返回的 DdbObj 仅含有 buffer 和 le, \n 不做解析,以便后续转发、序列化 \n Set parse_object during this rpc, and restore the original after the end. \n When it is false, the returned DdbObj only contains buffer and le without parsing, \n so as to facilitate subsequent forwarding and serialization \n - iife?: 使用 `def () { ... } ()` 包裹脚本,return 最后一行,避免变量泄漏 */\n async eval <T extends DdbObj> (\n script: string,\n {\n urgent,\n listener,\n parse_object,\n iife,\n }: DdbEvalOptions = { }\n ) {\n if (iife) {\n const lines = script.split_lines()\n if (lines.length < 2)\n throw new Error(t('iife 执行的脚本行数应该至少为 2 行'))\n \n script =\n 'def () {\\n' +\n lines.slice(0, -1).indent().join_lines() +\n ` return ${lines.last}\\n` +\n '} ()\\n'\n }\n \n return this.rpc<T>('script', { script, urgent, listener, parse_object })\n }\n \n \n /** call function through websocket (function command) \n - func: 函数名 function name\n - args?: `[ ]` 调用参数 (传入的原生 string 和 boolean 会被自动转换为 DdbObj<string> 和 DdbObj<boolean>) \n Call parameters (the incoming native string and boolean will be automatically converted to DdbObj<string> and DdbObj<boolean>)\n - options?: 调用选项 call options\n - urgent?: 紧急 flag。使用 urgent worker 执行,防止被其它作业阻塞 \n Emergency flag. Use urgent worker execution to prevent being blocked by other jobs\n - node?: 设置结点 alias 时发送到集群中对应的结点执行 (使用 DolphinDB 中的 rpc 方法) \n When the node alias is set, it is sent to the corresponding node in the cluster for execution (using the rpc method in DolphinDB)\n - nodes?: 设置多个结点 alias 时发送到集群中对应的多个结点执行 (使用 DolphinDB 中的 pnodeRun 方法) \n When setting multiple node aliases, send them to the corresponding multiple nodes in the cluster for execution (using the pnodeRun method in DolphinDB)\n - add_node_alias?: 设置 nodes 参数时选传,其它情况不传 \n Select to pass when setting the nodes parameter, otherwise not pass\n - listener?: 处理本次 rpc 期间的消息 (DdbMessage) \n Process messages during this rpc (DdbMessage)\n - parse_object?: 在该次 rpc 期间设置 parse_object, 结束后恢复原有,为 false 时返回的 DdbObj 仅含有 buffer 和 le,\n 不做解析,以便后续转发、序列化 \n Set parse_object during this rpc, and restore the original after the end. \n When it is false, the returned DdbObj only contains buffer and le without parsing, \n so as to facilitate subsequent forwarding and serialization \n - skip_connection_check?: (内部使用) 在首次 await ddb.connect() 建立连接时不能再次调用 await this.connect() 确保连接状态,会导致循环依赖, \n 将这个 flag 设为 true 跳过连接状态检查 \n (internal use) When await ddb.connect() establishes a connection for the first time, you cannot call await this.connect() again to ensure the connection status, which will lead to circular dependencies.\n Set this flag to true to skip connection status checks */\n async call <TResult extends DdbObj> (\n func: string,\n args: (DdbObj | string | boolean)[] = [ ],\n {\n urgent,\n node,\n nodes,\n add_node_alias,\n listener,\n parse_object,\n skip_connection_check,\n on_more_messages\n }: DdbCallOptions = { }\n ) {\n let func_ = func\n let args_ = args\n \n if (node) {\n try {\n await (this.pjsrpc ??= this.eval<DdbVoid>(\n funcdefs.jsrpc[this.language], \n { urgent: true }))\n } catch (error) {\n this.pjsrpc = undefined\n throw error\n }\n \n func_ = 'jsrpc'\n args_ = [\n node,\n func,\n new DdbVectorAny(args)\n ]\n }\n \n if (nodes) {\n func_ = 'pnode_run'\n args_ = [\n new DdbVectorString(nodes),\n func,\n new DdbVectorAny(args),\n ... (() => {\n if (typeof add_node_alias !== 'undefined')\n return [add_node_alias]\n \n if (this.python)\n return [true]\n \n return [ ]\n })()\n ]\n }\n \n return this.rpc<TResult>('function', {\n func: func_,\n args: args_,\n urgent,\n listener,\n parse_object,\n skip_connection_check,\n on_more_messages\n })\n }\n \n \n /** 调用 dolphindb 函数,传入 js 原生数组作为参数,返回 js 原生对象或值(调用 DdbObj.data() 后的结果) \n - func: 函数名,或者函数完整实现,会间接调用 define 进行预定义 \n - args?: `[ ]` 调用参数,可以是 js 原生数组,参数在中间且想用 server 函数的默认参数值时可以传 null 占位 \n - options?: 调用选项 \n - urgent?: 紧急 flag。使用 urgent worker 执行,防止被其它作业阻塞 \n - node?: 设置结点 alias 时发送到集群中对应的结点执行 (使用 DolphinDB 中的 rpc 方法) \n - nodes?: 设置多个结点 alias 时发送到集群中对应的多个结点执行 (使用 DolphinDB 中的 pnodeRun 方法) \n - add_node_alias?: 设置 nodes 参数时选传,其它情况不传 \n - listener?: 处理本次 rpc 期间的消息 (DdbMessage) */\n async invoke <TResult = any> (func: string, args?: any[], options?: DdbInvokeOptions) {\n // 检查 args 是否全部为简单参数,是则直接调用 call,避免 invoke 间接调用\n // 逻辑类似 DdbObj.to_ddbobjs, 需要同步修改\n let convertable = true\n let has_ddbobj = false\n if (args)\n for (const arg of args)\n if (arg && arg instanceof DdbObj)\n has_ddbobj = true\n else if (arg === undefined || arg === null) {\n // simple\n } else {\n const type = typeof arg\n if (type === 'string' || type === 'boolean')\n { } // simple\n else\n convertable = false\n }\n \n let result: DdbObj\n \n if (function_definition_pattern.test(func))\n func = await this.define(func, { urgent: options?.urgent })\n \n if (convertable)\n result = await this.call(func, args, options)\n else {\n if (has_ddbobj)\n throw new Error(t('调用 ddb.invoke 的参数中不能同时有 DdbObj 与复杂 js 原生对象'))\n \n try {\n await (this.pinvoke ??= this.eval<DdbVoid>(\n funcdefs.invoke[this.language],\n { urgent: true }))\n } catch (error) {\n // invoke 没有正确执行时,重新将 pinvoke 赋值为 undefined\n this.pinvoke = undefined\n throw error\n }\n \n result = await this.call('invoke', [func, JSON.stringify(args)], options)\n }\n \n return result.data<TResult>(options)\n }\n \n \n /** 执行 dolphindb 脚本,返回 js 原生对象或值(调用 DdbObj.data() 后的结果) \n - script?: 执行的脚本 \n - options?: 执行选项 \n - urgent?: 紧急 flag,确保提交的脚本使用 urgent worker 处理,防止被其它作业阻塞 \n - listener?: 处理本次 rpc 期间的消息 (DdbMessage) */\n async execute <TResult = any> (script: string, options?: DdbExecuteOptions) {\n return (await this.eval(script, options))\n .data<TResult>(options)\n }\n \n \n /** upload variable through websocket (variable command) */\n async upload (\n /** 上传的变量名 Uploaded variables' name */\n vars: string[],\n \n /** 上传的变量值 Uploaded variables' value */\n args: (DdbObj | string | boolean)[],\n \n {\n listener,\n parse_object,\n }: {\n listener?: DdbMessageListener\n parse_object?: boolean\n } = { }\n ) {\n assert(args.length && args.length === vars.length, t('variable 指令参数不能为空且参数名不能为空,且数量应该匹配'))\n return this.rpc('variable', { vars, args, listener, parse_object })\n }\n \n \n /** 取消当前 session id 对应的所有 console jobs Cancel all console jobs corresponding to the current session id */\n async cancel () {\n let ddb = new DDB(this.url, {\n autologin: this.autologin,\n username: this.username,\n password: this.password,\n proxy: this.proxy,\n verbose: this.verbose\n })\n \n try {\n // 因为是新建的连接,而且执行完脚本之后马上就关闭了,所以不用考虑变量泄漏的问题\n await ddb.eval(\n `jobs = exec rootJobId from getConsoleJobs() where sessionId = ${this.sid}\\n` +\n 'if (size(jobs))\\n' +\n ' cancelConsoleJob(jobs)\\n',\n { urgent: true })\n } finally {\n ddb.disconnect()\n }\n }\n \n \n /** 解析服务端响应报文,返回去掉 header 的 data buf */\n parse_message (buf: Uint8Array, error: DdbDatabaseError): DdbMessage {\n // MSG\\n\n // <message>\\0\n // 'M'.codePointAt(0).to_hex_str()\n if (buf[0] === 0x4d && buf[1] === 0x53 && buf[2] === 0x47 && buf[3] === 0x0a) {\n assert(buf.at(-1) === 0, t('print 消息的 buffer 应该以 \\\\0 结束'))\n if (buf.indexOf(0) !== buf.length - 1)\n console.warn(t('print 消息的 buffer 中间不应该有 \\\\0'))\n return {\n type: 'print',\n data: \n this.dec.decode(\n buf.subarray(4, -1)\n )\n }\n }\n \n \n // '1166953221 1 1\\n'\n // 'OK\\n'\n // '\\x04\\x00\\x02\\x00\\x00\\x00'\n \n /** index of line feed 0 */\n const ilf0 = buf.indexOf(0x0a) // '\\n'\n \n const parts = this.dec.decode(\n buf.subarray(0, ilf0)\n ).split(' ')\n \n this.sid = parts[0]\n \n // 返回对象的数量\n // const nobj = Number(parts[1])\n \n // 大小端: 协议中大端为 0, 小端为 1\n this.le = Number(parts[2]) !== 0\n \n const ils1 = ilf0 + 1\n const ilf1 = buf.indexOf(0x0a, ils1) // '\\n'\n /** 'OK' 表示成功,其它文本表示失败 */\n const message = this.dec.decode(\n buf.subarray(ils1, ilf1)\n )\n \n if (message !== 'OK') {\n error.message = message\n \n let lines = error.stack.split_lines()\n lines[0] += `: ${message}`\n error.stack = lines.join_lines(false)\n \n return { type: 'error', data: error }\n }\n \n const bufobj = buf.subarray(ilf1 + 1)\n \n if (this.print_object_buffer)\n console.log(typed_array_to_buffer(bufobj))\n \n return {\n type: 'object',\n data: error.options.parse_object ?? this.parse_object ?\n DdbObj.parse(bufobj, this.le)\n :\n new DdbObj({\n form: DdbForm.scalar,\n type: DdbType.void,\n length: 0,\n le: this.le,\n buffer: bufobj,\n })\n }\n }\n \n \n /** 内部的流订阅方法 Internal stream subscription method */\n async subscribe () {\n // 流表推送过来的第一条数据是 schema,需要特殊处理\n let first = true\n \n let win: StreamingMessage['window'] = {\n offset: 0,\n data: [ ],\n objs: [ ]\n }\n \n let schema: DdbTableData\n \n console.log(\n t('订阅流表成功:'),\n \n // 普通流表结果为 columns (string[])\n // 高可用流表为 [columns (string[]), node sites (string[])]\n (await this.call<DdbVectorStringObj>('publishTable', [\n 'localhost',\n new DdbInt(0),\n this.streaming.table,\n (this.streaming.action ||= `api_js_${new Date().getTime()}`),\n (this.streaming.offset === undefined || this.streaming.offset === null)\n ? new DdbVoid()\n : new DdbInt(this.streaming.offset), // offset\n this.streaming.filters?.column || new DdbVoid(), // filter\n ],\n {\n skip_connection_check: true, \n \n // 先准备好收到 websocket message 的 callback\n on_more_messages: buffer => {\n try {\n let data: DdbTableData\n \n const dv = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n \n const i_topic_end = buffer.indexOf(0, 17)\n \n // 首个 message 一定是 table schema, 后续消息是 column 片段组成的 any vector\n const obj = DdbObj.parse(buffer.subarray(i_topic_end + 1), this.le) as DdbObj<DdbVectorObj[]>\n \n // server 推数据时遇到错误会返回 string,一般格式为 error.xxx: 错误信息\n if (obj.form === DdbForm.scalar && obj.type === DdbType.string) {\n this.disconnect()\n const value = obj.value as any as string\n throw new Error(value.slice(value.indexOf(':') + 1).trim())\n }\n \n if (first) {\n schema = data = obj.data<DdbTableData>({ table: 'full' })\n data.name ||= this.streaming.table\n first = false\n } else {\n let rows: number\n \n // 用了流数据过滤功能后,必然发 table\n if (obj.form === DdbForm.table) {\n data = obj.data<DdbTableData>({ table: 'full' })\n data.name ||= schema.name\n \n rows = data.data.length\n } else {\n const _data = obj.data<any[][]>()\n \n const { columns } = schema\n \n rows = _data[0]?.length || 0\n \n data = {\n ... schema,\n data: seq(rows, i =>\n zip_object(\n columns,\n seq(columns.length, j => _data[j][i])\n ))\n }\n }\n \n \n win.data.push(...data.data)\n \n win.objs.push(obj)\n \n if (win.data.length >= winsize * 2 && win.objs.length >= 2) {\n let winsize_ = 0\n let i = win.objs.length - 1\n // 往前移动至首个累计 winsize_ 超过 winsize 的位置\n for ( ; winsize_ < winsize; i--)\n winsize_ += win.objs[i].value[0].rows\n \n win.offset += win.data.length - winsize_\n win.data = win.data.slice(-winsize_)\n win.objs = win.objs.slice(i)\n }\n }\n \n this.streaming.handler({\n ...this.streaming,\n id: dv.getBigInt64(9, this.le),\n time: dv.getBigInt64(1, this.le),\n topic: this.dec.decode(buffer.subarray(17, i_topic_end)),\n obj,\n data,\n window: win,\n })\n } catch (error) {\n // 将 error 交给 handler 处理\n this.streaming.handler({ ...this.streaming, error } as StreamingMessage)\n }\n }\n }\n )).data()\n )\n }\n \n \n /** 定义函数并保存,避免下次重复执行定义,会自动提取脚本中的函数名,作为缓存 key,\n 也同时作为返回值\n - definition: 函数完整定义\n - options?:\n - urgent?: 紧急 flag,确保提交的脚本使用 urgent worker 处理,防止被其它作业阻塞 \n @example\n await ddb.invoke(\n await ddb.define(\n 'def foo (bar) {\\n' +\n ' print(bar)\\n' +\n '}\\n'),\n ['hello']) */\n async define (definition: string, { urgent }: { urgent?: boolean } = { }) {\n const matches = function_definition_pattern.exec(definition)\n \n if (!matches)\n throw new Error(t('DDB.define 方法传入的 definition 不符合函数定义格式 def xxx ()'))\n \n const func_name = matches[1]\n \n // 已定义成功\n if (this.definitions.has(func_name))\n return func_name\n \n // 防止并发调用 define 时多次重复定义\n let promise = this.pdefinitions.get(func_name)\n \n if (!promise)\n this.pdefinitions.set(\n func_name,\n promise = this.execute(definition, { urgent }))\n \n await promise\n \n this.definitions.set(func_name, definition)\n \n // 成功定义之后,definitions 中有了,就不需要通过 promise 来防止并发了,清理掉\n // 定义失败时 rejected promise 直接作为后续调用的结果返回\n this.pdefinitions.delete(func_name)\n \n return func_name\n }\n}\n\n\nexport interface DdbMessageListener {\n (message: DdbMessage, _this: DDB): any\n}\n\n\nexport interface DdbPrintMessage {\n type: 'print'\n data: string\n}\n\nexport interface DdbObjectMessage {\n type: 'object'\n data: DdbObj\n}\n\nexport interface DdbErrorMessage {\n type: 'error'\n data: DdbDatabaseError\n}\n\nexport type DdbMessage = DdbPrintMessage | DdbObjectMessage | DdbErrorMessage\n\n\n\nexport class BigInt128Array {\n static of (...items: bigint[]): BigInt128Array {\n return new BigInt128Array(items)\n }\n \n \n static from (arrayLike: ArrayLike<bigint>): BigInt128Array\n static from<U>(arrayLike: ArrayLike<U>, mapfn: (v: U, k: number) => bigint, thisArg?: any): BigInt128Array\n static from<U>(arrayLike: ArrayLike<U>, mapfn?: (v: U, k: number) => bigint, thisArg?: any) {\n if (mapfn) {\n const array: bigint[] = [ ]\n for (let i = 0; i < arrayLike.length; i++) \n array.push(mapfn.call(thisArg, arrayLike[i], i))\n \n return new BigInt128Array(array)\n } else {\n const v = new BigInt128Array(arrayLike.length)\n v.set(arrayLike as ArrayLike<bigint>)\n }\n }\n \n \n readonly BYTES_PER_ELEMENT: number = 16\n readonly buffer: ArrayBufferLike\n readonly byteLength: number\n readonly byteOffset: number\n \n \n constructor (length?: number)\n constructor (array: Iterable<bigint>)\n constructor (buffer: ArrayBufferLike, byteOffset?: number, length?: number)\n constructor (fisrtArg: number | Iterable<bigint> | ArrayBufferLike, byteOffset?: number, length?: number) {\n if (typeof fisrtArg === 'number') {\n const length = fisrtArg\n this.buffer = new ArrayBuffer(length * this.BYTES_PER_ELEMENT)\n this.byteOffset = 0\n this.byteLength = length * this.BYTES_PER_ELEMENT\n } else if (fisrtArg instanceof ArrayBuffer || fisrtArg instanceof SharedArrayBuffer) {\n this.buffer = fisrtArg\n this.byteOffset = byteOffset ?? 0\n \n let byteLength = 0\n if (length !== undefined) {\n byteLength = length * this.BYTES_PER_ELEMENT\n if (byteLength + this.byteOffset > fisrtArg.byteLength) \n throw new RangeError(`valid typed array length: ${length}`)\n } else {\n byteLength = fisrtArg.byteLength - this.byteOffset\n if (byteLength % this.BYTES_PER_ELEMENT !== 0) \n throw new RangeError('byte length of BigInt128Array should be a multiple of 16')\n }\n \n this.byteLength = byteLength\n } else {\n const array: bigint[] = [ ]\n for (const value of fisrtArg as Iterable<bigint>) \n array.push(value)\n \n this.buffer = new ArrayBuffer(array.length * this.BYTES_PER_ELEMENT)\n this.byteOffset = 0\n this.byteLength = array.length * this.BYTES_PER_ELEMENT\n this.set(array)\n }\n \n return new Proxy(this, {\n get (target, key) {\n if (typeof key === 'string') {\n const index = Number(key)\n // only positive integer index is allowed\n if (Number.isInteger(index) && index >= 0 && index < target.length) \n return target.at(index)\n }\n \n return Reflect.get(target, key)\n },\n \n set (target, key, value) {\n if (typeof key === 'string') {\n const index = Number(key)\n if (Number.isInteger(index) && index >= 0 && index < target.length) \n target.set([value], index)\n \n // ignore invalid number index setter, and never set value to target\n return true\n }\n \n return Reflect.set(target, key, value)\n },\n \n has (target, key) {\n if (typeof key === 'string') {\n const index = Number(key)\n if (Number.isInteger(index) && index >= 0 && index < target.length)\n return true\n }\n \n return Reflect.has(target, key)\n }\n })\n }\n \n \n get length () {\n return this.byteLength / this.BYTES_PER_ELEMENT\n }\n \n \n set (array: ArrayLike<bigint>, offset: number = 0) {\n if (offset + array.length > this.length) \n throw new RangeError('offset is out of bounds')\n \n const dv = new DataView(this.buffer)\n for (let i = 0; i < array.length; i++) {\n const byteOffset = this.byteOffset + (offset + i) * this.BYTES_PER_ELEMENT\n set_big_int_128(dv, byteOffset, array[i])\n }\n }\n \n \n at (index: number) {\n const length = this.length\n \n if (index < 0) \n index += length\n \n if (index >= length || index < 0)\n return undefined\n \n const dv = new DataView(this.buffer)\n return get_big_int_128(dv, this.byteOffset + index * this.BYTES_PER_ELEMENT)\n }\n \n \n subarray (begin: number = 0, end: number = this.length) {\n const length = this.length\n // subarray arguments should be the same behavior as other TypedArray\n // https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray#%E8%AF%B4%E6%98%8E\n if (begin < 0)\n begin += length\n \n if (end < 0)\n end += length\n \n if (begin < 0)\n begin = 0\n else if (begin > length)\n begin = length\n \n if (end < 0)\n end = 0\n else if (end > length)\n end = length\n \n const newLength = Math.max(end - begin, 0)\n return new BigInt128Array(this.buffer, this.byteOffset + begin * this.BYTES_PER_ELEMENT, newLength)\n }\n \n \n [Symbol.iterator] () {\n let index = 0\n const array = this\n return {\n next () {\n if (index < array.length) \n return { value: array.at(index++), done: false }\n else \n return { done: true }\n },\n }\n }\n \n \n toString () {\n const values: bigint[] = [ ]\n for (const value of this) \n values.push(value)\n return values.join(',')\n }\n \n \n // Simulate other TypedArray behavior in nodejs\n [inspect.custom] () {\n const values: bigint[] = [ ]\n for (const value of this) \n values.push(value)\n const value_str = values.length ? ` ${values.map(v => String(v) + 'n').join(', ')} ` : ''\n return `${this[Symbol.toStringTag]}(${this.length}) [${value_str}]`\n }\n}\n\n\nObject.defineProperty(BigInt128Array.prototype, Symbol.toStringTag, {\n configurable: false,\n writable: false,\n enumerable: false,\n value: 'BigInt128Array',\n})\n\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InspectOptions as UtilInspectOptions } from 'util'\n\nimport type { Dayjs } from 'dayjs'\n\nimport {\n concat, assert, inspect, typed_array_to_buffer, connect_websocket, Lock, genid, seq, zip_object,\n WebSocketOpen, WebSocketClosed, WebSocketClosing, type WebSocket, type WebSocketConnectionError,\n decode, delay, check, empty\n} from 'xshell'\n\nimport { t } from './i18n/index.ts'\n\nimport {\n date2str, datehour2str, datetime2str, ddb_tensor_bytes, DdbChartType, DdbDurationUnit, DdbForm,\n DdbFunctionType, DdbType, DdbVoidType, dictables, function_definition_patterns, generate_array_type,\n get_big_int_128, get_time_ddbobj, get_duration_unit, get_type_name, int1282str, ipaddr2str, \n is_decimal_null_value, is_decimal_type, minute2str, month2str, nanotime2str, nanotimestamp2str, \n nulls, second2str, set_big_int_128, time2str, timestamp2str, uuid2str, type ConvertOptions, \n type DdbDecimal128Value, type DdbDecimal32Value, type DdbDecimal32VectorValue, \n type DdbDecimal64Value, type DdbDecimal64VectorValue, type DdbDurationValue, \n type DdbDurationVectorValue, type DdbFunctionDefValue, type DdbMatrixData, type DdbRpcType, \n type DdbScalarValue, type DdbSymbolExtendedValue, type DdbTableData, type DdbTensorData, \n type DdbTensorValue, type IotVectorItemValue, type TensorData, type DdbExtObjValue,\n type ConvertableDdbTimeValue, get_times_ddbobj, funcdefs\n} from './common.ts'\n\nexport * from './common.ts'\n\n\nexport interface DdbDecimal128VectorValue {\n scale: number\n \n data: BigInt128Array\n}\n\nexport type DdbDecimalVectorValue = DdbDecimal32VectorValue | DdbDecimal64VectorValue | DdbDecimal128VectorValue\n\n\nexport type DdbVectorValue = \n null |\n Uint8Array | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array | BigInt64Array | BigInt128Array |\n string[] | // string[]\n Uint8Array[] | // blob\n DdbObj[] | // any\n IotVectorItemValue |\n DdbSymbolExtendedValue | \n DdbArrayVectorValue |\n DdbDecimalVectorValue |\n DdbDurationVectorValue\n\n\nexport interface DdbArrayVectorBlock {\n unit: 1 | 2 | 4\n rows: number\n lengths: Uint8Array | Uint16Array | Uint32Array\n data: Int8Array | Int16Array | Int32Array | Float32Array | Float64Array | BigInt64Array | BigInt128Array\n}\n\nexport type DdbArrayVectorValue = DdbArrayVectorBlock[] & /* decimal 数据会有这个属性 */ { scale?: number }\n\n\nexport interface DdbMatrixValue {\n rows: DdbVectorObj | null\n cols: DdbVectorObj | null\n data: DdbVectorValue\n}\n\n\nexport type DdbDictValue = [DdbVectorObj, DdbVectorObj]\n\n\nexport interface DdbChartValue {\n /** 原属性 chartType original: chartType */\n type: DdbChartType\n \n stacking: boolean\n \n /** 直方图 (Histogram), plotHist 函数返回的 chart 可能具有该属性 \n 原属性 binStart \n 数值类型的 DdbObj 都有可能? \n */\n bin_start?: DdbObj\n \n /** 原属性 binEnd */\n bin_end?: DdbObj\n \n /** 原属性 binCount */\n bin_count?: DdbObj\n \n titles: {\n chart: string\n x_axis: string\n y_axis: string\n }\n \n extras?: {\n multi_y_axes: boolean\n }\n \n data: DdbMatrixObj\n}\n\n\nexport type DdbValue = DdbScalarValue | DdbVectorValue | DdbMatrixValue | DdbDictValue | DdbChartValue | DdbTensorValue | DdbExtObjValue\n\n\nexport type DdbStringObj = DdbObj<string>\n\nexport type DdbVectorObj <TValue extends DdbVectorValue = DdbVectorValue> = DdbObj<TValue>\n\nexport type DdbVectorAnyObj = DdbVectorObj<DdbObj[]>\nexport type DdbVectorStringObj = DdbVectorObj<string[]>\n\nexport type DdbTableObj <TColumns extends DdbVectorObj[] = DdbVectorObj[]> = DdbObj<TColumns>\n\nexport type DdbDictObj <TKeys extends DdbVectorObj = DdbVectorObj, TValues extends DdbVectorObj = DdbVectorObj> = DdbObj<[TKeys, TValues]>\n\nexport type DdbMatrixObj <TValue extends DdbMatrixValue = DdbMatrixValue> = DdbObj<TValue>\n\nexport type DdbChartObj = DdbObj<DdbChartValue>\n\nexport type DdbTensorObj = DdbObj<DdbTensorValue>\n\n\nexport type DdbIotAnyVector = DdbObj<IotVectorItemValue>\n\n\nexport type Convertable = DdbObj | string | boolean | null | undefined\n\n\n/** 可以表示所有 DolphinDB 数据库中的数据类型 Can represent data types in all DolphinDB databases */\nexport class DdbObj <TValue extends DdbValue = DdbValue> {\n static dec = new TextDecoder('utf-8')\n \n static enc = new TextEncoder()\n \n /** 维护已解析的 symbol base,比如流数据中后续的 symbol 向量可能只发送一个 base.id, base.size == 0, 依赖之前发送的 symbol base ?\n 只是暂存,如果一张表有多个 symbol 列,可能这个 symbol base 会被复用,不同的对象之间 symbol base 一般不复用\n */\n static symbol_bases: Record<number, string[]> = { }\n \n /** little endian (client) */\n static le_client = Boolean(\n new Uint8Array(\n Uint32Array.of(1).buffer\n )[0]\n )\n \n /** 是否为小端 (little endian) */\n le = DdbObj.le_client\n \n /** 数据形式 https://www.dolphindb.cn/cn/help/DataTypesandStructures/DataForms/index.html */\n form: DdbForm\n \n /** 数据类型 https://www.dolphindb.cn/cn/help/DataTypesandStructures/DataTypes/index.html */\n type: DdbType\n \n /** 占用 parse 时传入的 buf 的长度 */\n length: number\n \n /** table name / column name */\n name?: string\n \n /** 最低维、第 1 维\n - vector: rows = n, cols = 1\n - pair: rows = 2, cols = 1\n - matrix: rows = n, cols = m\n - set: 同 vector\n - dict: 包含 keys, values 向量\n - table: 同 matrix */\n rows?: number\n \n /** 第 2 维 */\n cols?: number\n \n /** 实际数据。不同的 DdbForm, DdbType 使用 DdbValue 中不同的类型来表示实际数据 \n The actual data. Different DdbForm, DdbType use different types in DdbValue to represent actual data */\n value: TValue\n \n /** 原始二进制数据,仅在 parse_object 为 false 时通过 parse_message 生成的顶层对象有这个属性 */\n buffer?: Uint8Array\n \n \n constructor (data: Partial<DdbObj> & { form: DdbForm, type: DdbType /* (parse 对象时必须设置) , length: number */ }) {\n Object.assign(this, data)\n }\n \n \n static parse (buf: Uint8Array, le: boolean) {\n if (!buf.length)\n return new this({\n le,\n form: DdbForm.scalar,\n type: DdbType.void,\n length: 0,\n value: null\n })\n \n const type = buf[0]\n const form = buf[1]\n \n if (buf.length <= 2) \n return new this({\n le,\n form,\n type,\n length: 2,\n value: null,\n })\n \n \n // set 里面 data 嵌套了一个 vector, 跳过 vector 的 type 和 form\n const i_data = form === DdbForm.set ? 4 : 2\n const buf_data = buf.subarray(i_data)\n \n switch (form) {\n case DdbForm.scalar: {\n const [length, value] = this.parse_scalar(buf_data, le, type)\n return new this({\n le,\n form, \n type,\n length: i_data + length,\n value,\n })\n }\n \n case DdbForm.vector:\n case DdbForm.pair:\n case DdbForm.set: {\n let vector = this.parse_vector(buf_data, le, type)\n vector.length += i_data\n vector.form = form\n return vector\n }\n \n \n case DdbForm.table: {\n // table([\n // [1, 2] as a,\n // [1, 2] as b\n // ])\n \n // <Buffer \n // 00 06 form = table\n // 02 00 00 00 02 00 00 00 rows = 2, cols = 2\n // 00 行名称\n // 61 00 62 00 列名称 a, b\n \n // 04 01 form = vector, type = int\n // 02 00 00 00 01 00 00 00 cols = 2, rows = 1\n // 01 00 00 00 02 00 00 00 \n \n // 04 01 \n // 02 00 00 00 01 00 00 00 \n // 01 00 00 00 02 00 00 00>\n \n const dv = new DataView(buf.buffer, buf.byteOffset + i_data)\n \n const rows = dv.getUint32(0, le)\n const cols = dv.getUint32(4, le)\n const i_name_tail = buf_data.indexOf(0, 8)\n const name = this.dec.decode(\n buf_data.subarray(8, i_name_tail)\n )\n \n const i_items_start = i_name_tail + 1\n \n const [len_items, colnames] = this.parse_vector_items(\n buf_data.subarray(i_items_start),\n le,\n DdbType.string,\n cols\n ) as [number, string[]]\n \n let value = new Array(cols)\n let i_start = i_items_start + len_items\n for (let i = 0; i < cols; i++) {\n const type = buf_data[i_start] as DdbType\n \n if (type === DdbType.compressed)\n throw new Error(t(\n '{{form}}<{{type}}> 暂时不支持解析', \n { form: 'table', type: 'compress' }\n ))\n \n let col = this.parse_vector(\n buf_data.subarray(i_start + 2),\n le,\n type)\n \n col.length += 2\n \n col.name = colnames[i]\n \n value[i] = col\n \n i_start += col.length\n }\n \n return new this({\n le,\n form,\n type,\n length: i_data + i_start,\n name,\n rows,\n cols,\n value,\n })\n }\n \n \n case DdbForm.dict: \n case DdbForm.chart: {\n // <Buffer 19 05 type = any, form = dict\n // 12 01 keys.type = string, keys.form = vector\n // 03 00 00 00 01 00 00 00 keys.cols = 3, keys.rows = 1\n // 63 00 62 00 61 00 \n \n // 19 01 values.type = any, values.form = vector\n // 03 00 00 00 01 00 00 00 values.cols = 3, values.rows = 1\n // 04 00 03 00 00 00 04 00 02 00 00 00 04 00 01 00 00 00>\n \n let keys = this.parse_vector(\n buf_data.subarray(2),\n le,\n buf_data[0]\n )\n \n keys.length += 2\n \n let values = this.parse_vector(\n buf_data.subarray(keys.length + 2),\n le,\n buf_data[keys.length]\n )\n \n values.length += 2\n \n let dict = new this({\n le,\n form: DdbForm.dict,\n type,\n length: i_data + keys.length + values.length,\n rows: keys.rows,\n cols: 2,\n value: [\n keys,\n values\n ],\n })\n \n if (form === DdbForm.dict)\n return dict\n else {\n const {\n chartType: type,\n stacking,\n binStart: bin_start,\n binEnd: bin_end,\n binCount: bin_count,\n title: titles,\n extras,\n data,\n ... others\n } = dict.to_dict<{\n chartType: DdbObj<DdbChartType>\n stacking: DdbBool\n binStart: DdbObj\n binEnd: DdbObj\n binCount: DdbObj\n title: DdbVectorString\n extras?: DdbObj\n data: DdbMatrixObj\n }>()\n \n const [chart, x_axis, y_axis] = titles.value\n \n dict.form = DdbForm.chart\n \n dict.value = {\n type: type.value,\n stacking: stacking.value,\n titles: {\n chart,\n x_axis,\n y_axis,\n },\n ... bin_start ? { bin_start, bin_end, } : { },\n ... bin_count ? { bin_count } : { },\n ... extras ? (() => {\n const { multiYAxes: multi_y_axes = false, ...extras_others } = extras.to_dict<{ multiYAxes: boolean }>({ strip: true })\n \n return {\n extras: {\n multi_y_axes,\n ...extras_others,\n }\n }\n })() : { },\n data,\n ...others,\n }\n \n return dict\n }\n }\n \n \n case DdbForm.matrix: {\n // rename!(\n // 1..9$3:3,\n // [1, 2, 3],\n // ['c1', 'c2', 'c3']\n // )\n \n // <Buffer 04 03 type = int, form = matrix\n // 03 has_row_label (& 0x01) = 1, has_col_label (& 0x02) = 1\n \n // row labels\n // 04 01 type = int, form = vector\n // 03 00 00 00 01 00 00 00 rows = 3, cols = 1\n // 01 00 00 00 02 00 00 00 03 00 00 00 vector values\n \n // col labels\n // 12 01 type = string, form = vector\n // 03 00 00 00 01 00 00 00 rows = 3, cols = 1\n // 63 31 00 63 32 00 63 33 00 \n \n // matrix data\n // 04 03 type = matrix.type, form = matrix\n // 03 00 00 00 03 00 00 00 rows = 3, cols = 3\n \n const dv = new DataView(buf.buffer, buf.byteOffset + i_data)\n \n const label_flags = buf_data[0]\n const has_row_labels = Boolean(label_flags & 0x01)\n const has_col_labels = Boolean(label_flags & 0x02)\n \n let row_labels: DdbVectorObj | null = null\n let col_labels: DdbVectorObj | null = null\n \n let offset = 1\n \n if (has_row_labels) {\n row_labels = this.parse_vector(\n buf_data.subarray(offset + 2),\n le,\n buf_data[offset] as DdbType\n )\n row_labels.length += 2\n offset += row_labels.length\n }\n \n if (has_col_labels) {\n col_labels = this.parse_vector(\n buf_data.subarray(offset + 2),\n le,\n buf_data[offset] as DdbType\n )\n col_labels.length += 2\n offset += col_labels.length\n }\n \n assert(buf_data[offset] === type, 'matrix.datatype === matrix.type')\n \n const rows = dv.getUint32(offset + 2, le)\n const cols = dv.getUint32(offset + 6, le)\n \n const [len_items, data] = this.parse_vector_items(\n buf_data.subarray(offset + 10),\n le,\n type,\n rows * cols // 假设小于 2**32\n )\n \n offset += 10 + len_items\n \n return new this({\n le,\n form, \n type,\n length: i_data + offset,\n rows,\n cols,\n value: {\n rows: row_labels,\n cols: col_labels,\n data,\n },\n })\n }\n \n case DdbForm.tensor: {\n // 元数据\n const tensorType = buf[2]\n const deviceType = buf[3]\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const tensorFlags = dv.getUint32(4, le)\n const dimensions = dv.getInt32(8, le)\n const shapes: number[] = [ ]\n const strides: number[] = [ ]\n const shapeStart = 12\n const stridesStart = shapeStart + dimensions * 8\n const preserveValueStart = stridesStart + dimensions * 8\n const preserveValue = dv.getBigInt64(preserveValueStart, le)\n const storageStart = preserveValueStart + 8\n const elemCount = dv.getBigInt64(storageStart, le)\n const dataStart = storageStart + 8\n for (let d = 0; d < dimensions; d++) {\n const getNumOffset = d * 8\n shapes.push(Number(dv.getBigInt64(shapeStart + getNumOffset, le)))\n strides.push(Number(dv.getBigInt64(stridesStart + getNumOffset, le)))\n }\n const dataBuffer = buf.subarray(dataStart)\n return new this({\n le,\n form,\n type,\n length: i_data + buf_data.length,\n value: {\n data_type: type, \n tensor_type: tensorType, \n device_type: deviceType,\n tensor_flags: tensorFlags,\n dimensions, \n shape: shapes, \n strides, \n preserve_value: preserveValue,\n elem_count: Number(elemCount), \n data: dataBuffer\n }\n })\n }\n \n case DdbForm.extobj: {\n const dv = new DataView(buf_data.buffer, buf_data.byteOffset, buf_data.byteLength)\n \n const version_and_size = dv.getUint32(4, le)\n \n const length = version_and_size & 0x00ffffff\n \n return new this({\n le,\n form,\n type,\n \n // 低 24 位为 size\n length: i_data + 8 + length,\n \n value: {\n type: buf_data.subarray(0, 4),\n version: (version_and_size >>> 24) & 0xff,\n data: buf_data.subarray(8, 8 + length)\n }\n })\n }\n \n default:\n return new this({\n le,\n form,\n type,\n length: i_data + buf_data.length,\n value: buf_data\n })\n }\n }\n \n \n static parse_scalar (buf: Uint8Array, le: boolean, type: DdbType): [number, DdbScalarValue] {\n switch (type) {\n case DdbType.bool: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const value = dv.getInt8(0)\n return [1, value === nulls.int8 ? null : Boolean(value)]\n }\n \n \n case DdbType.void:\n case DdbType.char: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const value = dv.getInt8(0)\n return [1, value === nulls.int8 ? null : value]\n }\n \n \n case DdbType.short: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const value = dv.getInt16(0, le)\n return [2, value === nulls.int16 ? null : value]\n }\n \n \n case DdbType.int:\n // datetime\n case DdbType.date:\n case DdbType.month:\n case DdbType.time:\n case DdbType.minute:\n case DdbType.second:\n case DdbType.datetime: \n case DdbType.datehour: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const value = dv.getInt32(0, le)\n return [4, value === nulls.int32 ? null : value]\n }\n \n \n case DdbType.float: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const value = dv.getFloat32(0, le)\n return [4, value === nulls.float32 ? null : value]\n }\n \n \n case DdbType.double: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const value = dv.getFloat64(0, le)\n return [8, value === nulls.double ? null : value]\n }\n \n \n case DdbType.long:\n // timestamp\n case DdbType.timestamp:\n case DdbType.nanotime:\n case DdbType.nanotimestamp: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const value = dv.getBigInt64(0, le)\n return [8, value === nulls.int64 ? null : value]\n }\n \n \n case DdbType.string:\n case DdbType.symbol:\n case DdbType.code:\n case DdbType.handle:\n \n // sqlDS 函数会返回包含 datasource 的 any vector\n case DdbType.datasource:\n \n case DdbType.functiondef: \n \n // mysql 插件 connect 方法会返回 resource 类型的对象\n case DdbType.resource: {\n const i_head = type === DdbType.functiondef ? 1 : 0\n let i_zero = buf.indexOf(0, i_head)\n let i_end: number // 整个字符串(包括 0)的末尾,excluding\n if (i_zero === -1)\n i_end = i_zero = buf.length\n else\n i_end = i_zero + 1\n // 调整了 i_zero 到字符串(不包括 0)的末尾,excluding\n \n const str = this.dec.decode(\n buf.subarray(i_head, i_zero)\n )\n \n return [\n i_end,\n type === DdbType.functiondef ?\n {\n type: buf[0] as DdbFunctionType,\n name: str\n }\n :\n str\n ]\n }\n \n \n case DdbType.uuid:\n case DdbType.ipaddr:\n case DdbType.int128:\n return [16, buf.slice(0, 16)]\n \n \n case DdbType.blob: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const length = dv.getUint32(0, le)\n \n return [4 + length, buf.slice(4, 4 + length)]\n }\n \n \n case DdbType.complex:\n case DdbType.point: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n return [16, [dv.getFloat64(0, le), dv.getFloat64(8, le)]]\n }\n \n \n case DdbType.duration: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n return [8, { unit: dv.getUint32(4, le), data: dv.getInt32(0, le) } as DdbDurationValue]\n }\n \n \n case DdbType.decimal32: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n const data = dv.getInt32(4, le)\n return [8, { scale: dv.getInt32(0, le), data: data === nulls.int32 ? null : data } as DdbDecimal32Value]\n }\n \n case DdbType.decimal64: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n \n const data = dv.getBigInt64(4, le)\n \n return [12, { scale: dv.getInt32(0, le), data: data === nulls.int64 ? null : data } as DdbDecimal64Value]\n }\n \n case DdbType.decimal128: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n \n const data = get_big_int_128(dv, 4, le)\n \n return [20, { scale: dv.getInt32(0, le), data: data === nulls.int128 ? null : data }]\n }\n \n \n default:\n throw new Error(String(DdbType[type] || type) + t(' 暂时不支持解析'))\n }\n }\n \n \n /** parse: rows, cols, items \n 返回的 ddbobj.length 不包括 vector 的 type 和 form */\n static parse_vector (buf: Uint8Array, le: boolean, type: DdbType): DdbVectorObj {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n \n const rows = dv.getUint32(0, le)\n \n let i_items_start = 8\n \n if (type < 64 || type >= 128) { // 普通数组\n const [len_items, value] = this.parse_vector_items(\n buf.subarray(i_items_start),\n le,\n type,\n rows\n )\n \n return new this({\n le,\n form: DdbForm.vector,\n type,\n length: i_items_start + len_items,\n cols: 1,\n rows: type === DdbType.iotany ? (value as IotVectorItemValue).length : rows,\n value,\n ... type === DdbType.iotany ? { buffer: buf } : { }\n })\n } else { // array vector\n // av = array(INT[], 0, 3)\n // append!(av, [1..4])\n // append!(av, [1..70000])\n // av\n \n // <Buffer 44 01 type = array vector, form = vector\n // 02 00 00 00 74 11 01 00 rows = 2, cols = 70004 (0x011174)\n \n // block 0\n // 01 00 block.rows = 1\n // 04 block.unit = 4\n // 00 reserved\n // 04 00 00 00 block.lengths = [4]\n // 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 block.data\n \n // block 1\n // 01 00 block.rows = 1\n // 04 block.unit = 4\n // 00 reserved\n // 70 11 01 00 block.lengths = [70000 (0x00011170)]\n // 01 00 00 00 02 00 00 00 ... 279992 more bytes> block.data\n \n \n // decimal array vector\n \n // a = array(DECIMAL32(2)[], 0, 10)\n // append!(a, [\n // [1, 2, 3], \n // [4, 5], \n // [6, 7, 8],\n // [9, 10]\n // ])\n // print(a)\n // a\n \n // [[1.00,2.00,3.00],[4.00,5.00],[6.00,7.00,8.00],[9.00,10.00]]\n \n // <Buffer 65 01 type = 101 = 64 + 37 (decimal32) , form = vector\n // 04 00 00 00 0a 00 00 00 rows = 4, cols = 10\n \n // scale (只有 decimal32 才有)\n // 02 00 00 00 scale = 2\n \n // block 0\n // 04 00 block.rows = 4\n // 01 block.unit = 1\n // 00 reserved\n // 03 02 03 02 block.lengths = [3, 2, 3, 2]\n // 64 00 00 00 c8 00 00 00 2c 01 00 00 90 01 00 00 f4 01 00 00 58 02 00 00 bc 02 00 00 ... 12 more bytes> [100, 200, 300, ...]\n \n // block 1\n // ...\n \n const type_ = type - 64\n \n const cols = dv.getUint32(4, le)\n \n let blocks: DdbArrayVectorValue = [ ]\n \n // decimal 会在所有 blocks 之前多一个 scale\n if (is_decimal_type(type_)) {\n blocks.scale = dv.getInt32(i_items_start, le)\n i_items_start += 4\n }\n \n let i_block_start = i_items_start\n \n // 解析一个 block\n for (let i_row = 0; i_row < rows; ) {\n /** 对应 array vector 中元素个数 */\n const rows = dv.getUint16(i_block_start, le)\n \n /** 每个 length 占用的字节数 */\n const unit = dv.getUint8(i_block_start + 2)\n \n /** array vector 每个元素的子元素长度 */\n let lengths: Uint32Array | Uint16Array | Uint8Array\n \n const i_lengths_start = i_block_start + 4\n const i_data_start = i_lengths_start + rows * unit\n \n const lengths_buf = buf.slice(i_lengths_start, i_data_start)\n \n switch (unit) {\n case 1:\n lengths = lengths_buf\n break\n \n case 2:\n lengths = new Uint16Array(lengths_buf.buffer)\n break\n \n case 4:\n lengths = new Uint32Array(lengths_buf.buffer)\n break\n \n default:\n throw new Error(t('array vector 存在非法 unit: {{unit}}', { unit }))\n }\n \n let total_length = 0\n for (const x of lengths)\n total_length += x\n \n let len_items: number\n let data: DdbVectorValue\n \n switch (type_) {\n case DdbType.decimal32:\n len_items = total_length * 4\n data = new Int32Array(buf.buffer.slice(buf.byteOffset + i_data_start, buf.byteOffset + i_data_start + len_items))\n break\n case DdbType.decimal64:\n len_items = total_length * 8\n data = new BigInt64Array(buf.buffer.slice(buf.byteOffset + i_data_start, buf.byteOffset + i_data_start + len_items))\n break\n case DdbType.decimal128:\n len_items = total_length * 16\n data = new BigInt128Array(buf.buffer.slice(buf.byteOffset + i_data_start, buf.byteOffset + i_data_start + len_items))\n break\n default:\n [len_items, data] = this.parse_vector_items(buf.subarray(i_data_start), le, type - 64, total_length)\n }\n \n blocks.push({\n unit,\n rows,\n lengths,\n data: data as Int8Array | Int16Array | Int32Array | Float32Array | Float64Array | BigInt64Array | BigInt128Array\n })\n \n i_block_start = i_data_start + len_items\n \n i_row += rows\n }\n \n \n return new this({\n le,\n form: DdbForm.vector,\n type,\n length: i_block_start,\n cols,\n rows,\n value: blocks\n })\n }\n }\n \n \n /** 有可能没有字节对齐,不能直接使用原有 message 的 arraybuffer, 统一复制出来,让原有 arraybuffer 被回收掉比较好 */\n static parse_vector_items (\n buf: Uint8Array, \n le: boolean,\n type: DdbType, \n length: number\n ): [\n number, \n DdbVectorValue\n ] {\n switch (type) {\n case DdbType.void:\n return [0, null]\n \n case DdbType.bool:\n case DdbType.char:\n return [\n length,\n new Int8Array(\n buf.buffer.slice(\n buf.byteOffset,\n buf.byteOffset + length))\n ]\n \n case DdbType.short:\n return [\n 2 * length,\n new Int16Array(\n buf.buffer.slice(\n buf.byteOffset,\n buf.byteOffset + 2 * length\n )\n )\n ]\n \n \n case DdbType.int:\n // datetime\n case DdbType.date:\n case DdbType.month:\n case DdbType.time:\n case DdbType.minute:\n case DdbType.second:\n case DdbType.datetime:\n case DdbType.datehour:\n return [\n 4 * length,\n new Int32Array(\n buf.buffer.slice(\n buf.byteOffset,\n buf.byteOffset + 4 * length))\n ]\n \n \n case DdbType.float:\n return [\n 4 * length,\n new Float32Array(\n buf.buffer.slice(\n buf.byteOffset,\n buf.byteOffset + 4 * length\n )\n )\n ]\n \n \n case DdbType.double:\n return [\n 8 * length,\n new Float64Array(\n buf.buffer.slice(\n buf.byteOffset, \n buf.byteOffset + 8 * length\n )\n )\n ]\n \n \n case DdbType.long:\n // timestamp\n case DdbType.timestamp:\n case DdbType.nanotime:\n case DdbType.nanotimestamp:\n return [\n 8 * length,\n new BigInt64Array(\n buf.buffer.slice(\n buf.byteOffset,\n buf.byteOffset + 8 * length\n )\n )\n ]\n \n \n case DdbType.string:\n case DdbType.symbol:\n case DdbType.handle:\n case DdbType.datasource:\n case DdbType.code: {\n let value = new Array<string>(length)\n let i_head = 0, i_tail = i_head\n for (let i = 0; i < length; i++) {\n i_tail = buf.indexOf(0, i_head)\n value[i] = this.dec.decode(\n buf.subarray(i_head, i_tail)\n )\n i_head = i_tail + 1\n }\n return [i_head, value]\n }\n \n \n case DdbType.symbol_extended: {\n // <Buffer 91 01 type = symbol extended, form = vector\n // 05 00 00 00 01 00 00 00 row = 5, col = 1\n \n // buf:\n // 00 00 00 00 symbol base id = 0 (uint32)\n // 02 00 00 00 symbol base size = 2\n // 00 61 61 00 以 \\0 分割的字符串\n // 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00>\n \n const dv = new DataView(buf.buffer, buf.byteOffset)\n const base_id = dv.getUint32(0, le)\n const base_size = dv.getUint32(4, le)\n \n let base_length = 0\n let base = this.symbol_bases[base_id]\n \n // base_size 为 0 时复用之前的 symbol base\n if (base_size) {\n [base_length, base] = this.parse_vector_items(\n buf.subarray(8),\n le,\n DdbType.string,\n base_size\n ) as [number, string[]]\n \n this.symbol_bases[base_id] = base\n }\n \n const value_start = 8 + base_length\n const value_end = value_start + length * 4\n \n const data = new Uint32Array(\n buf.buffer.slice(\n buf.byteOffset + value_start,\n buf.byteOffset + value_end\n )\n )\n \n return [\n value_end,\n {\n base_id,\n base,\n data\n }\n ]\n }\n \n \n case DdbType.uuid:\n case DdbType.ipaddr:\n case DdbType.int128:\n return [\n 16 * length,\n new Uint8Array(\n buf.buffer.slice(\n buf.byteOffset,\n buf.byteOffset + 16 * length\n )\n )\n ]\n \n \n case DdbType.blob: {\n // <Buffer 20 01 type = blob, form = vector\n // 02 00 00 00 01 00 00 00 cols = 2, rows = 1\n // 04 00 00 00 61 62 63 64 \n // 04 00 00 00 61 62 63 64>\n \n let value = new Array<Uint8Array>(length)\n const dv = new DataView(buf.buffer, buf.byteOffset)\n let i_head = 0\n for (let i = 0; i < length; i++) {\n const sublen = dv.getUint32(i_head, le)\n const i_blob_head = i_head + 4\n const i_blob_tail = i_blob_head + sublen\n value[i] = buf.slice(i_blob_head, i_blob_tail)\n i_head = i_blob_tail\n }\n \n return [i_head, value]\n }\n \n \n case DdbType.complex:\n case DdbType.point: \n return [\n 16 * length,\n new Float64Array(\n buf.buffer.slice(\n buf.byteOffset,\n buf.byteOffset + 16 * length\n )\n )\n ]\n \n \n case DdbType.any: {\n // [1, 2, 'a', 'aaa']\n // any[4](<Buffer \n // 04 00 DdbType.int, DdbForm.scalar\n // 01 00 00 00 \n // 04 00 DdbType.int, DdbForm.scalar\n // 02 00 00 00 \n // 02 00 DdbType.char, DdbForm.scalar\n // 61 \n // 12 00 DdbType.string, DdbForm.scalar\n // 61 61 61 00>)\n \n \n let values = new Array<DdbObj>(length)\n let i_head = 0\n for (let i = 0; i < length; i++) {\n const obj = this.parse(\n buf.subarray(i_head),\n le\n )\n values[i] = obj\n i_head += obj.length\n }\n \n return [\n i_head,\n values\n ]\n }\n \n \n case DdbType.iotany: {\n const [len, anys] = this.parse_vector_items(buf, le, DdbType.any, length)\n const metas = anys[0].data()\n \n assert(metas.length >= 2, t('iotany 的 meta vector 长度至少为 2'))\n \n const size = metas[0]\n // let sub_vec_count = meta_vec[1]\n \n let sub_vecs = new Map<DdbType, DdbVectorValue>()\n \n for (let i = 1; i < length; i++) {\n const sub_vector = anys[i]\n const sub_type = sub_vector.type\n sub_vecs.set(\n sub_type,\n sub_vector.data()\n )\n }\n \n return [\n len,\n seq(\n size,\n i => {\n const type = metas[i + size + 2] as DdbType\n return type === DdbType.void ? null : sub_vecs.get(type)[metas[i + 2]]\n })\n ]\n }\n \n \n // 25 01 type = decimal32, form = vector\n // 02 00 00 00 01 00 00 00\n // 00 00 00 00 scale = 0\n // 01 00 00 00 data[0] = 1\n // 3a 01 00 00 data[1] = 0x013a = 314\n case DdbType.decimal32: {\n const dv = new DataView(buf.buffer, buf.byteOffset)\n \n return [\n 4 + 4 * length,\n {\n scale: dv.getInt32(0, le),\n data: new Int32Array(\n buf.buffer.slice(\n buf.byteOffset + 4,\n buf.byteOffset + 4 + 4 * length\n )\n )\n } as DdbDecimal32VectorValue\n ]\n }\n \n case DdbType.decimal64: {\n const dv = new DataView(\n buf.buffer,\n buf.byteOffset\n )\n \n return [\n 4 + 8 * length,\n {\n scale: dv.getInt32(0, le),\n data: new BigInt64Array(\n buf.buffer.slice(\n buf.byteOffset + 4,\n buf.byteOffset + 4 + 8 * length\n )\n )\n } as DdbDecimal64VectorValue\n ]\n }\n \n case DdbType.decimal128: {\n const dv = new DataView(\n buf.buffer,\n buf.byteOffset\n )\n \n return [\n 4 + 16 * length,\n {\n scale: dv.getInt32(0, le),\n data: new BigInt128Array(\n buf.buffer.slice(\n buf.byteOffset + 4,\n buf.byteOffset + 4 + 16 * length\n )\n )\n } as DdbDecimal128VectorValue\n ]\n }\n \n // 以下情况时, DdbType.duration 实际会返回一个 any vector\n // [2y, 1M, 3d, 7H, 11m, 12s, 15ms, 16us, 17ns]\n // <Buffer 19 01 type = any, form = vector\n // 09 00 00 00 01 00 00 00 rows = 9, cols = 1\n // 24 00 type = DdbType.duration, form = scalar\n // 02 00 00 00 09 00 00 00 \n // 24 00 01 00 00 00 08 00 00 00 24 00 03 00 00 00 06 00 00 00 24 00 07 00 00 00 05 00 00 00 ... 50 more bytes>\n // 其余情况 (目前仅 pair) 下, 会返回特殊的 duration 序列化\n // 4 bytes data 4 bytes unit\n // 01 00 00 00 data: 1 \n // 01 00 00 00 unit: 1\n // 02 00 00 00 data: 2\n // 02 00 00 00 unit: 2\n case DdbType.duration: { \n const dv = new DataView(buf.buffer, buf.byteOffset)\n \n let durations: DdbDurationVectorValue = [ ]\n \n for (let i = 0; i < length; i++)\n durations.push({\n data: dv.getInt32(0 + 8 * i, le),\n unit: dv.getInt32(4 + 8 * i, le)\n })\n \n return [8 * length, durations]\n }\n \n case DdbType.compressed:\n return [\n length,\n new Uint8Array(\n buf.buffer.slice(\n buf.byteOffset,\n buf.byteOffset + length\n )\n )\n ]\n \n default:\n throw new Error(t(\n '{{form}}<{{type}}> 暂时不支持解析', \n { form: 'vector', type: get_type_name(type) }\n ))\n }\n }\n \n \n pack (): Uint8Array {\n const { form, type, value } = this\n \n let header = new Uint8Array(2)\n header[0] = type\n header[1] = form\n \n const body = (() => {\n switch (form) {\n case DdbForm.scalar:\n switch (type) {\n case DdbType.void:\n return [Uint8Array.of(Number(value))]\n \n case DdbType.bool:\n return [\n Int8Array.of(\n value === null ?\n nulls.int8\n :\n Number(value)\n )\n ]\n \n \n case DdbType.char:\n return [\n Int8Array.of(\n (value === null ?\n nulls.int8\n :\n value as number\n )\n )\n ]\n \n \n case DdbType.short:\n return [\n Int16Array.of(\n value === null ?\n nulls.int16\n :\n value as number\n )\n ]\n \n \n case DdbType.int:\n // datetime\n case DdbType.date:\n case DdbType.month:\n case DdbType.time:\n case DdbType.minute:\n case DdbType.second:\n case DdbType.datetime:\n case DdbType.datehour:\n return [\n Int32Array.of(\n value === null ?\n nulls.int32\n :\n value as number\n )\n ]\n \n \n case DdbType.float:\n return [\n Float32Array.of(\n value === null ?\n nulls.float32\n :\n value as number\n )\n ]\n \n \n case DdbType.double:\n return [\n Float64Array.of(\n value === null ?\n nulls.double\n :\n value as number\n )\n ]\n \n \n case DdbType.long:\n // timestamp\n case DdbType.timestamp:\n case DdbType.nanotime:\n case DdbType.nanotimestamp:\n return [\n BigInt64Array.of(\n value === null ?\n nulls.int64\n :\n value as bigint\n )\n ]\n \n \n case DdbType.string:\n case DdbType.symbol:\n case DdbType.code:\n case DdbType.handle:\n case DdbType.datasource:\n case DdbType.resource:\n assert(!(value as string).includes('\\0'), t('pack 时字符串中间不能含有 \\\\0, 否则上传给 DolphinDB 会导致连接断开'))\n \n return [\n DdbObj.enc.encode(value as string),\n Uint8Array.of(0),\n ]\n \n case DdbType.functiondef:\n return [\n Uint8Array.of((value as DdbFunctionDefValue).type),\n DdbObj.enc.encode((value as DdbFunctionDefValue).name),\n Uint8Array.of(0)\n ]\n \n case DdbType.uuid:\n case DdbType.ipaddr:\n case DdbType.int128:\n return [this.value as Uint8Array]\n \n \n case DdbType.blob:\n return [Uint32Array.of((this.value as Uint8Array).byteLength), this.value as Uint8Array]\n \n \n case DdbType.complex:\n case DdbType.point:\n return [Float64Array.from(this.value as [number, number])]\n \n \n case DdbType.duration: {\n const { unit, data } = this.value as DdbDurationValue\n return [Int32Array.of(data, unit)]\n }\n \n case DdbType.decimal32: {\n const { scale, data } = this.value as DdbDecimal32Value\n return [Int32Array.of(scale, data === null ? nulls.int32 : data)]\n }\n \n case DdbType.decimal64: {\n const { scale, data } = this.value as DdbDecimal64Value\n return [Int32Array.of(scale), BigInt64Array.of(data === null ? nulls.int64 : data)]\n }\n \n case DdbType.decimal128: {\n const { scale, data } = value as DdbDecimal128Value\n return [Int32Array.of(scale), BigInt128Array.of(data === null ? nulls.int128 : data)]\n }\n \n default:\n throw new Error(String(DdbType[type] || type) + t(' 暂时不支持序列化'))\n }\n \n \n case DdbForm.vector:\n case DdbForm.pair:\n // pack array vector\n if (form === DdbForm.vector && 64 <= type && type < 128)\n return [\n Uint32Array.of(this.rows, this.cols),\n ... (is_decimal_type(type - 64)) ? \n [Int32Array.of((this.value as DdbArrayVectorValue).scale)]\n :\n [ ],\n ... (this.value as DdbArrayVectorValue).map(block => ([\n Uint16Array.of(block.rows),\n Uint8Array.of(block.unit, 0),\n block.lengths,\n block.data as any\n ])).flat()\n ]\n \n if (form === DdbForm.vector && type === DdbType.iotany) \n return [this.buffer]\n \n return [\n Uint32Array.of(this.rows, 1),\n ... DdbObj.pack_vector_body(value as DdbVectorValue, type, this.rows)\n ]\n \n \n case DdbForm.set:\n return [new DdbObj({ ...this, form: DdbForm.vector }).pack()]\n \n \n case DdbForm.table:\n return [\n Uint32Array.of(this.rows, this.cols),\n DdbObj.enc.encode(this.name || ''),\n \n // column names\n Uint8Array.of(0),\n ...DdbObj.pack_vector_body(\n (this.value as DdbObj[]).map((col, i) => \n col.name || `col${i}`),\n DdbType.string,\n this.cols\n ),\n \n // column vectors\n ...(this.value as DdbObj[]).map(col => \n col.pack())\n ]\n \n \n case DdbForm.dict:\n return [(value as DdbDictValue)[0].pack(), (value as DdbDictValue)[1].pack()]\n \n case DdbForm.chart: {\n const {\n type,\n stacking,\n bin_start, bin_end, bin_count,\n titles: { chart, x_axis, y_axis },\n extras,\n data\n } = this.value as DdbChartValue\n \n const {\n value: [keys, values]\n } = new DdbDict({\n chartType: new DdbInt(type),\n stacking,\n ... bin_start ? { binStart: bin_start, binEnd: bin_end } : { },\n ... bin_count ? { binCount: bin_count } : { },\n title: new DdbVectorString([chart, x_axis, y_axis]),\n ... extras ? (() => {\n const { multi_y_axes, ...extras_other } = extras\n return { extras: new DdbDict({ multiYAxes: multi_y_axes, ...extras_other }) }\n })() : { },\n data,\n })\n \n return [keys.pack(), values.pack()]\n }\n \n case DdbForm.matrix: {\n const { rows, cols, data } = value as DdbMatrixValue\n \n return [\n Uint8Array.of(\n (rows ? 0x01 : 0x00) | (cols ? 0x02 : 0x00),\n ),\n ... rows ? [rows.pack()] : [ ],\n ... cols ? [cols.pack()] : [ ],\n Uint8Array.of(this.type, this.form),\n Uint32Array.of(this.rows, this.cols),\n ... DdbObj.pack_vector_body(data, this.type, this.rows * this.cols)\n ]\n }\n \n case DdbForm.tensor: {\n const { le, value } = this\n const { tensor_type, device_type, tensor_flags, dimensions, shape, strides, preserve_value, elem_count, data } = value as DdbTensorValue\n \n // 计算总的字节长度\n const totalLength = 10 + dimensions * 8 * 2 + 8 + 8 + data.length // 12 字节元数据 + 维度信息 + 保留值和元素数量 + 数据部分\n \n const buffer = new ArrayBuffer(totalLength)\n const dv = new DataView(buffer)\n const uint8Array = new Uint8Array(buffer)\n \n // 写入元数据\n // uint8Array[0] = type;\n // uint8Array[1] = form;\n uint8Array[0] = tensor_type\n uint8Array[1] = device_type\n dv.setUint32(2, tensor_flags, le)\n dv.setInt32(6, dimensions, le)\n \n // 写入形状和步长\n const shapeStart = 10\n const stridesStart = shapeStart + dimensions * 8\n for (let d = 0; d < dimensions; d++) {\n dv.setBigInt64(shapeStart + d * 8, BigInt(shape[d]), le)\n dv.setBigInt64(stridesStart + d * 8, BigInt(strides[d]), le)\n }\n \n // 写入保留值和元素数量\n const preserveValueStart = stridesStart + dimensions * 8\n dv.setBigInt64(preserveValueStart, preserve_value, le)\n const storageStart = preserveValueStart + 8\n dv.setBigInt64(storageStart, BigInt(elem_count), le)\n \n // 写入数据\n const dataStart = storageStart + 8\n uint8Array.set(data, dataStart)\n \n return [uint8Array]\n }\n \n case DdbForm.extobj: {\n const { data, type: exttype, version } = value as DdbExtObjValue\n \n let version_and_size = new Uint8Array(4)\n version_and_size.dataview.setUint32(0, (version << 24) | data.length, this.le)\n \n return [exttype, version_and_size, data]\n }\n \n default:\n throw new Error(t('{{form}} 暂不支持序列化', { form: DdbForm[form] || `form ${form}` }))\n }\n })()\n \n \n if (!body)\n return new Uint8Array(0)\n \n return concat([header, ...body])\n }\n \n \n static pack_vector_body (\n value: DdbVectorValue,\n type: DdbType,\n length: number\n ): ArrayBufferView[] {\n switch (type) {\n case DdbType.void:\n return [ ]\n \n case DdbType.bool:\n case DdbType.char:\n return [value as Int8Array]\n \n \n case DdbType.short:\n return [value as Int16Array]\n \n \n case DdbType.int:\n // datetime\n case DdbType.date:\n case DdbType.month:\n case DdbType.time:\n case DdbType.minute:\n case DdbType.second:\n case DdbType.datetime:\n case DdbType.datehour:\n return [value as Int32Array]\n \n \n case DdbType.float:\n return [value as Float32Array]\n \n \n case DdbType.double:\n return [value as Float64Array]\n \n case DdbType.long:\n // timestamp\n case DdbType.timestamp:\n case DdbType.nanotime:\n case DdbType.nanotimestamp:\n return [value as BigInt64Array]\n \n \n case DdbType.string:\n case DdbType.symbol:\n case DdbType.handle:\n case DdbType.datasource:\n case DdbType.code: {\n let bufs = new Array<Uint8Array>(length * 2)\n for (let i = 0; i < length; i++) {\n const s = (value as string[])[i]\n assert(!s.includes('\\0'), t('pack 时字符串中间不能含有 \\\\0, 否则上传给 DolphinDB 会导致连接断开'))\n bufs[2 * i] = this.enc.encode(s)\n bufs[2 * i + 1] = Uint8Array.of(0)\n }\n return bufs\n }\n \n \n case DdbType.uuid:\n case DdbType.ipaddr:\n case DdbType.int128:\n case DdbType.compressed:\n return [value as Uint8Array]\n \n \n case DdbType.blob: {\n let bufs = new Array<ArrayBufferView>(length * 2)\n for (let i = 0; i < length; i++) {\n const blob_value = (value as Uint8Array[])[i]\n bufs[2 * i] = Uint32Array.of(blob_value.length)\n bufs[2 * i + 1] = blob_value\n }\n return bufs\n }\n \n \n case DdbType.complex:\n case DdbType.point: \n return [value as Float64Array]\n \n case DdbType.duration: {\n let bufs = new Int32Array(length * 2)\n for (let i = 0; i < length; i++) {\n const { data, unit } = (value as DdbDurationValue[])[i]\n bufs[2 * i] = data\n bufs[2 * i + 1] = unit\n }\n return [bufs]\n }\n \n case DdbType.any: {\n // [1, 2, 'a', 'aaa']\n // any[4](<Buffer \n // 04 00 DdbType.int, DdbForm.scalar\n // 01 00 00 00 \n // 04 00 DdbType.int, DdbForm.scalar\n // 02 00 00 00 \n // 02 00 DdbType.char, DdbForm.scalar\n // 61 \n // 12 00 DdbType.string, DdbForm.scalar\n // 61 61 61 00>)\n \n let bufs = new Array<Uint8Array>(length)\n for (let i = 0; i < length; i++)\n bufs[i] = (value as DdbObj[])[i].pack()\n return bufs\n }\n \n \n case DdbType.symbol_extended: {\n const { base_id, base, data } = value as DdbSymbolExtendedValue\n \n return [\n Uint32Array.of(\n base_id || 0,\n base.length,\n ),\n ...this.pack_vector_body(base, DdbType.string, base.length),\n data\n ]\n }\n \n case DdbType.decimal32:\n case DdbType.decimal64:\n case DdbType.decimal128: {\n const { scale, data } = value as DdbDecimal32VectorValue | DdbDecimal64VectorValue | DdbDecimal128VectorValue\n return [Int32Array.of(scale), data]\n }\n \n default:\n throw new Error(t('vector {{type}} 暂不支持序列化', { type: get_type_name(type) }))\n }\n }\n \n \n /** 将 DdbObj 转换为 js 原生数据类型 \n - 标量对应 number, bigint 或者字符串 (其中时间类型转换为常用的字符串表示)\n - 数组对应 js 原生数组\n - 表格对应 TResult, 可以传入 table: 'full' 配置返回包含列名,列类型的 DdbTableData 结构\n - 矩阵对应 DdbMatrixData\n - 字典对应普通的 js 对象 Record<string, any>\n - 图对应 DdbChartValue */\n data <TResult extends any[]> (this: DdbVectorObj, options?: ConvertOptions): TResult\n data <TResult = any> (this: DdbObj, options?: ConvertOptions): TResult\n data <TResult = any> (this: DdbObj, options?: ConvertOptions): TResult {\n const { form, type, value, le, rows, name } = this\n \n switch (form) {\n case DdbForm.scalar:\n return convert(type, value, le, options) as TResult\n \n case DdbForm.vector:\n case DdbForm.pair:\n case DdbForm.set: {\n const data = converts(type, value as DdbVectorValue, rows, le, options)\n return (form === DdbForm.set ? new Set(data) : data) as TResult\n }\n \n case DdbForm.table: {\n const cols = value as DdbVectorObj[]\n const jscols = cols.map(col => col.data(options))\n const columns = cols.select('name')\n \n const data = seq(rows, i =>\n zip_object(\n columns,\n seq(cols.length, j => jscols[j][i])\n ))\n \n return options?.table === 'full' ?\n {\n name: name || '',\n columns,\n types: cols.select('type'),\n data\n } satisfies DdbTableData as TResult\n :\n data as TResult\n }\n \n case DdbForm.dict: {\n const [keys, values] = value as DdbDictValue\n \n return zip_object(keys.data(options), values.data(options)) as TResult\n }\n \n case DdbForm.chart:\n return value as DdbChartValue as TResult\n \n case DdbForm.matrix: {\n const ncolumns = this.cols\n const { rows: _rows, cols: _cols, data } = value as DdbMatrixValue\n \n const jsdata = converts(type, data, rows * ncolumns, le, options)\n \n return {\n type,\n \n nrows: rows,\n \n ncolumns,\n \n rows: _rows?.data(options),\n \n columns: _cols?.data(options),\n \n data: seq(rows, i => \n seq(ncolumns, j => \n jsdata[j * rows + i]))\n } satisfies DdbMatrixData as TResult\n }\n \n case DdbForm.tensor: {\n const { \n data_type, \n tensor_type, \n device_type,\n tensor_flags,\n dimensions, \n shape, \n strides, \n preserve_value,\n elem_count,\n data, \n } = this.value as DdbTensorValue\n \n const dataByte: number = ddb_tensor_bytes[data_type]\n \n return { \n data_type, \n tensor_type, \n device_type,\n tensor_flags,\n dimensions, \n shape, \n strides, \n preserve_value,\n elem_count,\n data: DdbObj.parse_tensor({ currentDim: 0, dimensions, rawData: data, le: this.le, dataByte, dataType: data_type, shape, strides })\n } satisfies DdbTensorData as TResult\n }\n \n case DdbForm.extobj:\n // return (this.value as DdbExtObjValue).data as TResult\n return `ExtObj<${get_type_name(type)}>` as TResult\n \n default:\n throw new Error(t('{{form}} {{type}} 暂不支持 data()', { form: DdbForm[form] || form, type: get_type_name(type) }))\n }\n }\n \n /** 构建 Tensor\n @param buildParams 构建参数\n @param limit 限制每个维度最大元素个数(仅用于 log,不作他用)\n @returns */\n static parse_tensor (\n buildParams: {\n currentDim: number\n dimensions: number\n rawData: Uint8Array\n le: boolean\n dataByte: number\n dataType: DdbType\n shape: number[]\n strides: number[]\n },\n limit = -1\n ): TensorData {\n const { currentDim, dimensions, rawData, le, dataByte, dataType, shape, strides } = buildParams\n const tensor: TensorData = [ ]\n const dv = new DataView(rawData.buffer, rawData.byteOffset)\n for (let i = 0; i < shape[currentDim]; i++)\n if (currentDim >= dimensions - 1) {\n \n if (limit > 0 && i >= limit) {\n tensor.push('...')\n break\n }\n \n // 直接转换到对应的数组\n const offset = i * dataByte * Number(strides[currentDim])\n switch (dataType) {\n case DdbType.bool: {\n const value = dv.getInt8(offset)\n tensor.push(value === nulls.int8 ? null : Boolean(value))\n break\n }\n case DdbType.char: {\n const value = dv.getInt8(offset)\n tensor.push(convert(dataType, value, le) as string)\n break\n }\n case DdbType.short: {\n const value = dv.getInt16(offset, le)\n tensor.push(value === nulls.int16 ? null : value)\n break\n }\n case DdbType.int: {\n const value = dv.getInt32(offset, le)\n tensor.push(value === nulls.int32 ? null : value)\n break\n }\n case DdbType.long: {\n const value = dv.getBigInt64(offset, le)\n tensor.push(value === nulls.int64 ? null : value)\n break\n }\n case DdbType.float: {\n const value = dv.getFloat32(offset, le)\n tensor.push(value === nulls.float32 ? null : value)\n break\n }\n case DdbType.double: {\n const value = dv.getFloat64(offset, le)\n tensor.push(value === nulls.double ? null : value)\n break\n }\n }\n } else {\n // 起点\n const start = strides[currentDim] * i * dataByte\n // 终点\n const end = start + strides[currentDim] * 1 * dataByte\n tensor.push(DdbObj.parse_tensor({\n currentDim: currentDim + 1,\n dimensions,\n rawData: rawData.subarray(Number(start), Number(end)),\n le,\n dataByte,\n shape,\n strides,\n dataType\n }, limit))\n }\n \n return tensor\n }\n \n \n [inspect.custom] (depth: number, _options: InspectOptions, _inspect) {\n let options = { nullstr: true, ..._options }\n \n const type = this.inspect_type()\n \n const data = (() => {\n switch (this.form) {\n case DdbForm.scalar:\n return format(this.type, this.value, this.le, options)\n \n case DdbForm.vector:\n case DdbForm.pair:\n case DdbForm.set: {\n const form = this.form\n \n function format_array (items: string[], ellipsis: boolean) {\n const str_items = items.join(', ') + (ellipsis ? ', ...' : '')\n \n return form === DdbForm.pair ?\n str_items\n :\n str_items.bracket('square')\n }\n \n \n if (64 <= this.type && this.type < 128) { // array vector\n // 因为 array vector 目前只支持:Logical, Integral(不包括 INT128, COMPRESS 类型), Floating, Temporal\n // 都对应 TypedArray 中的一格,所以直接根据 index 去取即可\n // av = array(INT[], 0, 5)\n // append!(av, [1..1])\n // append!(av, [1..70000])\n // append!(av, [1..1])\n // append!(av, [1..500])\n // ...\n // av\n const type_ = this.type - 64\n \n options = { ...options, grouping: false }\n \n const limit = 10\n \n const nullstr = inspect(null, options)\n \n let array_items = new Array(\n Math.min(limit, this.rows)\n )\n \n let i_items = 0\n \n for (const { lengths, data } of this.value as DdbArrayVectorValue) {\n let acc_len = 0\n \n for (const length of lengths) {\n let items = new Array(\n Math.min(limit, length)\n )\n \n for (let i = 0; i < items.length; i++)\n switch (type_) {\n case DdbType.decimal32:\n case DdbType.decimal64:\n case DdbType.decimal128:\n const x = data[acc_len + i]\n \n if (is_decimal_null_value(type_, x))\n items[i] = nullstr\n else {\n const { scale } = this.value as DdbArrayVectorValue\n \n const s = String(x < 0 ? -x : x).padStart(scale, '0')\n \n const str = (x < 0 ? '-' : '') + (scale ? `${s.slice(0, -scale) || '0'}.${s.slice(-scale)}` : s)\n \n items[i] = options.colors ? str.green : str\n }\n \n break\n \n case DdbType.complex:\n case DdbType.point: {\n const index = acc_len + i\n items[i] = format(\n type_,\n data.subarray(2 * index, 2 * (index + 1)),\n this.le,\n options\n )\n break\n }\n \n case DdbType.uuid:\n case DdbType.int128:\n case DdbType.ipaddr: {\n const index = acc_len + i\n items[i] = format(\n type_,\n data.subarray(16 * index, 16 * (index + 1)),\n this.le,\n options\n )\n break\n }\n \n default:\n items[i] = format(type_, data[acc_len + i], this.le, options)\n break\n }\n \n array_items[i_items++] = format_array(items, length > limit)\n \n acc_len += length\n }\n \n if (i_items >= limit)\n break\n }\n \n return format_array(\n array_items,\n this.rows > limit\n )\n }\n \n switch (this.type) {\n case DdbType.symbol_extended: {\n const limit = 50 as const\n \n const { base, data } = this.value as DdbSymbolExtendedValue\n \n let items = new Array(\n Math.min(limit, data.length)\n )\n \n for (let i = 0; i < items.length; i++)\n items[i] = inspect(base[data[i]], options)\n \n return format_array(\n items,\n data.length > limit\n )\n }\n \n case DdbType.void:\n return format(this.type, this.value, this.le, options)\n \n case DdbType.uuid: \n case DdbType.int128: \n case DdbType.ipaddr: {\n const limit = 10 as const\n \n const value = this.value as Uint8Array\n \n const len_data = value.length / 16\n \n let items = new Array(\n Math.min(limit, len_data)\n )\n \n for (let i = 0; i < items.length; i++)\n items[i] = format(\n this.type,\n value.subarray(16 * i, 16 * (i + 1)),\n this.le,\n options\n )\n \n return format_array(\n items,\n len_data > limit\n )\n }\n \n case DdbType.complex:\n case DdbType.point: {\n const limit = 20 as const\n \n const value = this.value as Float64Array\n \n const len_data = value.length / 2\n \n let items = new Array(\n Math.min(limit, len_data)\n )\n \n for (let i = 0; i < items.length; i++)\n items[i] = format(\n this.type,\n value.subarray(2 * i, 2 * (i + 1)),\n this.le,\n options\n )\n \n return format_array(\n items,\n len_data > limit\n )\n }\n \n case DdbType.decimal32: \n case DdbType.decimal64:\n case DdbType.decimal128: {\n const limit = 50 as const\n \n const { data } = this.value as DdbDecimal32VectorValue | DdbDecimal64VectorValue | DdbDecimal128VectorValue\n \n let items = new Array(Math.min(limit, data.length))\n \n for (let i = 0; i < items.length; i++)\n items[i] = formati(this as DdbObj<DdbDecimalVectorValue>, i, options)\n \n return format_array(items, data.length > limit)\n }\n \n default: {\n const limit = this.type === DdbType.compressed ? 5 : 50 as const\n \n let items = new Array(\n Math.min(limit, (this.value as any[]).length)\n )\n \n for (let i = 0; i < items.length; i++)\n items[i] = format(this.type, this.value[i], this.le, options)\n \n return format_array(\n items,\n (this.value as any[]).length > limit\n )\n }\n }\n \n }\n \n case DdbForm.tensor: {\n const tensorVal: DdbTensorValue = this.value as unknown as DdbTensorValue\n const retd = DdbObj.parse_tensor({ \n currentDim: 0, \n dimensions: tensorVal.dimensions, \n rawData: tensorVal.data, \n le: this.le, \n dataByte: ddb_tensor_bytes[tensorVal.data_type], \n dataType: tensorVal.data_type, \n shape: tensorVal.shape, \n strides: tensorVal.strides }, 5)\n return inspect(retd, options).replaceAll(\"\\'...\\'\", '...')\n }\n }\n \n if (this.value instanceof Uint8Array)\n return inspect(\n typed_array_to_buffer(this.value),\n options\n )\n \n return inspect(this.value, options)\n })()\n \n // 如果类型为 string 则不需要加上类型名\n if (this.form === DdbForm.scalar && this.type === DdbType.string)\n return data\n else\n return `${options.colors ? type.blue : type}(${ this.name ? `${inspect(this.name, options)}, ` : '' }${data})`\n }\n \n \n inspect_type () {\n const tname = DdbType[this.type]\n \n switch (this.form) {\n case DdbForm.scalar:\n if (this.type === DdbType.functiondef)\n return `functiondef<${DdbFunctionType[(this.value as DdbFunctionDefValue).type]}>`\n \n return tname\n \n case DdbForm.vector:\n if (64 <= this.type && this.type < 128)\n return `${DdbType[this.type - 64]}[][${this.rows}]`\n return `${tname}[${this.rows}]`\n \n case DdbForm.pair:\n return `pair<${tname}>`\n \n case DdbForm.set:\n return `set<${tname}>[${this.rows}]`\n \n case DdbForm.table:\n return `table[${this.rows}r][${this.cols}c]`\n \n case DdbForm.dict:\n return `dict<${DdbType[(this.value[0] as DdbObj).type]}, ${DdbType[(this.value[1] as DdbObj).type]}>[${this.rows}]`\n \n case DdbForm.chart:\n return `chart<${DdbChartType[(this.value as DdbChartValue).type]}>`\n \n case DdbForm.matrix:\n return `matrix<${tname}>[${this.rows}r][${this.cols}c]`\n \n case DdbForm.tensor:\n return `tensor<${generate_array_type(DdbType[(this.value as DdbTensorValue).data_type], (this.value as DdbTensorValue).shape)}>`\n \n default:\n return `${DdbForm[this.form]} ${tname}`\n }\n }\n \n \n /** 自动转换 Convertable 为 DdbObj */\n static to_ddbobj (value: Convertable): DdbObj {\n if (value && value instanceof DdbObj)\n return value\n \n if (value === undefined)\n return new DdbVoid()\n \n if (value === null)\n return new DdbVoid(DdbVoidType.null)\n \n const type = typeof value\n \n switch (type) {\n case 'string':\n return new DdbString(value as string)\n \n case 'boolean':\n return new DdbBool(value as boolean)\n \n default: \n throw new Error(t('不能自动转换 {{type}} 至 DdbObj', { type }))\n }\n }\n \n \n /** 转换 js 数组为 DdbObj[] */\n static to_ddbobjs (values: Convertable[]) {\n return values.map(value => this.to_ddbobj(value))\n }\n \n \n /** 将 table 转换为 rows,空值转换为 null \n @deprecated 用 data() */\n to_rows <T extends Record<string, any> = Record<string, any>> () {\n assert(this.form === DdbForm.table, t('form 必须是 DdbForm.table, 否则不能 to_rows'))\n \n let rows = new Array<T>(this.rows)\n \n for (let i = 0; i < this.rows; i++) {\n let row: any = { }\n for (let j = 0; j < this.cols; j++) {\n const { type, name, value: values } = (this as DdbTableObj).value[j] // column\n \n switch (type) {\n case DdbType.bool: {\n const value = values[i]\n row[name] = value === nulls.int8 ?\n null\n :\n Boolean(value)\n break\n }\n \n case DdbType.char:\n row[name] = values[i] === nulls.int8 ? null : values[i]\n break\n \n case DdbType.short:\n row[name] = values[i] === nulls.int16 ? null : values[i]\n break \n \n case DdbType.int:\n case DdbType.date:\n case DdbType.month:\n case DdbType.time:\n case DdbType.minute:\n case DdbType.second:\n case DdbType.datetime:\n case DdbType.datehour:\n row[name] = values[i] === nulls.int32 ? null : values[i]\n break\n \n case DdbType.long:\n case DdbType.timestamp:\n case DdbType.nanotime:\n case DdbType.nanotimestamp:\n row[name] = values[i] === nulls.int64 ? null : values[i]\n break\n \n case DdbType.int128:\n row[name] = values[i] === nulls.int128 ? null : values[i]\n break\n \n case DdbType.float:\n row[name] = values[i] === nulls.float32 ? null : values[i]\n break\n \n case DdbType.double:\n row[name] = values[i] === nulls.double ? null : values[i]\n break\n \n case DdbType.decimal32: \n case DdbType.decimal64:\n case DdbType.decimal128: \n row[name] = is_decimal_null_value(type, values[i]) ? null : values[i]\n break\n \n case DdbType.ipaddr:\n row[name] = (values as Uint8Array).subarray(16 * i, 16 * (i + 1))\n break\n \n case DdbType.symbol_extended: {\n const { base, data } = values as DdbSymbolExtendedValue\n row[name] = base[data[i]]\n break\n }\n \n default:\n row[name] = values[i]\n }\n }\n rows[i] = row\n }\n \n return rows\n }\n \n \n /** 将 dict<string, any> 自动转换为 js object (Record<string, any>) Automatically convert dict<string, any> to js object (Record<string, any>) \n @deprecated 用 data()\n - options?:\n - strip?: `false` 是否将 dict<string, any> 中的 value 直接提取、剥离出来作为 js object 的 value (丢弃 DdbObj 中的其余信息,只保留 value) \n - deep?: `false` 是否递归转换 \n Whether to convert recursively */\n to_dict <T extends Record<string, DdbObj> = Record<string, DdbObj>> (): T\n to_dict <T extends Record<string, any> = Record<string, any>> (options: { strip: true }): T\n to_dict <T extends Record<string, any> = Record<string, any>> (options?: { strip?: boolean, deep?: boolean }): T\n to_dict <T = Record<string, any>> ({\n strip,\n deep,\n }: {\n strip?: boolean\n deep?: boolean\n } = { }) {\n assert(this.form === DdbForm.dict, t('this.form 必须是 DdbForm.dict, 否则不能调用 to_dict 转换为 js object'))\n \n const [{ value: keys, type: key_type }, { value: values, type: value_type }] = this.value as DdbDictValue\n \n assert(key_type === DdbType.string && dictables.has(value_type), t('当前只支持自动转换 dict<string, any | ...dictables> 为 js object'))\n assert(!(deep && !strip), t('deep = true 时必须设置 strip = true'))\n \n let obj = { }\n \n for (let i = 0; i < this.rows; i++) {\n const key = keys[i]\n \n if (value_type === DdbType.any) {\n let value: DdbObj = values[i]\n if (deep && value.form === DdbForm.dict)\n obj[key] = value.to_dict({ strip, deep })\n else\n obj[key] = strip ? value.value : value\n } else\n obj[key] = values[i]\n }\n \n return obj as T\n }\n}\n\n\nexport interface InspectOptions extends UtilInspectOptions {\n /** `util.inspect.defaultOptions.colors` */\n colors?: boolean\n \n /** `null` decimal places 小数位数 */\n decimals?: number\n \n /** `true` 决定格式化后的数据是否有千分位 */\n grouping?: boolean\n \n /** timestamp 类型转换为字符串表示时显示到秒还是毫秒 */\n timestamp?: 's' | 'ms'\n}\n\n\n/** 整数一定用这个 number formatter, InspectOptions.decimals 不传也用这个 */\nlet default_formatter = new Intl.NumberFormat('en-US', { maximumFractionDigits: 20 })\n\n\nlet _decimals = 20\n\nlet _grouping = true\n\n/** 缓存,为了优化性能,通常 options.decimals 都是不变的 */\nlet _formatter = new Intl.NumberFormat('en-US', { maximumFractionDigits: 20 })\n\n\n/** 根据 DdbType 格式化单个元素 (value) 为字符串,空值返回 'null' 字符串 */\nexport function format (type: DdbType, value: DdbValue, le: boolean, options: InspectOptions = { }): string {\n const { grouping = true, timestamp = 'ms' } = options\n const formatter = (() => {\n const decimals = options.decimals ?? _decimals\n \n if (decimals !== _decimals || grouping !== _grouping) {\n _decimals = decimals\n _grouping = grouping\n default_formatter = new Intl.NumberFormat('en-US', { maximumFractionDigits: 20, useGrouping: grouping })\n _formatter = new Intl.NumberFormat('en-US', {\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals,\n useGrouping: grouping\n })\n }\n \n return options.decimals === undefined || options.decimals === null ? default_formatter : _formatter\n })()\n \n \n function format_time (\n formatter: (value: number | bigint, format?: string) => string,\n _null: number | bigint\n ) {\n if (value === null || value === _null)\n return inspect(null, options)\n \n let str: string\n \n // formatter 可能会在 value 不属于 new Date() 有效值时,调用 抛出错误,这里统一处理\n try {\n str = formatter(value as number | bigint, (type === DdbType.timestamp && timestamp === 's') ? 'YYYY.MM.DD HH:mm:ss' : undefined)\n } catch (error) {\n if (error instanceof RangeError)\n str = 'Invalid Date'\n else\n throw error\n }\n \n return options.colors ? str.magenta : str\n }\n \n \n switch (type) {\n case DdbType.void: {\n const str = value === DdbVoidType.default ? 'default' : 'null'\n \n return options.colors ? str.grey : str\n }\n \n case DdbType.bool:\n return inspect(\n (value === null || value === nulls.int8) ?\n null\n :\n Boolean(value),\n options\n )\n \n case DdbType.char:\n return inspect(\n (value === null || value === nulls.int8) ?\n null\n :\n // ascii printable\n // http://facweb.cs.depaul.edu/sjost/it212/documents/ascii-pr.htm\n (32 <= (value as number) && (value as number) <= 126) ?\n String.fromCharCode(value as number)\n :\n value,\n options\n )\n \n case DdbType.short:\n return value === null || value === nulls.int16 ?\n inspect(null, options)\n :\n options.colors ?\n default_formatter.format(value as number).green\n :\n default_formatter.format(value as number)\n \n case DdbType.int:\n return value === null || value === nulls.int32 ?\n inspect(null, options)\n :\n options.colors ?\n default_formatter.format(value as number).green\n :\n default_formatter.format(value as number)\n \n case DdbType.long:\n return value === null || value === nulls.int64 ?\n inspect(null, options)\n :\n options.colors ?\n default_formatter.format(value as bigint).green\n :\n default_formatter.format(value as bigint)\n \n case DdbType.date:\n return format_time(date2str, nulls.int32)\n \n case DdbType.month:\n return format_time(month2str, nulls.int32)\n \n case DdbType.time:\n return format_time(time2str, nulls.int32)\n \n case DdbType.minute:\n return format_time(minute2str, nulls.int32)\n \n case DdbType.second:\n return format_time(second2str, nulls.int32)\n \n case DdbType.datetime:\n return format_time(datetime2str, nulls.int32)\n \n case DdbType.timestamp:\n return format_time(timestamp2str, nulls.int64)\n \n case DdbType.nanotime:\n return format_time(nanotime2str, nulls.int64)\n \n case DdbType.nanotimestamp:\n return format_time(nanotimestamp2str, nulls.int64)\n \n case DdbType.float:\n return value === null || value === nulls.float32 ?\n inspect(null, options)\n :\n options.colors ?\n formatter.format(value as number).green\n :\n formatter.format(value as number)\n \n case DdbType.double:\n return value === null || value === nulls.double ?\n inspect(null, options)\n :\n options.colors ?\n formatter.format(value as number).green\n :\n formatter.format(value as number)\n \n case DdbType.symbol:\n case DdbType.string:\n case DdbType.handle:\n case DdbType.datasource:\n case DdbType.code:\n case DdbType.resource:\n return inspect(value as string, options)\n \n case DdbType.uuid: \n return options.colors ?\n uuid2str(value as Uint8Array, le).cyan\n :\n uuid2str(value as Uint8Array, le)\n \n case DdbType.functiondef:\n return inspect(\n (value as DdbFunctionDefValue).name,\n options\n )\n \n case DdbType.datehour:\n return format_time(datehour2str, nulls.int32)\n \n case DdbType.ipaddr:\n return options.colors ?\n ipaddr2str(value as Uint8Array, le).cyan\n :\n ipaddr2str(value as Uint8Array, le)\n \n case DdbType.int128:\n return options.colors ?\n int1282str(value as Uint8Array, le).green\n :\n int1282str(value as Uint8Array, le)\n \n case DdbType.blob:\n return inspect(\n (value as Uint8Array).length > 100 ?\n DdbObj.dec.decode(\n (value as Uint8Array).subarray(0, 98)\n ) + '…'\n :\n DdbObj.dec.decode(value as Uint8Array),\n options\n )\n \n case DdbType.point: {\n const [x, y] = value as [number, number]\n return `(${format(DdbType.double, x, le, options)}, ${format(DdbType.double, y, le, options)})`\n }\n \n case DdbType.complex: {\n const [x, y] = value as [number, number]\n return `${format(DdbType.double, x, le, options)}${y >= 0 ? '+' : ''}${format(DdbType.double, y, le, options)}i`\n }\n \n case DdbType.duration: {\n const { data, unit } = value as DdbDurationValue\n const str = `${data}${DdbDurationUnit[unit] ?? get_duration_unit(unit)}`\n return options.colors ? str.magenta : str\n }\n \n case DdbType.decimal32: \n case DdbType.decimal64:\n case DdbType.decimal128: {\n const { scale, data } = value as DdbDecimal32Value | DdbDecimal64Value | DdbDecimal128Value\n \n if (\n data === null ||\n is_decimal_null_value(type, data)\n )\n return 'null'\n \n const s = String(data < 0 ? -data : data).padStart(scale, '0')\n \n const str = (data < 0 ? '-' : '') + (scale ? `${s.slice(0, -scale) || '0'}.${s.slice(-scale)}` : s)\n \n return options.colors ? str.green : str\n }\n \n default:\n return inspect(value, options)\n }\n}\n\n\n/** 格式化向量、集合中的第 index 项为字符串,空值返回 'null' 字符串 formatted vector, the index-th item in the collection is a string, a null value returns a 'null' string */\nexport function formati (obj: DdbVectorObj, index: number, options: InspectOptions = { }): string {\n assert(index < obj.rows, 'index < obj.rows')\n \n if (obj.type < 64 || obj.type >= 128) // 普通数组\n switch (obj.type) {\n case DdbType.symbol_extended: {\n const { base, data } = obj.value as DdbSymbolExtendedValue\n return format(DdbType.string, base[data[index]], obj.le, options)\n }\n \n case DdbType.void:\n return format(obj.type, obj.value, obj.le, options)\n \n case DdbType.uuid:\n case DdbType.int128:\n case DdbType.ipaddr:\n return format(\n obj.type,\n (obj.value as Uint8Array).subarray(16 * index, 16 * (index + 1)),\n obj.le,\n options\n )\n \n case DdbType.blob: {\n const value = obj.value[index] as Uint8Array\n return value.length > 100 ?\n DdbObj.dec.decode(value.subarray(0, 98)) + '…'\n :\n DdbObj.dec.decode(value)\n }\n \n case DdbType.complex:\n case DdbType.point:\n return format(\n obj.type,\n (obj.value as Float64Array).subarray(2 * index, 2 * (index + 1)),\n obj.le,\n options\n )\n \n case DdbType.decimal32:\n case DdbType.decimal64:\n case DdbType.decimal128: {\n const { scale, data } = obj.value as DdbDecimal128VectorValue\n \n const x = data[index]\n \n if (is_decimal_null_value(obj.type, x))\n return ''\n \n const s = String(x < 0 ? -x : x).padStart(scale, '0')\n \n const str = (x < 0 ? '-' : '') + (scale ? `${s.slice(0, -scale) || '0'}.${s.slice(-scale)}` : s)\n \n return options.colors ? str.green : str\n }\n \n default:\n return format(obj.type, obj.value[index], obj.le, options)\n }\n else { // array vector\n // 因为 array vector 目前只支持:Logical, Integral(不包括 INT128, COMPRESS 类型), Floating, Temporal\n // 都对应 TypedArray 中的一格,所以 lengths.length 等于 block 中的 row 的个数\n // av = array(INT[], 0, 5)\n // append!(av, [1..1])\n // append!(av, [1..70000])\n // append!(av, [1..1])\n // append!(av, [1..500])\n // ...\n // av\n \n const type_ = obj.type - 64\n \n let offset = 0\n \n const nullstr = inspect(null, options)\n \n for (const { lengths, data, rows } of obj.value as DdbArrayVectorValue) {\n let acc_len = 0\n \n if (offset + rows <= index) {\n offset += rows\n continue // 跳过这个 block\n }\n \n for (const length of lengths) {\n if (offset < index) {\n offset++\n acc_len += length\n continue\n }\n \n const limit = 10\n \n let items = new Array(Math.min(limit, length))\n \n for (let i = 0; i < items.length; i++)\n switch (type_) {\n case DdbType.decimal32:\n case DdbType.decimal64:\n case DdbType.decimal128:\n const x = data[acc_len + i]\n \n if (is_decimal_null_value(type_, x))\n items[i] = nullstr\n else {\n const { scale } = obj.value as DdbArrayVectorValue\n \n const s = String(x < 0 ? -x : x).padStart(scale, '0')\n \n const str = (x < 0 ? '-' : '') + (scale ? `${s.slice(0, -scale) || '0'}.${s.slice(-scale)}` : s)\n \n items[i] = options.colors ? str.green : str\n }\n \n break\n \n case DdbType.complex:\n case DdbType.point: {\n const index = acc_len + i\n items[i] = format(\n type_,\n data.subarray(2 * index, 2 * (index + 1)),\n obj.le,\n options\n )\n break\n }\n \n case DdbType.uuid:\n case DdbType.int128:\n case DdbType.ipaddr: {\n const index = acc_len + i\n items[i] = format(\n type_,\n data.subarray(16 * index, 16 * (index + 1)),\n obj.le,\n options\n )\n break\n }\n \n default:\n items[i] = format(type_, data[acc_len + i], obj.le, options)\n break\n }\n \n return (\n items.join(', ') + (length > limit ? ', ...' : '')\n ).bracket('square')\n }\n }\n }\n}\n\n\nexport function convert (type: DdbType, value: DdbValue, le: boolean, { blob = 'string', char = 'string', timestamp = 'ms' }: ConvertOptions = { }) {\n switch (type) {\n case DdbType.void:\n return value === DdbVoidType.null ? null : undefined\n \n case DdbType.char:\n return char === 'string'\n ? value === null || value === nulls.int8 \n ? ''\n : // ascii printable\n // http://facweb.cs.depaul.edu/sjost/it212/documents/ascii-pr.htm\n (32 <= (value as number) && (value as number) <= 126)\n ? String.fromCharCode(value as number)\n : `\\\\${value}`\n : value\n \n case DdbType.bool:\n return value === null || value === nulls.int8 ? null : Boolean(value)\n \n case DdbType.short:\n return value === null || value === nulls.int16 ? null : value\n \n case DdbType.int:\n return value === null || value === nulls.int32 ? null : value\n \n case DdbType.float:\n return value === null || value === nulls.float32 ? null : value\n \n case DdbType.double:\n return value === null || value === nulls.double ? null : value\n \n case DdbType.long:\n return value === null || value === nulls.int64 ? null : value\n \n case DdbType.functiondef:\n return (value as DdbFunctionDefValue).name\n \n case DdbType.string:\n case DdbType.symbol:\n case DdbType.code:\n case DdbType.handle:\n case DdbType.datasource:\n case DdbType.resource:\n case DdbType.compressed:\n return value\n \n case DdbType.blob:\n return blob === 'string' ? decode(value as Uint8Array) : value\n \n case DdbType.complex:\n case DdbType.point: {\n const [x, y] = value as [number, number]\n return [\n x === null || x === nulls.double ? null : x,\n y === null || y === nulls.double ? null : y,\n ]\n }\n \n \n case DdbType.date:\n case DdbType.month:\n case DdbType.time:\n case DdbType.minute:\n case DdbType.second:\n case DdbType.datetime:\n case DdbType.datehour:\n case DdbType.timestamp:\n case DdbType.nanotime:\n case DdbType.nanotimestamp:\n case DdbType.duration:\n \n case DdbType.uuid:\n case DdbType.ipaddr:\n case DdbType.int128:\n \n // decimal 类型转换为固定位数小数的 string 不丢失精度,一般也是展示用\n case DdbType.decimal32:\n case DdbType.decimal64:\n case DdbType.decimal128:\n return format(type, value, le, { colors: false, timestamp })\n \n default:\n throw new Error(String(DdbType[type] || type) + t(' 暂时不支持转换为 js 对象'))\n }\n}\n\n\n/** 转换一个向量到 js 原生数组 */\nexport function converts (type: DdbType, value: DdbVectorValue, rows: number, le: boolean, options?: ConvertOptions): any[] | Uint8Array {\n if (type < 64 || type >= 128)\n switch (type) {\n // 可以直接用下标取值再转换的类型\n case DdbType.bool:\n \n case DdbType.short:\n case DdbType.int:\n case DdbType.float:\n case DdbType.double:\n case DdbType.long:\n \n case DdbType.date:\n case DdbType.month:\n case DdbType.time:\n case DdbType.minute:\n case DdbType.second:\n case DdbType.datetime:\n case DdbType.datehour:\n case DdbType.timestamp:\n case DdbType.nanotime:\n case DdbType.nanotimestamp:\n case DdbType.duration:\n \n case DdbType.string:\n case DdbType.symbol:\n case DdbType.code:\n case DdbType.handle:\n case DdbType.datasource:\n case DdbType.resource:\n case DdbType.functiondef:\n \n case DdbType.blob:\n case DdbType.compressed:\n return Array.prototype.map.call(value, (x: number | bigint) => convert(type, x, le, options))\n \n case DdbType.char:\n if (options?.chars === 'binary')\n return value as Uint8Array\n else\n return Array.prototype.map.call(value, (x: number | bigint) => convert(type, x, le, options))\n \n case DdbType.void:\n return [ ]\n \n \n case DdbType.symbol_extended: {\n const { base, data } = value as DdbSymbolExtendedValue\n return Array.prototype.map.call(data, (x: number) => base[x])\n }\n \n case DdbType.complex:\n case DdbType.point:\n return seq(rows, i => {\n const x = (value as Float64Array)[2 * i]\n const y = (value as Float64Array)[2 * i + 1]\n \n return [x === nulls.double ? null : x, y === nulls.double ? null : y]\n })\n \n \n case DdbType.uuid:\n case DdbType.ipaddr:\n case DdbType.int128:\n return seq(rows, i => convert(\n type, \n (value as Uint8Array).subarray(16 * i, 16 * (i + 1)), \n le,\n options\n ))\n \n case DdbType.decimal32:\n case DdbType.decimal64:\n case DdbType.decimal128: {\n const { scale, data } = value as DdbDecimalVectorValue\n \n return Array.prototype.map.call(data, (x: number | bigint) => {\n if (is_decimal_null_value(type, x))\n return ''\n \n const s = String(x < 0 ? -x : x).padStart(scale, '0')\n \n return (x < 0 ? '-' : '') + (scale ? `${s.slice(0, -scale) || '0'}.${s.slice(-scale)}` : s)\n })\n }\n \n case DdbType.any:\n return (value as DdbObj[]).map(x => x.data(options))\n \n case DdbType.iotany:\n return value as any[]\n \n default:\n throw new Error(String(DdbType[type] || type) + '[]' + t(' 暂时不支持转换为 js 对象'))\n }\n else { // array vector\n const type_ = type - 64\n \n return (value as DdbArrayVectorValue).map(({ lengths, data, rows }) => {\n let acc_len = 0\n \n return Array.prototype.map.call(lengths, (length: number) => {\n switch (type_) {\n case DdbType.decimal32:\n case DdbType.decimal64:\n case DdbType.decimal128:\n return converts(\n type_, \n { scale: (value as DdbArrayVectorValue).scale, data: data.subarray(acc_len, acc_len += length) } as DdbDecimalVectorValue,\n length,\n le,\n options\n )\n \n case DdbType.complex:\n case DdbType.point:\n return converts(type_, data.subarray(acc_len, acc_len += 2 * length), length, le, options)\n \n case DdbType.uuid:\n case DdbType.int128:\n case DdbType.ipaddr:\n return converts(type_, data.subarray(acc_len, acc_len += 16 * length), length, le, options)\n \n default:\n return converts(type_, data.subarray(acc_len, acc_len += length), length, le, options)\n }\n })\n }).flat()\n }\n}\n\n\n/** 构造 void 类型,默认为 `DdbVoidType.undefined` */\nexport class DdbVoid extends DdbObj<undefined> {\n constructor (value = DdbVoidType.undefined) {\n super({\n form: DdbForm.scalar,\n type: DdbType.void,\n value,\n })\n }\n}\n\n\nexport class DdbBool extends DdbObj<boolean> {\n constructor (value: boolean | null) {\n super({\n form: DdbForm.scalar,\n type: DdbType.bool,\n value,\n })\n }\n}\n\nexport class DdbChar extends DdbObj<string> {\n constructor (value: string | number | null) {\n super({\n form: DdbForm.scalar,\n type: DdbType.char,\n value: typeof value === 'string' ?\n value.charCodeAt(0)\n :\n value\n })\n }\n}\n\nexport class DdbInt extends DdbObj<number> {\n constructor (value: number | null) {\n super({\n form: DdbForm.scalar,\n type: DdbType.int,\n value,\n })\n }\n}\n\nexport class DdbString extends DdbObj<string> {\n constructor (value: string) {\n super({\n form: DdbForm.scalar,\n type: DdbType.string,\n value\n })\n }\n}\n\nexport class DdbLong extends DdbObj<bigint> {\n constructor (value: bigint | number | null) {\n if (typeof value === 'number')\n value = BigInt(value)\n \n super({\n form: DdbForm.scalar,\n type: DdbType.long,\n value\n })\n }\n}\n\nexport class DdbDouble extends DdbObj<number> {\n constructor (value: number | null) {\n super({\n form: DdbForm.scalar,\n type: DdbType.double,\n value\n })\n }\n}\n\nexport class DdbDateTime extends DdbObj<number> {\n constructor (value?: null | number | string | Date | Dayjs) {\n super(get_time_ddbobj(DdbType.datetime, value))\n }\n}\n\nexport class DdbTimeStamp extends DdbObj<bigint> {\n constructor (value?: null | number | string | Date | Dayjs) {\n super(get_time_ddbobj(DdbType.timestamp, value))\n }\n}\n\nexport class DdbNanoTimeStamp extends DdbObj<bigint> {\n constructor (value?: null | number | string | Date | Dayjs) {\n super(get_time_ddbobj(DdbType.nanotimestamp, value))\n }\n}\n\nexport class DdbDate extends DdbObj<number> {\n constructor (value?: null | number | string | Date | Dayjs) {\n super(get_time_ddbobj(DdbType.date, value))\n }\n}\n\n\nexport class DdbBlob extends DdbObj<Uint8Array> {\n constructor (value: Uint8Array | ArrayBuffer) {\n assert(value, t('new DdbBlob 不能传空的 value'))\n super({\n form: DdbForm.scalar,\n type: DdbType.blob,\n value: value instanceof Uint8Array ? value : new Uint8Array(value)\n })\n }\n}\n\nexport class DdbPair extends DdbObj<Int32Array> {\n constructor (l: number | null, r: number | null = null) {\n super({\n form: DdbForm.pair,\n type: DdbType.int,\n rows: 2,\n cols: 1,\n value: Int32Array.of(\n l === null ? nulls.int32 : l,\n r === null ? nulls.int32 : r,\n )\n })\n }\n}\n\nexport class DdbFunction extends DdbObj<DdbFunctionDefValue> {\n constructor (name: string, type: DdbFunctionType) {\n super({\n form: DdbForm.scalar,\n type: DdbType.functiondef,\n value: { type, name }\n })\n }\n}\n\n\nexport class DdbVectorInt extends DdbObj<Int32Array> {\n constructor (ints: (number | null)[] | Int32Array, name?: string) {\n super({\n form: DdbForm.vector,\n type: DdbType.int,\n rows: ints.length,\n cols: 1,\n value: ints instanceof Int32Array ?\n ints\n :\n Int32Array.from(ints, v => \n v === null ?\n nulls.int32\n :\n v\n ),\n name,\n })\n }\n}\n\nexport class DdbVectorLong extends DdbObj<BigInt64Array> {\n constructor (longs: (number | null)[] | BigInt64Array, name?: string) {\n super({\n form: DdbForm.vector,\n type: DdbType.long,\n rows: longs.length,\n cols: 1,\n value: longs instanceof BigInt64Array ?\n longs\n :\n BigInt64Array.from(longs, v => \n v === null ?\n nulls.int64\n :\n BigInt(v)\n ),\n name,\n })\n }\n}\n\nexport class DdbVectorDouble extends DdbObj<Float64Array> {\n constructor (doubles: (number | null)[] | Float64Array, name?: string) {\n super({\n form: DdbForm.vector,\n type: DdbType.double,\n rows: doubles.length,\n cols: 1,\n value: doubles instanceof Float64Array ?\n doubles\n :\n Float64Array.from(doubles, v => \n v === null ?\n nulls.double\n :\n v\n ),\n name,\n })\n }\n}\n\nexport class DdbVectorString extends DdbObj<string[]> {\n constructor (strings: string[], name?: string) {\n super({\n form: DdbForm.vector,\n type: DdbType.string,\n rows: strings.length,\n cols: 1,\n value: strings,\n name,\n })\n }\n}\n\nexport class DdbVectorAny extends DdbObj {\n constructor (objs: (DdbObj | string | boolean)[], name?: string) {\n super({\n form: DdbForm.vector,\n type: DdbType.any,\n rows: objs.length,\n cols: 1,\n value: DdbObj.to_ddbobjs(objs),\n name,\n })\n }\n}\n\nexport class DdbVectorSymbol extends DdbObj <DdbSymbolExtendedValue> {\n constructor (strings: string[], name?: string) {\n let map = new Map<string, number>([\n ['', 0]\n ])\n \n let data = new Uint32Array(strings.length)\n \n for (let i = 0; i < strings.length; i++) {\n const x = strings[i]\n \n let index = map.get(x)\n \n if (index === undefined) {\n index = map.size\n map.set(x, index)\n }\n \n data[i] = index\n }\n \n super({\n form: DdbForm.vector,\n type: DdbType.symbol_extended,\n rows: strings.length,\n cols: 1,\n value: {\n base: [...map.keys()],\n base_id: null,\n data,\n },\n name\n })\n }\n}\n\nexport class DdbVectorChar extends DdbObj <Int8Array> {\n constructor (chars?: Uint8Array | Int8Array | ArrayBuffer, name?: string) {\n let ints: Int8Array\n if (!chars)\n ints = new Int8Array()\n else if (chars instanceof ArrayBuffer)\n ints = new Int8Array(chars)\n else if (chars instanceof Uint8Array)\n ints = new Int8Array(chars.buffer, chars.byteOffset, chars.byteLength)\n else {\n check(chars instanceof Int8Array)\n ints = chars\n }\n \n super({\n form: DdbForm.vector,\n type: DdbType.char,\n rows: ints.length,\n cols: 1,\n value: ints,\n name\n })\n }\n}\n\nexport class DdbVectorBool extends DdbObj <Int8Array> {\n constructor (bools?: (boolean | null)[], name?: string) {\n const length = bools?.length || 0\n \n let value = new Int8Array(length)\n \n for (let i = 0; i < length; ++i) {\n const x = bools[i]\n value[i] = empty(x) ? nulls.int8 : x ? 1 : 0\n }\n \n super({\n form: DdbForm.vector,\n type: DdbType.bool,\n rows: length,\n cols: 1,\n value,\n name\n })\n }\n}\n\nexport class DdbVectorDatetime extends DdbObj <Int32Array> {\n constructor (datetimes?: ConvertableDdbTimeValue[], name?: string) {\n super(get_times_ddbobj(DdbType.datetime, datetimes, name))\n }\n}\n\nexport class DdbVectorTimeStamp extends DdbObj <BigInt64Array> {\n constructor (timestamps?: ConvertableDdbTimeValue[], name?: string) {\n super(get_times_ddbobj(DdbType.timestamp, timestamps, name))\n }\n}\n\nexport class DdbVectorNanoTimeStamp extends DdbObj <BigInt64Array> {\n constructor (nanotimestamps?: ConvertableDdbTimeValue[], name?: string) {\n super(get_times_ddbobj(DdbType.nanotimestamp, nanotimestamps, name))\n }\n}\n\nexport class DdbVectorDate extends DdbObj <BigInt64Array> {\n constructor (dates?: ConvertableDdbTimeValue[], name?: string) {\n super(get_times_ddbobj(DdbType.date, dates, name))\n }\n}\n\nexport class DdbSetInt extends DdbObj<Int32Array> {\n constructor (ints: (number | null)[] | Set<number> | Int32Array) {\n super({\n form: DdbForm.set,\n type: DdbType.int,\n rows: ints instanceof Set ? \n ints.size\n :\n ints.length,\n cols: 1,\n value: ints instanceof Int32Array ?\n ints\n :\n Int32Array.from(ints, v => \n v === null ?\n nulls.int32\n :\n v\n ),\n })\n }\n}\n\nexport class DdbSetDouble extends DdbObj<Float64Array> {\n constructor (doubles: (number | null)[] | Set<number> | Float64Array) {\n super({\n form: DdbForm.set,\n type: DdbType.double,\n rows: doubles instanceof Set ? \n doubles.size\n :\n doubles.length,\n cols: 1,\n value: doubles instanceof Int32Array ?\n doubles\n :\n Int32Array.from(doubles, v => \n v === null ?\n nulls.int32\n :\n v\n ),\n })\n }\n}\n\nexport class DdbSetString extends DdbObj<string[]> {\n constructor (strings: string[] | Set<string>) {\n if (strings instanceof Set)\n strings = [...strings]\n \n super({\n form: DdbForm.set,\n type: DdbType.string,\n rows: strings.length,\n cols: 1,\n value: strings\n })\n }\n}\n\n/** 构造 DdbDict 对象,支持两种用法: Constructs a DdbDict object, which supports two usages:\n - 传入类型是 DdbVectorObj 的 keys, values 两个参数直接组成 dict<keys.type, values.type> 的 DdbDict \n The incoming type is the keys of DdbObj<DdbVectorValue>, and the two parameters of values directly form the DdbDict of dict<keys.type, values.type>\n - 传入 js object (类型是 Record<string, boolean | string | DdbObj>), 自动转换为 dict<string, any> 的 DdbDict \n Pass in js object (type is Record<string, boolean | string | DdbObj>), automatically converted to DdbDict of dict<string, any> */\nexport class DdbDict extends DdbObj<DdbDictValue> {\n constructor (obj: Record<string, boolean | string | DdbObj>)\n constructor (keys: DdbVectorObj, values: DdbVectorObj)\n constructor (arg0: DdbObj | Record<string, boolean | string | DdbObj>, arg1?: DdbObj) {\n if (arg1)\n super({\n form: DdbForm.dict,\n type: arg1.type,\n rows: (arg0 as DdbObj).rows,\n cols: 2,\n value: [arg0 as DdbObj, arg1] as DdbDictValue\n })\n else {\n const keys = Object.keys(arg0)\n super({\n form: DdbForm.dict,\n type: DdbType.any,\n rows: keys.length,\n cols: 2,\n value: [\n new DdbVectorString(keys),\n new DdbVectorAny(\n Object.values(arg0)\n )\n ] as DdbDictValue\n })\n }\n }\n}\n\n\nexport class DdbTable extends DdbObj<DdbObj[]> {\n constructor (columns: DdbObj[], name: string = '') {\n super({\n form: DdbForm.table,\n type: DdbType.void,\n rows: columns[0].rows,\n cols: columns.length,\n name,\n value: columns,\n })\n }\n}\n\n\nexport interface StreamingParams {\n table: string\n \n action?: string\n \n /** offset 是订阅任务开始后的第一条消息所在的位置。消息是流数据表中的行。\n 如果未指定,或设为-1,订阅将会从流数据表的当前行开始。\n 如果 offset = -2,系统会获取持久化到磁盘上的 offset,并从该位置开始订阅。注意:须同时设置 persistOffset = true,offset = -2 才会生效;否则 offset 会变为 -1。\n offset 与流数据表创建时的第一行对应。如果某些行因为内存限制被删除,在决定订阅开始的位置时,这些行仍然考虑在内。 */\n offset?: number\n \n filters?: {\n /** https://test.dolphindb.cn/zh/funcs/s/subscribeTable.html#:~:text=filter%20%E5%8F%82%E6%95%B0%E9%9C%80%E8%A6%81%E9%85%8D%E5%90%88%20setStreamTableFilterColumn%20%E5%87%BD%E6%95%B0%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8 */\n column?: DdbObj\n \n /** 过滤条件的 DolphinDB 表达式 https://dolphindb1.atlassian.net/wiki/spaces/dev/pages/760840447/WebSocketConsole */\n expression?: string\n }\n \n handler (message: StreamingMessage): any\n}\n\n\nexport interface StreamingMessage <TRows = any> extends StreamingParams {\n /** server 发送消息的时间 (nano seconds since epoch) The time the server sent the message (nano seconds since epoch) \n std::chrono::system_clock::now().time_since_epoch() / std::chrono::nanoseconds(1) */\n time: bigint\n \n /** message id */\n id: bigint\n \n /** 订阅主题,即一个订阅的名称。 Subscription topic, which is the name of a subscription.\n 它是一个字符串,由订阅表所在节点的别名、流数据表名称和订阅任务名称(如果指定了 actionName)组合而成,使用 `/` 分隔 \n It is a string consisting of the alias of the node where the subscription table is located, the stream data table name, and the subscription task name (if actionName is specified), separated by `/` */\n topic: string\n \n /** 流数据,类型是 any vector, 其中的每一个元素对应被订阅表的一个列 (没有 name),列 (DdbObj<DdbVectorValue>) 中的内容是新增的数据值 \n Stream data, the type is any vector, each element of which corresponds to a column (without name) of the subscribed table, and the content in the column (DdbObj<DdbVectorValue>) is the new data value */\n obj: DdbObj<DdbVectorObj[]>\n \n /** 流数据 */\n data: DdbTableData<TRows>\n \n window: {\n /** 建立连接开始 offset = 0, 随着 window 的移动逐渐增加 The establishment of the connection starts offset = 0, and gradually increases as the window moves */\n offset: number\n \n /** 历史数据 Historical data */\n data: TRows[]\n \n /** 每次接收到的 obj 组成的数组 An array of obj received each time */\n objs: DdbObj<DdbVectorObj[]>[]\n }\n \n /** 成功订阅后,后续推送过来的 message 解析错误,则会设置 error 并调用 handler \n After successfully subscribed, if the subsequently pushed message is parsed incorrectly, the error will be set and the handler will be called. */\n error?: Error\n}\n\nexport const winsize = 10000 as const\n\n\nexport interface DdbEvalOptions {\n urgent?: boolean\n listener?: DdbMessageListener\n parse_object?: boolean\n iife?: boolean\n}\n\nexport interface DdbExecuteOptions extends DdbEvalOptions, ConvertOptions { }\n\n\nexport interface DdbRpcOptions extends DdbEvalOptions {\n script?: string\n func?: string\n args?: Convertable[]\n vars?: string[]\n skip_connection_check?: boolean\n on_more_messages?: (buffer: Uint8Array) => void\n}\n\n\nexport class DdbConnectionError extends Error {\n override name = 'DdbConnectionError'\n \n override cause?: WebSocketConnectionError\n \n url: string\n \n // 这里不保留 ddb 的引用,会导致无法序列化\n \n constructor (url: string, error?: WebSocketConnectionError) {\n super(error?.message || `${url} ${t('连接出错了,可能由于网络原因连接已被关闭,或服务器断开连接')}`, { cause: error })\n \n this.url = url\n \n if (error)\n this.cause = error\n }\n}\n\n\nexport class DdbDatabaseError extends Error {\n override name = 'DdbDatabaseError'\n \n url: string\n \n // 这里不保留 ddb 的引用,会导致无法序列化\n \n id: number\n \n type: DdbRpcType\n \n options: DdbRpcOptions\n \n constructor (message: string, url: string, type: DdbRpcType, options: DdbRpcOptions, id: number) {\n super(message)\n this.url = url\n this.type = type\n this.options = options\n this.id = id\n }\n}\n\n\n/** SQL Standrd 标准类型 */\nexport enum SqlStandard {\n DolphinDB = 0,\n Oracle = 1,\n MySQL = 2\n}\n\n\nexport interface DdbOptions {\n autologin?: boolean\n username?: string\n password?: string\n python?: boolean\n kdb?: boolean\n sql?: SqlStandard\n streaming?: StreamingParams\n verbose?: boolean\n proxy?: string\n}\n\n\nexport interface DdbCallOptions extends DdbEvalOptions {\n node?: string\n nodes?: string[]\n add_node_alias?: boolean\n skip_connection_check?: boolean\n on_more_messages?: DdbRpcOptions['on_more_messages']\n}\n\nexport interface DdbInvokeOptions extends DdbCallOptions, ConvertOptions { }\n\n\nexport class DDB {\n /** 当前的 session id (http 或 tcp) */\n sid = '0'\n \n /** utf-8 text decoder */\n dec = new TextDecoder('utf-8')\n \n enc = new TextEncoder()\n \n \n /** DolphinDB WebSocket URL\n e.g. `ws://127.0.0.1:8848/`, `wss://dolphindb.com` */\n url: string\n \n /** 为所有 websocket 操作加锁,包括设置 this.on_message, this.on_error, websocket.send */\n lwebsocket = new Lock<WebSocket>()\n \n \n /** little endian (server) */\n le = true\n \n /** little endian (client) */\n static le_client = Boolean(\n new Uint8Array(\n Uint32Array.of(1).buffer\n )[0]\n )\n \n /** 是否在建立连接后自动登录,默认 true Whether to automatically log in after the connection is established, the default is true */\n autologin = true\n \n /** DolphinDB 登录用户名 DolphinDB username */\n username = 'admin'\n \n /** DolphinDB 登录密码 DolphinDB password */\n password = '123456'\n \n /** python session flag (2048) */\n python = false\n \n /** kdb session flag (4096) */\n kdb = false\n \n /** 是否为 dolphindb 语言 */\n dolphindb = true\n \n language: 'dolphindb' | 'python' | 'kdb' = 'dolphindb'\n \n /** 表示本次会话执行的 SQL 标准 */\n sql = SqlStandard.DolphinDB\n \n /** 是否为流数据连接,非流数据这个字段恒为 null Whether it is a streaming data connection, this field is always null for non-streaming data */\n streaming = null as StreamingParams\n \n /** 是否打印每个 rpc 的信息用于调试 */\n verbose = false\n \n /** websocket 连接所使用的 http 代理 */\n proxy: string\n \n \n // --- 内部选项, 状态\n print_message_buffer = false\n \n print_object_buffer = false\n \n print_message = true\n \n parse_object = true\n \n heartbeat_aborter?: AbortController\n \n \n /** 在 websocket 收到的第一个 error 时, \n 在 connect_websocket 的 on_error 回调中构造 DdbConnectionError 并保存到 DDB 对象上, \n 这个 error 的错误信息最准确 */\n error: DdbConnectionError\n \n /** DdbMessage listeners */\n listeners: DdbMessageListener[] = [ ]\n \n /** 首次 connect 连接的 promise, 后面的 connect 调用都返回这个 */\n pconnect: Promise<void>\n \n /** 首次定义 pnode_run 的 promise,保证并发调用 rpc 时只定义一次 pnode_run */\n ppnode_run: Promise<DdbVoid>\n \n /** 首次定义 invoke 的 promise,保证并发调用 rpc 时只定义一次 invoke */\n pinvoke: Promise<DdbVoid>\n \n /** 首次定义 jsrpc 的 promise,保证并发调用 rpc 时只定义一次 jsrpc */\n pjsrpc: Promise<DdbVoid>\n \n /** 函数定义缓存 */\n definitions = new Map<string, string>()\n \n /** 函数定义锁,保证并发调用时不重复定义,直接返回第一次定义的结果 */\n pdefinitions = new Map<string, Promise<string>>()\n \n \n get connected () {\n return !this.error && this.lwebsocket.resource?.readyState === WebSocketOpen\n }\n \n \n /**\n 使用 WebSocket URL 初始化连接到 DolphinDB 的实例(不建立实际的网络连接) \n Initialize an instance of DolphinDB Client using the WebSocket URL (without establishing an actual network connection) \n - url: DolphinDB WebSocket URL. e.g.:`ws://127.0.0.1:8848`\n - options?: DdbOptions\n - autologin?: 是否在建立连接后自动登录,默认 `true` Whether to log in automatically after establishing a connection, default `true`\n - username?: DolphinDB 登录用户名,默认 `'admin'` DolphinDB username, default `'admin'`\n - password?: DolphinDB 登录密码,默认 `'123456'` DolphinDB password, default `'123456'`\n - python?: 设置 python session flag,默认 `false` set python session flag, default `false`\n - kdb?: 设置 kdb session flag,默认 `false` set kdb session flag, default `false`\n - streaming?: 设置该选项后,该 WebSocket 连接只用于流数据 When this option is set, the WebSocket connection is only used for streaming data\n - verbose?: 是否打印每个 rpc 的信息用于调试\n - sql?: 设置当前会话执行的 sql 标准, 请使用 SqlStandard 枚举进行传参,默认 `DolphinDB`\n \n @example\n let ddb = new DDB('ws://127.0.0.1:8848')\n \n // 使用 HTTPS 加密 Encrypt with HTTPS\n let ddbsecure = new DDB('wss://dolphindb.com', {\n autologin: true,\n username: 'admin',\n password: '123456',\n python: false\n }) */\n constructor (url: string, options: DdbOptions = { }) {\n this.url = url\n \n if (options.verbose !== undefined)\n this.verbose = options.verbose\n \n if (options.autologin !== undefined)\n this.autologin = options.autologin\n \n if (options.username !== undefined)\n this.username = options.username\n \n if (options.password !== undefined)\n this.password = options.password\n \n if (options.python !== undefined && (this.python = Boolean(options.python))) {\n this.dolphindb = false\n this.language = 'python'\n }\n \n if (options.kdb !== undefined && (this.kdb = Boolean(options.kdb))) {\n this.dolphindb = false\n this.language = 'kdb'\n }\n \n if (options.sql !== undefined)\n this.sql = options.sql\n \n if (options.streaming !== undefined)\n this.streaming = options.streaming\n \n if (options.proxy)\n this.proxy = options.proxy\n }\n \n \n private on_message (buffer: Uint8Array, websocket: WebSocket) {\n throw new Error(t('这是在调用 this.rpc 之前默认的 on_message, 不应该被调用到,除非建立连接后 server 先推送了 message'))\n }\n \n \n private on_error () {\n // 这里的实现一定会被 connect, rpc 中的实现覆盖\n }\n \n \n /** 调用后会确保和数据库的连接是正常的 (this.connected === true),否则抛出错误 \n 这个方法是幂等的,首次调用建立实际的 WebSocket 连接到 URL 对应的 DolphinDB,然后执行自动登录, \n 如果是流数据连接,还会调用 publishTable 订阅流表 \n 后续调用检查上面的条件 \n 连接断开后禁止再次调用 connect 重连原有 ddb 对象,应该通过 new DDB() 的方式新建连接对象,原因是: \n 1. on_error 回调和某个 websocket 绑定了,不方便解绑后重新绑定\n 2. session 是有状态的,重连也无法恢复之前的状态\n 3. 断线后所有之前的 ddb.call, ddb.eval 都应该抛出连接错误\n \n After calling, it will ensure that the connection with the database is normal (this.connected === true), otherwise an error will be thrown \n This method is idempotent, the first call establishes an actual WebSocket connection to the DolphinDB corresponding to the URL, and subsequent calls check the above conditions \n After the connection is disconnected, it is forbidden to call connect again to reconnect the original ddb object. You should use new DDB() to create a new connection object because: \n 1. The on_error callback is bound to a certain websocket, and it is inconvenient to unbind and rebind\n 2. The session is stateful, and the previous state cannot be restored even after reconnection\n 3. After disconnection, all previous ddb.call, ddb.eval should throw a connection error */\n async connect () {\n if (this.connected)\n return\n \n if (this.error)\n throw this.error\n \n const { resource: websocket } = this.lwebsocket\n if (websocket && (websocket.readyState === WebSocketClosing || websocket.readyState === WebSocketClosed))\n throw this.error = new DdbConnectionError(this.url)\n \n return this.pconnect ??= new Promise<void>(async (resolve, reject) => {\n this.on_error = () => {\n reject(this.error /* 一定有,不需要再 || new DdbConnectionError(this) */)\n }\n \n try {\n let url = new URL(this.url)\n if (this.streaming?.filters?.expression)\n url.searchParams.set('filter', this.streaming.filters.expression.trim())\n \n // 连接建立之前应该不会有别的调用占用 this.lwebsocket\n this.lwebsocket.resource = await connect_websocket(url, {\n protocols: this.streaming ? ['streaming'] : this.dolphindb ? undefined : [this.language],\n \n proxy: this.proxy,\n \n on_message: (buffer: ArrayBuffer, websocket) => {\n this.on_message(new Uint8Array(buffer), websocket)\n },\n \n on_error: error => {\n this.error ??= new DdbConnectionError(this.url, error)\n this.heartbeat_aborter?.abort()\n this.on_error()\n },\n \n on_close: () => {\n this.heartbeat_aborter?.abort()\n }\n })\n } catch (error) {\n this.error ??= new DdbConnectionError(this.url, error)\n reject(this.error)\n return\n }\n \n try {\n assert(this.connected)\n \n await this.rpc('connect', { skip_connection_check: true })\n \n if (this.streaming)\n await this.subscribe()\n else\n // 定时执行一次空脚本作为心跳检查,避免因为 nat 超时导致 tcp 连接断开\n (async () => {\n this.heartbeat_aborter = new AbortController()\n \n while (true) {\n // 连接主动关闭时从循环退出防止影响 node.js 退出\n try {\n await delay(1000 * 60 * 4.5, { signal: this.heartbeat_aborter.signal })\n } catch {\n break\n }\n \n if (this.connected)\n try {\n await this.eval('')\n } catch (error) {\n console.log(t('{{time}} 心跳检测失败,连接已断开', { time: new Date().to_formal_str() }), error)\n break\n }\n else\n break\n }\n })()\n \n resolve()\n } catch (error) {\n this.error ??= error\n reject(error)\n }\n })\n }\n \n \n get_rpc_options ({\n urgent = false,\n secondary = false,\n async: _async = false,\n pickle = false,\n clear = false,\n api = false,\n compress = false,\n \n cancellable = true,\n priority = urgent ? 8 : 4,\n parallelism = 64,\n root_id = '',\n limit,\n }: {\n // --- flags ---\n urgent?: boolean\n \n /** API 提交的任务, secondary 必须为 false */\n secondary?: boolean\n \n /** 是否异步任务(不返回结果) */\n async?: boolean\n \n /** 让服务端以 pickle 协议返回数据 */\n pickle?: boolean\n \n /** 本次任务完成后 clear session memory */\n clear?: boolean\n \n /** 是否为 api client */\n api?: boolean\n \n compress?: boolean\n \n // --- flags end ---\n \n /** 任务是否可以取消 */\n cancellable?: boolean\n \n priority?: number\n \n /** `8` 0 ~ 64, 指定本任务并行度 */\n parallelism?: number\n \n /** 根任务编号,内部使用,API中固定为空 */\n root_id?: string\n \n /** 指定分块返回的块大小 */\n limit?: boolean\n } = { }) {\n let flag = 0\n \n if (urgent)\n flag += 1\n \n if (secondary)\n flag += 2\n \n if (_async)\n flag += 4\n \n if (pickle)\n flag += 8\n \n if (clear)\n flag += 16\n \n if (api)\n flag += 32\n \n if (compress)\n flag += 64\n \n // python session\n if (this.python)\n flag += 2048\n \n // kdb session\n if (this.kdb)\n flag += 4096\n \n // sql standrd\n flag += 2**19 * this.sql\n \n const options = [\n flag,\n cancellable ? 1 : 0,\n priority,\n parallelism,\n ... limit ? [\n root_id,\n limit,\n ] : [ ],\n ]\n \n return options.join('_')\n }\n \n \n disconnect () {\n this.heartbeat_aborter?.abort()\n \n const { resource } = this.lwebsocket\n \n if (resource) {\n const { readyState } = resource\n \n if (readyState !== WebSocketClosed && readyState !== WebSocketClosing)\n // 这里不获取 lock,直接关闭连接\n resource.close(1000)\n }\n }\n \n \n /** (内部使用的方法) rpc through websocket (function/script/variable command) \n 未连接到 DDB 时调用会自动连接,连接断开时调用会抛出 DdbConnectionError \n When the DDB is not connected, the call will be automatically connected. When the connection is disconnected, the call will throw the DdbConnectionError \n - type: API 类型: 'script' | 'function' | 'variable' | 'connect'\n - options:\n - urgent?: 决定 `行为标识` 那一行字符串的取值(只适用于 script 和 function)\n - vars?: type === 'variable' 时必传,variable 指令中待上传的变量名\n - listener?: 处理本次 rpc 期间的消息 (DdbMessage)\n - parse_object?: 在本次 rpc 期间设置 parse_object, 结束后恢复原有 \n 为 false 时返回的 DdbObj 仅含有 buffer 和 le,不做解析,以便后续转发、序列化 \n - skip_connection_check?: 在首次 await ddb.connect() 建立连接时不能再次调用 await this.connect() 确保连接状态,会导致循环依赖, \n 将这个 flag 设为 true 跳过连接状态检查 */\n async rpc <TResult extends DdbObj = DdbObj> (type: DdbRpcType, options: DdbRpcOptions) {\n // 保留调用栈信息\n const id = genid() % 1000\n \n let error = new DdbDatabaseError('', this.url, type, options, id)\n \n if (!options.skip_connection_check)\n await this.connect()\n \n const {\n script,\n func,\n args: _args = [ ],\n vars = [ ],\n urgent,\n listener,\n on_more_messages,\n } = options\n \n \n if (func === 'pnode_run')\n try {\n await (this.ppnode_run ??= this.eval<DdbVoid>(\n funcdefs.pnode_run[this.language], \n { urgent: true }))\n } catch (error) {\n this.ppnode_run = undefined\n throw error\n }\n \n \n // this 上的当前配置需要在 message 到达后使用,先保存起来\n const _listeners = [...this.listeners]\n \n \n // rpc 请求期间需要独占 websocket,所以设计了一个锁,申请之后才能使用\n // ddb 世界观:需要等待上一个 rpc 结果从 server 返回之后才能发起下一个调用 \n // 违反世界观可能造成: \n // 1. 并发多个请求只返回第一个结果(阻塞,需后续请求疏通)\n // 2. windows 下 ddb server 返回多个相同的结果\n \n // 既然上一个请求没有出现 websocket error,且函数开头已经调用了 await this.connect() 检查过,\n // 这里也乐观的认为 this.connected && !this.errored 为 true\n \n return this.lwebsocket.request(async websocket => {\n // 独占资源后先检查状态\n if (this.error)\n throw this.error\n \n const args = DdbObj.to_ddbobjs(_args)\n \n const rpc_id = `(id = ${id})`\n \n const command = this.enc.encode(\n (() => {\n switch (type) {\n case 'function':\n if (this.verbose)\n if (args.length)\n console.log(func, args.map(arg => arg.data()), rpc_id)\n else\n console.log(`${func}()`, rpc_id)\n \n assert(!func.includes('\\0'), t('发送至 DolphinDB 执行的脚本中间不能含有 \\\\0'))\n \n return 'function\\n' +\n `${func}\\n` +\n `${args.length}\\n` +\n `${Number(DDB.le_client)}\\n`\n \n case 'script':\n if (this.verbose)\n console.log(script, rpc_id)\n \n assert(!script.includes('\\0'), t('发送至 DolphinDB 执行的脚本中间不能含有 \\\\0'))\n \n return 'script\\n' +\n script\n \n case 'variable':\n if (this.verbose)\n vars.forEach((v, i) => {\n console.log(v, '=', args[i].data())\n })\n \n return 'variable\\n' +\n `${vars.join(',')}\\n` +\n `${vars.length}\\n` +\n `${Number(DDB.le_client)}\\n`\n \n case 'connect':\n if (this.verbose)\n console.log(\n 'connect()' + \n (this.autologin ? \n '\\n' + \n `login(${this.username.quote()}, ${this.password.quote()})`\n :\n '') +\n ` ${rpc_id}`\n )\n \n return 'connect\\n' +\n // 详见 InterProcessIO.cpp#APISocketConsole::parseScript 中的\n // Util::startWith \"connect\"\n (this.autologin ? \n 'login\\n' +\n this.username + '\\n' +\n this.password /* encrypted (可选参数) + '\\n' + 'false' */\n :\n '')\n }\n })()\n )\n \n // 使用资源发送请求并等待请求完成\n const result = await new Promise<TResult>((resolve, reject) => {\n let first_message = true\n \n this.on_error = () => {\n // 这里一定有了 this.error, 不需要再 || new DdbConnectionError(this)\n reject(this.error)\n }\n \n this.on_message = buffer => {\n if (!on_more_messages || first_message)\n try {\n if (this.print_message_buffer)\n console.log(typed_array_to_buffer(buffer))\n \n const message = this.parse_message(buffer, error)\n \n listener?.(message, this)\n for (let i = _listeners.length - 1; i >= 0; --i)\n _listeners[i](message, this)\n \n const { type, data } = message\n \n switch (type) {\n case 'print':\n if (this.print_message)\n console.log(data)\n break\n \n case 'object':\n first_message = false\n resolve(data as TResult)\n break\n \n case 'error':\n first_message = false\n reject(data)\n break\n }\n } catch (error) {\n // 这里的错误并非 websocket 错误,而是 rpc 错误\n reject(error)\n }\n else\n on_more_messages(buffer)\n }\n \n websocket.send(\n concat([\n this.enc.encode(`API2 ${this.sid} ${command.length} / ${this.get_rpc_options({ urgent })}\\n`),\n command,\n ... args.map(arg => arg.pack())\n ])\n )\n })\n \n if (this.verbose)\n console.log(result.data(), rpc_id)\n \n return result\n })\n }\n \n \n /** eval script through websocket (script command) \n - script?: 执行的脚本 Script to execute\n - options?: 执行选项 execution options\n - urgent?: 紧急 flag,确保提交的脚本使用 urgent worker 处理,防止被其它作业阻塞 \n Urgent flag to ensure that submitted scripts are processed by urgent workers to prevent being blocked by other jobs\n - listener?: 处理本次 rpc 期间的消息 (DdbMessage) Process messages during this rpc (DdbMessage)\n - parse_object?: 在该次 rpc 期间设置 parse_object, 结束后恢复原有,为 false 时返回的 DdbObj 仅含有 buffer 和 le, \n 不做解析,以便后续转发、序列化 \n Set parse_object during this rpc, and restore the original after the end. \n When it is false, the returned DdbObj only contains buffer and le without parsing, \n so as to facilitate subsequent forwarding and serialization \n - iife?: 使用 `def () { ... } ()` 包裹脚本,return 最后一行,避免变量泄漏 */\n async eval <T extends DdbObj> (\n script: string,\n {\n urgent,\n listener,\n parse_object,\n iife,\n }: DdbEvalOptions = { }\n ) {\n if (iife) {\n const lines = script.split_lines()\n if (lines.length < 2)\n throw new Error(t('iife 执行的脚本行数应该至少为 2 行'))\n \n script =\n 'def () {\\n' +\n lines.slice(0, -1).indent().join_lines() +\n ` return ${lines.last}\\n` +\n '} ()\\n'\n }\n \n return this.rpc<T>('script', { script, urgent, listener, parse_object })\n }\n \n \n /** call function through websocket (function command) \n - func: 函数名 function name\n - args?: `[ ]` 调用参数 (传入的原生 string 和 boolean 会被自动转换为 DdbObj<string> 和 DdbObj<boolean>) \n Call parameters (the incoming native string and boolean will be automatically converted to DdbObj<string> and DdbObj<boolean>)\n - options?: 调用选项 call options\n - urgent?: 紧急 flag。使用 urgent worker 执行,防止被其它作业阻塞 \n Emergency flag. Use urgent worker execution to prevent being blocked by other jobs\n - node?: 设置结点 alias 时发送到集群中对应的结点执行 (使用 DolphinDB 中的 rpc 方法) \n When the node alias is set, it is sent to the corresponding node in the cluster for execution (using the rpc method in DolphinDB)\n - nodes?: 设置多个结点 alias 时发送到集群中对应的多个结点执行 (使用 DolphinDB 中的 pnodeRun 方法) \n When setting multiple node aliases, send them to the corresponding multiple nodes in the cluster for execution (using the pnodeRun method in DolphinDB)\n - add_node_alias?: 设置 nodes 参数时选传,其它情况不传 \n Select to pass when setting the nodes parameter, otherwise not pass\n - listener?: 处理本次 rpc 期间的消息 (DdbMessage) \n Process messages during this rpc (DdbMessage)\n - parse_object?: 在该次 rpc 期间设置 parse_object, 结束后恢复原有,为 false 时返回的 DdbObj 仅含有 buffer 和 le,\n 不做解析,以便后续转发、序列化 \n Set parse_object during this rpc, and restore the original after the end. \n When it is false, the returned DdbObj only contains buffer and le without parsing, \n so as to facilitate subsequent forwarding and serialization \n - skip_connection_check?: (内部使用) 在首次 await ddb.connect() 建立连接时不能再次调用 await this.connect() 确保连接状态,会导致循环依赖, \n 将这个 flag 设为 true 跳过连接状态检查 \n (internal use) When await ddb.connect() establishes a connection for the first time, you cannot call await this.connect() again to ensure the connection status, which will lead to circular dependencies.\n Set this flag to true to skip connection status checks */\n async call <TResult extends DdbObj> (\n func: string,\n args: (DdbObj | string | boolean)[] = [ ],\n {\n urgent,\n node,\n nodes,\n add_node_alias,\n listener,\n parse_object,\n skip_connection_check,\n on_more_messages\n }: DdbCallOptions = { }\n ) {\n let func_ = func\n let args_ = args\n \n if (node) {\n try {\n await (this.pjsrpc ??= this.eval<DdbVoid>(\n funcdefs.jsrpc[this.language], \n { urgent: true }))\n } catch (error) {\n this.pjsrpc = undefined\n throw error\n }\n \n func_ = 'jsrpc'\n args_ = [\n node,\n func,\n new DdbVectorAny(args)\n ]\n }\n \n if (nodes) {\n func_ = 'pnode_run'\n args_ = [\n new DdbVectorString(nodes),\n func,\n new DdbVectorAny(args),\n ... (() => {\n if (typeof add_node_alias !== 'undefined')\n return [add_node_alias]\n \n if (this.python)\n return [true]\n \n return [ ]\n })()\n ]\n }\n \n return this.rpc<TResult>('function', {\n func: func_,\n args: args_,\n urgent,\n listener,\n parse_object,\n skip_connection_check,\n on_more_messages\n })\n }\n \n \n /** 调用 dolphindb 函数,传入 js 原生数组作为参数,返回 js 原生对象或值(调用 DdbObj.data() 后的结果) \n - func: 函数名,或者函数完整实现,会间接调用 define 进行预定义 \n - args?: `[ ]` 调用参数,可以是 js 原生数组,参数在中间且想用 server 函数的默认参数值时可以传 null 占位 \n - options?: 调用选项 \n - urgent?: 紧急 flag。使用 urgent worker 执行,防止被其它作业阻塞 \n - node?: 设置结点 alias 时发送到集群中对应的结点执行 (使用 DolphinDB 中的 rpc 方法) \n - nodes?: 设置多个结点 alias 时发送到集群中对应的多个结点执行 (使用 DolphinDB 中的 pnodeRun 方法) \n - add_node_alias?: 设置 nodes 参数时选传,其它情况不传 \n - listener?: 处理本次 rpc 期间的消息 (DdbMessage) */\n async invoke <TResult = any> (func: string, args?: any[], options?: DdbInvokeOptions) {\n // 检查 args 是否全部为简单参数,是则直接调用 call,避免 invoke 间接调用\n // 逻辑类似 DdbObj.to_ddbobjs, 需要同步修改\n let convertable = true\n let has_ddbobj = false\n if (args)\n for (const arg of args)\n if (arg && arg instanceof DdbObj)\n has_ddbobj = true\n else if (arg === undefined || arg === null) {\n // simple\n } else {\n const type = typeof arg\n if (type === 'string' || type === 'boolean')\n { } // simple\n else\n convertable = false\n }\n \n let result: DdbObj\n \n if (function_definition_patterns[this.language].test(func))\n func = await this.define(func, { urgent: options?.urgent })\n \n if (convertable)\n result = await this.call(func, args, options)\n else {\n if (has_ddbobj)\n throw new Error(t('调用 ddb.invoke 的参数中不能同时有 DdbObj 与复杂 js 原生对象'))\n \n try {\n await (this.pinvoke ??= this.eval<DdbVoid>(\n funcdefs.invoke[this.language],\n { urgent: true }))\n } catch (error) {\n // invoke 没有正确执行时,重新将 pinvoke 赋值为 undefined\n this.pinvoke = undefined\n throw error\n }\n \n result = await this.call('invoke', [func, JSON.stringify(args)], options)\n }\n \n return result.data<TResult>(options)\n }\n \n \n /** 执行 dolphindb 脚本,返回 js 原生对象或值(调用 DdbObj.data() 后的结果) \n - script?: 执行的脚本 \n - options?: 执行选项 \n - urgent?: 紧急 flag,确保提交的脚本使用 urgent worker 处理,防止被其它作业阻塞 \n - listener?: 处理本次 rpc 期间的消息 (DdbMessage) */\n async execute <TResult = any> (script: string, options?: DdbExecuteOptions) {\n return (await this.eval(script, options))\n .data<TResult>(options)\n }\n \n \n /** upload variable through websocket (variable command) */\n async upload (\n /** 上传的变量名 Uploaded variables' name */\n vars: string[],\n \n /** 上传的变量值 Uploaded variables' value */\n args: (DdbObj | string | boolean)[],\n \n {\n listener,\n parse_object,\n }: {\n listener?: DdbMessageListener\n parse_object?: boolean\n } = { }\n ) {\n assert(args.length && args.length === vars.length, t('variable 指令参数不能为空且参数名不能为空,且数量应该匹配'))\n return this.rpc('variable', { vars, args, listener, parse_object })\n }\n \n \n /** 取消当前 session id 对应的所有 console jobs Cancel all console jobs corresponding to the current session id */\n async cancel () {\n let ddb = new DDB(this.url, {\n autologin: this.autologin,\n username: this.username,\n password: this.password,\n proxy: this.proxy,\n verbose: this.verbose\n })\n \n try {\n // 因为是新建的连接,而且执行完脚本之后马上就关闭了,所以不用考虑变量泄漏的问题\n await ddb.eval(\n `jobs = exec rootJobId from getConsoleJobs() where sessionId = ${this.sid}\\n` +\n 'if (size(jobs))\\n' +\n ' cancelConsoleJob(jobs)\\n',\n { urgent: true })\n } finally {\n ddb.disconnect()\n }\n }\n \n \n /** 解析服务端响应报文,返回去掉 header 的 data buf */\n parse_message (buf: Uint8Array, error: DdbDatabaseError): DdbMessage {\n // MSG\\n\n // <message>\\0\n // 'M'.codePointAt(0).to_hex_str()\n if (buf[0] === 0x4d && buf[1] === 0x53 && buf[2] === 0x47 && buf[3] === 0x0a) {\n assert(buf.at(-1) === 0, t('print 消息的 buffer 应该以 \\\\0 结束'))\n if (buf.indexOf(0) !== buf.length - 1)\n console.warn(t('print 消息的 buffer 中间不应该有 \\\\0'))\n return {\n type: 'print',\n data: \n this.dec.decode(\n buf.subarray(4, -1)\n )\n }\n }\n \n \n // '1166953221 1 1\\n'\n // 'OK\\n'\n // '\\x04\\x00\\x02\\x00\\x00\\x00'\n \n /** index of line feed 0 */\n const ilf0 = buf.indexOf(0x0a) // '\\n'\n \n const parts = this.dec.decode(\n buf.subarray(0, ilf0)\n ).split(' ')\n \n this.sid = parts[0]\n \n // 返回对象的数量\n // const nobj = Number(parts[1])\n \n // 大小端: 协议中大端为 0, 小端为 1\n this.le = Number(parts[2]) !== 0\n \n const ils1 = ilf0 + 1\n const ilf1 = buf.indexOf(0x0a, ils1) // '\\n'\n /** 'OK' 表示成功,其它文本表示失败 */\n const message = this.dec.decode(\n buf.subarray(ils1, ilf1)\n )\n \n if (message !== 'OK') {\n error.message = message\n \n let lines = error.stack.split_lines()\n lines[0] += `: ${message}`\n error.stack = lines.join_lines(false)\n \n return { type: 'error', data: error }\n }\n \n const bufobj = buf.subarray(ilf1 + 1)\n \n if (this.print_object_buffer)\n console.log(typed_array_to_buffer(bufobj))\n \n return {\n type: 'object',\n data: error.options.parse_object ?? this.parse_object ?\n DdbObj.parse(bufobj, this.le)\n :\n new DdbObj({\n form: DdbForm.scalar,\n type: DdbType.void,\n length: 0,\n le: this.le,\n buffer: bufobj,\n })\n }\n }\n \n \n /** 内部的流订阅方法 Internal stream subscription method */\n async subscribe () {\n // 流表推送过来的第一条数据是 schema,需要特殊处理\n let first = true\n \n let win: StreamingMessage['window'] = {\n offset: 0,\n data: [ ],\n objs: [ ]\n }\n \n let schema: DdbTableData\n \n console.log(\n t('订阅流表成功:'),\n \n // 普通流表结果为 columns (string[])\n // 高可用流表为 [columns (string[]), node sites (string[])]\n (await this.call<DdbVectorStringObj>('publishTable', [\n 'localhost',\n new DdbInt(0),\n this.streaming.table,\n (this.streaming.action ||= `api_js_${new Date().getTime()}`),\n (this.streaming.offset === undefined || this.streaming.offset === null)\n ? new DdbVoid()\n : new DdbInt(this.streaming.offset), // offset\n this.streaming.filters?.column || new DdbVoid(), // filter\n ],\n {\n skip_connection_check: true, \n \n // 先准备好收到 websocket message 的 callback\n on_more_messages: buffer => {\n try {\n let data: DdbTableData\n \n const dv = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n \n const i_topic_end = buffer.indexOf(0, 17)\n \n // 首个 message 一定是 table schema, 后续消息是 column 片段组成的 any vector\n const obj = DdbObj.parse(buffer.subarray(i_topic_end + 1), this.le) as DdbObj<DdbVectorObj[]>\n \n // server 推数据时遇到错误会返回 string,一般格式为 error.xxx: 错误信息\n if (obj.form === DdbForm.scalar && obj.type === DdbType.string) {\n this.disconnect()\n const value = obj.value as any as string\n throw new Error(value.slice(value.indexOf(':') + 1).trim())\n }\n \n if (first) {\n schema = data = obj.data<DdbTableData>({ table: 'full' })\n data.name ||= this.streaming.table\n first = false\n } else {\n let rows: number\n \n // 用了流数据过滤功能后,必然发 table\n if (obj.form === DdbForm.table) {\n data = obj.data<DdbTableData>({ table: 'full' })\n data.name ||= schema.name\n \n rows = data.data.length\n } else {\n const _data = obj.data<any[][]>()\n \n const { columns } = schema\n \n rows = _data[0]?.length || 0\n \n data = {\n ... schema,\n data: seq(rows, i =>\n zip_object(\n columns,\n seq(columns.length, j => _data[j][i])\n ))\n }\n }\n \n \n win.data.push(...data.data)\n \n win.objs.push(obj)\n \n if (win.data.length >= winsize * 2 && win.objs.length >= 2) {\n let winsize_ = 0\n let i = win.objs.length - 1\n // 往前移动至首个累计 winsize_ 超过 winsize 的位置\n for ( ; winsize_ < winsize; i--)\n winsize_ += win.objs[i].value[0].rows\n \n win.offset += win.data.length - winsize_\n win.data = win.data.slice(-winsize_)\n win.objs = win.objs.slice(i)\n }\n }\n \n this.streaming.handler({\n ...this.streaming,\n id: dv.getBigInt64(9, this.le),\n time: dv.getBigInt64(1, this.le),\n topic: this.dec.decode(buffer.subarray(17, i_topic_end)),\n obj,\n data,\n window: win,\n })\n } catch (error) {\n // 将 error 交给 handler 处理\n this.streaming.handler({ ...this.streaming, error } as StreamingMessage)\n }\n }\n }\n )).data()\n )\n }\n \n \n /** 定义函数并保存,避免下次重复执行定义,会自动提取脚本中的函数名,作为缓存 key,\n 也同时作为返回值\n - definition: 函数完整定义\n - options?:\n - urgent?: 紧急 flag,确保提交的脚本使用 urgent worker 处理,防止被其它作业阻塞 \n @example\n await ddb.invoke(\n await ddb.define(\n 'def foo (bar) {\\n' +\n ' print(bar)\\n' +\n '}\\n'),\n ['hello']) */\n async define (definition: string, { urgent }: { urgent?: boolean } = { }) {\n const matches = function_definition_patterns[this.language].exec(definition)\n \n if (!matches)\n throw new Error(t('DDB.define 方法传入的 definition 不符合函数定义格式 def xxx ()'))\n \n const func_name = matches[1]\n \n // 已定义成功\n if (this.definitions.has(func_name))\n return func_name\n \n // 防止并发调用 define 时多次重复定义\n let promise = this.pdefinitions.get(func_name)\n \n if (!promise)\n this.pdefinitions.set(\n func_name,\n promise = this.execute(definition, { urgent }))\n \n await promise\n \n this.definitions.set(func_name, definition)\n \n // 成功定义之后,definitions 中有了,就不需要通过 promise 来防止并发了,清理掉\n // 定义失败时 rejected promise 直接作为后续调用的结果返回\n this.pdefinitions.delete(func_name)\n \n return func_name\n }\n}\n\n\nexport interface DdbMessageListener {\n (message: DdbMessage, _this: DDB): any\n}\n\n\nexport interface DdbPrintMessage {\n type: 'print'\n data: string\n}\n\nexport interface DdbObjectMessage {\n type: 'object'\n data: DdbObj\n}\n\nexport interface DdbErrorMessage {\n type: 'error'\n data: DdbDatabaseError\n}\n\nexport type DdbMessage = DdbPrintMessage | DdbObjectMessage | DdbErrorMessage\n\n\n\nexport class BigInt128Array {\n static of (...items: bigint[]): BigInt128Array {\n return new BigInt128Array(items)\n }\n \n \n static from (arrayLike: ArrayLike<bigint>): BigInt128Array\n static from<U>(arrayLike: ArrayLike<U>, mapfn: (v: U, k: number) => bigint, thisArg?: any): BigInt128Array\n static from<U>(arrayLike: ArrayLike<U>, mapfn?: (v: U, k: number) => bigint, thisArg?: any) {\n if (mapfn) {\n const array: bigint[] = [ ]\n for (let i = 0; i < arrayLike.length; i++) \n array.push(mapfn.call(thisArg, arrayLike[i], i))\n \n return new BigInt128Array(array)\n } else {\n const v = new BigInt128Array(arrayLike.length)\n v.set(arrayLike as ArrayLike<bigint>)\n }\n }\n \n \n readonly BYTES_PER_ELEMENT: number = 16\n readonly buffer: ArrayBufferLike\n readonly byteLength: number\n readonly byteOffset: number\n \n \n constructor (length?: number)\n constructor (array: Iterable<bigint>)\n constructor (buffer: ArrayBufferLike, byteOffset?: number, length?: number)\n constructor (fisrtArg: number | Iterable<bigint> | ArrayBufferLike, byteOffset?: number, length?: number) {\n if (typeof fisrtArg === 'number') {\n const length = fisrtArg\n this.buffer = new ArrayBuffer(length * this.BYTES_PER_ELEMENT)\n this.byteOffset = 0\n this.byteLength = length * this.BYTES_PER_ELEMENT\n } else if (fisrtArg instanceof ArrayBuffer || fisrtArg instanceof SharedArrayBuffer) {\n this.buffer = fisrtArg\n this.byteOffset = byteOffset ?? 0\n \n let byteLength = 0\n if (length !== undefined) {\n byteLength = length * this.BYTES_PER_ELEMENT\n if (byteLength + this.byteOffset > fisrtArg.byteLength) \n throw new RangeError(`valid typed array length: ${length}`)\n } else {\n byteLength = fisrtArg.byteLength - this.byteOffset\n if (byteLength % this.BYTES_PER_ELEMENT !== 0) \n throw new RangeError('byte length of BigInt128Array should be a multiple of 16')\n }\n \n this.byteLength = byteLength\n } else {\n const array: bigint[] = [ ]\n for (const value of fisrtArg as Iterable<bigint>) \n array.push(value)\n \n this.buffer = new ArrayBuffer(array.length * this.BYTES_PER_ELEMENT)\n this.byteOffset = 0\n this.byteLength = array.length * this.BYTES_PER_ELEMENT\n this.set(array)\n }\n \n return new Proxy(this, {\n get (target, key) {\n if (typeof key === 'string') {\n const index = Number(key)\n // only positive integer index is allowed\n if (Number.isInteger(index) && index >= 0 && index < target.length) \n return target.at(index)\n }\n \n return Reflect.get(target, key)\n },\n \n set (target, key, value) {\n if (typeof key === 'string') {\n const index = Number(key)\n if (Number.isInteger(index) && index >= 0 && index < target.length) \n target.set([value], index)\n \n // ignore invalid number index setter, and never set value to target\n return true\n }\n \n return Reflect.set(target, key, value)\n },\n \n has (target, key) {\n if (typeof key === 'string') {\n const index = Number(key)\n if (Number.isInteger(index) && index >= 0 && index < target.length)\n return true\n }\n \n return Reflect.has(target, key)\n }\n })\n }\n \n \n get length () {\n return this.byteLength / this.BYTES_PER_ELEMENT\n }\n \n \n set (array: ArrayLike<bigint>, offset: number = 0) {\n if (offset + array.length > this.length) \n throw new RangeError('offset is out of bounds')\n \n const dv = new DataView(this.buffer)\n for (let i = 0; i < array.length; i++) {\n const byteOffset = this.byteOffset + (offset + i) * this.BYTES_PER_ELEMENT\n set_big_int_128(dv, byteOffset, array[i])\n }\n }\n \n \n at (index: number) {\n const length = this.length\n \n if (index < 0) \n index += length\n \n if (index >= length || index < 0)\n return undefined\n \n const dv = new DataView(this.buffer)\n return get_big_int_128(dv, this.byteOffset + index * this.BYTES_PER_ELEMENT)\n }\n \n \n subarray (begin: number = 0, end: number = this.length) {\n const length = this.length\n // subarray arguments should be the same behavior as other TypedArray\n // https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray#%E8%AF%B4%E6%98%8E\n if (begin < 0)\n begin += length\n \n if (end < 0)\n end += length\n \n if (begin < 0)\n begin = 0\n else if (begin > length)\n begin = length\n \n if (end < 0)\n end = 0\n else if (end > length)\n end = length\n \n const newLength = Math.max(end - begin, 0)\n return new BigInt128Array(this.buffer, this.byteOffset + begin * this.BYTES_PER_ELEMENT, newLength)\n }\n \n \n [Symbol.iterator] () {\n let index = 0\n const array = this\n return {\n next () {\n if (index < array.length) \n return { value: array.at(index++), done: false }\n else \n return { done: true }\n },\n }\n }\n \n \n toString () {\n const values: bigint[] = [ ]\n for (const value of this) \n values.push(value)\n return values.join(',')\n }\n \n \n // Simulate other TypedArray behavior in nodejs\n [inspect.custom] () {\n const values: bigint[] = [ ]\n for (const value of this) \n values.push(value)\n const value_str = values.length ? ` ${values.map(v => String(v) + 'n').join(', ')} ` : ''\n return `${this[Symbol.toStringTag]}(${this.length}) [${value_str}]`\n }\n}\n\n\nObject.defineProperty(BigInt128Array.prototype, Symbol.toStringTag, {\n configurable: false,\n writable: false,\n enumerable: false,\n value: 'BigInt128Array',\n})\n\n"]}