dolphindb 3.0.209 → 3.0.211
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/README.md +5 -0
- package/README.zh.md +4 -0
- package/browser.d.ts +6 -4
- package/browser.js +17 -14
- package/browser.js.map +1 -1
- package/docs.js.map +1 -1
- package/index.d.ts +6 -4
- package/index.js +17 -14
- package/index.js.map +1 -1
- package/package.json +4 -4
- package/test.js.map +1 -1
package/docs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs.js","sourceRoot":"","sources":["docs.ts"],"names":[],"mappings":"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","sourcesContent":["import { constants, keywords } from './language.ts'\n\n\nexport interface FunctionSignature {\n full: string\n name: string\n parameters: {\n full: string\n name: string\n optional?: boolean\n default?: string\n }[]\n}\n\nexport interface Doc {\n /** 文档的公网链接 */\n url: string\n \n /** 部分函数存在多个签名,例如 append! 和 x.append!, eachPre 和 func:P 这两组,最好在分析阶段就处理好 */\n signatures: FunctionSignature[] | null\n \n /** 文档内容 */\n markdown: string\n}\n\nexport type Docs = Record<string, Doc>\n\n\nexport class DocsProvider {\n /** 文档原始信息 */\n docs?: Docs\n \n /** 函数名列表 */\n functions: string[]\n \n /** 转化成小写字母的函数名列表 */\n functions_lower: string[]\n \n constants_lower: string[]\n \n \n /** - docs: docs.zh.json 等文件对应的文档对象 */\n constructor (docs: Docs) {\n this.docs = docs\n this.functions = Object.keys(docs)\n this.functions_lower = this.functions.map(func => func.toLowerCase())\n this.constants_lower = constants.map(constant => constant.toLowerCase())\n }\n \n \n get_function_markdown (name: string) {\n return this.docs[name]?.markdown\n }\n \n \n get_signatures (name: string) {\n return this.docs[name]?.signatures\n }\n \n \n /** 根据用户输入提供补全列表,返回匹配的关键字、常量和函数 */\n complete (query: string) {\n let functions: string[]\n let _constants: string[]\n \n if (query.length === 1) {\n const c = query[0].toLowerCase()\n functions = this.functions.filter((func, i) =>\n this.functions_lower[i].startsWith(c)\n )\n _constants = constants.filter((constant, i) =>\n this.constants_lower[i].startsWith(c)\n )\n } else {\n const query_lower = query.toLowerCase()\n \n functions = this.functions.filter((func, i) => {\n const func_lower = this.functions_lower[i]\n let j = 0\n for (const c of query_lower) {\n j = func_lower.indexOf(c, j) + 1\n if (!j) // 找不到则 j === 0\n return false\n }\n \n return true\n })\n \n _constants = constants.filter((constant, i) => {\n const constant_lower = this.constants_lower[i]\n let j = 0\n for (const c of query_lower) {\n j = constant_lower.indexOf(c, j) + 1\n if (!j) // 找不到则 j === 0\n return false\n }\n \n return true\n })\n }\n \n return {\n keywords: keywords.filter(kw => kw.startsWith(query)),\n constants: _constants,\n functions,\n }\n }\n \n \n get_signature_help (text: string) {\n const caller = reverse_search_func(text)\n if (!caller)\n return\n \n const { func_name, param_start_at } = caller\n \n const cursor_param_index = find_active_param_index(text, param_start_at)\n if (cursor_param_index === -1)\n return\n \n const signatures = this.get_signatures(func_name)\n if (!signatures)\n return\n \n const signature = signatures[0]\n const params_length = signature.parameters.length\n // 如果输入参数数量超出了签名内声明的参数数量,active_parameter 为 undefined\n const active_parameter = cursor_param_index > params_length - 1 ? undefined : cursor_param_index\n const documentation_md = this.get_function_markdown(func_name)\n \n return {\n signature,\n active_parameter,\n documentation_md,\n }\n }\n}\n\n\nconst FUNC_NAME_CHAR_REG_EXP = /[a-zA-Z0-9!_]/\n\nfunction reverse_search_func (text: string): null | {\n param_start_at: number\n func_name: string\n} {\n let depth = 0\n let param_start_at = -1\n \n for (let i = text.length; i >= 0; i--) {\n const char = text[i]\n \n // 遇到右括号,入栈\n if (char === ')') {\n depth++\n continue\n }\n // 遇到左括号,出栈\n else if (char === '(') {\n depth--\n continue\n }\n \n // 栈深度小于0,且遇到合法函数名字符,跳出括号语境,搜索结束:参数搜索开始位置\n if (FUNC_NAME_CHAR_REG_EXP.test(char) && depth < 0) {\n param_start_at = i\n break\n }\n }\n \n // 找不到参数搜索开始位置,返回null\n if (param_start_at === -1)\n return null\n \n \n // 往前找函数名\n let func_name_end = -1\n let func_name_start = 0\n for (let i = param_start_at; i >= 0; i--) {\n const char = text[i]\n \n // 空字符跳过\n if (func_name_end === -1 && char === ' ')\n continue\n \n // 合法函数名字字符,继续往前找\n if (FUNC_NAME_CHAR_REG_EXP.test(char)) {\n // 标记函数名字末尾位置\n if (func_name_end === -1)\n func_name_end = i\n \n continue\n }\n \n // 不合法函数名字符,标记函数名字开头位置\n func_name_start = i + 1\n break\n }\n \n // 找不到函数名\n if (func_name_end === -1)\n return null\n \n \n return {\n param_start_at: param_start_at + 1,\n func_name: text.slice(func_name_start, func_name_end + 1),\n }\n}\n\n\n// 栈 token 匹配表\nconst PAIR_TOKEN_MAP: Record<string, string> = {\n ')': '(',\n '}': '{',\n ']': '[',\n}\n\nconst PAIR_START_TOKENS = new Set(Object.values(PAIR_TOKEN_MAP))\n\nconst LAST_IDENTIFIER_NAME_REGEXP = /[a-zA-Z_\\u4e00-\\u9fa5][\\w\\u4e00-\\u9fa5]*!?$/\n\n\n/** 根据函数参数开始位置分析参数语义,提取出当前参数索引 */\nfunction find_active_param_index (text: string, param_start_at: number) {\n let index = 0\n const stack = [ ]\n \n let commas_count = 0\n \n // 是否在转义符作用范围内\n let is_escaping_string = false\n \n // 搜索\n for (let i = param_start_at; i < text.length; i++) {\n const char = text[i]\n \n // 空字符跳过\n if (/\\s/.test(char))\n continue\n \n // 转义符作用范围下一个字符直接忽略\n if (is_escaping_string) {\n is_escaping_string = false\n continue\n }\n \n const last_stack = stack[stack.length - 1]\n // 字符串内除引号全部忽略\n if (last_stack === '\"' || last_stack === \"'\") {\n // 进入转义符作用范围\n if (char === '\\\\') {\n is_escaping_string = true\n continue\n }\n \n // 遇到相同引号\n if (char === last_stack)\n stack.pop()\n \n \n continue\n }\n \n // 开括号入栈\n if (PAIR_START_TOKENS.has(char) || char === '\"' || char === \"'\") {\n stack.push(char)\n continue\n } else if (char in PAIR_TOKEN_MAP)\n if (last_stack === PAIR_TOKEN_MAP[char]) {\n // 括号匹配,出栈\n stack.pop()\n continue\n } else\n return -1\n \n \n \n // 栈深度为1 且为左小括号:当前语境\n if (stack.length === 1 && stack[0] === '(' && char === ',')\n commas_count++\n \n \n // 根据逗号数量判断高亮参数索引值\n index = commas_count\n }\n \n const caller = text.slice(0, param_start_at)\n /** 匹配当前函数名的正则, 并捕获该函数名 */\n const match = LAST_IDENTIFIER_NAME_REGEXP.exec(caller)\n \n const is_member_call = match && caller[param_start_at - 1 /* 去掉括号 */ - match[0].length] === '.'\n \n // 是否为对象方法调用,若是,参数索引+1(对象会变成第一个参数)\n return is_member_call ? index + 1 : index\n}\n"]}
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["docs.ts"],"names":[],"mappings":"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","sourcesContent":["import { constants, keywords } from './language.ts'\n\n\nexport interface FunctionSignature {\n full: string\n name: string\n parameters: {\n full: string\n name: string\n optional?: boolean\n default?: string\n }[]\n}\n\nexport interface Doc {\n /** 文档的公网链接 */\n url: string\n \n /** 部分函数存在多个签名,例如 append! 和 x.append!, eachPre 和 func:P 这两组,最好在分析阶段就处理好 */\n signatures: FunctionSignature[] | null\n \n /** 文档内容 */\n markdown: string\n}\n\nexport type Docs = Record<string, Doc>\n\n\nexport class DocsProvider {\n /** 文档原始信息 */\n docs?: Docs\n \n /** 函数名列表 */\n functions: string[]\n \n /** 转化成小写字母的函数名列表 */\n functions_lower: string[]\n \n constants_lower: string[]\n \n \n /** - docs: docs.zh.json 等文件对应的文档对象 */\n constructor (docs: Docs) {\n this.docs = docs\n this.functions = Object.keys(docs)\n this.functions_lower = this.functions.map(func => func.toLowerCase())\n this.constants_lower = constants.map(constant => constant.toLowerCase())\n }\n \n \n get_function_markdown (name: string) {\n return this.docs[name]?.markdown\n }\n \n \n get_signatures (name: string) {\n return this.docs[name]?.signatures\n }\n \n \n /** 根据用户输入提供补全列表,返回匹配的关键字、常量和函数 */\n complete (query: string) {\n let functions: string[]\n let _constants: string[]\n \n if (query.length === 1) {\n const c = query[0].toLowerCase()\n functions = this.functions.filter((func, i) =>\n this.functions_lower[i].startsWith(c))\n _constants = constants.filter((constant, i) =>\n this.constants_lower[i].startsWith(c))\n } else {\n const query_lower = query.toLowerCase()\n \n functions = this.functions.filter((func, i) => {\n const func_lower = this.functions_lower[i]\n let j = 0\n for (const c of query_lower) {\n j = func_lower.indexOf(c, j) + 1\n if (!j) // 找不到则 j === 0\n return false\n }\n \n return true\n })\n \n _constants = constants.filter((constant, i) => {\n const constant_lower = this.constants_lower[i]\n let j = 0\n for (const c of query_lower) {\n j = constant_lower.indexOf(c, j) + 1\n if (!j) // 找不到则 j === 0\n return false\n }\n \n return true\n })\n }\n \n return {\n keywords: keywords.filter(kw => kw.startsWith(query)),\n constants: _constants,\n functions,\n }\n }\n \n \n get_signature_help (text: string) {\n const caller = reverse_search_func(text)\n if (!caller)\n return\n \n const { func_name, param_start_at } = caller\n \n const cursor_param_index = find_active_param_index(text, param_start_at)\n if (cursor_param_index === -1)\n return\n \n const signatures = this.get_signatures(func_name)\n if (!signatures)\n return\n \n const signature = signatures[0]\n const params_length = signature.parameters.length\n // 如果输入参数数量超出了签名内声明的参数数量,active_parameter 为 undefined\n const active_parameter = cursor_param_index > params_length - 1 ? undefined : cursor_param_index\n const documentation_md = this.get_function_markdown(func_name)\n \n return {\n signature,\n active_parameter,\n documentation_md,\n }\n }\n}\n\n\nconst FUNC_NAME_CHAR_REG_EXP = /[a-zA-Z0-9!_]/\n\nfunction reverse_search_func (text: string): null | {\n param_start_at: number\n func_name: string\n} {\n let depth = 0\n let param_start_at = -1\n \n for (let i = text.length; i >= 0; i--) {\n const char = text[i]\n \n // 遇到右括号,入栈\n if (char === ')') {\n depth++\n continue\n }\n // 遇到左括号,出栈\n else if (char === '(') {\n depth--\n continue\n }\n \n // 栈深度小于0,且遇到合法函数名字符,跳出括号语境,搜索结束:参数搜索开始位置\n if (FUNC_NAME_CHAR_REG_EXP.test(char) && depth < 0) {\n param_start_at = i\n break\n }\n }\n \n // 找不到参数搜索开始位置,返回null\n if (param_start_at === -1)\n return null\n \n \n // 往前找函数名\n let func_name_end = -1\n let func_name_start = 0\n for (let i = param_start_at; i >= 0; i--) {\n const char = text[i]\n \n // 空字符跳过\n if (func_name_end === -1 && char === ' ')\n continue\n \n // 合法函数名字字符,继续往前找\n if (FUNC_NAME_CHAR_REG_EXP.test(char)) {\n // 标记函数名字末尾位置\n if (func_name_end === -1)\n func_name_end = i\n \n continue\n }\n \n // 不合法函数名字符,标记函数名字开头位置\n func_name_start = i + 1\n break\n }\n \n // 找不到函数名\n if (func_name_end === -1)\n return null\n \n \n return {\n param_start_at: param_start_at + 1,\n func_name: text.slice(func_name_start, func_name_end + 1),\n }\n}\n\n\n// 栈 token 匹配表\nconst PAIR_TOKEN_MAP: Record<string, string> = {\n ')': '(',\n '}': '{',\n ']': '[',\n}\n\nconst PAIR_START_TOKENS = new Set(Object.values(PAIR_TOKEN_MAP))\n\nconst LAST_IDENTIFIER_NAME_REGEXP = /[a-zA-Z_\\u4e00-\\u9fa5][\\w\\u4e00-\\u9fa5]*!?$/\n\n\n/** 根据函数参数开始位置分析参数语义,提取出当前参数索引 */\nfunction find_active_param_index (text: string, param_start_at: number) {\n let index = 0\n const stack = [ ]\n \n let commas_count = 0\n \n // 是否在转义符作用范围内\n let is_escaping_string = false\n \n // 搜索\n for (let i = param_start_at; i < text.length; i++) {\n const char = text[i]\n \n // 空字符跳过\n if (/\\s/.test(char))\n continue\n \n // 转义符作用范围下一个字符直接忽略\n if (is_escaping_string) {\n is_escaping_string = false\n continue\n }\n \n const last_stack = stack[stack.length - 1]\n // 字符串内除引号全部忽略\n if (last_stack === '\"' || last_stack === \"'\") {\n // 进入转义符作用范围\n if (char === '\\\\') {\n is_escaping_string = true\n continue\n }\n \n // 遇到相同引号\n if (char === last_stack)\n stack.pop()\n \n \n continue\n }\n \n // 开括号入栈\n if (PAIR_START_TOKENS.has(char) || char === '\"' || char === \"'\") {\n stack.push(char)\n continue\n } else if (char in PAIR_TOKEN_MAP)\n if (last_stack === PAIR_TOKEN_MAP[char]) {\n // 括号匹配,出栈\n stack.pop()\n continue\n } else\n return -1\n \n \n \n // 栈深度为1 且为左小括号:当前语境\n if (stack.length === 1 && stack[0] === '(' && char === ',')\n commas_count++\n \n \n // 根据逗号数量判断高亮参数索引值\n index = commas_count\n }\n \n const caller = text.slice(0, param_start_at)\n /** 匹配当前函数名的正则, 并捕获该函数名 */\n const match = LAST_IDENTIFIER_NAME_REGEXP.exec(caller)\n \n const is_member_call = match && caller[param_start_at - 1 /* 去掉括号 */ - match[0].length] === '.'\n \n // 是否为对象方法调用,若是,参数索引+1(对象会变成第一个参数)\n return is_member_call ? index + 1 : index\n}\n"]}
|
package/index.d.ts
CHANGED
|
@@ -280,6 +280,7 @@ export interface DdbMatrixData {
|
|
|
280
280
|
}
|
|
281
281
|
export type IotVectorItemValue = [number | string | bigint | boolean][];
|
|
282
282
|
export type DdbIotAnyVector = DdbObj<IotVectorItemValue>;
|
|
283
|
+
export type Convertable = DdbObj | string | boolean | null | undefined;
|
|
283
284
|
/** 可以表示所有 DolphinDB 数据库中的数据类型 Can represent data types in all DolphinDB databases */
|
|
284
285
|
export declare class DdbObj<TValue extends DdbValue = DdbValue> {
|
|
285
286
|
static dec: TextDecoder;
|
|
@@ -356,10 +357,10 @@ export declare class DdbObj<TValue extends DdbValue = DdbValue> {
|
|
|
356
357
|
}, limit?: number): TensorData;
|
|
357
358
|
[inspect.custom](depth: number, _options: InspectOptions, _inspect: any): string;
|
|
358
359
|
inspect_type(): string;
|
|
359
|
-
/** 自动转换
|
|
360
|
-
static to_ddbobj(value:
|
|
360
|
+
/** 自动转换 Convertable 为 DdbObj */
|
|
361
|
+
static to_ddbobj(value: Convertable): DdbObj;
|
|
361
362
|
/** 转换 js 数组为 DdbObj[] */
|
|
362
|
-
static to_ddbobjs(values:
|
|
363
|
+
static to_ddbobjs(values: Convertable[]): DdbObj<DdbValue>[];
|
|
363
364
|
/** 将 table 转换为 rows,空值转换为 null
|
|
364
365
|
@deprecated 用 data() */
|
|
365
366
|
to_rows<T extends Record<string, any> = Record<string, any>>(): T[];
|
|
@@ -407,9 +408,10 @@ export interface ConvertOptions {
|
|
|
407
408
|
/** `'ms'` timestamp 类型转换为字符串表示时显示到秒还是毫秒 */
|
|
408
409
|
timestamp?: 's' | 'ms';
|
|
409
410
|
}
|
|
410
|
-
export declare function convert(type: DdbType, value: DdbValue, le: boolean, { blob, char, timestamp }?: ConvertOptions): string | number | bigint | boolean |
|
|
411
|
+
export declare function convert(type: DdbType, value: DdbValue, le: boolean, { blob, char, timestamp }?: ConvertOptions): string | number | bigint | boolean | string[] | number[] | DdbFunctionDefValue | DdbDurationValue | DdbDecimal32Value | DdbDecimal64Value | DdbDecimal32VectorValue | DdbDecimal64VectorValue | DdbDecimal128VectorValue | BigInt128Array | DdbSymbolExtendedValue | DdbArrayVectorValue | DdbMatrixValue | Uint8Array<ArrayBufferLike> | Int8Array<ArrayBufferLike> | Int16Array<ArrayBufferLike> | Int32Array<ArrayBufferLike> | Float32Array<ArrayBufferLike> | Float64Array<ArrayBufferLike> | BigInt64Array<ArrayBufferLike> | Uint8Array<ArrayBufferLike>[] | DdbObj<DdbValue>[] | IotVectorItemValue | DdbDurationVectorValue | DdbTensorValue | DdbChartValue;
|
|
411
412
|
/** 转换一个向量到 js 原生数组 */
|
|
412
413
|
export declare function converts(type: DdbType, value: DdbVectorValue, rows: number, le: boolean, options?: ConvertOptions): any[] | Uint8Array;
|
|
414
|
+
/** 构造 void 类型,默认为 `DdbVoidType.undefined` */
|
|
413
415
|
export declare class DdbVoid extends DdbObj<undefined> {
|
|
414
416
|
constructor(value?: DdbVoidType);
|
|
415
417
|
}
|
package/index.js
CHANGED
|
@@ -1548,10 +1548,14 @@ export class DdbObj {
|
|
|
1548
1548
|
return `${DdbForm[this.form]} ${tname}`;
|
|
1549
1549
|
}
|
|
1550
1550
|
}
|
|
1551
|
-
/** 自动转换
|
|
1551
|
+
/** 自动转换 Convertable 为 DdbObj */
|
|
1552
1552
|
static to_ddbobj(value) {
|
|
1553
1553
|
if (value && value instanceof DdbObj)
|
|
1554
1554
|
return value;
|
|
1555
|
+
if (value === undefined)
|
|
1556
|
+
return new DdbVoid();
|
|
1557
|
+
if (value === null)
|
|
1558
|
+
return new DdbVoid(DdbVoidType.null);
|
|
1555
1559
|
const type = typeof value;
|
|
1556
1560
|
switch (type) {
|
|
1557
1561
|
case 'string':
|
|
@@ -2122,6 +2126,7 @@ export function converts(type, value, rows, le, options) {
|
|
|
2122
2126
|
}).flat();
|
|
2123
2127
|
}
|
|
2124
2128
|
}
|
|
2129
|
+
/** 构造 void 类型,默认为 `DdbVoidType.undefined` */
|
|
2125
2130
|
export class DdbVoid extends DdbObj {
|
|
2126
2131
|
constructor(value = DdbVoidType.undefined) {
|
|
2127
2132
|
super({
|
|
@@ -3273,20 +3278,23 @@ export class DDB {
|
|
|
3273
3278
|
async invoke(func, args, options) {
|
|
3274
3279
|
// 检查 args 是否全部为简单参数,是则直接调用 call,避免 invoke 间接调用
|
|
3275
3280
|
// 逻辑类似 DdbObj.to_ddbobjs, 需要同步修改
|
|
3276
|
-
let
|
|
3281
|
+
let convertable = true;
|
|
3277
3282
|
let has_ddbobj = false;
|
|
3278
3283
|
if (args)
|
|
3279
3284
|
for (const arg of args)
|
|
3280
3285
|
if (arg && arg instanceof DdbObj)
|
|
3281
3286
|
has_ddbobj = true;
|
|
3287
|
+
else if (arg === undefined || arg === null) {
|
|
3288
|
+
// simple
|
|
3289
|
+
}
|
|
3282
3290
|
else {
|
|
3283
3291
|
const type = typeof arg;
|
|
3284
|
-
if (type === 'string' || type === 'boolean') { }
|
|
3292
|
+
if (type === 'string' || type === 'boolean') { } // simple
|
|
3285
3293
|
else
|
|
3286
|
-
|
|
3294
|
+
convertable = false;
|
|
3287
3295
|
}
|
|
3288
3296
|
let result;
|
|
3289
|
-
if (
|
|
3297
|
+
if (convertable)
|
|
3290
3298
|
result = await this.call(func, args, options);
|
|
3291
3299
|
else {
|
|
3292
3300
|
if (has_ddbobj)
|
|
@@ -3374,15 +3382,10 @@ export class DDB {
|
|
|
3374
3382
|
/** index of line feed 0 */
|
|
3375
3383
|
const ilf0 = buf.indexOf(0x0a); // '\n'
|
|
3376
3384
|
const parts = this.dec.decode(buf.subarray(0, ilf0)).split(' ');
|
|
3377
|
-
|
|
3378
|
-
|
|
3379
|
-
|
|
3380
|
-
|
|
3381
|
-
this.sid = sid;
|
|
3382
|
-
}
|
|
3383
|
-
/** 返回对象的数量 */
|
|
3384
|
-
const nobj = Number(parts[1]);
|
|
3385
|
-
/** 大小端: 协议中大端为 0, 小端为 1 */
|
|
3385
|
+
this.sid = parts[0];
|
|
3386
|
+
// 返回对象的数量
|
|
3387
|
+
// const nobj = Number(parts[1])
|
|
3388
|
+
// 大小端: 协议中大端为 0, 小端为 1
|
|
3386
3389
|
this.le = Number(parts[2]) !== 0;
|
|
3387
3390
|
const ils1 = ilf0 + 1;
|
|
3388
3391
|
const ilf1 = buf.indexOf(0x0a, ils1); // '\n'
|