dolphindb 3.1.45 → 3.1.46

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/browser.d.ts CHANGED
@@ -187,7 +187,7 @@ export interface InspectOptions {
187
187
  export declare function format(type: DdbType, value: DdbValue, le: boolean, options?: InspectOptions): string;
188
188
  /** 格式化向量、集合中的第 index 项为字符串,空值返回 'null' 字符串 formatted vector, the index-th item in the collection is a string, a null value returns a 'null' string */
189
189
  export declare function formati(obj: DdbVectorObj, index: number, options?: InspectOptions): string;
190
- export declare function convert(type: DdbType, value: DdbValue, le: boolean, { blob, char, timestamp }?: ConvertOptions): string | number | bigint | boolean | number[] | DdbFunctionDefValue | DdbDurationValue | DdbDecimal32Value | DdbDecimal64Value | DdbDecimal32VectorValue | DdbDecimal64VectorValue | DdbSymbolExtendedValue | string[] | DdbExtObjValue | DdbTensorValue | Uint8Array<ArrayBufferLike> | DdbDecimal128VectorValue | BigInt128Array | Int8Array<ArrayBufferLike> | Int16Array<ArrayBufferLike> | Int32Array<ArrayBufferLike> | Float32Array<ArrayBufferLike> | Float64Array<ArrayBufferLike> | BigInt64Array<ArrayBufferLike> | IotVectorItemValue | DdbArrayVectorValue | DdbDurationVectorValue | Uint8Array<ArrayBufferLike>[] | DdbObj<DdbValue>[] | DdbMatrixValue | DdbChartValue;
190
+ export declare function convert(type: DdbType, value: DdbValue, le: boolean, { blob, char, timestamp }?: ConvertOptions): string | number | bigint | boolean | number[] | string[] | DdbFunctionDefValue | DdbDurationValue | DdbDecimal32Value | DdbDecimal64Value | DdbDecimal32VectorValue | DdbDecimal64VectorValue | DdbSymbolExtendedValue | DdbExtObjValue | DdbTensorValue | Uint8Array<ArrayBufferLike> | IotVectorItemValue | DdbDurationVectorValue | DdbDecimal128VectorValue | BigInt128Array | Int8Array<ArrayBufferLike> | Int16Array<ArrayBufferLike> | Int32Array<ArrayBufferLike> | Float32Array<ArrayBufferLike> | Float64Array<ArrayBufferLike> | BigInt64Array<ArrayBufferLike> | DdbArrayVectorValue | Uint8Array<ArrayBufferLike>[] | DdbObj<DdbValue>[] | DdbMatrixValue | DdbChartValue;
191
191
  /** 转换一个向量到 js 原生数组 */
192
192
  export declare function converts(type: DdbType, value: DdbVectorValue, rows: number, le: boolean, options?: ConvertOptions): any[] | Uint8Array;
193
193
  /** 构造 void 类型,默认为 `DdbVoidType.undefined` */
package/common.d.ts CHANGED
@@ -271,16 +271,11 @@ export declare function set_big_uint_128(dataView: DataView, byte_offset: number
271
271
  export declare function set_big_int_128(dataview: DataView, byte_offset: number, value: bigint, le?: boolean): void;
272
272
  export declare function generate_array_type(baseType: string, dimensions: number[]): string;
273
273
  export declare function set_timezone(timezone?: string): void;
274
- export declare function date2ms(date: number | null): number;
275
- export declare function date2str(date: number | null, format?: string): string;
276
- export declare function month2ms(month: number | null): number | null;
274
+ export declare function date2str(date: number | null): string;
277
275
  export declare function month2str(month: number | null): string;
278
- export declare function time2ms(time: number | null): number | null;
279
- export declare function time2str(time: number | null, format?: string): string;
280
- export declare function minute2ms(minute: number | null): number | null;
281
- export declare function minute2str(minute: number | null, format?: string): string;
282
- export declare function second2ms(second: number | null): number | null;
283
- export declare function second2str(second: number | null, format?: string): string;
276
+ export declare function time2str(time: number | null): string;
277
+ export declare function minute2str(minute: number | null): string;
278
+ export declare function second2str(second: number | null): string;
284
279
  export declare function datetime2ms(datetime: number | null): number | null;
285
280
  export declare function datetime2str(datetime: number | null, format?: string): string;
286
281
  /** _datetime_formatter.format 会在 date 为 Invalid Date 时抛出错误 */
@@ -301,8 +296,8 @@ export declare function datehour2str(datehour: number | null, format?: string):
301
296
  The format string corresponding to the incoming string, the default is `YYYY.MM.DD HH:mm:ss.SSS`
302
297
  https://day.js.org/docs/en/parse/string-format#list-of-all-available-parsing-tokens */
303
298
  export declare function str2timestamp(str: string, format?: string): bigint;
304
- export declare function nanotime2ns(nanotime: bigint | null): bigint | null;
305
- export declare function nanotime2str(nanotime: bigint | null, format?: string): string;
299
+ /** 格式化为 HH:mm:ss.SSSSSSSSS */
300
+ export declare function nanotime2str(nanotime: bigint | null): string;
306
301
  export declare function nanotimestamp2ns(nanotimestamp: bigint | null): bigint | null;
307
302
  /** format nanotimestamp value (bigint) to string
308
303
  - nanotimestamp: bigint value
package/common.js CHANGED
@@ -273,71 +273,75 @@ export function set_timezone(timezone = 'UTC') {
273
273
  _datetime_formatter = new Intl.DateTimeFormat('zh-CN', { dateStyle: 'short', timeStyle: 'medium', timeZone: timezone, hour12: false });
274
274
  }
275
275
  set_timezone();
276
- export function date2ms(date) {
277
- // server 的本地时间 (以 ms 为单位,1970.01.01 00:00:00 作为零点) 作为 UTC-0 格式化为字符串,然后根据本地的时区解析这个字符串转换为 UTC-8
278
- // 本地的时区与实际的时间值相关,getTimezoneOffset() 可能会受到夏令时 (DST) 的影响,不能使用
279
- // 得到的 utc 毫秒数交给 js date 或者 dayjs 去格式化
276
+ const is_leap = (y) => y % 4 === 0 && (y % 100 !== 0 || y % 400 === 0);
277
+ const months_normal = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
278
+ const months_leap = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
279
+ export function date2str(date) {
280
280
  if (date === null || date === nulls.int32)
281
- return null;
282
- const ms = 1000 * 3600 * 24 * date;
283
- return timestamp2ms(ms);
284
- }
285
- export function date2str(date, format = 'YYYY.MM.DD') {
286
- return (date === null || date === nulls.int32) ?
287
- 'null'
288
- :
289
- dayjs(date2ms(date)).format(format);
290
- }
291
- export function month2ms(month) {
292
- return (month === null || month === nulls.int32) ?
293
- null
294
- :
295
- dayjs(month2str(month), 'YYYY.MM[M]').valueOf();
281
+ return 'null';
282
+ // 1970-01-01 开始计算
283
+ let year = 1970;
284
+ let days = date;
285
+ // 处理正数日期(1970年之后)
286
+ while (days >= (is_leap(year) ? 366 : 365)) {
287
+ days -= is_leap(year) ? 366 : 365;
288
+ ++year;
289
+ }
290
+ // 处理负数日期(1970年之前)
291
+ while (days < 0) {
292
+ --year;
293
+ days += is_leap(year) ? 366 : 365;
294
+ }
295
+ const month_days = is_leap(year) ? months_leap : months_normal;
296
+ let month = 0;
297
+ while (days >= month_days[month]) {
298
+ days -= month_days[month];
299
+ ++month;
300
+ }
301
+ return String(year).padStart(4, '0') + '.' +
302
+ String(month + 1).padStart(2, '0') + '.' +
303
+ String(days + 1).padStart(2, '0');
296
304
  }
297
305
  export function month2str(month) {
298
306
  if (month === null || month === nulls.int32)
299
307
  return 'null';
300
308
  if (month < 0)
301
309
  return String(month);
302
- const _month = month % 12;
303
- const year = Math.trunc(month / 12);
304
- return `${String(year).padStart(4, '0')}.${String(_month + 1).padStart(2, '0')}M`;
305
- }
306
- export function time2ms(time) {
307
- return (time === null || time === nulls.int32) ?
308
- null
309
- :
310
- timestamp2ms(time);
310
+ return String(Math.trunc(month / 12)).padStart(4, '0') + '.' +
311
+ String((month % 12) + 1).padStart(2, '0') + 'M';
311
312
  }
312
- export function time2str(time, format = 'HH:mm:ss.SSS') {
313
- return (time === null || time === nulls.int32) ?
314
- 'null'
315
- :
316
- dayjs(time2ms(time)).format(format);
317
- }
318
- export function minute2ms(minute) {
313
+ export function time2str(time) {
314
+ if (time === null || time === nulls.int32)
315
+ return 'null';
316
+ const negative = time < 0;
317
+ if (negative)
318
+ time = -time;
319
+ return (negative ? '-' : '') +
320
+ String(Math.floor(time / 3600000)).padStart(2, '0') + ':' +
321
+ String(Math.floor((time % 3600000) / 60000)).padStart(2, '0') + ':' +
322
+ String(Math.floor((time % 60000) / 1000)).padStart(2, '0') + '.' +
323
+ String(time % 1000).padStart(3, '0');
324
+ }
325
+ export function minute2str(minute) {
319
326
  if (minute === null || minute === nulls.int32)
320
- return null;
321
- const ms = 60 * 1000 * minute;
322
- return timestamp2ms(ms);
323
- }
324
- export function minute2str(minute, format = 'HH:mm[m]') {
325
- return (minute === null || minute === nulls.int32) ?
326
- 'null'
327
- :
328
- dayjs(minute2ms(minute)).format(format);
329
- }
330
- export function second2ms(second) {
327
+ return 'null';
328
+ const negative = minute < 0;
329
+ if (negative)
330
+ minute = -minute;
331
+ return (negative ? '-' : '') +
332
+ String(Math.floor(minute / 60)).padStart(2, '0') + ':' +
333
+ String(minute % 60).padStart(2, '0') + 'm';
334
+ }
335
+ export function second2str(second) {
331
336
  if (second === null || second === nulls.int32)
332
- return null;
333
- const ms = 1000 * second;
334
- return timestamp2ms(ms);
335
- }
336
- export function second2str(second, format = 'HH:mm:ss') {
337
- return (second === null || second === nulls.int32) ?
338
- 'null'
339
- :
340
- dayjs(second2ms(second)).format(format);
337
+ return 'null';
338
+ const negative = second < 0;
339
+ if (negative)
340
+ second = -second;
341
+ return (negative ? '-' : '') +
342
+ String(Math.floor(second / 3600)).padStart(2, '0') + ':' +
343
+ String(Math.floor((second % 3600) / 60)).padStart(2, '0') + ':' +
344
+ String(second % 60).padStart(2, '0');
341
345
  }
342
346
  export function datetime2ms(datetime) {
343
347
  if (datetime === null || datetime === nulls.int32)
@@ -353,6 +357,9 @@ export function datetime2str(datetime, format = 'YYYY.MM.DD HH:mm:ss') {
353
357
  }
354
358
  /** _datetime_formatter.format 会在 date 为 Invalid Date 时抛出错误 */
355
359
  export function timestamp2ms(timestamp) {
360
+ // 将 server 的本地时间 (以 ms 为单位,1970.01.01 00:00:00 作为零点) 作为 UTC-0 格式化为字符串,然后根据本地的时区解析这个字符串转换为 UTC-8
361
+ // 本地的时区与实际的时间值相关,getTimezoneOffset() 可能会受到夏令时 (DST) 的影响,不能使用
362
+ // 得到的 utc 毫秒数交给 js date 或者 dayjs 去格式化
356
363
  if (timestamp === null || timestamp === nulls.int64)
357
364
  return null;
358
365
  const date = new Date(Number(timestamp));
@@ -396,23 +403,15 @@ export function str2timestamp(str, format = 'YYYY.MM.DD HH:mm:ss.SSS') {
396
403
  return BigInt(-(1000 * 60 * new Date(ms).getTimezoneOffset()) +
397
404
  ms);
398
405
  }
399
- export function nanotime2ns(nanotime) {
400
- return nanotimestamp2ns(nanotime);
401
- }
402
- export function nanotime2str(nanotime, format = 'HH:mm:ss.SSSSSSSSS') {
406
+ /** 格式化为 HH:mm:ss.SSSSSSSSS */
407
+ export function nanotime2str(nanotime) {
403
408
  if (nanotime === null || nanotime === nulls.int64)
404
409
  return 'null';
405
- if (nanotime < 0n)
406
- return String(nanotime);
407
- const i_second_start = format.indexOf('ss');
408
- check(i_second_start !== -1, t('格式串必须包含秒的格式 (ss)'));
409
- const i_second_end = i_second_start + 2;
410
- const i_nanosecond_start = format.indexOf('SSSSSSSSS', i_second_end);
411
- check(i_nanosecond_start !== -1, t('格式串必须包含纳秒的格式 (SSSSSSSSS)'));
412
- const ms = Number(nanotime) / 1000000;
413
- return (dayjs(timestamp2ms(ms)).format(format.slice(0, i_second_end)) +
414
- format.slice(i_second_end, i_nanosecond_start) +
415
- String(nanotime % 1000000000n).padStart(9, '0'));
410
+ const negative = nanotime < 0n;
411
+ if (negative)
412
+ nanotime = -nanotime;
413
+ return time2str(Number(nanotime / 1000000n)).slice(-3) +
414
+ String(nanotime % 1000000000n).padStart(9, '0');
416
415
  }
417
416
  export function nanotimestamp2ns(nanotimestamp) {
418
417
  if (nanotimestamp === null || nanotimestamp === nulls.int64)
@@ -480,11 +479,11 @@ export const time_formatters = new Map([
480
479
  [DdbType.date, date2str],
481
480
  [DdbType.month, month2str],
482
481
  [DdbType.time, time2str],
482
+ [DdbType.nanotime, nanotime2str],
483
483
  [DdbType.minute, minute2str],
484
484
  [DdbType.second, second2str],
485
485
  [DdbType.datetime, datetime2str],
486
486
  [DdbType.timestamp, timestamp2str],
487
- [DdbType.nanotime, nanotime2str],
488
487
  [DdbType.nanotimestamp, nanotimestamp2str],
489
488
  [DdbType.datehour, datehour2str],
490
489
  ]);
package/common.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["common.ts"],"names":[],"mappings":"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","sourcesContent":["import { default as dayjs, type Dayjs } from 'dayjs'\nimport DayjsCustomParseFormat from 'dayjs/plugin/customParseFormat.js'\ndayjs.extend(DayjsCustomParseFormat)\n\nimport { empty, set_reverse, type ValueOf } from 'xshell/prototype.common.js'\nimport { check } from 'xshell/utils.common.js'\n\nimport ipaddrjs from 'ipaddr.js'\nconst { fromByteArray: buf2ipaddr } = ipaddrjs\n\nimport { t } from './i18n/index.ts'\n\n\nexport const nulls = {\n int8: -0x80, // -128\n int16: -0x80_00, // -32768\n int32: -0x80_00_00_00, // -21_4748_3648\n int64: -0x80_00_00_00_00_00_00_00n, // -922_3372_0368_5477_5808\n \n // -170_1411_8346_0469_2317_3168_7303_7158_8410_5728\n int128: -0x80_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00n,\n \n float32: -3.4028234663852886e+38,\n \n /** -Number.MAX_VALUE */\n double: -Number.MAX_VALUE,\n \n bytes16: new Uint8Array(16)\n} as const\n\n\nexport const DdbForm = set_reverse({\n scalar: 0,\n vector: 1,\n pair: 2,\n matrix: 3,\n set: 4,\n dict: 5,\n table: 6,\n chart: 7,\n \n /** 节点内部通信可能会使用,调用函数执行脚本一般不会返回这种类型 */\n chunk: 8,\n \n /** sysobj */\n object: 9,\n tensor: 10,\n \n extobj: 11\n} as const)\n\nexport type DdbForm = ValueOf<typeof DdbForm>\n\n\n/** DolphinDB DataType\n 对应的 array vector 类型为 64 + 基本类型\n 对应的 extended 类型为 128 + 基本类型 */\nexport const DdbType = set_reverse({\n void: 0,\n bool: 1,\n char: 2,\n short: 3,\n int: 4,\n long: 5,\n date: 6,\n month: 7,\n time: 8,\n minute: 9,\n second: 10,\n datetime: 11,\n timestamp: 12,\n nanotime: 13,\n nanotimestamp: 14,\n float: 15,\n double: 16,\n symbol: 17,\n string: 18,\n uuid: 19,\n functiondef: 20,\n handle: 21,\n code: 22,\n datasource: 23,\n resource: 24,\n any: 25,\n compressed: 26,\n dict: 27,\n datehour: 28,\n ipaddr: 30,\n int128: 31,\n blob: 32,\n complex: 34,\n point: 35,\n duration: 36,\n \n decimal32: 37,\n decimal64: 38,\n decimal128: 39,\n \n object: 40,\n iotany: 41,\n \n instrument: 42,\n market_data: 43,\n \n symbol_extended: 145, // 128 + DdbType.symbol\n} as const)\n\nexport type DdbType = ValueOf<typeof DdbType>\n\n\nexport const number_nulls = new Map<DdbType, number | bigint>([\n [DdbType.short, nulls.int16],\n [DdbType.int, nulls.int32],\n [DdbType.long, nulls.int64],\n [DdbType.float, nulls.float32],\n [DdbType.double, nulls.double],\n])\n\n\nexport const DdbFunctionType = set_reverse({\n SystemFunc: 0,\n SystemProc: 1,\n OperatorFunc: 2,\n UserDefinedFunc: 3,\n PartialFunc: 4,\n DynamicFunc: 5,\n PiecewiseFunc: 6,\n JitFunc: 7,\n JitPartialFunc: 8,\n} as const)\n\nexport type DdbFunctionType = ValueOf<typeof DdbFunctionType>\n\n\nexport const DdbDurationUnit = set_reverse({\n ns: 0,\n us: 1,\n ms: 2,\n s: 3,\n m: 4,\n H: 5,\n d: 6,\n w: 7,\n M: 8,\n y: 9,\n B: 10\n} as const)\n\nexport type DdbDurationUnit = ValueOf<typeof DdbDurationUnit>\n\n\nexport const DdbChartType = set_reverse({\n area: 0,\n bar: 1,\n column: 2,\n histogram: 3,\n line: 4,\n pie: 5,\n scatter: 6,\n trend: 7,\n kline: 8,\n surface: 9\n} as const)\n\nexport type DdbChartType = ValueOf<typeof DdbChartType>\n\n\n// server 实现中区分了 0: NULL (nothing), 1: NULL (null), 2: DFLT (default)\n// Void::serialize()\n// (isNothing() ? 0 : 1) + (isDefault_ ? 2 : 0);\nexport const DdbVoidType = set_reverse({\n undefined: 0,\n null: 1,\n default: 2\n} as const)\n\nexport type DdbVoidType = ValueOf<typeof DdbVoidType>\n\n\nexport interface DdbFunctionDefValue {\n type: DdbFunctionType\n name: string\n}\n\nexport interface DdbDurationValue {\n unit: DdbDurationUnit\n \n /** int32 */\n data: number\n}\n\n\nexport interface DdbDecimal32Value {\n /** int32, data 需要除以 10^scale 得到原值 */\n scale: number\n \n /** int32, 空值为 null ddb null is js null */\n data: number | null\n}\n\nexport interface DdbDecimal64Value {\n /** int32, data 需要除以 10^scale 得到原值 */\n scale: number\n \n /** int64, 空值为 null empty value is null */\n data: bigint | null\n}\n\nexport interface DdbDecimal128Value {\n /** int32, data 需要除以 10^scale 得到原值 */\n scale: number\n \n /** int128, 空值为 null empty value is null */\n data: bigint | null\n}\n\nexport interface DdbDecimal32VectorValue {\n scale: number\n \n data: Int32Array\n}\n\nexport interface DdbDecimal64VectorValue {\n scale: number\n \n data: BigInt64Array\n}\n\n\nexport type DdbDurationVectorValue = DdbDurationValue[]\n\n\nexport interface DdbSymbolExtendedValue {\n base_id: number\n base: string[]\n data: Uint32Array\n}\n\n\nexport interface DdbExtObjValue {\n type: Uint8Array\n version: number\n data: Uint8Array\n}\n\n\nexport const dictables = new Set([DdbType.any, DdbType.string, DdbType.double, DdbType.float, DdbType.int, DdbType.long])\n\n\n/** 工具,取得某个 DdbType 的字节数 */\nexport const ddb_tensor_bytes = {\n [DdbType.bool]: 1,\n [DdbType.char]: 1,\n [DdbType.short]: 2,\n [DdbType.int]: 4,\n [DdbType.long]: 8,\n [DdbType.float]: 4,\n [DdbType.double]: 8,\n} as const\n\n\nexport type TensorElem = TensorData | boolean | number | bigint | null | string\nexport interface TensorData extends Array<TensorElem> { }\n\nexport interface DdbTensorMetadata {\n /** Tensor 的元素的数据类型 */\n data_type: DdbType\n \n /** Tensor 类型 */\n tensor_type: number\n \n /** 设备类型 */\n device_type: number\n \n /** Tensor Flags */\n tensor_flags: number\n \n /** 维度 */\n dimensions: number\n \n /** shape, shape[i] 表示第 i 个维度的 size */\n shape: number[]\n \n /** strides, strides[i] 表示在第 i 个维度,一个元素与下一个元素的距离 */\n strides: number[]\n \n /** 保留值 */\n preserve_value: bigint\n \n /** 元素个数 */\n elem_count: number\n}\n\nexport interface DdbTensorValue extends DdbTensorMetadata {\n /** 数据 */\n data: Uint8Array\n}\n\n\n/** DdbObj.data() 返回的表格对象 */\nexport interface DdbTableData <TRow = any> {\n /** 表名 */\n name: string\n \n /** 每一列的名称 */\n columns: string[]\n \n /** 每一列的原始 ddb 数据类型 */\n types: DdbType[]\n \n /** 表格数据,每一行的对象组成的数组 */\n data: TRow[]\n}\n\n/** DdbObj.data() 返回的 Tensor 对象 */\nexport interface DdbTensorData extends DdbTensorMetadata {\n /** 数据 */\n data: TensorData\n}\n\n\n/** DdbObj.data() 返回的矩阵对象 */\nexport interface DdbMatrixData {\n /** 原始数据类型 */\n type: DdbType\n \n /** 行数 */\n nrows: number\n \n /** 列数 */\n ncolumns: number\n \n /** 行名称 */\n rows?: any[]\n \n /** 列名称 */\n columns?: any[]\n \n /** 数据, data[0][1] 为第 0 行第 1 列数据 */\n data: any[][]\n}\n\n\nexport type DdbScalarValue = \n null | boolean | number | bigint | string |\n Uint8Array | // uuid, ipaddr, int128, blob\n [number, number] | // complex, point\n DdbFunctionDefValue |\n DdbDurationValue | \n DdbDecimal32Value | DdbDecimal64Value | DdbDecimal128Value\n\n\nexport type IotVectorItemValue = [number | string | bigint | boolean][]\n\n\n/** 根据 DdbType 获取其名称,array vector type 自动在后面加上 [] */\nexport function get_type_name (type: DdbType) {\n return `${DdbType[type] || type}${ 64 <= type && type < 128 ? '[]' : '' }`\n}\n\n\nexport function is_decimal_type (type: DdbType) {\n return type === DdbType.decimal32 || type === DdbType.decimal64 || type === DdbType.decimal128\n}\n\n\nexport function is_decimal_null_value (type: DdbType, value: number | bigint) {\n return (\n (value === nulls.int128 && type === DdbType.decimal128) ||\n (value === nulls.int64 && type === DdbType.decimal64) ||\n (value === nulls.int32 && type === DdbType.decimal32)\n )\n}\n\nexport function get_duration_unit (code: number) {\n let str = String.fromCharCode((code >> 24) & 0xff)\n str += String.fromCharCode((code >> 16) & 0xff)\n str += String.fromCharCode((code >> 8) & 0xff)\n str += String.fromCharCode(code & 0xff)\n return str\n}\n\n\nexport type ConvertableDdbTimeValue = undefined | null | number | string | Date | Dayjs\n\nexport const ddb_time_converters = {\n [DdbType.date]: (date: Date) =>\n Math.floor((date.getTime() - 1000 * 60 * date.getTimezoneOffset()) / (1000 * 3600 * 24)),\n \n [DdbType.datetime]: (date: Date) =>\n (date.getTime() - 1000 * 60 * date.getTimezoneOffset()) / 1000,\n \n [DdbType.timestamp]: (date: Date) =>\n BigInt(date.getTime() - 1000 * 60 * date.getTimezoneOffset()),\n \n [DdbType.nanotimestamp]: (date: Date) =>\n BigInt(date.getTime() - 1000 * 60 * date.getTimezoneOffset()) * 1000000n\n} as Record<DdbType, (date: Date) => number | bigint>\n\n\nfunction value_to_date (value: ConvertableDdbTimeValue, type: DdbType) {\n if (typeof value === 'number' || typeof value === 'string')\n return new Date(value)\n else if (value instanceof Date)\n return value\n else if (dayjs.isDayjs(value))\n return new Date(value.valueOf())\n else\n throw new Error(t('value 不能转换为 {{typename}}', { typename: get_type_name(type) }))\n}\n\n\nexport function get_time_ddbobj (type: DdbType, js_value: ConvertableDdbTimeValue) {\n return {\n form: DdbForm.scalar,\n type,\n value: js_value === null ?\n null\n :\n type === DdbType.nanotimestamp && typeof js_value === 'string' ?\n str2nanotimestamp(js_value)\n :\n ddb_time_converters[type](\n js_value === undefined ? new Date() : value_to_date(js_value, type))\n }\n}\n\n\nexport function get_times_ddbobj (\n type: DdbType,\n js_values?: ConvertableDdbTimeValue[],\n name?: string\n) {\n const length = js_values?.length || 0\n \n const int64 = type === DdbType.timestamp || type === DdbType.nanotimestamp\n \n let values = int64 ? new BigInt64Array(length) : new Int32Array(length)\n \n const converter = ddb_time_converters[type]\n \n for (let i = 0; i < length; ++i) {\n const value = js_values[i]\n \n values[i] = empty(value) ?\n int64 ? nulls.int64 : nulls.int32\n :\n type === DdbType.nanotimestamp && typeof value === 'string' ?\n str2nanotimestamp(value)\n :\n converter(value_to_date(value, type))\n }\n \n return {\n form: DdbForm.vector,\n type,\n rows: length,\n cols: 1,\n value: values,\n name\n }\n}\n\n\n// DataView Extends for bigint 128 operations\nexport function get_big_uint_128 (dataview: DataView, byte_offset: number, le = true) {\n let cursor = byte_offset + (le ? 15 : 0)\n const end = byte_offset + (le ? -1 : 16)\n const step = le ? -1 : 1\n let value = 0n\n \n while (cursor !== end) {\n value = value << 8n | BigInt(dataview.getUint8(cursor))\n cursor += step\n }\n \n return value\n}\n\nexport function get_big_int_128 (dataview: DataView, byte_offset: number, le = true) {\n return BigInt.asIntN(128, get_big_uint_128(dataview, byte_offset, le))\n}\n\n\nexport function set_big_uint_128 (dataView: DataView, byte_offset: number, value: bigint, le = true) {\n let cursor = byte_offset + (le ? 0 : 15)\n const end = byte_offset + (le ? 16 : -1)\n const step = le ? 1 : -1\n \n while (cursor !== end) {\n dataView.setUint8(cursor, Number(value & 0xffn))\n value = value >> 8n\n cursor += step\n }\n}\n\nexport function set_big_int_128 (dataview: DataView, byte_offset: number, value: bigint, le = true) {\n set_big_uint_128(dataview, byte_offset, value, le)\n}\n\nexport function generate_array_type (baseType: string, dimensions: number[]): string {\n let result = baseType\n dimensions.forEach(dimension => {\n result += `[${dimension}]`\n })\n return result\n}\n\n\n// 大端\n// const dataBE = new ArrayBuffer(16)\n// const dataViewBE = new DataView(dataBE)\n// set_big_int_128(dataViewBE, 0, -34355n, false)\n// console.log(dataViewBE.buffer)\n// const bigInt128BE = get_big_int_128(dataViewBE, 0, false)\n// const bigUint128BE = get_big_uint_128(dataViewBE, 0, false)\n// console.log(bigInt128BE.toString(), bigUint128BE.toString())\n\n// 小端\n// const dataLE = new ArrayBuffer(16)\n// const dataViewLE = new DataView(dataLE)\n// set_big_int_128(dataViewLE, 0, -34355n, true)\n// console.log(dataViewLE.buffer)\n// const bigInt128LE = get_big_int_128(dataViewLE, 0, true)\n// const bigUint128LE = get_big_uint_128(dataViewLE, 0, true)\n// console.log(bigInt128LE.toString(), bigUint128LE.toString())\n\n\n/** 用来处理时差 To deal with jet lag */\nlet _datetime_formatter: Intl.DateTimeFormat\n\nexport function set_timezone (timezone = 'UTC') {\n _datetime_formatter = new Intl.DateTimeFormat('zh-CN', { dateStyle: 'short', timeStyle: 'medium', timeZone: timezone, hour12: false })\n}\n\nset_timezone()\n\n\nexport function date2ms (date: number | null) {\n // 将 server 的本地时间 (以 ms 为单位,1970.01.01 00:00:00 作为零点) 作为 UTC-0 格式化为字符串,然后根据本地的时区解析这个字符串转换为 UTC-8\n // 本地的时区与实际的时间值相关,getTimezoneOffset() 可能会受到夏令时 (DST) 的影响,不能使用\n // 得到的 utc 毫秒数交给 js date 或者 dayjs 去格式化\n \n if (date === null || date === nulls.int32)\n return null\n \n const ms = 1000 * 3600 * 24 * date\n \n return timestamp2ms(ms)\n}\n\nexport function date2str (date: number | null, format = 'YYYY.MM.DD') {\n return (date === null || date === nulls.int32) ? \n 'null'\n :\n dayjs(\n date2ms(date)\n ).format(format)\n}\n\nexport function month2ms (month: number | null): number | null {\n return (month === null || month === nulls.int32) ?\n null\n :\n dayjs(\n month2str(month),\n 'YYYY.MM[M]'\n ).valueOf()\n}\n\nexport function month2str (month: number | null) {\n if (month === null || month === nulls.int32)\n return 'null'\n \n if (month < 0)\n return String(month)\n \n const _month = month % 12\n const year = Math.trunc(month / 12)\n return `${String(year).padStart(4, '0')}.${String(_month + 1).padStart(2, '0')}M`\n}\n\nexport function time2ms (time: number | null): number | null {\n return (time === null || time === nulls.int32) ?\n null\n :\n timestamp2ms(time)\n}\n\nexport function time2str (time: number | null, format = 'HH:mm:ss.SSS') {\n return (time === null || time === nulls.int32) ?\n 'null'\n :\n dayjs(\n time2ms(time)\n ).format(format)\n}\n\nexport function minute2ms (minute: number | null): number | null {\n if (minute === null || minute === nulls.int32)\n return null\n \n const ms = 60 * 1000 * minute\n \n return timestamp2ms(ms)\n}\n\nexport function minute2str (minute: number | null, format = 'HH:mm[m]') {\n return (minute === null || minute === nulls.int32) ?\n 'null'\n :\n dayjs(\n minute2ms(minute)\n ).format(format)\n}\n\nexport function second2ms (second: number | null): number | null {\n if (second === null || second === nulls.int32)\n return null\n \n const ms = 1000 * second\n \n return timestamp2ms(ms)\n}\n\nexport function second2str (second: number | null, format = 'HH:mm:ss') {\n return (second === null || second === nulls.int32) ?\n 'null'\n :\n dayjs(\n second2ms(second)\n ).format(format)\n}\n\nexport function datetime2ms (datetime: number | null): number | null {\n if (datetime === null || datetime === nulls.int32)\n return null\n \n const date = new Date(1000 * datetime)\n return new Date(`${_datetime_formatter.format(date)}.${String(date.getUTCMilliseconds()).padStart(3, '0')}`).valueOf()\n}\n\nexport function datetime2str (datetime: number | null, format = 'YYYY.MM.DD HH:mm:ss') {\n return (datetime === null || datetime === nulls.int32) ?\n 'null'\n :\n dayjs(\n datetime2ms(datetime)\n ).format(format)\n}\n\n/** _datetime_formatter.format 会在 date 为 Invalid Date 时抛出错误 */\nexport function timestamp2ms (timestamp: bigint | number | null): number | null {\n if (timestamp === null || timestamp === nulls.int64)\n return null\n \n const date = new Date(Number(timestamp))\n return new Date(`${_datetime_formatter.format(date)}.${String(date.getUTCMilliseconds()).padStart(3, '0')}`).valueOf()\n}\n\n\n/** format timestamp (bigint) to string \n - timestamp: bigint value\n - format?: \n 格式串,默认是 `YYYY.MM.DD HH:mm:ss.SSS` format string, default to `YYYY.MM.DD HH:mm:ss.SSS` \n https://day.js.org/docs/en/parse/string-format#list-of-all-available-parsing-tokens */\nexport function timestamp2str (timestamp: bigint | null, format = 'YYYY.MM.DD HH:mm:ss.SSS') {\n return (timestamp === null || timestamp === nulls.int64) ?\n 'null'\n :\n dayjs(\n timestamp2ms(timestamp)\n ).format(format)\n}\n\nexport function datehour2ms (datehour: number | null): number | null {\n if (datehour === null || datehour === nulls.int32)\n return null\n \n const ms = 1000 * 3600 * datehour\n \n return timestamp2ms(ms)\n}\n\nexport function datehour2str (datehour: number | null, format = 'YYYY.MM.DDTHH') {\n if (datehour === null || datehour === nulls.int32)\n return 'null'\n \n const ms = 1000 * 3600 * datehour\n \n return dayjs(\n timestamp2ms(ms)\n ).format(format)\n}\n\n\n/** parse timestamp string to bigint value \n - str: timestamp string, 如果为空字符串或 'null' 会返回对应的空值 (nulls.int64) \n timestamp string, If it is an empty string or 'null', it will return the corresponding empty value (nulls.int64)\n - format?: \n 对应传入字符串的格式串,默认是 `YYYY.MM.DD HH:mm:ss.SSS` \n The format string corresponding to the incoming string, the default is `YYYY.MM.DD HH:mm:ss.SSS` \n https://day.js.org/docs/en/parse/string-format#list-of-all-available-parsing-tokens */\nexport function str2timestamp (str: string, format = 'YYYY.MM.DD HH:mm:ss.SSS') {\n if (!str || str === 'null')\n return nulls.int64\n \n check(str.length === format.length, t('timestamp 字符串长度必须等于格式串长度'))\n \n const ms = dayjs(str, format).valueOf()\n \n return BigInt(\n -(1000 * 60 * new Date(ms).getTimezoneOffset()) +\n ms\n )\n}\n\nexport function nanotime2ns (nanotime: bigint | null): bigint | null {\n return nanotimestamp2ns(nanotime)\n}\n\nexport function nanotime2str (nanotime: bigint | null, format = 'HH:mm:ss.SSSSSSSSS') {\n if (nanotime === null || nanotime === nulls.int64)\n return 'null'\n \n if (nanotime < 0n)\n return String(nanotime)\n \n const i_second_start = format.indexOf('ss')\n check(i_second_start !== -1, t('格式串必须包含秒的格式 (ss)'))\n \n const i_second_end = i_second_start + 2\n \n const i_nanosecond_start = format.indexOf('SSSSSSSSS', i_second_end)\n check(i_nanosecond_start !== -1, t('格式串必须包含纳秒的格式 (SSSSSSSSS)'))\n \n const ms = Number(nanotime) / 1000000\n \n return (\n dayjs(\n timestamp2ms(ms)\n ).format(\n format.slice(0, i_second_end)\n ) + \n format.slice(i_second_end, i_nanosecond_start) + \n String(nanotime % 1000000000n).padStart(9, '0')\n )\n}\n\nexport function nanotimestamp2ns (nanotimestamp: bigint | null): bigint | null {\n if (nanotimestamp === null || nanotimestamp === nulls.int64)\n return null\n \n const date = new Date(Number(nanotimestamp / 1000000n))\n return BigInt(\n new Date(`${_datetime_formatter.format(date)}.${String(date.getUTCMilliseconds()).padStart(3, '0')}`).valueOf()\n ) * 1000000n + nanotimestamp % 1000000n\n}\n\n/** format nanotimestamp value (bigint) to string \n - nanotimestamp: bigint value\n - format?: \n 格式串,默认是 `YYYY.MM.DD HH:mm:ss.SSSSSSSSS` format string, default is `YYYY.MM.DD HH:mm:ss.SSSSSSSSS` \n 秒的格式为 ss (必须包含); 纳秒的格式为 SSSSSSSSS (必须包含) Seconds are in the format ss (must be included); nanoseconds are in the format SSSSSSSSS (must be included) \n https://day.js.org/docs/en/parse/string-format#list-of-all-available-parsing-tokens\n*/\nexport function nanotimestamp2str (nanotimestamp: bigint | null, format = 'YYYY.MM.DD HH:mm:ss.SSSSSSSSS') {\n // tests:\n // nanotimestamp2str(0n)\n // nanotimestamp2str(-1n)\n // nanotimestamp2str(-9_9999_9999n)\n // nanotimestamp2str(-10_0000_0000n)\n // nanotimestamp2str(-10_0000_0001n)\n \n if (nanotimestamp === null || nanotimestamp === nulls.int64)\n return 'null'\n \n const i_second_start = format.indexOf('ss')\n check(i_second_start !== -1, t('格式串必须包含秒的格式 (ss)'))\n \n const i_second_end = i_second_start + 2\n \n const i_nanosecond_start = format.indexOf('SSSSSSSSS', i_second_end)\n check(i_nanosecond_start !== -1, t('格式串必须包含纳秒的格式 (SSSSSSSSS)'))\n \n const remainder = nanotimestamp % 1000000000n\n const borrow = remainder < 0n\n \n const ms = Number((nanotimestamp - remainder + (borrow ? -1000000000n : 0n)) / 1000000n)\n \n return (\n dayjs(\n _datetime_formatter.format(new Date(ms))\n ).format(\n format.slice(0, i_second_end)\n ) + \n format.slice(i_second_end, i_nanosecond_start) + \n String(\n borrow ?\n (remainder + 1000000000n) % 1000000000n\n :\n remainder\n ).padStart(9, '0')\n )\n}\n\n/** parse nano timestamp string to bigint value \n - str: nano timestamp string, 如果为空字符串或 'null' 会返回对应的空值 (nulls.int64) \n nano timestamp string, If it is an empty string or 'null', it will return the corresponding empty value (nulls.int64)\n - format?: \n 对应传入字符串的格式串,默认是 `YYYY.MM.DD HH:mm:ss.SSSSSSSSS` \n 秒的格式为 ss (必须包含); 纳秒的格式为 SSSSSSSSS (必须包含) \n https://day.js.org/docs/en/parse/string-format#list-of-all-available-parsing-tokens \n The format string corresponding to the incoming string, the default is `YYYY.MM.DD HH:mm:ss.SSSSSSSSS` \n Seconds are in the format ss (must be included); nanoseconds are in the format SSSSSSSSS (must be included) */\nexport function str2nanotimestamp (str: string, format = 'YYYY.MM.DD HH:mm:ss.SSSSSSSSS') {\n if (!str || str === 'null')\n return nulls.int64\n \n check(str.length === format.length, t('nanotimestamp 字符串长度必须等于格式串长度'))\n \n const i_second_start = format.indexOf('ss')\n check(i_second_start !== -1, t('格式串必须包含秒的格式 (ss)'))\n \n const i_second_end = i_second_start + 2\n \n const i_nanosecond_start = format.indexOf('SSSSSSSSS', i_second_end)\n check(i_nanosecond_start !== -1, t('格式串必须包含纳秒的格式 (SSSSSSSSS)'))\n \n const ms = dayjs(\n str.slice(0, i_second_end),\n format.slice(0, i_second_end)\n ).valueOf()\n \n return (\n BigInt(\n -(1000 * 60 * new Date(ms).getTimezoneOffset()) +\n ms\n ) * 1000000n\n +\n BigInt(\n str.slice(i_nanosecond_start, i_nanosecond_start + 9)\n )\n )\n}\n\n\n/** 时间值转字符串函数集合 */\nexport const time_formatters = new Map<\n DdbType, \n (value: number | bigint, format?: string) => string\n>([\n [DdbType.date, date2str],\n [DdbType.month, month2str],\n [DdbType.time, time2str],\n [DdbType.minute, minute2str],\n [DdbType.second, second2str],\n [DdbType.datetime, datetime2str],\n [DdbType.timestamp, timestamp2str],\n [DdbType.nanotime, nanotime2str],\n [DdbType.nanotimestamp, nanotimestamp2str],\n [DdbType.datehour, datehour2str],\n])\n\n\nexport function ipaddr2str (buffer: Uint8Array, le = true, ipv6?: boolean) {\n let buf = buffer\n \n if (le)\n buf = buffer.slice().reverse()\n \n const i_non_zero = buf.findIndex(x => x !== 0)\n \n if (\n ipv6 || \n i_non_zero !== -1 && i_non_zero < 12\n ) // ipv6\n return buf2ipaddr([...buf]).toString()\n else // ipv4\n return buf.subarray(12).join('.')\n}\n\nexport function uuid2str (buffer: Uint8Array, le = true) {\n const str = int1282str(buffer, le)\n return `${str.slice(0, 8)}-${str.slice(8, 12)}-${str.slice(12, 16)}-${str.slice(16, 20)}-${str.slice(20)}`\n}\n\nexport function int1282str (buffer: Uint8Array, le = true) {\n let buf = buffer\n \n if (le)\n buf = buffer.slice().reverse()\n \n return [...buf].map(x => \n x.toString(16)\n .padStart(2, '0')\n ).join('')\n}\n\n\nexport interface ConvertOptions {\n /** `'string'` blob 转换到 string 还是 Uint8Array */\n blob?: 'string' | 'binary'\n \n /** `'string'` char 转换到 string 还是 number */\n char?: 'string' | 'number'\n \n /** `'strings'` char vector 转换格式: strings 转为 string[], binary 转为 Uint8Array */\n chars?: 'strings' | 'binary'\n \n /** `'ms'` timestamp 类型转换为字符串表示时显示到秒还是毫秒 */\n timestamp?: 's' | 'ms'\n \n /** `'data'` 表格类型返回格式: data 转为 TResult, full 转为 DdbTableData */\n table?: 'data' | 'full'\n}\n\n\nexport const winsize = 10000 as const\n\nexport type DdbRpcType = 'script' | 'function' | 'variable' | 'connect'\n\nexport type DdbLanguage = 'dolphindb' | 'python' | 'q'\n\n\nconst dolphindb_function_definition_pattern = /\\bdef (\\w+) \\(/\n\nexport const function_definition_patterns = {\n dolphindb: dolphindb_function_definition_pattern,\n python: dolphindb_function_definition_pattern,\n q: /(\\w+): \\{\\[/\n}\n\n\nexport const funcdefs = {\n invoke: {\n dolphindb:\n 'def invoke (func, args_json) {\\n' +\n ' args = fromStdJson(args_json)\\n' +\n ' func_ = func\\n' +\n ' if (type(func) == STRING)\\n' +\n ' func_ = funcByName(func)\\n' +\n ' if (type(args) != ANY)\\n' +\n ' args = cast(args, ANY)\\n' +\n ' return unifiedCall(func_, args)\\n' +\n '}\\n',\n \n python:\n 'def invoke (func, args_json):\\n' +\n ' args = fromStdJson(args_json)\\n' +\n ' func_ = func\\n' +\n ' if type(func) == STRING:\\n' +\n ' func_ = funcByName(func)\\n' +\n ' if type(args) != ANY:\\n' +\n ' args = cast(args, ANY)\\n' +\n ' return unifiedCall(func_, args)\\n',\n \n q:\n 'invoke: {[fn; args_json]\\n' +\n ' args_: fromStdJson[args_json];\\n' +\n ' func_: fn;\\n' +\n ' if[typestr[fn] = `STRING;\\n' +\n ' func_: get toCharArray fn;\\n' +\n ' if[type[args_] <> 0] args_: cast[args_; 25]\\n' +\n ' ];\\n' +\n ' func_ . args_\\n' +\n ' }\\n'\n },\n \n jsrpc: {\n dolphindb:\n 'def jsrpc (node, func_name, args) {\\n' +\n ' args_ = args\\n' +\n ' if (func_name == \"invoke\")\\n' +\n ' args_[0] = funcByName(args[0])\\n' +\n ' return rpc(node, unifiedCall, funcByName(func_name), args_)\\n' +\n '}\\n',\n \n python:\n 'def jsrpc (node, func_name, args):\\n' +\n ' args_ = args\\n' +\n ' if func_name == \"invoke\":\\n' +\n ' args_[0] = funcByName(args[0])\\n' +\n ' return rpc(node, unifiedCall, funcByName(func_name), args_)\\n',\n \n q:\n 'jsrpc: {[node; func_name; args]\\n' +\n ' args_: args;\\n' +\n ' if[(`$func_name)=`invoke; args_[0]:funcByName[args[0]]];\\n' +\n ' rpc[node; unifiedCall; funcByName[func_name]; args_]\\n' +\n ' }\\n'\n },\n \n pnode_run: {\n dolphindb:\n 'def pnode_run (nodes, func_name, args, add_node_alias = true) {\\n' +\n ' nargs = size(args)\\n' +\n ' func = funcByName(func_name)\\n' +\n ' \\n' +\n ' if (!nargs)\\n' +\n ' return pnodeRun(func, nodes, add_node_alias)\\n' +\n ' \\n' +\n ' args_partial = array(any, 1 + nargs, 1 + nargs)\\n' +\n ' args_partial[0] = func\\n' +\n ' args_partial[1:] = args\\n' +\n ' return pnodeRun(\\n' +\n ' unifiedCall(partial, args_partial),\\n' +\n ' nodes,\\n' +\n ' add_node_alias\\n' +\n ' )\\n' +\n '}\\n',\n \n python:\n 'def pnode_run (nodes, func_name, args, add_node_alias):\\n' +\n ' nargs = size(args)\\n' +\n ' func = funcByName(func_name)\\n' +\n ' \\n' +\n ' if not nargs:\\n' +\n ' return pnodeRun(func, nodes, add_node_alias)\\n' +\n ' \\n' +\n ' args_partial = [ ]\\n' +\n ' args_partial.append(func)\\n' +\n ' for a in args:\\n' +\n ' args_partial.append(a)\\n' +\n ' \\n' +\n ' return pnodeRun(\\n' +\n ' unifiedCall(partial, args_partial),\\n' +\n ' nodes,\\n' +\n ' add_node_alias\\n' +\n ' )\\n',\n \n q:\n 'pnode_run: {[nodes; func_name; args]\\n' +\n ' nargs_: count args;\\n' +\n ' func_: get toCharArray func_name;\\n' +\n ' if [nargs_=0; : pnodeRun[func_; nodes; 1b]];\\n' +\n ' args_partial_: func,args;\\n' +\n ' pnodeRun[unifiedCall[partial; args_partial_]; nodes; 1b]\\n' +\n ' }\\n'\n }\n} as const\n\n\n// 缓存,为了优化性能,通常 options.decimals, options.grouping 都是不变的\n\nlet _decimals = null\nlet _grouping = true\n\nlet number_formatter = new Intl.NumberFormat('en-US', {\n maximumFractionDigits: 20,\n minimumFractionDigits: 0,\n useGrouping: true\n})\n\nexport function get_number_formatter (integer: boolean, decimals: number | null = null, grouping = true) {\n if (integer)\n decimals = null\n \n if (decimals === _decimals && grouping === _grouping)\n return number_formatter\n \n _decimals = decimals\n _grouping = grouping\n \n return number_formatter = new Intl.NumberFormat('en-US', {\n maximumFractionDigits: decimals !== null ? decimals : 20,\n minimumFractionDigits: decimals !== null ? decimals : 0,\n useGrouping: grouping\n })\n}\n\n\nexport const urgent = { urgent: true }\n\n\n/** SQL Standrd 标准类型 */\nexport const SqlStandard = set_reverse({\n DolphinDB: 0,\n Oracle: 1,\n MySQL: 2\n} as const)\n\nexport type SqlStandard = ValueOf<typeof SqlStandard>\n"]}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["common.ts"],"names":[],"mappings":"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","sourcesContent":["import { default as dayjs, type Dayjs } from 'dayjs'\nimport DayjsCustomParseFormat from 'dayjs/plugin/customParseFormat.js'\ndayjs.extend(DayjsCustomParseFormat)\n\nimport { empty, set_reverse, type ValueOf } from 'xshell/prototype.common.js'\nimport { check } from 'xshell/utils.common.js'\n\nimport ipaddrjs from 'ipaddr.js'\nconst { fromByteArray: buf2ipaddr } = ipaddrjs\n\nimport { t } from './i18n/index.ts'\n\n\nexport const nulls = {\n int8: -0x80, // -128\n int16: -0x80_00, // -32768\n int32: -0x80_00_00_00, // -21_4748_3648\n int64: -0x80_00_00_00_00_00_00_00n, // -922_3372_0368_5477_5808\n \n // -170_1411_8346_0469_2317_3168_7303_7158_8410_5728\n int128: -0x80_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00n,\n \n float32: -3.4028234663852886e+38,\n \n /** -Number.MAX_VALUE */\n double: -Number.MAX_VALUE,\n \n bytes16: new Uint8Array(16)\n} as const\n\n\nexport const DdbForm = set_reverse({\n scalar: 0,\n vector: 1,\n pair: 2,\n matrix: 3,\n set: 4,\n dict: 5,\n table: 6,\n chart: 7,\n \n /** 节点内部通信可能会使用,调用函数执行脚本一般不会返回这种类型 */\n chunk: 8,\n \n /** sysobj */\n object: 9,\n tensor: 10,\n \n extobj: 11\n} as const)\n\nexport type DdbForm = ValueOf<typeof DdbForm>\n\n\n/** DolphinDB DataType\n 对应的 array vector 类型为 64 + 基本类型\n 对应的 extended 类型为 128 + 基本类型 */\nexport const DdbType = set_reverse({\n void: 0,\n bool: 1,\n char: 2,\n short: 3,\n int: 4,\n long: 5,\n date: 6,\n month: 7,\n time: 8,\n minute: 9,\n second: 10,\n datetime: 11,\n timestamp: 12,\n nanotime: 13,\n nanotimestamp: 14,\n float: 15,\n double: 16,\n symbol: 17,\n string: 18,\n uuid: 19,\n functiondef: 20,\n handle: 21,\n code: 22,\n datasource: 23,\n resource: 24,\n any: 25,\n compressed: 26,\n dict: 27,\n datehour: 28,\n ipaddr: 30,\n int128: 31,\n blob: 32,\n complex: 34,\n point: 35,\n duration: 36,\n \n decimal32: 37,\n decimal64: 38,\n decimal128: 39,\n \n object: 40,\n iotany: 41,\n \n instrument: 42,\n market_data: 43,\n \n symbol_extended: 145, // 128 + DdbType.symbol\n} as const)\n\nexport type DdbType = ValueOf<typeof DdbType>\n\n\nexport const number_nulls = new Map<DdbType, number | bigint>([\n [DdbType.short, nulls.int16],\n [DdbType.int, nulls.int32],\n [DdbType.long, nulls.int64],\n [DdbType.float, nulls.float32],\n [DdbType.double, nulls.double],\n])\n\n\nexport const DdbFunctionType = set_reverse({\n SystemFunc: 0,\n SystemProc: 1,\n OperatorFunc: 2,\n UserDefinedFunc: 3,\n PartialFunc: 4,\n DynamicFunc: 5,\n PiecewiseFunc: 6,\n JitFunc: 7,\n JitPartialFunc: 8,\n} as const)\n\nexport type DdbFunctionType = ValueOf<typeof DdbFunctionType>\n\n\nexport const DdbDurationUnit = set_reverse({\n ns: 0,\n us: 1,\n ms: 2,\n s: 3,\n m: 4,\n H: 5,\n d: 6,\n w: 7,\n M: 8,\n y: 9,\n B: 10\n} as const)\n\nexport type DdbDurationUnit = ValueOf<typeof DdbDurationUnit>\n\n\nexport const DdbChartType = set_reverse({\n area: 0,\n bar: 1,\n column: 2,\n histogram: 3,\n line: 4,\n pie: 5,\n scatter: 6,\n trend: 7,\n kline: 8,\n surface: 9\n} as const)\n\nexport type DdbChartType = ValueOf<typeof DdbChartType>\n\n\n// server 实现中区分了 0: NULL (nothing), 1: NULL (null), 2: DFLT (default)\n// Void::serialize()\n// (isNothing() ? 0 : 1) + (isDefault_ ? 2 : 0);\nexport const DdbVoidType = set_reverse({\n undefined: 0,\n null: 1,\n default: 2\n} as const)\n\nexport type DdbVoidType = ValueOf<typeof DdbVoidType>\n\n\nexport interface DdbFunctionDefValue {\n type: DdbFunctionType\n name: string\n}\n\nexport interface DdbDurationValue {\n unit: DdbDurationUnit\n \n /** int32 */\n data: number\n}\n\n\nexport interface DdbDecimal32Value {\n /** int32, data 需要除以 10^scale 得到原值 */\n scale: number\n \n /** int32, 空值为 null ddb null is js null */\n data: number | null\n}\n\nexport interface DdbDecimal64Value {\n /** int32, data 需要除以 10^scale 得到原值 */\n scale: number\n \n /** int64, 空值为 null empty value is null */\n data: bigint | null\n}\n\nexport interface DdbDecimal128Value {\n /** int32, data 需要除以 10^scale 得到原值 */\n scale: number\n \n /** int128, 空值为 null empty value is null */\n data: bigint | null\n}\n\nexport interface DdbDecimal32VectorValue {\n scale: number\n \n data: Int32Array\n}\n\nexport interface DdbDecimal64VectorValue {\n scale: number\n \n data: BigInt64Array\n}\n\n\nexport type DdbDurationVectorValue = DdbDurationValue[]\n\n\nexport interface DdbSymbolExtendedValue {\n base_id: number\n base: string[]\n data: Uint32Array\n}\n\n\nexport interface DdbExtObjValue {\n type: Uint8Array\n version: number\n data: Uint8Array\n}\n\n\nexport const dictables = new Set([DdbType.any, DdbType.string, DdbType.double, DdbType.float, DdbType.int, DdbType.long])\n\n\n/** 工具,取得某个 DdbType 的字节数 */\nexport const ddb_tensor_bytes = {\n [DdbType.bool]: 1,\n [DdbType.char]: 1,\n [DdbType.short]: 2,\n [DdbType.int]: 4,\n [DdbType.long]: 8,\n [DdbType.float]: 4,\n [DdbType.double]: 8,\n} as const\n\n\nexport type TensorElem = TensorData | boolean | number | bigint | null | string\nexport interface TensorData extends Array<TensorElem> { }\n\nexport interface DdbTensorMetadata {\n /** Tensor 的元素的数据类型 */\n data_type: DdbType\n \n /** Tensor 类型 */\n tensor_type: number\n \n /** 设备类型 */\n device_type: number\n \n /** Tensor Flags */\n tensor_flags: number\n \n /** 维度 */\n dimensions: number\n \n /** shape, shape[i] 表示第 i 个维度的 size */\n shape: number[]\n \n /** strides, strides[i] 表示在第 i 个维度,一个元素与下一个元素的距离 */\n strides: number[]\n \n /** 保留值 */\n preserve_value: bigint\n \n /** 元素个数 */\n elem_count: number\n}\n\nexport interface DdbTensorValue extends DdbTensorMetadata {\n /** 数据 */\n data: Uint8Array\n}\n\n\n/** DdbObj.data() 返回的表格对象 */\nexport interface DdbTableData <TRow = any> {\n /** 表名 */\n name: string\n \n /** 每一列的名称 */\n columns: string[]\n \n /** 每一列的原始 ddb 数据类型 */\n types: DdbType[]\n \n /** 表格数据,每一行的对象组成的数组 */\n data: TRow[]\n}\n\n/** DdbObj.data() 返回的 Tensor 对象 */\nexport interface DdbTensorData extends DdbTensorMetadata {\n /** 数据 */\n data: TensorData\n}\n\n\n/** DdbObj.data() 返回的矩阵对象 */\nexport interface DdbMatrixData {\n /** 原始数据类型 */\n type: DdbType\n \n /** 行数 */\n nrows: number\n \n /** 列数 */\n ncolumns: number\n \n /** 行名称 */\n rows?: any[]\n \n /** 列名称 */\n columns?: any[]\n \n /** 数据, data[0][1] 为第 0 行第 1 列数据 */\n data: any[][]\n}\n\n\nexport type DdbScalarValue = \n null | boolean | number | bigint | string |\n Uint8Array | // uuid, ipaddr, int128, blob\n [number, number] | // complex, point\n DdbFunctionDefValue |\n DdbDurationValue | \n DdbDecimal32Value | DdbDecimal64Value | DdbDecimal128Value\n\n\nexport type IotVectorItemValue = [number | string | bigint | boolean][]\n\n\n/** 根据 DdbType 获取其名称,array vector type 自动在后面加上 [] */\nexport function get_type_name (type: DdbType) {\n return `${DdbType[type] || type}${ 64 <= type && type < 128 ? '[]' : '' }`\n}\n\n\nexport function is_decimal_type (type: DdbType) {\n return type === DdbType.decimal32 || type === DdbType.decimal64 || type === DdbType.decimal128\n}\n\n\nexport function is_decimal_null_value (type: DdbType, value: number | bigint) {\n return (\n (value === nulls.int128 && type === DdbType.decimal128) ||\n (value === nulls.int64 && type === DdbType.decimal64) ||\n (value === nulls.int32 && type === DdbType.decimal32)\n )\n}\n\nexport function get_duration_unit (code: number) {\n let str = String.fromCharCode((code >> 24) & 0xff)\n str += String.fromCharCode((code >> 16) & 0xff)\n str += String.fromCharCode((code >> 8) & 0xff)\n str += String.fromCharCode(code & 0xff)\n return str\n}\n\n\nexport type ConvertableDdbTimeValue = undefined | null | number | string | Date | Dayjs\n\nexport const ddb_time_converters = {\n [DdbType.date]: (date: Date) =>\n Math.floor((date.getTime() - 1000 * 60 * date.getTimezoneOffset()) / (1000 * 3600 * 24)),\n \n [DdbType.datetime]: (date: Date) =>\n (date.getTime() - 1000 * 60 * date.getTimezoneOffset()) / 1000,\n \n [DdbType.timestamp]: (date: Date) =>\n BigInt(date.getTime() - 1000 * 60 * date.getTimezoneOffset()),\n \n [DdbType.nanotimestamp]: (date: Date) =>\n BigInt(date.getTime() - 1000 * 60 * date.getTimezoneOffset()) * 1000000n\n} as Record<DdbType, (date: Date) => number | bigint>\n\n\nfunction value_to_date (value: ConvertableDdbTimeValue, type: DdbType) {\n if (typeof value === 'number' || typeof value === 'string')\n return new Date(value)\n else if (value instanceof Date)\n return value\n else if (dayjs.isDayjs(value))\n return new Date(value.valueOf())\n else\n throw new Error(t('value 不能转换为 {{typename}}', { typename: get_type_name(type) }))\n}\n\n\nexport function get_time_ddbobj (type: DdbType, js_value: ConvertableDdbTimeValue) {\n return {\n form: DdbForm.scalar,\n type,\n value: js_value === null ?\n null\n :\n type === DdbType.nanotimestamp && typeof js_value === 'string' ?\n str2nanotimestamp(js_value)\n :\n ddb_time_converters[type](\n js_value === undefined ? new Date() : value_to_date(js_value, type))\n }\n}\n\n\nexport function get_times_ddbobj (\n type: DdbType,\n js_values?: ConvertableDdbTimeValue[],\n name?: string\n) {\n const length = js_values?.length || 0\n \n const int64 = type === DdbType.timestamp || type === DdbType.nanotimestamp\n \n let values = int64 ? new BigInt64Array(length) : new Int32Array(length)\n \n const converter = ddb_time_converters[type]\n \n for (let i = 0; i < length; ++i) {\n const value = js_values[i]\n \n values[i] = empty(value) ?\n int64 ? nulls.int64 : nulls.int32\n :\n type === DdbType.nanotimestamp && typeof value === 'string' ?\n str2nanotimestamp(value)\n :\n converter(value_to_date(value, type))\n }\n \n return {\n form: DdbForm.vector,\n type,\n rows: length,\n cols: 1,\n value: values,\n name\n }\n}\n\n\n// DataView Extends for bigint 128 operations\nexport function get_big_uint_128 (dataview: DataView, byte_offset: number, le = true) {\n let cursor = byte_offset + (le ? 15 : 0)\n const end = byte_offset + (le ? -1 : 16)\n const step = le ? -1 : 1\n let value = 0n\n \n while (cursor !== end) {\n value = value << 8n | BigInt(dataview.getUint8(cursor))\n cursor += step\n }\n \n return value\n}\n\nexport function get_big_int_128 (dataview: DataView, byte_offset: number, le = true) {\n return BigInt.asIntN(128, get_big_uint_128(dataview, byte_offset, le))\n}\n\n\nexport function set_big_uint_128 (dataView: DataView, byte_offset: number, value: bigint, le = true) {\n let cursor = byte_offset + (le ? 0 : 15)\n const end = byte_offset + (le ? 16 : -1)\n const step = le ? 1 : -1\n \n while (cursor !== end) {\n dataView.setUint8(cursor, Number(value & 0xffn))\n value = value >> 8n\n cursor += step\n }\n}\n\nexport function set_big_int_128 (dataview: DataView, byte_offset: number, value: bigint, le = true) {\n set_big_uint_128(dataview, byte_offset, value, le)\n}\n\nexport function generate_array_type (baseType: string, dimensions: number[]): string {\n let result = baseType\n dimensions.forEach(dimension => {\n result += `[${dimension}]`\n })\n return result\n}\n\n\n// 大端\n// const dataBE = new ArrayBuffer(16)\n// const dataViewBE = new DataView(dataBE)\n// set_big_int_128(dataViewBE, 0, -34355n, false)\n// console.log(dataViewBE.buffer)\n// const bigInt128BE = get_big_int_128(dataViewBE, 0, false)\n// const bigUint128BE = get_big_uint_128(dataViewBE, 0, false)\n// console.log(bigInt128BE.toString(), bigUint128BE.toString())\n\n// 小端\n// const dataLE = new ArrayBuffer(16)\n// const dataViewLE = new DataView(dataLE)\n// set_big_int_128(dataViewLE, 0, -34355n, true)\n// console.log(dataViewLE.buffer)\n// const bigInt128LE = get_big_int_128(dataViewLE, 0, true)\n// const bigUint128LE = get_big_uint_128(dataViewLE, 0, true)\n// console.log(bigInt128LE.toString(), bigUint128LE.toString())\n\n\n/** 用来处理时差 To deal with jet lag */\nlet _datetime_formatter: Intl.DateTimeFormat\n\nexport function set_timezone (timezone = 'UTC') {\n _datetime_formatter = new Intl.DateTimeFormat('zh-CN', { dateStyle: 'short', timeStyle: 'medium', timeZone: timezone, hour12: false })\n}\n\nset_timezone()\n\n\nconst is_leap = (y: number) =>\n y % 4 === 0 && (y % 100 !== 0 || y % 400 === 0)\n\n\nconst months_normal = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nconst months_leap = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\n\nexport function date2str (date: number | null) {\n if (date === null || date === nulls.int32)\n return 'null'\n \n // 从 1970-01-01 开始计算\n let year = 1970\n let days = date\n \n // 处理正数日期(1970年之后)\n while (days >= (is_leap(year) ? 366 : 365)) {\n days -= is_leap(year) ? 366 : 365\n ++year\n }\n \n // 处理负数日期(1970年之前)\n while (days < 0) {\n --year\n days += is_leap(year) ? 366 : 365\n }\n \n const month_days = is_leap(year) ? months_leap : months_normal\n let month = 0\n while (days >= month_days[month]) {\n days -= month_days[month]\n ++month\n }\n \n return String(year).padStart(4, '0') + '.' +\n String(month + 1).padStart(2, '0') + '.' +\n String(days + 1).padStart(2, '0')\n}\n\n\nexport function month2str (month: number | null) {\n if (month === null || month === nulls.int32)\n return 'null'\n \n if (month < 0)\n return String(month)\n \n return String(Math.trunc(month / 12)).padStart(4, '0') + '.' +\n String((month % 12) + 1).padStart(2, '0') + 'M'\n}\n\n\nexport function time2str (time: number | null) {\n if (time === null || time === nulls.int32)\n return 'null'\n \n const negative = time < 0\n \n if (negative)\n time = -time\n \n return (negative ? '-' : '') +\n String(Math.floor(time / 3600000)).padStart(2, '0') + ':' +\n String(Math.floor((time % 3600000) / 60000)).padStart(2, '0') + ':' +\n String(Math.floor((time % 60000) / 1000)).padStart(2, '0') + '.' +\n String(time % 1000).padStart(3, '0')\n}\n\n\nexport function minute2str (minute: number | null) {\n if (minute === null || minute === nulls.int32)\n return 'null'\n \n const negative = minute < 0\n if (negative)\n minute = -minute\n \n return (negative ? '-' : '') +\n String(Math.floor(minute / 60)).padStart(2, '0') + ':' +\n String(minute % 60).padStart(2, '0') + 'm'\n}\n\n\nexport function second2str (second: number | null) {\n if (second === null || second === nulls.int32)\n return 'null'\n \n const negative = second < 0\n if (negative)\n second = -second\n \n return (negative ? '-' : '') +\n String(Math.floor(second / 3600)).padStart(2, '0') + ':' +\n String(Math.floor((second % 3600) / 60)).padStart(2, '0') + ':' +\n String(second % 60).padStart(2, '0')\n}\n\nexport function datetime2ms (datetime: number | null): number | null {\n if (datetime === null || datetime === nulls.int32)\n return null\n \n const date = new Date(1000 * datetime)\n return new Date(`${_datetime_formatter.format(date)}.${String(date.getUTCMilliseconds()).padStart(3, '0')}`).valueOf()\n}\n\nexport function datetime2str (datetime: number | null, format = 'YYYY.MM.DD HH:mm:ss') {\n return (datetime === null || datetime === nulls.int32) ?\n 'null'\n :\n dayjs(\n datetime2ms(datetime)\n ).format(format)\n}\n\n/** _datetime_formatter.format 会在 date 为 Invalid Date 时抛出错误 */\nexport function timestamp2ms (timestamp: bigint | number | null): number | null {\n // 将 server 的本地时间 (以 ms 为单位,1970.01.01 00:00:00 作为零点) 作为 UTC-0 格式化为字符串,然后根据本地的时区解析这个字符串转换为 UTC-8\n // 本地的时区与实际的时间值相关,getTimezoneOffset() 可能会受到夏令时 (DST) 的影响,不能使用\n // 得到的 utc 毫秒数交给 js date 或者 dayjs 去格式化\n \n if (timestamp === null || timestamp === nulls.int64)\n return null\n \n const date = new Date(Number(timestamp))\n return new Date(`${_datetime_formatter.format(date)}.${String(date.getUTCMilliseconds()).padStart(3, '0')}`).valueOf()\n}\n\n\n/** format timestamp (bigint) to string \n - timestamp: bigint value\n - format?: \n 格式串,默认是 `YYYY.MM.DD HH:mm:ss.SSS` format string, default to `YYYY.MM.DD HH:mm:ss.SSS` \n https://day.js.org/docs/en/parse/string-format#list-of-all-available-parsing-tokens */\nexport function timestamp2str (timestamp: bigint | null, format = 'YYYY.MM.DD HH:mm:ss.SSS') {\n return (timestamp === null || timestamp === nulls.int64) ?\n 'null'\n :\n dayjs(\n timestamp2ms(timestamp)\n ).format(format)\n}\n\nexport function datehour2ms (datehour: number | null): number | null {\n if (datehour === null || datehour === nulls.int32)\n return null\n \n const ms = 1000 * 3600 * datehour\n \n return timestamp2ms(ms)\n}\n\nexport function datehour2str (datehour: number | null, format = 'YYYY.MM.DDTHH') {\n if (datehour === null || datehour === nulls.int32)\n return 'null'\n \n const ms = 1000 * 3600 * datehour\n \n return dayjs(\n timestamp2ms(ms)\n ).format(format)\n}\n\n\n/** parse timestamp string to bigint value \n - str: timestamp string, 如果为空字符串或 'null' 会返回对应的空值 (nulls.int64) \n timestamp string, If it is an empty string or 'null', it will return the corresponding empty value (nulls.int64)\n - format?: \n 对应传入字符串的格式串,默认是 `YYYY.MM.DD HH:mm:ss.SSS` \n The format string corresponding to the incoming string, the default is `YYYY.MM.DD HH:mm:ss.SSS` \n https://day.js.org/docs/en/parse/string-format#list-of-all-available-parsing-tokens */\nexport function str2timestamp (str: string, format = 'YYYY.MM.DD HH:mm:ss.SSS') {\n if (!str || str === 'null')\n return nulls.int64\n \n check(str.length === format.length, t('timestamp 字符串长度必须等于格式串长度'))\n \n const ms = dayjs(str, format).valueOf()\n \n return BigInt(\n -(1000 * 60 * new Date(ms).getTimezoneOffset()) +\n ms\n )\n}\n\n/** 格式化为 HH:mm:ss.SSSSSSSSS */\nexport function nanotime2str (nanotime: bigint | null) {\n if (nanotime === null || nanotime === nulls.int64)\n return 'null'\n \n const negative = nanotime < 0n\n if (negative)\n nanotime = -nanotime\n \n return time2str(Number(nanotime / 1000000n)).slice(-3) +\n String(nanotime % 1000000000n).padStart(9, '0')\n}\n\nexport function nanotimestamp2ns (nanotimestamp: bigint | null): bigint | null {\n if (nanotimestamp === null || nanotimestamp === nulls.int64)\n return null\n \n const date = new Date(Number(nanotimestamp / 1000000n))\n return BigInt(\n new Date(`${_datetime_formatter.format(date)}.${String(date.getUTCMilliseconds()).padStart(3, '0')}`).valueOf()\n ) * 1000000n + nanotimestamp % 1000000n\n}\n\n/** format nanotimestamp value (bigint) to string \n - nanotimestamp: bigint value\n - format?: \n 格式串,默认是 `YYYY.MM.DD HH:mm:ss.SSSSSSSSS` format string, default is `YYYY.MM.DD HH:mm:ss.SSSSSSSSS` \n 秒的格式为 ss (必须包含); 纳秒的格式为 SSSSSSSSS (必须包含) Seconds are in the format ss (must be included); nanoseconds are in the format SSSSSSSSS (must be included) \n https://day.js.org/docs/en/parse/string-format#list-of-all-available-parsing-tokens\n*/\nexport function nanotimestamp2str (nanotimestamp: bigint | null, format = 'YYYY.MM.DD HH:mm:ss.SSSSSSSSS') {\n // tests:\n // nanotimestamp2str(0n)\n // nanotimestamp2str(-1n)\n // nanotimestamp2str(-9_9999_9999n)\n // nanotimestamp2str(-10_0000_0000n)\n // nanotimestamp2str(-10_0000_0001n)\n \n if (nanotimestamp === null || nanotimestamp === nulls.int64)\n return 'null'\n \n const i_second_start = format.indexOf('ss')\n check(i_second_start !== -1, t('格式串必须包含秒的格式 (ss)'))\n \n const i_second_end = i_second_start + 2\n \n const i_nanosecond_start = format.indexOf('SSSSSSSSS', i_second_end)\n check(i_nanosecond_start !== -1, t('格式串必须包含纳秒的格式 (SSSSSSSSS)'))\n \n const remainder = nanotimestamp % 1000000000n\n const borrow = remainder < 0n\n \n const ms = Number((nanotimestamp - remainder + (borrow ? -1000000000n : 0n)) / 1000000n)\n \n return (\n dayjs(\n _datetime_formatter.format(new Date(ms))\n ).format(\n format.slice(0, i_second_end)\n ) + \n format.slice(i_second_end, i_nanosecond_start) + \n String(\n borrow ?\n (remainder + 1000000000n) % 1000000000n\n :\n remainder\n ).padStart(9, '0')\n )\n}\n\n/** parse nano timestamp string to bigint value \n - str: nano timestamp string, 如果为空字符串或 'null' 会返回对应的空值 (nulls.int64) \n nano timestamp string, If it is an empty string or 'null', it will return the corresponding empty value (nulls.int64)\n - format?: \n 对应传入字符串的格式串,默认是 `YYYY.MM.DD HH:mm:ss.SSSSSSSSS` \n 秒的格式为 ss (必须包含); 纳秒的格式为 SSSSSSSSS (必须包含) \n https://day.js.org/docs/en/parse/string-format#list-of-all-available-parsing-tokens \n The format string corresponding to the incoming string, the default is `YYYY.MM.DD HH:mm:ss.SSSSSSSSS` \n Seconds are in the format ss (must be included); nanoseconds are in the format SSSSSSSSS (must be included) */\nexport function str2nanotimestamp (str: string, format = 'YYYY.MM.DD HH:mm:ss.SSSSSSSSS') {\n if (!str || str === 'null')\n return nulls.int64\n \n check(str.length === format.length, t('nanotimestamp 字符串长度必须等于格式串长度'))\n \n const i_second_start = format.indexOf('ss')\n check(i_second_start !== -1, t('格式串必须包含秒的格式 (ss)'))\n \n const i_second_end = i_second_start + 2\n \n const i_nanosecond_start = format.indexOf('SSSSSSSSS', i_second_end)\n check(i_nanosecond_start !== -1, t('格式串必须包含纳秒的格式 (SSSSSSSSS)'))\n \n const ms = dayjs(\n str.slice(0, i_second_end),\n format.slice(0, i_second_end)\n ).valueOf()\n \n return (\n BigInt(\n -(1000 * 60 * new Date(ms).getTimezoneOffset()) +\n ms\n ) * 1000000n\n +\n BigInt(\n str.slice(i_nanosecond_start, i_nanosecond_start + 9)\n )\n )\n}\n\n\n/** 时间值转字符串函数集合 */\nexport const time_formatters = new Map<\n DdbType, \n (value: number | bigint, format?: string) => string\n>([\n [DdbType.date, date2str],\n [DdbType.month, month2str],\n [DdbType.time, time2str],\n [DdbType.nanotime, nanotime2str],\n [DdbType.minute, minute2str],\n [DdbType.second, second2str],\n \n [DdbType.datetime, datetime2str],\n [DdbType.timestamp, timestamp2str],\n [DdbType.nanotimestamp, nanotimestamp2str],\n [DdbType.datehour, datehour2str],\n])\n\n\nexport function ipaddr2str (buffer: Uint8Array, le = true, ipv6?: boolean) {\n let buf = buffer\n \n if (le)\n buf = buffer.slice().reverse()\n \n const i_non_zero = buf.findIndex(x => x !== 0)\n \n if (\n ipv6 || \n i_non_zero !== -1 && i_non_zero < 12\n ) // ipv6\n return buf2ipaddr([...buf]).toString()\n else // ipv4\n return buf.subarray(12).join('.')\n}\n\nexport function uuid2str (buffer: Uint8Array, le = true) {\n const str = int1282str(buffer, le)\n return `${str.slice(0, 8)}-${str.slice(8, 12)}-${str.slice(12, 16)}-${str.slice(16, 20)}-${str.slice(20)}`\n}\n\nexport function int1282str (buffer: Uint8Array, le = true) {\n let buf = buffer\n \n if (le)\n buf = buffer.slice().reverse()\n \n return [...buf].map(x => \n x.toString(16)\n .padStart(2, '0')\n ).join('')\n}\n\n\nexport interface ConvertOptions {\n /** `'string'` blob 转换到 string 还是 Uint8Array */\n blob?: 'string' | 'binary'\n \n /** `'string'` char 转换到 string 还是 number */\n char?: 'string' | 'number'\n \n /** `'strings'` char vector 转换格式: strings 转为 string[], binary 转为 Uint8Array */\n chars?: 'strings' | 'binary'\n \n /** `'ms'` timestamp 类型转换为字符串表示时显示到秒还是毫秒 */\n timestamp?: 's' | 'ms'\n \n /** `'data'` 表格类型返回格式: data 转为 TResult, full 转为 DdbTableData */\n table?: 'data' | 'full'\n}\n\n\nexport const winsize = 10000 as const\n\nexport type DdbRpcType = 'script' | 'function' | 'variable' | 'connect'\n\nexport type DdbLanguage = 'dolphindb' | 'python' | 'q'\n\n\nconst dolphindb_function_definition_pattern = /\\bdef (\\w+) \\(/\n\nexport const function_definition_patterns = {\n dolphindb: dolphindb_function_definition_pattern,\n python: dolphindb_function_definition_pattern,\n q: /(\\w+): \\{\\[/\n}\n\n\nexport const funcdefs = {\n invoke: {\n dolphindb:\n 'def invoke (func, args_json) {\\n' +\n ' args = fromStdJson(args_json)\\n' +\n ' func_ = func\\n' +\n ' if (type(func) == STRING)\\n' +\n ' func_ = funcByName(func)\\n' +\n ' if (type(args) != ANY)\\n' +\n ' args = cast(args, ANY)\\n' +\n ' return unifiedCall(func_, args)\\n' +\n '}\\n',\n \n python:\n 'def invoke (func, args_json):\\n' +\n ' args = fromStdJson(args_json)\\n' +\n ' func_ = func\\n' +\n ' if type(func) == STRING:\\n' +\n ' func_ = funcByName(func)\\n' +\n ' if type(args) != ANY:\\n' +\n ' args = cast(args, ANY)\\n' +\n ' return unifiedCall(func_, args)\\n',\n \n q:\n 'invoke: {[fn; args_json]\\n' +\n ' args_: fromStdJson[args_json];\\n' +\n ' func_: fn;\\n' +\n ' if[typestr[fn] = `STRING;\\n' +\n ' func_: get toCharArray fn;\\n' +\n ' if[type[args_] <> 0] args_: cast[args_; 25]\\n' +\n ' ];\\n' +\n ' func_ . args_\\n' +\n ' }\\n'\n },\n \n jsrpc: {\n dolphindb:\n 'def jsrpc (node, func_name, args) {\\n' +\n ' args_ = args\\n' +\n ' if (func_name == \"invoke\")\\n' +\n ' args_[0] = funcByName(args[0])\\n' +\n ' return rpc(node, unifiedCall, funcByName(func_name), args_)\\n' +\n '}\\n',\n \n python:\n 'def jsrpc (node, func_name, args):\\n' +\n ' args_ = args\\n' +\n ' if func_name == \"invoke\":\\n' +\n ' args_[0] = funcByName(args[0])\\n' +\n ' return rpc(node, unifiedCall, funcByName(func_name), args_)\\n',\n \n q:\n 'jsrpc: {[node; func_name; args]\\n' +\n ' args_: args;\\n' +\n ' if[(`$func_name)=`invoke; args_[0]:funcByName[args[0]]];\\n' +\n ' rpc[node; unifiedCall; funcByName[func_name]; args_]\\n' +\n ' }\\n'\n },\n \n pnode_run: {\n dolphindb:\n 'def pnode_run (nodes, func_name, args, add_node_alias = true) {\\n' +\n ' nargs = size(args)\\n' +\n ' func = funcByName(func_name)\\n' +\n ' \\n' +\n ' if (!nargs)\\n' +\n ' return pnodeRun(func, nodes, add_node_alias)\\n' +\n ' \\n' +\n ' args_partial = array(any, 1 + nargs, 1 + nargs)\\n' +\n ' args_partial[0] = func\\n' +\n ' args_partial[1:] = args\\n' +\n ' return pnodeRun(\\n' +\n ' unifiedCall(partial, args_partial),\\n' +\n ' nodes,\\n' +\n ' add_node_alias\\n' +\n ' )\\n' +\n '}\\n',\n \n python:\n 'def pnode_run (nodes, func_name, args, add_node_alias):\\n' +\n ' nargs = size(args)\\n' +\n ' func = funcByName(func_name)\\n' +\n ' \\n' +\n ' if not nargs:\\n' +\n ' return pnodeRun(func, nodes, add_node_alias)\\n' +\n ' \\n' +\n ' args_partial = [ ]\\n' +\n ' args_partial.append(func)\\n' +\n ' for a in args:\\n' +\n ' args_partial.append(a)\\n' +\n ' \\n' +\n ' return pnodeRun(\\n' +\n ' unifiedCall(partial, args_partial),\\n' +\n ' nodes,\\n' +\n ' add_node_alias\\n' +\n ' )\\n',\n \n q:\n 'pnode_run: {[nodes; func_name; args]\\n' +\n ' nargs_: count args;\\n' +\n ' func_: get toCharArray func_name;\\n' +\n ' if [nargs_=0; : pnodeRun[func_; nodes; 1b]];\\n' +\n ' args_partial_: func,args;\\n' +\n ' pnodeRun[unifiedCall[partial; args_partial_]; nodes; 1b]\\n' +\n ' }\\n'\n }\n} as const\n\n\n// 缓存,为了优化性能,通常 options.decimals, options.grouping 都是不变的\n\nlet _decimals = null\nlet _grouping = true\n\nlet number_formatter = new Intl.NumberFormat('en-US', {\n maximumFractionDigits: 20,\n minimumFractionDigits: 0,\n useGrouping: true\n})\n\nexport function get_number_formatter (integer: boolean, decimals: number | null = null, grouping = true) {\n if (integer)\n decimals = null\n \n if (decimals === _decimals && grouping === _grouping)\n return number_formatter\n \n _decimals = decimals\n _grouping = grouping\n \n return number_formatter = new Intl.NumberFormat('en-US', {\n maximumFractionDigits: decimals !== null ? decimals : 20,\n minimumFractionDigits: decimals !== null ? decimals : 0,\n useGrouping: grouping\n })\n}\n\n\nexport const urgent = { urgent: true }\n\n\n/** SQL Standrd 标准类型 */\nexport const SqlStandard = set_reverse({\n DolphinDB: 0,\n Oracle: 1,\n MySQL: 2\n} as const)\n\nexport type SqlStandard = ValueOf<typeof SqlStandard>\n"]}
package/index.d.ts CHANGED
@@ -177,7 +177,7 @@ export interface InspectOptions extends UtilInspectOptions {
177
177
  export declare function format(type: DdbType, value: DdbValue, le: boolean, options?: InspectOptions): string;
178
178
  /** 格式化向量、集合中的第 index 项为字符串,空值返回 'null' 字符串 formatted vector, the index-th item in the collection is a string, a null value returns a 'null' string */
179
179
  export declare function formati(obj: DdbVectorObj, index: number, options?: InspectOptions): string;
180
- export declare function convert(type: DdbType, value: DdbValue, le: boolean, { blob, char, timestamp }?: ConvertOptions): string | number | bigint | boolean | number[] | DdbFunctionDefValue | DdbDurationValue | DdbDecimal32Value | DdbDecimal64Value | DdbDecimal32VectorValue | DdbDecimal64VectorValue | DdbSymbolExtendedValue | string[] | DdbExtObjValue | DdbTensorValue | Uint8Array<ArrayBufferLike> | IotVectorItemValue | DdbDurationVectorValue | DdbDecimal128VectorValue | BigInt128Array | Int8Array<ArrayBufferLike> | Int16Array<ArrayBufferLike> | Int32Array<ArrayBufferLike> | Float32Array<ArrayBufferLike> | Float64Array<ArrayBufferLike> | BigInt64Array<ArrayBufferLike> | DdbArrayVectorValue | Uint8Array<ArrayBufferLike>[] | DdbObj<DdbValue>[] | DdbMatrixValue | DdbChartValue;
180
+ export declare function convert(type: DdbType, value: DdbValue, le: boolean, { blob, char, timestamp }?: ConvertOptions): string | number | bigint | boolean | number[] | string[] | DdbFunctionDefValue | DdbDurationValue | DdbDecimal32Value | DdbDecimal64Value | DdbDecimal32VectorValue | DdbDecimal64VectorValue | DdbSymbolExtendedValue | DdbExtObjValue | DdbTensorValue | Uint8Array<ArrayBufferLike> | Int8Array<ArrayBufferLike> | Int16Array<ArrayBufferLike> | Int32Array<ArrayBufferLike> | Float32Array<ArrayBufferLike> | Float64Array<ArrayBufferLike> | BigInt64Array<ArrayBufferLike> | BigInt128Array | Uint8Array<ArrayBufferLike>[] | DdbObj<DdbValue>[] | IotVectorItemValue | DdbArrayVectorValue | DdbDecimal128VectorValue | DdbDurationVectorValue | DdbMatrixValue | DdbChartValue;
181
181
  /** 转换一个向量到 js 原生数组 */
182
182
  export declare function converts(type: DdbType, value: DdbVectorValue, rows: number, le: boolean, options?: ConvertOptions): any[] | Uint8Array;
183
183
  /** 构造 void 类型,默认为 `DdbVoidType.undefined` */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dolphindb",
3
3
  "description": "DolphinDB JavaScript API",
4
- "version": "3.1.45",
4
+ "version": "3.1.46",
5
5
  "type": "module",
6
6
  "main": "./index.js",
7
7
  "browser": "./browser.js",
package/test.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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","sourcesContent":["import { deepEqual, deepStrictEqual } from 'node:assert/strict'\n\nimport { assert, check, defer, inspect, MyProxy, ramdisk, set_inspect_options, WebSocketConnectionError } from 'xshell'\n\nimport { keywords } from './language.ts'\n\nimport {\n DDB, DdbConnectionError, DdbDatabaseError, DdbForm, DdbInt, DdbLong, DdbObj, DdbType, \n DdbVectorAny, DdbVectorDouble, DdbVectorSymbol, month2ms, DdbDurationUnit,\n type DdbStringObj, type DdbVectorAnyObj, type DdbDurationVectorValue, type DdbVectorObj, \n type DdbTableObj, DdbTimeStamp, type DdbDictObj, type DdbTableData, type DdbOptions,\n DdbVectorInt, DdbTable, type DdbExtObjValue\n} from './index.ts'\n\n\nset_inspect_options()\n\n\n// const fpd_root = import.meta.dirname.fpd\n\nconst url = 'ws://192.168.0.54:8848' as const\n// const url = 'ws://192.168.0.125:8848' as const\n// const url = 'ws://192.168.0.69:8902' as const\n// const url = 'ws://127.0.0.1:8848' as const\n\nconst ddb_options: DdbOptions = ramdisk ? { proxy: MyProxy.work } : { }\n\n\nconst repl = false\nasync function test_repl (ddb: DDB) {\n \n}\n\n\n(async function test () {\n console.log('--- 测试开始 ---'.green)\n \n let ddb = new DDB(url, ddb_options)\n \n for (const t of\n repl ? \n [test_repl]\n : [\n test_keywords,\n test_types,\n test_reconnection,\n test_connection_error,\n test_ticket,\n test_print,\n test_time,\n test_streaming,\n test_error,\n test_invoke,\n test_append_table,\n test_cancel\n \n // test_iot_vector,\n // test_extobj,\n ]\n )\n await t(ddb)\n \n ddb.disconnect()\n \n console.log('--- 测试通过 ---'.green)\n})()\n\n\n\nfunction test_keywords () {\n check(new Set(keywords).size === keywords.length, 'keywords 中不能有重复的项')\n}\n\n\nasync function get_printed (ddb: DDB, code: string) {\n return new Promise<string>(async (resolve, reject) => {\n try {\n let resolved = false\n await ddb.eval(\n `print(${code})`,\n {\n listener ({ type, data }) {\n if (type === 'print' && !resolved) {\n resolved = true\n resolve(data)\n }\n }\n })\n \n if (!resolved)\n reject(new Error('未输出 print 消息'))\n } catch (error) {\n reject(error)\n }\n })\n}\n\n\nasync function test_reconnection (ddb: DDB) {\n let _ddb = new DDB(url, ddb_options)\n \n await _ddb.connect()\n _ddb.disconnect()\n \n let error: DdbConnectionError\n \n try {\n await _ddb.connect()\n } catch (_error) {\n error = _error\n }\n \n assert(error && error instanceof DdbConnectionError)\n}\n\n\nasync function test_connection_error (ddb: DDB) {\n let _ddb = new DDB(url, ddb_options)\n \n await _ddb.connect()\n _ddb.disconnect()\n \n let error: DdbConnectionError\n \n try {\n await _ddb.eval('1 + 1')\n } catch (_error) {\n error = _error\n }\n \n assert(error && error instanceof DdbConnectionError)\n}\n\n\nasync function test_error (ddb: DDB) {\n console.log('测试 DdbDatabaseError 和 DdbConnectionError')\n \n const error_message = '错误消息'\n const error_script = `throw ${error_message.quote()}`\n \n let database_error: DdbDatabaseError\n \n try {\n await ddb.eval(error_script)\n } catch (error) {\n database_error = error\n }\n \n assert(database_error)\n assert(database_error instanceof DdbDatabaseError)\n assert(database_error.message === `throw ${error_message.quote('double')} => ${error_message}`)\n assert(database_error.name === 'DdbDatabaseError')\n assert(database_error.url === ddb.url)\n assert(database_error.type === 'script')\n assert(database_error.options.script === error_script)\n assert(database_error.stack.includes('test_error'))\n \n \n let ddbtest = new DDB(url, ddb_options)\n let connection_error: DdbConnectionError\n try {\n await ddbtest.connect()\n ddbtest.disconnect()\n await ddbtest.eval('1')\n } catch (error) {\n connection_error = error\n }\n \n assert(connection_error)\n assert(connection_error instanceof DdbConnectionError)\n assert(connection_error.url === ddbtest.url)\n \n \n // --- 首次连接失败也会抛出 DdbConnectionError\n let ddbtest2 = new DDB('ws://dolphindb123.com/')\n let connection_error2: DdbConnectionError\n try {\n await ddbtest2.connect()\n } catch (error) {\n connection_error2 = error\n }\n \n assert(connection_error2)\n assert(connection_error2 instanceof DdbConnectionError)\n assert(connection_error2.cause && connection_error2.cause instanceof WebSocketConnectionError)\n}\n\n\nasync function test_print (ddb: DDB) {\n console.log('测试 print message')\n \n const str = 'test print message\\n中文'\n \n assert(await get_printed(ddb, str.quote()) === str)\n \n console.log('测试 verbose 输出')\n \n let vddb = new DDB(url, { ...ddb_options, verbose: true })\n \n await vddb.call('typestr', [\n new DdbVectorAny([\n new DdbVectorSymbol(['a', 'b', 'a', 'b', 'a', 'b']),\n new DdbLong(3n)\n ])\n ])\n \n vddb.disconnect()\n}\n\n\nasync function test_streaming (ddb: DDB, ha?: boolean) {\n console.log('测试流数据')\n \n const n = 100\n \n await ddb.eval(\n ha ?\n 'try {\\n' +\n ' try {\\n' +\n \" dropStreamTable('prices')\\n\" +\n ' } catch (error) { }\\n' +\n ' \\n' +\n \" haStreamTable(11, table(10000:0, ['time', 'stock', 'price'], [TIMESTAMP, SYMBOL, DOUBLE]), 'prices', 100000)\\n\" +\n \" print('prices 流表创建成功')\\n\" +\n '} catch (error) {\\n' +\n \" print('prices 流表创建失败')\\n\" +\n ' print(error)\\n' +\n '}\\n'\n :\n 'try {\\n' +\n \" if (!defined('prices', SHARED)) {\\n\" +\n ' share(\\n' +\n ' streamTable(\\n' +\n ' 10000:0,\\n' +\n \" ['time', 'stock', 'price'],\\n\" +\n ' [TIMESTAMP, SYMBOL, DOUBLE]\\n' +\n ' ),\\n' +\n \" 'prices'\\n\" +\n ' )\\n' +\n \" print('prices 流表创建成功')\\n\" +\n ' } else\\n' +\n \" print('prices 流表已存在')\\n\" +\n '} catch (error) {\\n' +\n \" print('prices 流表创建失败')\\n\" +\n ' print(error)\\n' +\n '}\\n'\n )\n \n let total_rows = 0\n \n let first = true\n \n let promise = defer<void>()\n \n let sddb = new DDB(url, {\n ...ddb_options,\n streaming: {\n table: 'prices',\n handler ({ error, data: _data, time, id, window }) {\n if (error)\n throw error\n \n const { columns, data, name, types } = _data\n \n assert(Array.isArray(data))\n \n if (first) {\n assert(data.length === 0, '流订阅应该返回 schema')\n first = false\n } else\n assert(data.length > 0)\n \n deepEqual(columns, ['time', 'stock', 'price'])\n \n assert(name === 'prices')\n assert(typeof id === 'bigint')\n assert(time)\n assert(types.length === 3)\n \n total_rows += data.length\n \n if (total_rows === n * 10)\n promise.resolve()\n },\n }\n })\n \n await sddb.connect()\n \n await ddb.eval(\n `n = ${n}\\n` +\n '\\n' +\n 'for (i in 0..9)\\n' +\n ' append!(\\n' +\n ' prices,\\n' +\n ' table([\\n' +\n ' (now() + 0..(n-1)) as time,\\n' +\n \" take(['MSFT', 'FUTU'], n) as stock,\\n\" +\n ' (0..(n-1) \\\\ 10) as price\\n' +\n ' ])\\n' +\n ' )\\n'\n )\n \n await promise\n console.log('流数据已全部收齐')\n \n sddb.disconnect()\n}\n\n\nasync function test_time (ddb: DDB) {\n console.log('测试时间显示')\n \n await time2str_equal(ddb, '2022-09-01T14:30:01.095')\n await time2str_equal(ddb, '2022-07-01T00:00:00.000')\n await time2str_equal(ddb, '2022-07-02T00:00:00.000')\n await time2str_equal(ddb, '2022-06-30T00:00:00.000')\n await time2str_equal(ddb, '2022-12-22T16:57:30.248')\n \n \n console.log('测试 month2ms')\n check(\n month2ms(\n (\n await ddb.eval<DdbObj<number>>('2022.12M')\n ).value\n ) === new Date('2022.12.01').valueOf())\n}\n\n\nasync function time2str_equal (ddb: DDB, timestr: string) {\n const code = `temporalParse('${timestr}', 'yyyy-MM-ddTHH:mm:sss.SSS')`\n \n assert(\n inspect(\n await ddb.eval(code),\n { colors: false }\n ).slice('timestamp('.length, -1) === \n (\n await get_printed(ddb, code)\n ).replace('T', ' ')\n )\n}\n\n\nasync function test_types (ddb: DDB) {\n console.log('测试通过 ddb.call 调用 getNodeAlias 函数')\n console.log(await ddb.call('getNodeAlias'))\n \n console.log('测试 ddb.call 上传不同类型的变量')\n const result0 = await ddb.call('typestr', [new DdbInt(1)])\n console.log(result0)\n assert(result0.form === DdbForm.scalar)\n assert(result0.type === DdbType.string)\n assert(result0.value === 'INT')\n \n console.log('测试 ddb.call 上传不同类型的变量')\n const result1 = await ddb.call('typestr', [new DdbVectorDouble([0.1, 0.2, 0.3])])\n console.log(result1)\n assert(result1.form === DdbForm.scalar)\n assert(result1.type === DdbType.string)\n assert(result1.value === 'FAST DOUBLE VECTOR')\n \n console.log('测试 array vector')\n const av = await ddb.eval(\n 'av = array(INT[], 0, 3)\\n' +\n 'append!(av, [1..4])\\n' +\n 'append!(av, [1..70000])\\n' +\n 'av\\n'\n )\n \n console.log(av)\n assert(av.form === DdbForm.vector)\n assert(av.type === DdbType.int + 64) // array vector 的 type 比较特殊,需要偏移 64\n assert(av.rows === 2)\n \n // 测试 array vector 格式化\n // console.log(\n // await ddb.eval<DdbVectorObj>(\n // 'av = array(DECIMAL128(2)[], 0, 1)\\n' +\n // 'append!(av, [[92233720368547758.11, NULL, 100000000000000, NULL, -92233720368547758, -100000000000000]])\\n' +\n // 'av\\n'\n // )\n // )\n \n // 测试 Invalid Date\n await ddb.upload(['x'], [new DdbTimeStamp('2024.11.11')])\n \n assert(\n inspect(\n await ddb.eval('x'), \n { colors: false }\n ) === 'timestamp(2024.11.11 00:00:00.000)'\n )\n \n console.log('测试大数据')\n let bigarr = new Float64Array(10)\n bigarr.fill(0.5)\n \n await ddb.call<DdbStringObj>('typestr', [\n new DdbObj({\n form: DdbForm.vector,\n type: DdbType.double,\n length: 0,\n rows: bigarr.length,\n cols: 1,\n value: bigarr\n })\n ])\n \n await ddb.upload(['a'], [\n new DdbObj({\n form: DdbForm.vector,\n type: DdbType.double,\n length: 0,\n rows: bigarr.length,\n cols: 1,\n value: bigarr\n })\n ])\n \n assert((\n await ddb.eval<DdbVectorDouble>('a')\n ).rows === bigarr.length)\n \n \n console.log('测试 datasource')\n \n const ds = (await ddb.eval<DdbVectorAnyObj>(\n 'db_path = \"dfs://test-datasource\"\\n' + \n 'tb_name = \"db\"\\n' + \n 'if (!existsTable(db_path, tb_name))\\n' + \n ' createTable(\\n' + \n ' database(db_path, VALUE , [1]),\\n' +\n ' table(1:0,`id`name, [INT, STRING]),\\n' +\n ' tb_name\\n' +\n ' ).append!(table(1 2 as id, `str1`str2 as name))\\n' +\n '\\n' +\n 'tb = loadTable(db_path, tb_name)\\n' +\n 'sqlDS(<select * from tb where id = 1>)\\n'\n )).value[0] as DdbStringObj\n \n const { type, form, value } = ds\n \n assert(type === DdbType.datasource && form === DdbForm.scalar, '返回的 DdbObj 具有正确的 type 和 form')\n \n assert(value === 'DataSource< select [7] * from tb where id == 1 >')\n \n // 如果直接构造 DdbObj Datasource,将其送入 ddb.call, ddb将仍然认为送入的是一个 STRING \n assert(\n (await ddb.call<DdbStringObj>('typestr', [ds])).value === 'STRING', \n '从 js 构建的 Datasource DdbObj 会被识别为 STRING'\n )\n \n console.log('测试 pair<duration>')\n const dp = await ddb.eval<DdbVectorObj<DdbDurationVectorValue>>(\n 'pair(duration(\"20d\"), duration(\"2H\"))'\n ) \n \n console.log(dp)\n assert(dp.type === DdbType.duration, 'dp 的返回值应该为 Duration')\n assert(dp.value[0].data === 20 && dp.value[0].unit === DdbDurationUnit.d, 'pair<duration> 的 value 应该已解析')\n \n console.log('测试 void vector')\n const table = await ddb.eval<DdbTableObj>('select *, NULL as val from table(1..100 as id)')\n const { value: [ints, voids] } = table\n \n console.log(voids)\n assert(voids.rows === ints.rows, 'void vector 应该具有正常的 vector length')\n assert(voids.length === 10, 'void vector 应该具有正确的数据长度')\n assert(voids.value === null, 'void vector 的值应该为 null')\n \n await ddb.upload(['voidtable'], [table])\n \n console.log('测试 compress 类型')\n \n await ddb.upload(['c'], [\n await ddb.eval<DdbDictObj>('dict([\"a\", \"b\", \"c\"], [compress([1, 2, 3]), 123, \"bbb\"])')\n ])\n}\n\n\nasync function test_from_stdjson (ddb: DDB) {\n console.log('测试 fromStdJson')\n \n console.log(\n await ddb.call('fromStdJson', [JSON.stringify({\n a: 1234,\n b: 'aaa',\n c: {\n e: 1234,\n f: 4321\n },\n f: 'blabla\\n中文\\u4e2d\\u6587'\n })])\n )\n \n console.log(\n await ddb.call('fromStdJson', [JSON.stringify(1234)])\n )\n \n console.log(\n await ddb.call('fromStdJson', [\n JSON.stringify({\n data: {\n code: 'select * from kline where secid == \"230012\"'\n }\n })\n ])\n )\n}\n\nasync function test_iot_vector (ddb: DDB) {\n const obj = await ddb.eval(\n 'if(existsDatabase(\"dfs://testIOT\")) dropDatabase(\"dfs://testIOT\")\\n' +\n 'create database \"dfs://testIOT\" partitioned by HASH([INT, 40]),RANGE(2020.01.01 2022.01.01 2025.01.01), engine=\\'TSDB\\'\\n' +\n 'create table \"dfs://testIOT\".\"pt\"(\\n' +\n ' deviceId INT,\\n' +\n ' timestamp TIMESTAMP,\\n' +\n ' location SYMBOL,\\n' +\n ' value IOTANY,\\n' +\n ')\\n' +\n 'partitioned by deviceId, timestamp,\\n' +\n 'sortColumns=[`deviceId, `location, `timestamp],\\n' +\n 'latestKeyCache=true;\\n' +\n 'pt = loadTable(\"dfs://testIOT\",\"pt\");\\n' +\n 't=table(take(1..100000,100000) as deviceId, take(now()+(0..100), 100000) as timestamp, take(\"bb\"+string(0..100), 100000) as location, take(int(1..100000),100000) as value)\\n' +\n 'pt.append!(t)\\n' +\n 'flushTSDBCache()\\n' +\n 't=table(take(100001..200000,100000) as deviceId, take(now()+(0..100), 100000) as timestamp,take(lpad(string(1), 8, \"0\"), 100000) as location, rand(200.0, 100000) as value)\\n' +\n 'pt.append!(t)\\n' +\n 'flushTSDBCache()\\n' +\n '\\n' +\n 'select * from loadTable(\"dfs://testIOT\",\"pt\")\\n'\n )\n \n console.log('obj:', obj)\n console.log('data:', obj.data())\n await ddb.upload(['a'], [obj])\n await ddb.execute('print(a)')\n deepStrictEqual(\n await ddb.execute('a'),\n obj.data())\n}\n\n\nasync function test_invoke (ddb: DDB) {\n console.log('测试 invoke')\n \n await ddb.eval(\n 'def echo (data) {\\n' +\n // ' print(data)\\n' +\n ' return data\\n' +\n '}\\n'\n )\n \n const str = 'blabla\\n中文\"\\u4e2d\\u6587\"\\\\\\\"\\\"'\n \n assert(\n (await ddb.invoke('echo', [{\n a: 1234,\n b: 'aaa',\n c: {\n e: 1234,\n f: 4321\n },\n f: str\n }]))\n .f === str\n )\n \n await ddb.execute(\n 'cbool = true false false;\\n' +\n \"cchar = 'a' 'b' 'c';\\n\" +\n 'cshort = 122h 32h 45h;\\n' +\n 'cint = 1 4 9;\\n' +\n 'clong = 17l 39l 72l;\\n' +\n 'cdate = 2013.06.13 2015.07.12 2019.08.15;\\n' +\n 'cmonth = 2011.08M 2014.02M 2019.07M;\\n' +\n 'ctime = 04:15:51.921 09:27:16.095 11:32:28.387;\\n' +\n 'cminute = 03:25m 08:12m 10:15m;\\n' +\n 'csecond = 01:15:20 04:26:45 09:22:59;\\n' +\n 'cdatetime = 1976.09.10 02:31:42 1987.12.13 11:58:31 1999.12.10 20:49:23;\\n' +\n 'ctimestamp = 1997.07.20 21:45:16.339 2002.11.26 12:40:31.783 2008.08.10 23:54:27.629;\\n' +\n 'cnanotime = 01:25:33.365869429 03:47:25.364828475 08:16:22.748395721;\\n' +\n 'cnanotimestamp = 2005.09.23 13:30:35.468385940 2007.12.11 14:54:38.949792731 2009.09.30 16:39:51.973463623;\\n' +\n 'cfloat = 7.5f 0.79f 8.27f;\\n' +\n 'cdouble = 5.7 7.2 3.9;\\n' +\n 'cstring = \"hello\" \"hi\" \"here\";\\n' +\n 'cdatehour = datehour(2012.06.15 15:32:10.158 2012.06.15 17:30:10.008 2014.09.29 23:55:42.693);\\n' +\n 'cblob = blob(\"dolphindb\" \"gaussdb\" \"goldendb\")\\n' +\n 'cdecimal32 = decimal32(12 17 135.2,2)\\n' +\n 'cdecimal64 = decimal64(18 24 33.878,4)\\n' +\n 'cdecimal128 = decimal128(18 24 33.878,18)\\n'\n )\n \n assert(\n // await ddb.invoke<DdbTableData>('defs')\n (await ddb.invoke<DdbTableData>('objs', [true], { table: 'full' }))\n .columns.includes('shared')\n )\n \n const [a, b] = await ddb.invoke<[number, number]>(\n 'def foo (a = 1, b = 2) {\\n' +\n ' return (a, b)\\n' +\n '}\\n', \n [undefined, new DdbInt(3)])\n \n check(a === 1 && b === 3)\n}\n\n\nasync function test_append_table (ddb: DDB) {\n // 在连接对应的会话中加载或创建表\n await ddb.execute('t = table(1..10 as id, take([\"A001\", \"B001\"], 10) as sym, rand(10.0, 10) as val)')\n // await ddb.execute('t = loadTable(database(\"dfs://path-to-db\"), \"table_name\")')\n \n assert(\n // 使用 tableInsert 插入数据\n await ddb.invoke<number>(\n 'tableInsert',\n [\n 't',\n \n // 数据\n new DdbTable([\n // 第一列\n new DdbVectorInt([1, 2, 3]),\n \n // 第二列\n new DdbVectorSymbol(['a', 'b', 'c']),\n \n // 第三列\n new DdbVectorDouble([1.1, 1.2, 1.3]),\n ])\n ]\n ) === 3\n )\n}\n\n\nasync function test_extobj (ddb: DDB) {\n const instrument = await ddb.eval(\n 'parseInstrument({ \\n' +\n ' \"productType\": \"Option\",\\n' +\n ' \"optionType\": \"EuropeanOption\",\\n' +\n ' \"version\": 0,\\n' +\n ' \"instrumentId\": \"0001\",\\n' +\n ' \"nominal\": 100.0,\\n' +\n ' \"strike\": 100.0,\\n' +\n ' \"maturity\": 2022.08.09,\\n' +\n ' \"dayCountConvention\": \"ActualActual\",\\n' +\n ' \"payoffType\": \"Call\",\\n' +\n ' \"priceCurrency\": \"CNY\",\\n' +\n ' \"underlying\": \"EU_0001\"\\n' +\n '})\\n')\n \n // console.log(instrument)\n \n check(instrument.data() === 'ExtObj<instrument>')\n check((instrument.value as DdbExtObjValue).version === 0)\n check((instrument.value as DdbExtObjValue).data.length)\n \n check(\n await ddb.invoke<string>('typestr', [instrument]) === \n 'INSTRUMENT')\n \n const ext_table = await ddb.eval<DdbTableObj>('select * from loadTable(\"dfs://db\", \"pt\")')\n \n check(ext_table.data()[0].value === 'ExtObj<instrument>')\n \n const market_data = await ddb.eval(\n 'aod = 2025.07.01\\n' +\n 'parseMktData({\\n' +\n ' \"mktDataType\": \"Curve\",\\n' +\n ' \"curveType\": \"IrYieldCurve\",\\n' +\n ' \"version\": 0, \\n' +\n ' \"referenceDate\": aod,\\n' +\n ' \"currency\": \"CNY\",\\n' +\n ' \"dayCountConvention\": \"Actual365\",\\n' +\n ' \"compounding\": \"Continuous\",\\n' +\n ' \"interpMethod\": \"LinearInterp\",\\n' +\n ' \"extrapMethod\": \"FlatExtrap\",\\n' +\n ' \"dates\":[2025.07.07,2025.07.10,2025.07.17,2025.07.24,2025.08.04,2025.09.03,2025.10.09,2026.01.05,\\n' +\n ' 2026.04.03,2026.07.03,2027.01.04,2027.07.05,2028.07.03],\\n' +\n ' \"values\":[0.015785,0.015931,0.016183,0.016381,0.016493,0.016503,0.016478,0.016234,0.016321,\\n' +\n ' 0.016378,0.015508,0.015185,0.014901],\\n' +\n ' \"settlement\": aod+2\\n' +\n '})\\n')\n \n check(market_data.data() === 'ExtObj<market_data>')\n check((market_data.value as DdbExtObjValue).version === 0)\n \n // console.log(market_data)\n \n // --- 暂不支持上传 extobj 的 any vector\n // console.log(\n // await ddb.invoke<any>('print', [ext_table.value[3]]))\n \n // console.log(\n // ext_table.value[3].data())\n}\n\n\nasync function test_ticket (ddb: DDB) {\n console.log('测试 ticket 登录')\n \n const ticket = await ddb.invoke('getAuthenticatedUserTicket', undefined, {\n node: await ddb.invoke<string>('getControllerAlias')\n })\n \n let ddb_ = new DDB(url, {\n ...ddb_options,\n ticket,\n username: 'unused',\n password: 'unused'\n })\n \n check(\n (await ddb_.invoke<[bigint, string]>('getCurrentSessionAndUser'))\n [1],\n 'admin')\n \n await ddb_.login_by_ticket()\n \n ddb_.disconnect()\n}\n\n\nasync function test_cancel (ddb: DDB) {\n console.log('测试取消作业')\n \n let t = Date.now()\n \n let cancelled = false\n \n // 完整执行需要 5 秒\n const ptask = ddb.execute(\n 'for (i in 0..50)\\n' +\n ' sleep(100)\\n')\n \n await ddb.cancel()\n \n try {\n await ptask\n \n throw new Error('不应该执行成功')\n } catch (error) {\n if (error instanceof DdbDatabaseError) {\n check(error.message.includes('=> The task was cancelled'), '作业应该取消成功')\n cancelled = true\n } else\n throw error\n }\n \n check(cancelled && Date.now() - t < 1000, '取消作业成功时时间应该小于 1 秒')\n \n console.log('测试取消作业成功')\n}\n\n\nasync function test_format_char_vector (ddb: DDB) {\n console.log(\n await ddb.eval(\"char([1, 2, 3, 97, 98, 99, ' ', 'h', 'e', '\\\\n', 10])\"))\n}\n\n"]}
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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","sourcesContent":["import { deepEqual, deepStrictEqual } from 'node:assert/strict'\n\nimport { assert, check, defer, inspect, MyProxy, ramdisk, set_inspect_options, WebSocketConnectionError } from 'xshell'\n\nimport { keywords } from './language.ts'\n\nimport {\n DDB, DdbConnectionError, DdbDatabaseError, DdbForm, DdbInt, DdbLong, DdbObj, DdbType, \n DdbVectorAny, DdbVectorDouble, DdbVectorSymbol, DdbDurationUnit,\n type DdbStringObj, type DdbVectorAnyObj, type DdbDurationVectorValue, type DdbVectorObj, \n type DdbTableObj, DdbTimeStamp, type DdbDictObj, type DdbTableData, type DdbOptions,\n DdbVectorInt, DdbTable, type DdbExtObjValue\n} from './index.ts'\n\n\nset_inspect_options()\n\n\n// const fpd_root = import.meta.dirname.fpd\n\nconst url = 'ws://192.168.0.54:8848' as const\n// const url = 'ws://192.168.0.125:8848' as const\n// const url = 'ws://192.168.0.69:8902' as const\n// const url = 'ws://127.0.0.1:8848' as const\n\nconst ddb_options: DdbOptions = ramdisk ? { proxy: MyProxy.work } : { }\n\n\nconst repl = false\nasync function test_repl (ddb: DDB) {\n \n}\n\n\n(async function test () {\n console.log('--- 测试开始 ---'.green)\n \n let ddb = new DDB(url, ddb_options)\n \n for (const t of\n repl ? \n [test_repl]\n : [\n test_keywords,\n test_types,\n test_reconnection,\n test_connection_error,\n test_ticket,\n test_print,\n test_time,\n // test_streaming,\n test_error,\n test_invoke,\n test_append_table,\n test_cancel\n \n // test_iot_vector,\n // test_extobj,\n ]\n )\n await t(ddb)\n \n ddb.disconnect()\n \n console.log('--- 测试通过 ---'.green)\n})()\n\n\n\nfunction test_keywords () {\n check(new Set(keywords).size === keywords.length, 'keywords 中不能有重复的项')\n}\n\n\nasync function get_printed (ddb: DDB, code: string) {\n return new Promise<string>(async (resolve, reject) => {\n try {\n let resolved = false\n await ddb.eval(\n `print(${code})`,\n {\n listener ({ type, data }) {\n if (type === 'print' && !resolved) {\n resolved = true\n resolve(data)\n }\n }\n })\n \n if (!resolved)\n reject(new Error('未输出 print 消息'))\n } catch (error) {\n reject(error)\n }\n })\n}\n\n\nasync function test_reconnection (ddb: DDB) {\n let _ddb = new DDB(url, ddb_options)\n \n await _ddb.connect()\n _ddb.disconnect()\n \n let error: DdbConnectionError\n \n try {\n await _ddb.connect()\n } catch (_error) {\n error = _error\n }\n \n assert(error && error instanceof DdbConnectionError)\n}\n\n\nasync function test_connection_error (ddb: DDB) {\n let _ddb = new DDB(url, ddb_options)\n \n await _ddb.connect()\n _ddb.disconnect()\n \n let error: DdbConnectionError\n \n try {\n await _ddb.eval('1 + 1')\n } catch (_error) {\n error = _error\n }\n \n assert(error && error instanceof DdbConnectionError)\n}\n\n\nasync function test_error (ddb: DDB) {\n console.log('测试 DdbDatabaseError 和 DdbConnectionError')\n \n const error_message = '错误消息'\n const error_script = `throw ${error_message.quote()}`\n \n let database_error: DdbDatabaseError\n \n try {\n await ddb.eval(error_script)\n } catch (error) {\n database_error = error\n }\n \n assert(database_error)\n assert(database_error instanceof DdbDatabaseError)\n assert(database_error.message === `throw ${error_message.quote('double')} => ${error_message}`)\n assert(database_error.name === 'DdbDatabaseError')\n assert(database_error.url === ddb.url)\n assert(database_error.type === 'script')\n assert(database_error.options.script === error_script)\n assert(database_error.stack.includes('test_error'))\n \n \n let ddbtest = new DDB(url, ddb_options)\n let connection_error: DdbConnectionError\n try {\n await ddbtest.connect()\n ddbtest.disconnect()\n await ddbtest.eval('1')\n } catch (error) {\n connection_error = error\n }\n \n assert(connection_error)\n assert(connection_error instanceof DdbConnectionError)\n assert(connection_error.url === ddbtest.url)\n \n \n // --- 首次连接失败也会抛出 DdbConnectionError\n let ddbtest2 = new DDB('ws://dolphindb123.com/')\n let connection_error2: DdbConnectionError\n try {\n await ddbtest2.connect()\n } catch (error) {\n connection_error2 = error\n }\n \n assert(connection_error2)\n assert(connection_error2 instanceof DdbConnectionError)\n assert(connection_error2.cause && connection_error2.cause instanceof WebSocketConnectionError)\n}\n\n\nasync function test_print (ddb: DDB) {\n console.log('测试 print message')\n \n const str = 'test print message\\n中文'\n \n assert(await get_printed(ddb, str.quote()) === str)\n \n console.log('测试 verbose 输出')\n \n let vddb = new DDB(url, { ...ddb_options, verbose: true })\n \n await vddb.call('typestr', [\n new DdbVectorAny([\n new DdbVectorSymbol(['a', 'b', 'a', 'b', 'a', 'b']),\n new DdbLong(3n)\n ])\n ])\n \n vddb.disconnect()\n}\n\n\nasync function test_streaming (ddb: DDB, ha?: boolean) {\n console.log('测试流数据')\n \n const n = 100\n \n await ddb.eval(\n ha ?\n 'try {\\n' +\n ' try {\\n' +\n \" dropStreamTable('prices')\\n\" +\n ' } catch (error) { }\\n' +\n ' \\n' +\n \" haStreamTable(11, table(10000:0, ['time', 'stock', 'price'], [TIMESTAMP, SYMBOL, DOUBLE]), 'prices', 100000)\\n\" +\n \" print('prices 流表创建成功')\\n\" +\n '} catch (error) {\\n' +\n \" print('prices 流表创建失败')\\n\" +\n ' print(error)\\n' +\n '}\\n'\n :\n 'try {\\n' +\n \" if (!defined('prices', SHARED)) {\\n\" +\n ' share(\\n' +\n ' streamTable(\\n' +\n ' 10000:0,\\n' +\n \" ['time', 'stock', 'price'],\\n\" +\n ' [TIMESTAMP, SYMBOL, DOUBLE]\\n' +\n ' ),\\n' +\n \" 'prices'\\n\" +\n ' )\\n' +\n \" print('prices 流表创建成功')\\n\" +\n ' } else\\n' +\n \" print('prices 流表已存在')\\n\" +\n '} catch (error) {\\n' +\n \" print('prices 流表创建失败')\\n\" +\n ' print(error)\\n' +\n '}\\n'\n )\n \n let total_rows = 0\n \n let first = true\n \n let promise = defer<void>()\n \n let sddb = new DDB(url, {\n ...ddb_options,\n streaming: {\n table: 'prices',\n handler ({ error, data: _data, time, id, window }) {\n if (error)\n throw error\n \n const { columns, data, name, types } = _data\n \n assert(Array.isArray(data))\n \n if (first) {\n assert(data.length === 0, '流订阅应该返回 schema')\n first = false\n } else\n assert(data.length > 0)\n \n deepEqual(columns, ['time', 'stock', 'price'])\n \n assert(name === 'prices')\n assert(typeof id === 'bigint')\n assert(time)\n assert(types.length === 3)\n \n total_rows += data.length\n \n if (total_rows === n * 10)\n promise.resolve()\n },\n }\n })\n \n await sddb.connect()\n \n await ddb.eval(\n `n = ${n}\\n` +\n '\\n' +\n 'for (i in 0..9)\\n' +\n ' append!(\\n' +\n ' prices,\\n' +\n ' table([\\n' +\n ' (now() + 0..(n-1)) as time,\\n' +\n \" take(['MSFT', 'FUTU'], n) as stock,\\n\" +\n ' (0..(n-1) \\\\ 10) as price\\n' +\n ' ])\\n' +\n ' )\\n'\n )\n \n await promise\n console.log('流数据已全部收齐')\n \n sddb.disconnect()\n}\n\n\nasync function test_time (ddb: DDB) {\n console.log('测试时间显示')\n \n await time2str_equal(ddb, '2022-09-01T14:30:01.095')\n await time2str_equal(ddb, '2022-07-01T00:00:00.000')\n await time2str_equal(ddb, '2022-07-02T00:00:00.000')\n await time2str_equal(ddb, '2022-06-30T00:00:00.000')\n await time2str_equal(ddb, '2022-12-22T16:57:30.248')\n}\n\n\nasync function time2str_equal (ddb: DDB, timestr: string) {\n const code = `temporalParse('${timestr}', 'yyyy-MM-ddTHH:mm:sss.SSS')`\n \n assert(\n inspect(\n await ddb.eval(code),\n { colors: false }\n ).slice('timestamp('.length, -1) === \n (\n await get_printed(ddb, code)\n ).replace('T', ' ')\n )\n}\n\n\nasync function test_types (ddb: DDB) {\n console.log('测试通过 ddb.call 调用 getNodeAlias 函数')\n console.log(await ddb.call('getNodeAlias'))\n \n console.log('测试 ddb.call 上传不同类型的变量')\n const result0 = await ddb.call('typestr', [new DdbInt(1)])\n console.log(result0)\n assert(result0.form === DdbForm.scalar)\n assert(result0.type === DdbType.string)\n assert(result0.value === 'INT')\n \n console.log('测试 ddb.call 上传不同类型的变量')\n const result1 = await ddb.call('typestr', [new DdbVectorDouble([0.1, 0.2, 0.3])])\n console.log(result1)\n assert(result1.form === DdbForm.scalar)\n assert(result1.type === DdbType.string)\n assert(result1.value === 'FAST DOUBLE VECTOR')\n \n console.log('测试 array vector')\n const av = await ddb.eval(\n 'av = array(INT[], 0, 3)\\n' +\n 'append!(av, [1..4])\\n' +\n 'append!(av, [1..70000])\\n' +\n 'av\\n'\n )\n \n console.log(av)\n assert(av.form === DdbForm.vector)\n assert(av.type === DdbType.int + 64) // array vector 的 type 比较特殊,需要偏移 64\n assert(av.rows === 2)\n \n // 测试 array vector 格式化\n // console.log(\n // await ddb.eval<DdbVectorObj>(\n // 'av = array(DECIMAL128(2)[], 0, 1)\\n' +\n // 'append!(av, [[92233720368547758.11, NULL, 100000000000000, NULL, -92233720368547758, -100000000000000]])\\n' +\n // 'av\\n'\n // )\n // )\n \n // 测试 Invalid Date\n await ddb.upload(['x'], [new DdbTimeStamp('2024.11.11')])\n \n assert(\n inspect(\n await ddb.eval('x'), \n { colors: false }\n ) === 'timestamp(2024.11.11 00:00:00.000)'\n )\n \n console.log('测试大数据')\n let bigarr = new Float64Array(10)\n bigarr.fill(0.5)\n \n await ddb.call<DdbStringObj>('typestr', [\n new DdbObj({\n form: DdbForm.vector,\n type: DdbType.double,\n length: 0,\n rows: bigarr.length,\n cols: 1,\n value: bigarr\n })\n ])\n \n await ddb.upload(['a'], [\n new DdbObj({\n form: DdbForm.vector,\n type: DdbType.double,\n length: 0,\n rows: bigarr.length,\n cols: 1,\n value: bigarr\n })\n ])\n \n assert((\n await ddb.eval<DdbVectorDouble>('a')\n ).rows === bigarr.length)\n \n \n console.log('测试 datasource')\n \n const ds = (await ddb.eval<DdbVectorAnyObj>(\n 'db_path = \"dfs://test-datasource\"\\n' + \n 'tb_name = \"db\"\\n' + \n 'if (!existsTable(db_path, tb_name))\\n' + \n ' createTable(\\n' + \n ' database(db_path, VALUE , [1]),\\n' +\n ' table(1:0,`id`name, [INT, STRING]),\\n' +\n ' tb_name\\n' +\n ' ).append!(table(1 2 as id, `str1`str2 as name))\\n' +\n '\\n' +\n 'tb = loadTable(db_path, tb_name)\\n' +\n 'sqlDS(<select * from tb where id = 1>)\\n'\n )).value[0] as DdbStringObj\n \n const { type, form, value } = ds\n \n assert(type === DdbType.datasource && form === DdbForm.scalar, '返回的 DdbObj 具有正确的 type 和 form')\n \n assert(value === 'DataSource< select [7] * from tb where id == 1 >')\n \n // 如果直接构造 DdbObj Datasource,将其送入 ddb.call, ddb将仍然认为送入的是一个 STRING \n assert(\n (await ddb.call<DdbStringObj>('typestr', [ds])).value === 'STRING', \n '从 js 构建的 Datasource DdbObj 会被识别为 STRING'\n )\n \n console.log('测试 pair<duration>')\n const dp = await ddb.eval<DdbVectorObj<DdbDurationVectorValue>>(\n 'pair(duration(\"20d\"), duration(\"2H\"))'\n ) \n \n console.log(dp)\n assert(dp.type === DdbType.duration, 'dp 的返回值应该为 Duration')\n assert(dp.value[0].data === 20 && dp.value[0].unit === DdbDurationUnit.d, 'pair<duration> 的 value 应该已解析')\n \n console.log('测试 void vector')\n const table = await ddb.eval<DdbTableObj>('select *, NULL as val from table(1..100 as id)')\n const { value: [ints, voids] } = table\n \n console.log(voids)\n assert(voids.rows === ints.rows, 'void vector 应该具有正常的 vector length')\n assert(voids.length === 10, 'void vector 应该具有正确的数据长度')\n assert(voids.value === null, 'void vector 的值应该为 null')\n \n await ddb.upload(['voidtable'], [table])\n \n console.log('测试 compress 类型')\n \n await ddb.upload(['c'], [\n await ddb.eval<DdbDictObj>('dict([\"a\", \"b\", \"c\"], [compress([1, 2, 3]), 123, \"bbb\"])')\n ])\n}\n\n\nasync function test_from_stdjson (ddb: DDB) {\n console.log('测试 fromStdJson')\n \n console.log(\n await ddb.call('fromStdJson', [JSON.stringify({\n a: 1234,\n b: 'aaa',\n c: {\n e: 1234,\n f: 4321\n },\n f: 'blabla\\n中文\\u4e2d\\u6587'\n })])\n )\n \n console.log(\n await ddb.call('fromStdJson', [JSON.stringify(1234)])\n )\n \n console.log(\n await ddb.call('fromStdJson', [\n JSON.stringify({\n data: {\n code: 'select * from kline where secid == \"230012\"'\n }\n })\n ])\n )\n}\n\nasync function test_iot_vector (ddb: DDB) {\n const obj = await ddb.eval(\n 'if(existsDatabase(\"dfs://testIOT\")) dropDatabase(\"dfs://testIOT\")\\n' +\n 'create database \"dfs://testIOT\" partitioned by HASH([INT, 40]),RANGE(2020.01.01 2022.01.01 2025.01.01), engine=\\'TSDB\\'\\n' +\n 'create table \"dfs://testIOT\".\"pt\"(\\n' +\n ' deviceId INT,\\n' +\n ' timestamp TIMESTAMP,\\n' +\n ' location SYMBOL,\\n' +\n ' value IOTANY,\\n' +\n ')\\n' +\n 'partitioned by deviceId, timestamp,\\n' +\n 'sortColumns=[`deviceId, `location, `timestamp],\\n' +\n 'latestKeyCache=true;\\n' +\n 'pt = loadTable(\"dfs://testIOT\",\"pt\");\\n' +\n 't=table(take(1..100000,100000) as deviceId, take(now()+(0..100), 100000) as timestamp, take(\"bb\"+string(0..100), 100000) as location, take(int(1..100000),100000) as value)\\n' +\n 'pt.append!(t)\\n' +\n 'flushTSDBCache()\\n' +\n 't=table(take(100001..200000,100000) as deviceId, take(now()+(0..100), 100000) as timestamp,take(lpad(string(1), 8, \"0\"), 100000) as location, rand(200.0, 100000) as value)\\n' +\n 'pt.append!(t)\\n' +\n 'flushTSDBCache()\\n' +\n '\\n' +\n 'select * from loadTable(\"dfs://testIOT\",\"pt\")\\n'\n )\n \n console.log('obj:', obj)\n console.log('data:', obj.data())\n await ddb.upload(['a'], [obj])\n await ddb.execute('print(a)')\n deepStrictEqual(\n await ddb.execute('a'),\n obj.data())\n}\n\n\nasync function test_invoke (ddb: DDB) {\n console.log('测试 invoke')\n \n await ddb.eval(\n 'def echo (data) {\\n' +\n // ' print(data)\\n' +\n ' return data\\n' +\n '}\\n'\n )\n \n const str = 'blabla\\n中文\"\\u4e2d\\u6587\"\\\\\\\"\\\"'\n \n assert(\n (await ddb.invoke('echo', [{\n a: 1234,\n b: 'aaa',\n c: {\n e: 1234,\n f: 4321\n },\n f: str\n }]))\n .f === str\n )\n \n await ddb.execute(\n 'cbool = true false false;\\n' +\n \"cchar = 'a' 'b' 'c';\\n\" +\n 'cshort = 122h 32h 45h;\\n' +\n 'cint = 1 4 9;\\n' +\n 'clong = 17l 39l 72l;\\n' +\n 'cdate = 2013.06.13 2015.07.12 2019.08.15;\\n' +\n 'cmonth = 2011.08M 2014.02M 2019.07M;\\n' +\n 'ctime = 04:15:51.921 09:27:16.095 11:32:28.387;\\n' +\n 'cminute = 03:25m 08:12m 10:15m;\\n' +\n 'csecond = 01:15:20 04:26:45 09:22:59;\\n' +\n 'cdatetime = 1976.09.10 02:31:42 1987.12.13 11:58:31 1999.12.10 20:49:23;\\n' +\n 'ctimestamp = 1997.07.20 21:45:16.339 2002.11.26 12:40:31.783 2008.08.10 23:54:27.629;\\n' +\n 'cnanotime = 01:25:33.365869429 03:47:25.364828475 08:16:22.748395721;\\n' +\n 'cnanotimestamp = 2005.09.23 13:30:35.468385940 2007.12.11 14:54:38.949792731 2009.09.30 16:39:51.973463623;\\n' +\n 'cfloat = 7.5f 0.79f 8.27f;\\n' +\n 'cdouble = 5.7 7.2 3.9;\\n' +\n 'cstring = \"hello\" \"hi\" \"here\";\\n' +\n 'cdatehour = datehour(2012.06.15 15:32:10.158 2012.06.15 17:30:10.008 2014.09.29 23:55:42.693);\\n' +\n 'cblob = blob(\"dolphindb\" \"gaussdb\" \"goldendb\")\\n' +\n 'cdecimal32 = decimal32(12 17 135.2,2)\\n' +\n 'cdecimal64 = decimal64(18 24 33.878,4)\\n' +\n 'cdecimal128 = decimal128(18 24 33.878,18)\\n'\n )\n \n assert(\n // await ddb.invoke<DdbTableData>('defs')\n (await ddb.invoke<DdbTableData>('objs', [true], { table: 'full' }))\n .columns.includes('shared')\n )\n \n const [a, b] = await ddb.invoke<[number, number]>(\n 'def foo (a = 1, b = 2) {\\n' +\n ' return (a, b)\\n' +\n '}\\n', \n [undefined, new DdbInt(3)])\n \n check(a === 1 && b === 3)\n}\n\n\nasync function test_append_table (ddb: DDB) {\n // 在连接对应的会话中加载或创建表\n await ddb.execute('t = table(1..10 as id, take([\"A001\", \"B001\"], 10) as sym, rand(10.0, 10) as val)')\n // await ddb.execute('t = loadTable(database(\"dfs://path-to-db\"), \"table_name\")')\n \n assert(\n // 使用 tableInsert 插入数据\n await ddb.invoke<number>(\n 'tableInsert',\n [\n 't',\n \n // 数据\n new DdbTable([\n // 第一列\n new DdbVectorInt([1, 2, 3]),\n \n // 第二列\n new DdbVectorSymbol(['a', 'b', 'c']),\n \n // 第三列\n new DdbVectorDouble([1.1, 1.2, 1.3]),\n ])\n ]\n ) === 3\n )\n}\n\n\nasync function test_extobj (ddb: DDB) {\n const instrument = await ddb.eval(\n 'parseInstrument({ \\n' +\n ' \"productType\": \"Option\",\\n' +\n ' \"optionType\": \"EuropeanOption\",\\n' +\n ' \"version\": 0,\\n' +\n ' \"instrumentId\": \"0001\",\\n' +\n ' \"nominal\": 100.0,\\n' +\n ' \"strike\": 100.0,\\n' +\n ' \"maturity\": 2022.08.09,\\n' +\n ' \"dayCountConvention\": \"ActualActual\",\\n' +\n ' \"payoffType\": \"Call\",\\n' +\n ' \"priceCurrency\": \"CNY\",\\n' +\n ' \"underlying\": \"EU_0001\"\\n' +\n '})\\n')\n \n // console.log(instrument)\n \n check(instrument.data() === 'ExtObj<instrument>')\n check((instrument.value as DdbExtObjValue).version === 0)\n check((instrument.value as DdbExtObjValue).data.length)\n \n check(\n await ddb.invoke<string>('typestr', [instrument]) === \n 'INSTRUMENT')\n \n const ext_table = await ddb.eval<DdbTableObj>('select * from loadTable(\"dfs://db\", \"pt\")')\n \n check(ext_table.data()[0].value === 'ExtObj<instrument>')\n \n const market_data = await ddb.eval(\n 'aod = 2025.07.01\\n' +\n 'parseMktData({\\n' +\n ' \"mktDataType\": \"Curve\",\\n' +\n ' \"curveType\": \"IrYieldCurve\",\\n' +\n ' \"version\": 0, \\n' +\n ' \"referenceDate\": aod,\\n' +\n ' \"currency\": \"CNY\",\\n' +\n ' \"dayCountConvention\": \"Actual365\",\\n' +\n ' \"compounding\": \"Continuous\",\\n' +\n ' \"interpMethod\": \"LinearInterp\",\\n' +\n ' \"extrapMethod\": \"FlatExtrap\",\\n' +\n ' \"dates\":[2025.07.07,2025.07.10,2025.07.17,2025.07.24,2025.08.04,2025.09.03,2025.10.09,2026.01.05,\\n' +\n ' 2026.04.03,2026.07.03,2027.01.04,2027.07.05,2028.07.03],\\n' +\n ' \"values\":[0.015785,0.015931,0.016183,0.016381,0.016493,0.016503,0.016478,0.016234,0.016321,\\n' +\n ' 0.016378,0.015508,0.015185,0.014901],\\n' +\n ' \"settlement\": aod+2\\n' +\n '})\\n')\n \n check(market_data.data() === 'ExtObj<market_data>')\n check((market_data.value as DdbExtObjValue).version === 0)\n \n // console.log(market_data)\n \n // --- 暂不支持上传 extobj 的 any vector\n // console.log(\n // await ddb.invoke<any>('print', [ext_table.value[3]]))\n \n // console.log(\n // ext_table.value[3].data())\n}\n\n\nasync function test_ticket (ddb: DDB) {\n console.log('测试 ticket 登录')\n \n const ticket = await ddb.invoke('getAuthenticatedUserTicket', undefined, {\n node: await ddb.invoke<string>('getControllerAlias')\n })\n \n let ddb_ = new DDB(url, {\n ...ddb_options,\n ticket,\n username: 'unused',\n password: 'unused'\n })\n \n check(\n (await ddb_.invoke<[bigint, string]>('getCurrentSessionAndUser'))\n [1],\n 'admin')\n \n await ddb_.login_by_ticket()\n \n ddb_.disconnect()\n}\n\n\nasync function test_cancel (ddb: DDB) {\n console.log('测试取消作业')\n \n let t = Date.now()\n \n let cancelled = false\n \n // 完整执行需要 5 秒\n const ptask = ddb.execute(\n 'for (i in 0..50)\\n' +\n ' sleep(100)\\n')\n \n await ddb.cancel()\n \n try {\n await ptask\n \n throw new Error('不应该执行成功')\n } catch (error) {\n if (error instanceof DdbDatabaseError) {\n check(error.message.includes('=> The task was cancelled'), '作业应该取消成功')\n cancelled = true\n } else\n throw error\n }\n \n check(cancelled && Date.now() - t < 1000, '取消作业成功时时间应该小于 1 秒')\n \n console.log('测试取消作业成功')\n}\n\n\nasync function test_format_char_vector (ddb: DDB) {\n console.log(\n await ddb.eval(\"char([1, 2, 3, 97, 98, 99, ' ', 'h', 'e', '\\\\n', 10])\"))\n}\n\n"]}