dolphindb 3.0.211 → 3.0.213
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 +6 -6
- package/README.zh.md +5 -2
- package/browser.d.ts +1 -1
- package/docs.js +25 -32
- package/docs.js.map +1 -1
- package/index.d.ts +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -612,12 +612,12 @@ To close streaming data subscription, use the following two methods to disconnec
|
|
|
612
612
|
- Manually disconnect by calling `sddb.disconnect()`
|
|
613
613
|
|
|
614
614
|
|
|
615
|
-
|
|
615
|
+
### Development method
|
|
616
616
|
|
|
617
617
|
```shell
|
|
618
618
|
# Install the latest version of nodejs (see above)
|
|
619
619
|
|
|
620
|
-
# Install pnpm package manager
|
|
620
|
+
# Install the pnpm package manager
|
|
621
621
|
npm install -g pnpm
|
|
622
622
|
|
|
623
623
|
git clone https://github.com/dolphindb/api-javascript.git
|
|
@@ -630,13 +630,13 @@ pnpm install
|
|
|
630
630
|
# Copy .vscode/settings.template.json to .vscode/settings.json
|
|
631
631
|
cp .vscode/settings.template.json .vscode/settings.json
|
|
632
632
|
|
|
633
|
-
# Refer to
|
|
633
|
+
# Refer to scripts in package.json
|
|
634
634
|
|
|
635
635
|
# Build
|
|
636
636
|
pnpm run build
|
|
637
637
|
|
|
638
|
-
#
|
|
639
|
-
pnpm run
|
|
638
|
+
# Format code and automatically fix code errors
|
|
639
|
+
pnpm run fix
|
|
640
640
|
|
|
641
641
|
# Test
|
|
642
642
|
pnpm run test
|
|
@@ -644,6 +644,6 @@ pnpm run test
|
|
|
644
644
|
# Scan entries
|
|
645
645
|
pnpm run scan
|
|
646
646
|
# Manually complete untranslated entries
|
|
647
|
-
# Run
|
|
647
|
+
# Run scan again to update the dictionary file dict.json
|
|
648
648
|
pnpm run scan
|
|
649
649
|
```
|
package/README.zh.md
CHANGED
|
@@ -606,6 +606,9 @@ git clone https://github.com/dolphindb/api-javascript.git
|
|
|
606
606
|
|
|
607
607
|
cd api-javascript
|
|
608
608
|
|
|
609
|
+
# 国内网络推荐配置 registry
|
|
610
|
+
pnpm config set registry https://registry.npmmirror.com
|
|
611
|
+
|
|
609
612
|
# 安装项目依赖
|
|
610
613
|
pnpm install
|
|
611
614
|
|
|
@@ -617,8 +620,8 @@ cp .vscode/settings.template.json .vscode/settings.json
|
|
|
617
620
|
# 构建
|
|
618
621
|
pnpm run build
|
|
619
622
|
|
|
620
|
-
#
|
|
621
|
-
pnpm run
|
|
623
|
+
# 格式化代码并自动修复代码错误
|
|
624
|
+
pnpm run fix
|
|
622
625
|
|
|
623
626
|
# 测试
|
|
624
627
|
pnpm run test
|
package/browser.d.ts
CHANGED
|
@@ -419,7 +419,7 @@ export interface ConvertOptions {
|
|
|
419
419
|
/** `'ms'` timestamp 类型转换为字符串表示时显示到秒还是毫秒 */
|
|
420
420
|
timestamp?: 's' | 'ms';
|
|
421
421
|
}
|
|
422
|
-
export declare function convert(type: DdbType, value: DdbValue, le: boolean, { blob, char, timestamp }?: ConvertOptions): string | number | bigint | boolean |
|
|
422
|
+
export declare function convert(type: DdbType, value: DdbValue, le: boolean, { blob, char, timestamp }?: ConvertOptions): string | number | bigint | boolean | number[] | Uint8Array<ArrayBufferLike> | DdbFunctionDefValue | DdbDurationValue | DdbDecimal32Value | DdbDecimal64Value | Int8Array<ArrayBufferLike> | Int16Array<ArrayBufferLike> | Int32Array<ArrayBufferLike> | Float32Array<ArrayBufferLike> | Float64Array<ArrayBufferLike> | BigInt64Array<ArrayBufferLike> | BigInt128Array | string[] | Uint8Array<ArrayBufferLike>[] | DdbObj<DdbValue>[] | IotVectorItemValue | DdbSymbolExtendedValue | DdbArrayVectorValue | DdbDecimal32VectorValue | DdbDecimal64VectorValue | DdbDecimal128VectorValue | DdbDurationVectorValue | DdbMatrixValue | DdbChartValue | DdbTensorValue;
|
|
423
423
|
/** 转换一个向量到 js 原生数组 */
|
|
424
424
|
export declare function converts(type: DdbType, value: DdbVectorValue, rows: number, le: boolean, options?: ConvertOptions): any[] | Uint8Array;
|
|
425
425
|
/** 构造 void 类型,默认为 `DdbVoidType.undefined` */
|
package/docs.js
CHANGED
|
@@ -22,40 +22,10 @@ export class DocsProvider {
|
|
|
22
22
|
}
|
|
23
23
|
/** 根据用户输入提供补全列表,返回匹配的关键字、常量和函数 */
|
|
24
24
|
complete(query) {
|
|
25
|
-
let functions;
|
|
26
|
-
let _constants;
|
|
27
|
-
if (query.length === 1) {
|
|
28
|
-
const c = query[0].toLowerCase();
|
|
29
|
-
functions = this.functions.filter((func, i) => this.functions_lower[i].startsWith(c));
|
|
30
|
-
_constants = constants.filter((constant, i) => this.constants_lower[i].startsWith(c));
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
const query_lower = query.toLowerCase();
|
|
34
|
-
functions = this.functions.filter((func, i) => {
|
|
35
|
-
const func_lower = this.functions_lower[i];
|
|
36
|
-
let j = 0;
|
|
37
|
-
for (const c of query_lower) {
|
|
38
|
-
j = func_lower.indexOf(c, j) + 1;
|
|
39
|
-
if (!j) // 找不到则 j === 0
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
return true;
|
|
43
|
-
});
|
|
44
|
-
_constants = constants.filter((constant, i) => {
|
|
45
|
-
const constant_lower = this.constants_lower[i];
|
|
46
|
-
let j = 0;
|
|
47
|
-
for (const c of query_lower) {
|
|
48
|
-
j = constant_lower.indexOf(c, j) + 1;
|
|
49
|
-
if (!j) // 找不到则 j === 0
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
return true;
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
25
|
return {
|
|
56
26
|
keywords: keywords.filter(kw => kw.startsWith(query)),
|
|
57
|
-
constants:
|
|
58
|
-
functions,
|
|
27
|
+
constants: fuzzyfilter(query, constants, this.constants_lower),
|
|
28
|
+
functions: fuzzyfilter(query, this.functions, this.functions_lower),
|
|
59
29
|
};
|
|
60
30
|
}
|
|
61
31
|
get_signature_help(text) {
|
|
@@ -198,4 +168,27 @@ function find_active_param_index(text, param_start_at) {
|
|
|
198
168
|
// 是否为对象方法调用,若是,参数索引+1(对象会变成第一个参数)
|
|
199
169
|
return is_member_call ? index + 1 : index;
|
|
200
170
|
}
|
|
171
|
+
/** 模糊过滤字符串列表或对象列表,常用于根据用户输入补全或搜索过滤
|
|
172
|
+
- query: 查询字符串,要求为全小写
|
|
173
|
+
- list: 要过滤的列表
|
|
174
|
+
- list_lower?: 要过滤的列表对应的全小写字符串列表形式,传入时可复用缓存,加快搜索速度 */
|
|
175
|
+
function fuzzyfilter(query, list, list_lower) {
|
|
176
|
+
if (!query)
|
|
177
|
+
return list;
|
|
178
|
+
if (query.length === 1) {
|
|
179
|
+
const c = query[0];
|
|
180
|
+
return list.filter((_, i) => list_lower[i].startsWith(c));
|
|
181
|
+
}
|
|
182
|
+
const query_lower = query.toLowerCase();
|
|
183
|
+
return list.filter((_, i) => {
|
|
184
|
+
const str_lower = list_lower[i];
|
|
185
|
+
let j = 0;
|
|
186
|
+
for (const c of query_lower) {
|
|
187
|
+
j = str_lower.indexOf(c, j) + 1;
|
|
188
|
+
if (!j) // 找不到则 j === 0
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
return true;
|
|
192
|
+
});
|
|
193
|
+
}
|
|
201
194
|
//# sourceMappingURL=docs.js.map
|
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 _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"]}
|
|
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 return {\n keywords: keywords.filter(kw => kw.startsWith(query)),\n constants: fuzzyfilter(query, constants as any as string[], this.constants_lower),\n functions: fuzzyfilter(query, this.functions, this.functions_lower),\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\n\n/** 模糊过滤字符串列表或对象列表,常用于根据用户输入补全或搜索过滤 \n - query: 查询字符串,要求为全小写\n - list: 要过滤的列表\n - list_lower?: 要过滤的列表对应的全小写字符串列表形式,传入时可复用缓存,加快搜索速度 */\nfunction fuzzyfilter (\n query: string, \n list: string[],\n list_lower: string[],\n) {\n if (!query)\n return list\n \n if (query.length === 1) {\n const c = query[0]\n return list.filter((_, i) =>\n list_lower[i].startsWith(c))\n }\n \n const query_lower = query.toLowerCase()\n \n return list.filter((_, i) => {\n const str_lower = list_lower[i]\n let j = 0\n for (const c of query_lower) {\n j = str_lower.indexOf(c, j) + 1\n if (!j) // 找不到则 j === 0\n return false\n }\n return true\n })\n}\n\n"]}
|
package/index.d.ts
CHANGED
|
@@ -408,7 +408,7 @@ export interface ConvertOptions {
|
|
|
408
408
|
/** `'ms'` timestamp 类型转换为字符串表示时显示到秒还是毫秒 */
|
|
409
409
|
timestamp?: 's' | 'ms';
|
|
410
410
|
}
|
|
411
|
-
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 | number[] | string[] | Uint8Array<ArrayBufferLike> | DdbFunctionDefValue | DdbDurationValue | DdbDecimal32Value | DdbDecimal64Value | Int8Array<ArrayBufferLike> | Int16Array<ArrayBufferLike> | Int32Array<ArrayBufferLike> | Float32Array<ArrayBufferLike> | Float64Array<ArrayBufferLike> | BigInt64Array<ArrayBufferLike> | BigInt128Array | Uint8Array<ArrayBufferLike>[] | DdbObj<DdbValue>[] | IotVectorItemValue | DdbSymbolExtendedValue | DdbArrayVectorValue | DdbDecimal32VectorValue | DdbDecimal64VectorValue | DdbDecimal128VectorValue | DdbDurationVectorValue | DdbMatrixValue | DdbChartValue | DdbTensorValue;
|
|
412
412
|
/** 转换一个向量到 js 原生数组 */
|
|
413
413
|
export declare function converts(type: DdbType, value: DdbVectorValue, rows: number, le: boolean, options?: ConvertOptions): any[] | Uint8Array;
|
|
414
414
|
/** 构造 void 类型,默认为 `DdbVoidType.undefined` */
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dolphindb",
|
|
3
3
|
"description": "DolphinDB JavaScript API",
|
|
4
|
-
"version": "3.0.
|
|
4
|
+
"version": "3.0.213",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./index.js",
|
|
7
7
|
"browser": "./browser.js",
|
|
8
8
|
"scripts": {
|
|
9
9
|
"build": "tsc",
|
|
10
|
-
"test": "node ./test.ts",
|
|
10
|
+
"test": "node --experimental-transform-types ./test.ts",
|
|
11
11
|
"lint": "eslint \"**/*.{ts,tsx}\"",
|
|
12
12
|
"fix": "eslint --fix \"**/*.{ts,tsx}\"",
|
|
13
13
|
"scan": "i18n-scan --input \"**/*.{ts,tsx}\""
|
|
@@ -37,6 +37,6 @@
|
|
|
37
37
|
"dayjs": "^1.11.13",
|
|
38
38
|
"ipaddr.js": "^2.2.0",
|
|
39
39
|
"tslib": "^2.8.1",
|
|
40
|
-
"xshell": "^1.1.
|
|
40
|
+
"xshell": "^1.1.22"
|
|
41
41
|
}
|
|
42
42
|
}
|