Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
ac423f56
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
ac423f56
编写于
12月 29, 2021
作者:
C
Cary Xu
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' into hotfix/TS-995-D
上级
61c1014c
e558069a
变更
47
隐藏空白更改
内联
并排
Showing
47 changed file
with
6340 addition
and
33 deletion
+6340
-33
cmake/version.inc
cmake/version.inc
+1
-1
snap/snapcraft.yaml
snap/snapcraft.yaml
+1
-1
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+1
-1
src/connector/node-red-contrib-tdengine/.gitignore
src/connector/node-red-contrib-tdengine/.gitignore
+1
-0
src/connector/node-red-contrib-tdengine/README.md
src/connector/node-red-contrib-tdengine/README.md
+36
-0
src/connector/node-red-contrib-tdengine/demo/EditTestSQL.png
src/connector/node-red-contrib-tdengine/demo/EditTestSQL.png
+0
-0
src/connector/node-red-contrib-tdengine/demo/ImportFlow.png
src/connector/node-red-contrib-tdengine/demo/ImportFlow.png
+0
-0
src/connector/node-red-contrib-tdengine/demo/InstallTDEngineNode.png
...or/node-red-contrib-tdengine/demo/InstallTDEngineNode.png
+0
-0
src/connector/node-red-contrib-tdengine/demo/ModifyServerConfig.png
...tor/node-red-contrib-tdengine/demo/ModifyServerConfig.png
+0
-0
src/connector/node-red-contrib-tdengine/demo/flow.json
src/connector/node-red-contrib-tdengine/demo/flow.json
+85
-0
src/connector/node-red-contrib-tdengine/package-lock.json
src/connector/node-red-contrib-tdengine/package-lock.json
+3683
-0
src/connector/node-red-contrib-tdengine/package.json
src/connector/node-red-contrib-tdengine/package.json
+29
-0
src/connector/node-red-contrib-tdengine/tdengine.html
src/connector/node-red-contrib-tdengine/tdengine.html
+89
-0
src/connector/node-red-contrib-tdengine/tdengine.js
src/connector/node-red-contrib-tdengine/tdengine.js
+71
-0
src/kit/shell/src/shellEngine.c
src/kit/shell/src/shellEngine.c
+22
-2
src/util/src/tlosertree.c
src/util/src/tlosertree.c
+5
-0
tests/develop-test/0-others/TD-12435.py
tests/develop-test/0-others/TD-12435.py
+49
-0
tests/develop-test/3-connectors/go/test.sh
tests/develop-test/3-connectors/go/test.sh
+3
-0
tests/develop-test/fulltest-others.sh
tests/develop-test/fulltest-others.sh
+2
-1
tests/examples/JDBC/taosdemo/src/main/resources/insert.json
tests/examples/JDBC/taosdemo/src/main/resources/insert.json
+1
-1
tests/pytest/dockerCluster/insert.json
tests/pytest/dockerCluster/insert.json
+1
-1
tests/pytest/manualTest/TD-5114/insertDataDb3Replica2.json
tests/pytest/manualTest/TD-5114/insertDataDb3Replica2.json
+1
-1
tests/pytest/query/nestedQuery/insertData.json
tests/pytest/query/nestedQuery/insertData.json
+1
-1
tests/pytest/tsdb/insertDataDb1.json
tests/pytest/tsdb/insertDataDb1.json
+1
-1
tests/pytest/tsdb/insertDataDb1Replica2.json
tests/pytest/tsdb/insertDataDb1Replica2.json
+1
-1
tests/pytest/tsdb/insertDataDb2.json
tests/pytest/tsdb/insertDataDb2.json
+1
-1
tests/pytest/tsdb/insertDataDb2Newstab.json
tests/pytest/tsdb/insertDataDb2Newstab.json
+1
-1
tests/pytest/tsdb/insertDataDb2NewstabReplica2.json
tests/pytest/tsdb/insertDataDb2NewstabReplica2.json
+1
-1
tests/pytest/tsdb/insertDataDb2Replica2.json
tests/pytest/tsdb/insertDataDb2Replica2.json
+1
-1
tests/pytest/wal/insertDataDb1.json
tests/pytest/wal/insertDataDb1.json
+1
-1
tests/pytest/wal/insertDataDb1Replica2.json
tests/pytest/wal/insertDataDb1Replica2.json
+1
-1
tests/pytest/wal/insertDataDb2.json
tests/pytest/wal/insertDataDb2.json
+1
-1
tests/pytest/wal/insertDataDb2Newstab.json
tests/pytest/wal/insertDataDb2Newstab.json
+1
-1
tests/pytest/wal/insertDataDb2NewstabReplica2.json
tests/pytest/wal/insertDataDb2NewstabReplica2.json
+1
-1
tests/pytest/wal/insertDataDb2Replica2.json
tests/pytest/wal/insertDataDb2Replica2.json
+1
-1
tests/system-test/1-insert/Null_tag_Line_insert.py
tests/system-test/1-insert/Null_tag_Line_insert.py
+177
-0
tests/system-test/3-connectors/c#/TDengineDriver/TDengineDriver.cs
...tem-test/3-connectors/c#/TDengineDriver/TDengineDriver.cs
+405
-0
tests/system-test/3-connectors/c#/TDengineDriver/TDengineDriver.csproj
...test/3-connectors/c#/TDengineDriver/TDengineDriver.csproj
+7
-0
tests/system-test/3-connectors/c#/TDengineDriver/TaosBind.cs
tests/system-test/3-connectors/c#/TDengineDriver/TaosBind.cs
+336
-0
tests/system-test/3-connectors/c#/TDengineDriver/TaosMultiBind.cs
...stem-test/3-connectors/c#/TDengineDriver/TaosMultiBind.cs
+629
-0
tests/system-test/3-connectors/c#/stmtfunction/stmtfunction.cs
.../system-test/3-connectors/c#/stmtfunction/stmtfunction.cs
+668
-0
tests/system-test/3-connectors/c#/stmtfunction/stmtfunction.csproj
...tem-test/3-connectors/c#/stmtfunction/stmtfunction.csproj
+14
-0
tests/system-test/3-connectors/c#/test.sh
tests/system-test/3-connectors/c#/test.sh
+3
-0
tests/system-test/3-connectors/go/test.sh
tests/system-test/3-connectors/go/test.sh
+0
-1
tests/system-test/fulltest-insert.sh
tests/system-test/fulltest-insert.sh
+1
-1
tests/test-CI.sh
tests/test-CI.sh
+1
-3
tests/test-all.sh
tests/test-all.sh
+5
-6
未找到文件。
cmake/version.inc
浏览文件 @
ac423f56
...
...
@@ -4,7 +4,7 @@ PROJECT(TDengine)
IF
(
DEFINED
VERNUMBER
)
SET
(
TD_VER_NUMBER
$
{
VERNUMBER
})
ELSE
()
SET
(
TD_VER_NUMBER
"2.
3.2
.0"
)
SET
(
TD_VER_NUMBER
"2.
4.0
.0"
)
ENDIF
()
IF
(
DEFINED
VERCOMPATIBLE
)
...
...
snap/snapcraft.yaml
浏览文件 @
ac423f56
name
:
tdengine
base
:
core20
version
:
'
2.
3.2
.0'
version
:
'
2.
4.0
.0'
icon
:
snap/gui/t-dengine.svg
summary
:
an open-source big data platform designed and optimized for IoT.
description
:
|
...
...
src/client/src/tscSQLParser.c
浏览文件 @
ac423f56
...
...
@@ -6090,7 +6090,7 @@ int32_t getTimeRange(STimeWindow* win, tSqlExpr* pRight, int32_t optr, int16_t t
// todo error !!!!
int32_t
tsRewriteFieldNameIfNecessary
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
)
{
const
char
rep
[]
=
{
'('
,
')'
,
'*'
,
','
,
'.'
,
'/'
,
'\\'
,
'+'
,
'-'
,
'%'
,
' '
};
const
char
rep
[]
=
{
'('
,
')'
,
'*'
,
','
,
'.'
,
'/'
,
'\\'
,
'+'
,
'-'
,
'%'
,
' '
,
'`'
};
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
fieldsInfo
.
numOfOutput
;
++
i
)
{
char
*
fieldName
=
tscFieldInfoGetField
(
&
pQueryInfo
->
fieldsInfo
,
i
)
->
name
;
...
...
src/connector/node-red-contrib-tdengine/.gitignore
0 → 100644
浏览文件 @
ac423f56
node_modules
\ No newline at end of file
src/connector/node-red-contrib-tdengine/README.md
0 → 100644
浏览文件 @
ac423f56
This repositry create a custom Node-Red node for configing TDEngine server connection and execute SQL from preview node msg.payload
## Design
Use Taos data restful API to commit SQL, API call like
```
curl -H 'Authorization: Basic <TOKEN>' -d '<SQL>' <ip>:<PORT>/rest/sql/[db_name]
```
Input options:
*
DB Server: Setup server connection or select a exist server
*
DB Name: Database to execute SQL
Use
[
axios
](
https://axios-http.com/
)
to call http request
## Usage
1.
Start Node-Red
2.
Install TDEngine node
3.
Add "taos query" node to workspace from palette
4.
Setup a TDEngine server and database name
5.
Add function or other node to create SQL, put SQL into msg.payload
6.
Link to "taos query" node
### Demo
1.
Start Node-Red by docker
```
docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red
```
2.
Import sample flow "demo/flow.json"

3.
Install TDEngine node by name "node-red-contrib-tdengine", current version is 0.0.2

4.
Modify your TDEngine server config

5.
Edit test SQL

6.
Start flow by click Inject node
src/connector/node-red-contrib-tdengine/demo/EditTestSQL.png
0 → 100644
浏览文件 @
ac423f56
282.1 KB
src/connector/node-red-contrib-tdengine/demo/ImportFlow.png
0 → 100644
浏览文件 @
ac423f56
312.6 KB
src/connector/node-red-contrib-tdengine/demo/InstallTDEngineNode.png
0 → 100644
浏览文件 @
ac423f56
62.3 KB
src/connector/node-red-contrib-tdengine/demo/ModifyServerConfig.png
0 → 100644
浏览文件 @
ac423f56
293.7 KB
src/connector/node-red-contrib-tdengine/demo/flow.json
0 → 100644
浏览文件 @
ac423f56
[
{
"id"
:
"01ad89bea2c249f6"
,
"type"
:
"tab"
,
"label"
:
"流程 1"
,
"disabled"
:
false
,
"info"
:
""
,
"env"
:
[
{
"name"
:
"test"
,
"value"
:
"abc"
,
"type"
:
"str"
},
{
"name"
:
"path"
,
"value"
:
"{
\"
codes
\"
:
\"
/usr/local/processing/codes
\"
,
\"
parameters
\"
:
\"
/usr/local/processing/parameters
\"
}"
,
"type"
:
"json"
}
]
},
{
"id"
:
"0ab8aa0c7f1b7522"
,
"type"
:
"taos-query"
,
"z"
:
"01ad89bea2c249f6"
,
"server"
:
"e385222cd91994dc"
,
"database"
:
"demo"
,
"x"
:
780
,
"y"
:
400
,
"wires"
:
[
[
"f9c4f70dc2d79548"
]
]
},
{
"id"
:
"ba09b80a40b65780"
,
"type"
:
"inject"
,
"z"
:
"01ad89bea2c249f6"
,
"name"
:
""
,
"props"
:
[
{
"p"
:
"payload"
}
],
"repeat"
:
""
,
"crontab"
:
""
,
"once"
:
false
,
"onceDelay"
:
0.1
,
"topic"
:
""
,
"payload"
:
"INSERT INTO t VALUES (NOW, 23)"
,
"payloadType"
:
"str"
,
"x"
:
490
,
"y"
:
400
,
"wires"
:
[
[
"0ab8aa0c7f1b7522"
]
]
},
{
"id"
:
"f9c4f70dc2d79548"
,
"type"
:
"debug"
,
"z"
:
"01ad89bea2c249f6"
,
"name"
:
""
,
"active"
:
true
,
"tosidebar"
:
true
,
"console"
:
false
,
"tostatus"
:
false
,
"complete"
:
"payload"
,
"targetType"
:
"msg"
,
"statusVal"
:
""
,
"statusType"
:
"auto"
,
"x"
:
1050
,
"y"
:
400
,
"wires"
:
[]
},
{
"id"
:
"e385222cd91994dc"
,
"type"
:
"taos-config"
,
"host"
:
"localhost"
,
"port"
:
"6030"
,
"username"
:
"root"
,
"password"
:
"taosdata"
}
]
\ No newline at end of file
src/connector/node-red-contrib-tdengine/package-lock.json
0 → 100644
浏览文件 @
ac423f56
{
"name"
:
"node-red-contrib-tdengine"
,
"version"
:
"0.0.2"
,
"lockfileVersion"
:
1
,
"requires"
:
true
,
"dependencies"
:
{
"@babel/code-frame"
:
{
"version"
:
"7.16.0"
,
"resolved"
:
"https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz"
,
"integrity"
:
"sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA=="
,
"dev"
:
true
,
"requires"
:
{
"@babel/highlight"
:
"^7.16.0"
}
},
"@babel/helper-validator-identifier"
:
{
"version"
:
"7.15.7"
,
"resolved"
:
"https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz"
,
"integrity"
:
"sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w=="
,
"dev"
:
true
},
"@babel/highlight"
:
{
"version"
:
"7.16.0"
,
"resolved"
:
"https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz"
,
"integrity"
:
"sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g=="
,
"dev"
:
true
,
"requires"
:
{
"@babel/helper-validator-identifier"
:
"^7.15.7"
,
"chalk"
:
"^2.0.0"
,
"js-tokens"
:
"^4.0.0"
}
},
"@babel/runtime"
:
{
"version"
:
"7.16.5"
,
"resolved"
:
"https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.5.tgz"
,
"integrity"
:
"sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA=="
,
"dev"
:
true
,
"requires"
:
{
"regenerator-runtime"
:
"^0.13.4"
}
},
"@mapbox/node-pre-gyp"
:
{
"version"
:
"1.0.8"
,
"resolved"
:
"https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.8.tgz"
,
"integrity"
:
"sha512-CMGKi28CF+qlbXh26hDe6NxCd7amqeAzEqnS6IHeO6LoaKyM/n+Xw3HT1COdq8cuioOdlKdqn/hCmqPUOMOywg=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"detect-libc"
:
"^1.0.3"
,
"https-proxy-agent"
:
"^5.0.0"
,
"make-dir"
:
"^3.1.0"
,
"node-fetch"
:
"^2.6.5"
,
"nopt"
:
"^5.0.0"
,
"npmlog"
:
"^5.0.1"
,
"rimraf"
:
"^3.0.2"
,
"semver"
:
"^7.3.5"
,
"tar"
:
"^6.1.11"
}
},
"@node-red/editor-api"
:
{
"version"
:
"2.1.4"
,
"resolved"
:
"https://registry.npmjs.org/@node-red/editor-api/-/editor-api-2.1.4.tgz"
,
"integrity"
:
"sha512-FQn/lAIEa/1oJqkq8cPWMQ/RMiLkZDOFoYw6gM3WjAKwpX7AN/FuZi8R6qUfcn0cylwQzYzx43ggUq2/3f81xQ=="
,
"dev"
:
true
,
"requires"
:
{
"@node-red/editor-client"
:
"2.1.4"
,
"@node-red/util"
:
"2.1.4"
,
"bcrypt"
:
"5.0.1"
,
"bcryptjs"
:
"2.4.3"
,
"body-parser"
:
"1.19.0"
,
"clone"
:
"2.1.2"
,
"cors"
:
"2.8.5"
,
"express"
:
"4.17.1"
,
"express-session"
:
"1.17.2"
,
"memorystore"
:
"1.6.6"
,
"mime"
:
"2.5.2"
,
"multer"
:
"1.4.3"
,
"mustache"
:
"4.2.0"
,
"oauth2orize"
:
"1.11.1"
,
"passport"
:
"0.5.0"
,
"passport-http-bearer"
:
"1.0.1"
,
"passport-oauth2-client-password"
:
"0.1.2"
,
"ws"
:
"7.5.1"
}
},
"@node-red/editor-client"
:
{
"version"
:
"2.1.4"
,
"resolved"
:
"https://registry.npmjs.org/@node-red/editor-client/-/editor-client-2.1.4.tgz"
,
"integrity"
:
"sha512-Q9HUZDnEw6VbQBs14yW01uV4KbIgqxqriFkwfEzfbi5dNag2sqQSrf6XSfg7OuqIf3iC10Wbm5/0Y67rMtV9gA=="
,
"dev"
:
true
},
"@node-red/nodes"
:
{
"version"
:
"2.1.4"
,
"resolved"
:
"https://registry.npmjs.org/@node-red/nodes/-/nodes-2.1.4.tgz"
,
"integrity"
:
"sha512-di57I/0BUMfpRL9vLBomOp1QIyStDwvb+TXUd54b8FEopfAn5h3E7avL6te7yZSUuKVipqUd54CHJepRubRxBQ=="
,
"dev"
:
true
,
"requires"
:
{
"acorn"
:
"8.6.0"
,
"acorn-walk"
:
"8.2.0"
,
"ajv"
:
"8.8.2"
,
"body-parser"
:
"1.19.0"
,
"cheerio"
:
"1.0.0-rc.10"
,
"content-type"
:
"1.0.4"
,
"cookie"
:
"0.4.1"
,
"cookie-parser"
:
"1.4.6"
,
"cors"
:
"2.8.5"
,
"cronosjs"
:
"1.7.1"
,
"denque"
:
"2.0.1"
,
"form-data"
:
"4.0.0"
,
"fs-extra"
:
"10.0.0"
,
"fs.notify"
:
"0.0.4"
,
"got"
:
"11.8.3"
,
"hash-sum"
:
"2.0.0"
,
"hpagent"
:
"0.1.2"
,
"https-proxy-agent"
:
"5.0.0"
,
"iconv-lite"
:
"0.6.3"
,
"is-utf8"
:
"0.2.1"
,
"js-yaml"
:
"3.14.1"
,
"media-typer"
:
"1.1.0"
,
"mqtt"
:
"4.2.8"
,
"multer"
:
"1.4.3"
,
"mustache"
:
"4.2.0"
,
"on-headers"
:
"1.0.2"
,
"raw-body"
:
"2.4.2"
,
"tough-cookie"
:
"4.0.0"
,
"uuid"
:
"8.3.2"
,
"ws"
:
"7.5.1"
,
"xml2js"
:
"0.4.23"
},
"dependencies"
:
{
"bytes"
:
{
"version"
:
"3.1.1"
,
"resolved"
:
"https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz"
,
"integrity"
:
"sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg=="
,
"dev"
:
true
},
"cookie"
:
{
"version"
:
"0.4.1"
,
"resolved"
:
"https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz"
,
"integrity"
:
"sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
,
"dev"
:
true
},
"http-errors"
:
{
"version"
:
"1.8.1"
,
"resolved"
:
"https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz"
,
"integrity"
:
"sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g=="
,
"dev"
:
true
,
"requires"
:
{
"depd"
:
"~1.1.2"
,
"inherits"
:
"2.0.4"
,
"setprototypeof"
:
"1.2.0"
,
"statuses"
:
">= 1.5.0 < 2"
,
"toidentifier"
:
"1.0.1"
}
},
"iconv-lite"
:
{
"version"
:
"0.6.3"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz"
,
"integrity"
:
"sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="
,
"dev"
:
true
,
"requires"
:
{
"safer-buffer"
:
">= 2.1.2 < 3.0.0"
}
},
"media-typer"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz"
,
"integrity"
:
"sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="
,
"dev"
:
true
},
"raw-body"
:
{
"version"
:
"2.4.2"
,
"resolved"
:
"https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz"
,
"integrity"
:
"sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ=="
,
"dev"
:
true
,
"requires"
:
{
"bytes"
:
"3.1.1"
,
"http-errors"
:
"1.8.1"
,
"iconv-lite"
:
"0.4.24"
,
"unpipe"
:
"1.0.0"
},
"dependencies"
:
{
"iconv-lite"
:
{
"version"
:
"0.4.24"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
,
"integrity"
:
"sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="
,
"dev"
:
true
,
"requires"
:
{
"safer-buffer"
:
">= 2.1.2 < 3"
}
}
}
},
"setprototypeof"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz"
,
"integrity"
:
"sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
,
"dev"
:
true
},
"toidentifier"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz"
,
"integrity"
:
"sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
,
"dev"
:
true
}
}
},
"@node-red/registry"
:
{
"version"
:
"2.1.4"
,
"resolved"
:
"https://registry.npmjs.org/@node-red/registry/-/registry-2.1.4.tgz"
,
"integrity"
:
"sha512-OinEVN4js8ewEf4q89FJxoCdGELXIjuZo+3AtlXDqZD8uJOnKnB48avXhrWuMFjYCJhQN8PUqulHj6Ru596lPA=="
,
"dev"
:
true
,
"requires"
:
{
"@node-red/util"
:
"2.1.4"
,
"clone"
:
"2.1.2"
,
"fs-extra"
:
"10.0.0"
,
"semver"
:
"7.3.5"
,
"tar"
:
"6.1.11"
,
"uglify-js"
:
"3.14.4"
}
},
"@node-red/runtime"
:
{
"version"
:
"2.1.4"
,
"resolved"
:
"https://registry.npmjs.org/@node-red/runtime/-/runtime-2.1.4.tgz"
,
"integrity"
:
"sha512-fU6lvgmpcnxQPc0CEyvgvDtGmNsgS5k6zJ9No+9jPCAkUAO069pFrecCddo9j/sN+8FRw4ikwqvKI0uAgTFx1Q=="
,
"dev"
:
true
,
"requires"
:
{
"@node-red/registry"
:
"2.1.4"
,
"@node-red/util"
:
"2.1.4"
,
"async-mutex"
:
"0.3.2"
,
"clone"
:
"2.1.2"
,
"express"
:
"4.17.1"
,
"fs-extra"
:
"10.0.0"
,
"json-stringify-safe"
:
"5.0.1"
}
},
"@node-red/util"
:
{
"version"
:
"2.1.4"
,
"resolved"
:
"https://registry.npmjs.org/@node-red/util/-/util-2.1.4.tgz"
,
"integrity"
:
"sha512-OdlMz2Q2ivfw1NoW2qi4ymB+WMRe3ICGkPkPhc1dlp1NSsuXXXNdi9jXglYo/cTF8v/QLihnXZf2ppCm4iiqRQ=="
,
"dev"
:
true
,
"requires"
:
{
"fs-extra"
:
"10.0.0"
,
"i18next"
:
"21.5.4"
,
"json-stringify-safe"
:
"5.0.1"
,
"jsonata"
:
"1.8.5"
,
"lodash.clonedeep"
:
"^4.5.0"
,
"moment-timezone"
:
"0.5.34"
}
},
"@sindresorhus/is"
:
{
"version"
:
"4.2.0"
,
"resolved"
:
"https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz"
,
"integrity"
:
"sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw=="
,
"dev"
:
true
},
"@sinonjs/commons"
:
{
"version"
:
"1.8.3"
,
"resolved"
:
"https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz"
,
"integrity"
:
"sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ=="
,
"dev"
:
true
,
"requires"
:
{
"type-detect"
:
"4.0.8"
}
},
"@sinonjs/fake-timers"
:
{
"version"
:
"6.0.1"
,
"resolved"
:
"https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz"
,
"integrity"
:
"sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA=="
,
"dev"
:
true
,
"requires"
:
{
"@sinonjs/commons"
:
"^1.7.0"
}
},
"@sinonjs/samsam"
:
{
"version"
:
"5.3.1"
,
"resolved"
:
"https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz"
,
"integrity"
:
"sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg=="
,
"dev"
:
true
,
"requires"
:
{
"@sinonjs/commons"
:
"^1.6.0"
,
"lodash.get"
:
"^4.4.2"
,
"type-detect"
:
"^4.0.8"
}
},
"@sinonjs/text-encoding"
:
{
"version"
:
"0.7.1"
,
"resolved"
:
"https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz"
,
"integrity"
:
"sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ=="
,
"dev"
:
true
},
"@szmarczak/http-timer"
:
{
"version"
:
"4.0.6"
,
"resolved"
:
"https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz"
,
"integrity"
:
"sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w=="
,
"dev"
:
true
,
"requires"
:
{
"defer-to-connect"
:
"^2.0.0"
}
},
"@types/cacheable-request"
:
{
"version"
:
"6.0.2"
,
"resolved"
:
"https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz"
,
"integrity"
:
"sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA=="
,
"dev"
:
true
,
"requires"
:
{
"@types/http-cache-semantics"
:
"*"
,
"@types/keyv"
:
"*"
,
"@types/node"
:
"*"
,
"@types/responselike"
:
"*"
}
},
"@types/http-cache-semantics"
:
{
"version"
:
"4.0.1"
,
"resolved"
:
"https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz"
,
"integrity"
:
"sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ=="
,
"dev"
:
true
},
"@types/keyv"
:
{
"version"
:
"3.1.3"
,
"resolved"
:
"https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz"
,
"integrity"
:
"sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg=="
,
"dev"
:
true
,
"requires"
:
{
"@types/node"
:
"*"
}
},
"@types/node"
:
{
"version"
:
"17.0.4"
,
"resolved"
:
"https://registry.npmjs.org/@types/node/-/node-17.0.4.tgz"
,
"integrity"
:
"sha512-6xwbrW4JJiJLgF+zNypN5wr2ykM9/jHcL7rQ8fZe2vuftggjzZeRSM4OwRc6Xk8qWjwJ99qVHo/JgOGmomWRog=="
,
"dev"
:
true
},
"@types/normalize-package-data"
:
{
"version"
:
"2.4.1"
,
"resolved"
:
"https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz"
,
"integrity"
:
"sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw=="
,
"dev"
:
true
},
"@types/responselike"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz"
,
"integrity"
:
"sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA=="
,
"dev"
:
true
,
"requires"
:
{
"@types/node"
:
"*"
}
},
"@ungap/promise-all-settled"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz"
,
"integrity"
:
"sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q=="
},
"abbrev"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz"
,
"integrity"
:
"sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
,
"dev"
:
true
},
"accepts"
:
{
"version"
:
"1.3.7"
,
"resolved"
:
"https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz"
,
"integrity"
:
"sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA=="
,
"dev"
:
true
,
"requires"
:
{
"mime-types"
:
"~2.1.24"
,
"negotiator"
:
"0.6.2"
}
},
"acorn"
:
{
"version"
:
"8.6.0"
,
"resolved"
:
"https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz"
,
"integrity"
:
"sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw=="
,
"dev"
:
true
},
"acorn-walk"
:
{
"version"
:
"8.2.0"
,
"resolved"
:
"https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz"
,
"integrity"
:
"sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA=="
,
"dev"
:
true
},
"agent-base"
:
{
"version"
:
"6.0.2"
,
"resolved"
:
"https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz"
,
"integrity"
:
"sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="
,
"dev"
:
true
,
"requires"
:
{
"debug"
:
"4"
}
},
"ajv"
:
{
"version"
:
"8.8.2"
,
"resolved"
:
"https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz"
,
"integrity"
:
"sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw=="
,
"dev"
:
true
,
"requires"
:
{
"fast-deep-equal"
:
"^3.1.1"
,
"json-schema-traverse"
:
"^1.0.0"
,
"require-from-string"
:
"^2.0.2"
,
"uri-js"
:
"^4.2.2"
}
},
"ansi-colors"
:
{
"version"
:
"4.1.1"
,
"resolved"
:
"https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz"
,
"integrity"
:
"sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA=="
},
"ansi-regex"
:
{
"version"
:
"5.0.1"
,
"resolved"
:
"https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
,
"integrity"
:
"sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
},
"ansi-styles"
:
{
"version"
:
"3.2.1"
,
"resolved"
:
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"
,
"integrity"
:
"sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="
,
"dev"
:
true
,
"requires"
:
{
"color-convert"
:
"^1.9.0"
}
},
"anymatch"
:
{
"version"
:
"3.1.2"
,
"resolved"
:
"https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz"
,
"integrity"
:
"sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg=="
,
"requires"
:
{
"normalize-path"
:
"^3.0.0"
,
"picomatch"
:
"^2.0.4"
}
},
"append-field"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz"
,
"integrity"
:
"sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY="
,
"dev"
:
true
},
"aproba"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz"
,
"integrity"
:
"sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ=="
,
"dev"
:
true
,
"optional"
:
true
},
"are-we-there-yet"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz"
,
"integrity"
:
"sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"delegates"
:
"^1.0.0"
,
"readable-stream"
:
"^3.6.0"
}
},
"argparse"
:
{
"version"
:
"1.0.10"
,
"resolved"
:
"https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz"
,
"integrity"
:
"sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="
,
"dev"
:
true
,
"requires"
:
{
"sprintf-js"
:
"~1.0.2"
}
},
"array-flatten"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz"
,
"integrity"
:
"sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
,
"dev"
:
true
},
"async"
:
{
"version"
:
"0.1.22"
,
"resolved"
:
"https://registry.npmjs.org/async/-/async-0.1.22.tgz"
,
"integrity"
:
"sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE="
,
"dev"
:
true
},
"async-mutex"
:
{
"version"
:
"0.3.2"
,
"resolved"
:
"https://registry.npmjs.org/async-mutex/-/async-mutex-0.3.2.tgz"
,
"integrity"
:
"sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA=="
,
"dev"
:
true
,
"requires"
:
{
"tslib"
:
"^2.3.1"
}
},
"asynckit"
:
{
"version"
:
"0.4.0"
,
"resolved"
:
"https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
,
"integrity"
:
"sha1-x57Zf380y48robyXkLzDZkdLS3k="
,
"dev"
:
true
},
"axios"
:
{
"version"
:
"0.24.0"
,
"resolved"
:
"https://registry.npmjs.org/axios/-/axios-0.24.0.tgz"
,
"integrity"
:
"sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA=="
,
"requires"
:
{
"follow-redirects"
:
"^1.14.4"
}
},
"balanced-match"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
,
"integrity"
:
"sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"base64-js"
:
{
"version"
:
"1.5.1"
,
"resolved"
:
"https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"
,
"integrity"
:
"sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
,
"dev"
:
true
},
"basic-auth"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz"
,
"integrity"
:
"sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg=="
,
"dev"
:
true
,
"requires"
:
{
"safe-buffer"
:
"5.1.2"
},
"dependencies"
:
{
"safe-buffer"
:
{
"version"
:
"5.1.2"
,
"resolved"
:
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
,
"integrity"
:
"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
,
"dev"
:
true
}
}
},
"bcrypt"
:
{
"version"
:
"5.0.1"
,
"resolved"
:
"https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz"
,
"integrity"
:
"sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"@mapbox/node-pre-gyp"
:
"^1.0.0"
,
"node-addon-api"
:
"^3.1.0"
}
},
"bcryptjs"
:
{
"version"
:
"2.4.3"
,
"resolved"
:
"https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz"
,
"integrity"
:
"sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms="
,
"dev"
:
true
},
"binary-extensions"
:
{
"version"
:
"2.2.0"
,
"resolved"
:
"https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz"
,
"integrity"
:
"sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
},
"bl"
:
{
"version"
:
"4.1.0"
,
"resolved"
:
"https://registry.npmjs.org/bl/-/bl-4.1.0.tgz"
,
"integrity"
:
"sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="
,
"dev"
:
true
,
"requires"
:
{
"buffer"
:
"^5.5.0"
,
"inherits"
:
"^2.0.4"
,
"readable-stream"
:
"^3.4.0"
}
},
"body-parser"
:
{
"version"
:
"1.19.0"
,
"resolved"
:
"https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz"
,
"integrity"
:
"sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw=="
,
"dev"
:
true
,
"requires"
:
{
"bytes"
:
"3.1.0"
,
"content-type"
:
"~1.0.4"
,
"debug"
:
"2.6.9"
,
"depd"
:
"~1.1.2"
,
"http-errors"
:
"1.7.2"
,
"iconv-lite"
:
"0.4.24"
,
"on-finished"
:
"~2.3.0"
,
"qs"
:
"6.7.0"
,
"raw-body"
:
"2.4.0"
,
"type-is"
:
"~1.6.17"
},
"dependencies"
:
{
"debug"
:
{
"version"
:
"2.6.9"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
,
"integrity"
:
"sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
,
"dev"
:
true
,
"requires"
:
{
"ms"
:
"2.0.0"
}
},
"ms"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
,
"integrity"
:
"sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
,
"dev"
:
true
}
}
},
"boolbase"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz"
,
"integrity"
:
"sha1-aN/1++YMUes3cl6p4+0xDcwed24="
,
"dev"
:
true
},
"brace-expansion"
:
{
"version"
:
"1.1.11"
,
"resolved"
:
"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
,
"integrity"
:
"sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="
,
"requires"
:
{
"balanced-match"
:
"^1.0.0"
,
"concat-map"
:
"0.0.1"
}
},
"braces"
:
{
"version"
:
"3.0.2"
,
"resolved"
:
"https://registry.npmjs.org/braces/-/braces-3.0.2.tgz"
,
"integrity"
:
"sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="
,
"requires"
:
{
"fill-range"
:
"^7.0.1"
}
},
"browser-stdout"
:
{
"version"
:
"1.3.1"
,
"resolved"
:
"https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz"
,
"integrity"
:
"sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw=="
},
"buffer"
:
{
"version"
:
"5.7.1"
,
"resolved"
:
"https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz"
,
"integrity"
:
"sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="
,
"dev"
:
true
,
"requires"
:
{
"base64-js"
:
"^1.3.1"
,
"ieee754"
:
"^1.1.13"
}
},
"buffer-from"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz"
,
"integrity"
:
"sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
,
"dev"
:
true
},
"busboy"
:
{
"version"
:
"0.2.14"
,
"resolved"
:
"https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz"
,
"integrity"
:
"sha1-bCpiLvz0fFe7vh4qnDetNseSVFM="
,
"dev"
:
true
,
"requires"
:
{
"dicer"
:
"0.2.5"
,
"readable-stream"
:
"1.1.x"
},
"dependencies"
:
{
"readable-stream"
:
{
"version"
:
"1.1.14"
,
"resolved"
:
"https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz"
,
"integrity"
:
"sha1-fPTFTvZI44EwhMY23SB54WbAgdk="
,
"dev"
:
true
,
"requires"
:
{
"core-util-is"
:
"~1.0.0"
,
"inherits"
:
"~2.0.1"
,
"isarray"
:
"0.0.1"
,
"string_decoder"
:
"~0.10.x"
}
},
"string_decoder"
:
{
"version"
:
"0.10.31"
,
"resolved"
:
"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
,
"integrity"
:
"sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
,
"dev"
:
true
}
}
},
"bytes"
:
{
"version"
:
"3.1.0"
,
"resolved"
:
"https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz"
,
"integrity"
:
"sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
,
"dev"
:
true
},
"cacheable-lookup"
:
{
"version"
:
"5.0.4"
,
"resolved"
:
"https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz"
,
"integrity"
:
"sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA=="
,
"dev"
:
true
},
"cacheable-request"
:
{
"version"
:
"7.0.2"
,
"resolved"
:
"https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz"
,
"integrity"
:
"sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew=="
,
"dev"
:
true
,
"requires"
:
{
"clone-response"
:
"^1.0.2"
,
"get-stream"
:
"^5.1.0"
,
"http-cache-semantics"
:
"^4.0.0"
,
"keyv"
:
"^4.0.0"
,
"lowercase-keys"
:
"^2.0.0"
,
"normalize-url"
:
"^6.0.1"
,
"responselike"
:
"^2.0.0"
}
},
"camelcase"
:
{
"version"
:
"6.2.1"
,
"resolved"
:
"https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz"
,
"integrity"
:
"sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA=="
},
"chalk"
:
{
"version"
:
"2.4.2"
,
"resolved"
:
"https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
,
"integrity"
:
"sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="
,
"dev"
:
true
,
"requires"
:
{
"ansi-styles"
:
"^3.2.1"
,
"escape-string-regexp"
:
"^1.0.5"
,
"supports-color"
:
"^5.3.0"
}
},
"cheerio"
:
{
"version"
:
"1.0.0-rc.10"
,
"resolved"
:
"https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz"
,
"integrity"
:
"sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw=="
,
"dev"
:
true
,
"requires"
:
{
"cheerio-select"
:
"^1.5.0"
,
"dom-serializer"
:
"^1.3.2"
,
"domhandler"
:
"^4.2.0"
,
"htmlparser2"
:
"^6.1.0"
,
"parse5"
:
"^6.0.1"
,
"parse5-htmlparser2-tree-adapter"
:
"^6.0.1"
,
"tslib"
:
"^2.2.0"
}
},
"cheerio-select"
:
{
"version"
:
"1.5.0"
,
"resolved"
:
"https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz"
,
"integrity"
:
"sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg=="
,
"dev"
:
true
,
"requires"
:
{
"css-select"
:
"^4.1.3"
,
"css-what"
:
"^5.0.1"
,
"domelementtype"
:
"^2.2.0"
,
"domhandler"
:
"^4.2.0"
,
"domutils"
:
"^2.7.0"
}
},
"chokidar"
:
{
"version"
:
"3.5.2"
,
"resolved"
:
"https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz"
,
"integrity"
:
"sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ=="
,
"requires"
:
{
"anymatch"
:
"~3.1.2"
,
"braces"
:
"~3.0.2"
,
"fsevents"
:
"~2.3.2"
,
"glob-parent"
:
"~5.1.2"
,
"is-binary-path"
:
"~2.1.0"
,
"is-glob"
:
"~4.0.1"
,
"normalize-path"
:
"~3.0.0"
,
"readdirp"
:
"~3.6.0"
}
},
"chownr"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz"
,
"integrity"
:
"sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
,
"dev"
:
true
},
"cli-table"
:
{
"version"
:
"0.3.11"
,
"resolved"
:
"https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz"
,
"integrity"
:
"sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ=="
,
"dev"
:
true
,
"requires"
:
{
"colors"
:
"1.0.3"
}
},
"cliui"
:
{
"version"
:
"7.0.4"
,
"resolved"
:
"https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz"
,
"integrity"
:
"sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ=="
,
"requires"
:
{
"string-width"
:
"^4.2.0"
,
"strip-ansi"
:
"^6.0.0"
,
"wrap-ansi"
:
"^7.0.0"
}
},
"clone"
:
{
"version"
:
"2.1.2"
,
"resolved"
:
"https://registry.npmjs.org/clone/-/clone-2.1.2.tgz"
,
"integrity"
:
"sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
,
"dev"
:
true
},
"clone-response"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz"
,
"integrity"
:
"sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws="
,
"dev"
:
true
,
"requires"
:
{
"mimic-response"
:
"^1.0.0"
}
},
"color-convert"
:
{
"version"
:
"1.9.3"
,
"resolved"
:
"https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"
,
"integrity"
:
"sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="
,
"dev"
:
true
,
"requires"
:
{
"color-name"
:
"1.1.3"
}
},
"color-name"
:
{
"version"
:
"1.1.3"
,
"resolved"
:
"https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
,
"integrity"
:
"sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
,
"dev"
:
true
},
"color-support"
:
{
"version"
:
"1.1.3"
,
"resolved"
:
"https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz"
,
"integrity"
:
"sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="
,
"dev"
:
true
,
"optional"
:
true
},
"colors"
:
{
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/colors/-/colors-1.0.3.tgz"
,
"integrity"
:
"sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs="
,
"dev"
:
true
},
"combined-stream"
:
{
"version"
:
"1.0.8"
,
"resolved"
:
"https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
,
"integrity"
:
"sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="
,
"dev"
:
true
,
"requires"
:
{
"delayed-stream"
:
"~1.0.0"
}
},
"commist"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/commist/-/commist-1.1.0.tgz"
,
"integrity"
:
"sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg=="
,
"dev"
:
true
,
"requires"
:
{
"leven"
:
"^2.1.0"
,
"minimist"
:
"^1.1.0"
}
},
"component-emitter"
:
{
"version"
:
"1.3.0"
,
"resolved"
:
"https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz"
,
"integrity"
:
"sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
,
"dev"
:
true
},
"concat-map"
:
{
"version"
:
"0.0.1"
,
"resolved"
:
"https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
,
"integrity"
:
"sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"concat-stream"
:
{
"version"
:
"1.6.2"
,
"resolved"
:
"https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz"
,
"integrity"
:
"sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw=="
,
"dev"
:
true
,
"requires"
:
{
"buffer-from"
:
"^1.0.0"
,
"inherits"
:
"^2.0.3"
,
"readable-stream"
:
"^2.2.2"
,
"typedarray"
:
"^0.0.6"
},
"dependencies"
:
{
"isarray"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
,
"integrity"
:
"sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
,
"dev"
:
true
},
"readable-stream"
:
{
"version"
:
"2.3.7"
,
"resolved"
:
"https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz"
,
"integrity"
:
"sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw=="
,
"dev"
:
true
,
"requires"
:
{
"core-util-is"
:
"~1.0.0"
,
"inherits"
:
"~2.0.3"
,
"isarray"
:
"~1.0.0"
,
"process-nextick-args"
:
"~2.0.0"
,
"safe-buffer"
:
"~5.1.1"
,
"string_decoder"
:
"~1.1.1"
,
"util-deprecate"
:
"~1.0.1"
}
},
"safe-buffer"
:
{
"version"
:
"5.1.2"
,
"resolved"
:
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
,
"integrity"
:
"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
,
"dev"
:
true
},
"string_decoder"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"
,
"integrity"
:
"sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="
,
"dev"
:
true
,
"requires"
:
{
"safe-buffer"
:
"~5.1.0"
}
}
}
},
"console-control-strings"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz"
,
"integrity"
:
"sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
,
"dev"
:
true
,
"optional"
:
true
},
"content-disposition"
:
{
"version"
:
"0.5.3"
,
"resolved"
:
"https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz"
,
"integrity"
:
"sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g=="
,
"dev"
:
true
,
"requires"
:
{
"safe-buffer"
:
"5.1.2"
},
"dependencies"
:
{
"safe-buffer"
:
{
"version"
:
"5.1.2"
,
"resolved"
:
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
,
"integrity"
:
"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
,
"dev"
:
true
}
}
},
"content-type"
:
{
"version"
:
"1.0.4"
,
"resolved"
:
"https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz"
,
"integrity"
:
"sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
,
"dev"
:
true
},
"cookie"
:
{
"version"
:
"0.4.0"
,
"resolved"
:
"https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz"
,
"integrity"
:
"sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
,
"dev"
:
true
},
"cookie-parser"
:
{
"version"
:
"1.4.6"
,
"resolved"
:
"https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz"
,
"integrity"
:
"sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA=="
,
"dev"
:
true
,
"requires"
:
{
"cookie"
:
"0.4.1"
,
"cookie-signature"
:
"1.0.6"
},
"dependencies"
:
{
"cookie"
:
{
"version"
:
"0.4.1"
,
"resolved"
:
"https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz"
,
"integrity"
:
"sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
,
"dev"
:
true
}
}
},
"cookie-signature"
:
{
"version"
:
"1.0.6"
,
"resolved"
:
"https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"
,
"integrity"
:
"sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
,
"dev"
:
true
},
"cookiejar"
:
{
"version"
:
"2.1.3"
,
"resolved"
:
"https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz"
,
"integrity"
:
"sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ=="
,
"dev"
:
true
},
"core-util-is"
:
{
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz"
,
"integrity"
:
"sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
,
"dev"
:
true
},
"cors"
:
{
"version"
:
"2.8.5"
,
"resolved"
:
"https://registry.npmjs.org/cors/-/cors-2.8.5.tgz"
,
"integrity"
:
"sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g=="
,
"dev"
:
true
,
"requires"
:
{
"object-assign"
:
"^4"
,
"vary"
:
"^1"
}
},
"cronosjs"
:
{
"version"
:
"1.7.1"
,
"resolved"
:
"https://registry.npmjs.org/cronosjs/-/cronosjs-1.7.1.tgz"
,
"integrity"
:
"sha512-d6S6+ep7dJxsAG8OQQCdKuByI/S/AV64d9OF5mtmcykOyPu92cAkAnF3Tbc9s5oOaLQBYYQmTNvjqYRkPJ/u5Q=="
,
"dev"
:
true
},
"css-select"
:
{
"version"
:
"4.2.0"
,
"resolved"
:
"https://registry.npmjs.org/css-select/-/css-select-4.2.0.tgz"
,
"integrity"
:
"sha512-6YVG6hsH9yIb/si3Th/is8Pex7qnVHO6t7q7U6TIUnkQASGbS8tnUDBftnPynLNnuUl/r2+PTd0ekiiq7R0zJw=="
,
"dev"
:
true
,
"requires"
:
{
"boolbase"
:
"^1.0.0"
,
"css-what"
:
"^5.1.0"
,
"domhandler"
:
"^4.3.0"
,
"domutils"
:
"^2.8.0"
,
"nth-check"
:
"^2.0.1"
}
},
"css-what"
:
{
"version"
:
"5.1.0"
,
"resolved"
:
"https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz"
,
"integrity"
:
"sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw=="
,
"dev"
:
true
},
"debug"
:
{
"version"
:
"4.3.3"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-4.3.3.tgz"
,
"integrity"
:
"sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q=="
,
"dev"
:
true
,
"requires"
:
{
"ms"
:
"2.1.2"
}
},
"decamelize"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz"
,
"integrity"
:
"sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ=="
},
"decompress-response"
:
{
"version"
:
"6.0.0"
,
"resolved"
:
"https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz"
,
"integrity"
:
"sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="
,
"dev"
:
true
,
"requires"
:
{
"mimic-response"
:
"^3.1.0"
},
"dependencies"
:
{
"mimic-response"
:
{
"version"
:
"3.1.0"
,
"resolved"
:
"https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz"
,
"integrity"
:
"sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="
,
"dev"
:
true
}
}
},
"defer-to-connect"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz"
,
"integrity"
:
"sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="
,
"dev"
:
true
},
"delayed-stream"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
,
"integrity"
:
"sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
,
"dev"
:
true
},
"delegates"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz"
,
"integrity"
:
"sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
,
"dev"
:
true
,
"optional"
:
true
},
"denque"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/denque/-/denque-2.0.1.tgz"
,
"integrity"
:
"sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ=="
,
"dev"
:
true
},
"depd"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"
,
"integrity"
:
"sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
,
"dev"
:
true
},
"destroy"
:
{
"version"
:
"1.0.4"
,
"resolved"
:
"https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz"
,
"integrity"
:
"sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
,
"dev"
:
true
},
"detect-libc"
:
{
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz"
,
"integrity"
:
"sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
,
"dev"
:
true
,
"optional"
:
true
},
"dicer"
:
{
"version"
:
"0.2.5"
,
"resolved"
:
"https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz"
,
"integrity"
:
"sha1-WZbAhrszIYyBLAkL3cCc0S+stw8="
,
"dev"
:
true
,
"requires"
:
{
"readable-stream"
:
"1.1.x"
,
"streamsearch"
:
"0.1.2"
},
"dependencies"
:
{
"readable-stream"
:
{
"version"
:
"1.1.14"
,
"resolved"
:
"https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz"
,
"integrity"
:
"sha1-fPTFTvZI44EwhMY23SB54WbAgdk="
,
"dev"
:
true
,
"requires"
:
{
"core-util-is"
:
"~1.0.0"
,
"inherits"
:
"~2.0.1"
,
"isarray"
:
"0.0.1"
,
"string_decoder"
:
"~0.10.x"
}
},
"string_decoder"
:
{
"version"
:
"0.10.31"
,
"resolved"
:
"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
,
"integrity"
:
"sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
,
"dev"
:
true
}
}
},
"diff"
:
{
"version"
:
"4.0.2"
,
"resolved"
:
"https://registry.npmjs.org/diff/-/diff-4.0.2.tgz"
,
"integrity"
:
"sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="
,
"dev"
:
true
},
"dom-serializer"
:
{
"version"
:
"1.3.2"
,
"resolved"
:
"https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz"
,
"integrity"
:
"sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig=="
,
"dev"
:
true
,
"requires"
:
{
"domelementtype"
:
"^2.0.1"
,
"domhandler"
:
"^4.2.0"
,
"entities"
:
"^2.0.0"
}
},
"domelementtype"
:
{
"version"
:
"2.2.0"
,
"resolved"
:
"https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz"
,
"integrity"
:
"sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
,
"dev"
:
true
},
"domhandler"
:
{
"version"
:
"4.3.0"
,
"resolved"
:
"https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz"
,
"integrity"
:
"sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g=="
,
"dev"
:
true
,
"requires"
:
{
"domelementtype"
:
"^2.2.0"
}
},
"domutils"
:
{
"version"
:
"2.8.0"
,
"resolved"
:
"https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz"
,
"integrity"
:
"sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="
,
"dev"
:
true
,
"requires"
:
{
"dom-serializer"
:
"^1.0.1"
,
"domelementtype"
:
"^2.2.0"
,
"domhandler"
:
"^4.2.0"
}
},
"duplexify"
:
{
"version"
:
"4.1.2"
,
"resolved"
:
"https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz"
,
"integrity"
:
"sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw=="
,
"dev"
:
true
,
"requires"
:
{
"end-of-stream"
:
"^1.4.1"
,
"inherits"
:
"^2.0.3"
,
"readable-stream"
:
"^3.1.1"
,
"stream-shift"
:
"^1.0.0"
}
},
"ee-first"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
,
"integrity"
:
"sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
,
"dev"
:
true
},
"emoji-regex"
:
{
"version"
:
"8.0.0"
,
"resolved"
:
"https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
,
"integrity"
:
"sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"encodeurl"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz"
,
"integrity"
:
"sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
,
"dev"
:
true
},
"end-of-stream"
:
{
"version"
:
"1.4.4"
,
"resolved"
:
"https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz"
,
"integrity"
:
"sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="
,
"dev"
:
true
,
"requires"
:
{
"once"
:
"^1.4.0"
}
},
"enquirer"
:
{
"version"
:
"2.3.6"
,
"resolved"
:
"https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz"
,
"integrity"
:
"sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg=="
,
"dev"
:
true
,
"requires"
:
{
"ansi-colors"
:
"^4.1.1"
}
},
"entities"
:
{
"version"
:
"2.2.0"
,
"resolved"
:
"https://registry.npmjs.org/entities/-/entities-2.2.0.tgz"
,
"integrity"
:
"sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
,
"dev"
:
true
},
"error-ex"
:
{
"version"
:
"1.3.2"
,
"resolved"
:
"https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz"
,
"integrity"
:
"sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="
,
"dev"
:
true
,
"requires"
:
{
"is-arrayish"
:
"^0.2.1"
}
},
"escalade"
:
{
"version"
:
"3.1.1"
,
"resolved"
:
"https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz"
,
"integrity"
:
"sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
},
"escape-html"
:
{
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"
,
"integrity"
:
"sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
,
"dev"
:
true
},
"escape-string-regexp"
:
{
"version"
:
"1.0.5"
,
"resolved"
:
"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
,
"integrity"
:
"sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
,
"dev"
:
true
},
"esprima"
:
{
"version"
:
"4.0.1"
,
"resolved"
:
"https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"
,
"integrity"
:
"sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
,
"dev"
:
true
},
"etag"
:
{
"version"
:
"1.8.1"
,
"resolved"
:
"https://registry.npmjs.org/etag/-/etag-1.8.1.tgz"
,
"integrity"
:
"sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
,
"dev"
:
true
},
"express"
:
{
"version"
:
"4.17.1"
,
"resolved"
:
"https://registry.npmjs.org/express/-/express-4.17.1.tgz"
,
"integrity"
:
"sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g=="
,
"dev"
:
true
,
"requires"
:
{
"accepts"
:
"~1.3.7"
,
"array-flatten"
:
"1.1.1"
,
"body-parser"
:
"1.19.0"
,
"content-disposition"
:
"0.5.3"
,
"content-type"
:
"~1.0.4"
,
"cookie"
:
"0.4.0"
,
"cookie-signature"
:
"1.0.6"
,
"debug"
:
"2.6.9"
,
"depd"
:
"~1.1.2"
,
"encodeurl"
:
"~1.0.2"
,
"escape-html"
:
"~1.0.3"
,
"etag"
:
"~1.8.1"
,
"finalhandler"
:
"~1.1.2"
,
"fresh"
:
"0.5.2"
,
"merge-descriptors"
:
"1.0.1"
,
"methods"
:
"~1.1.2"
,
"on-finished"
:
"~2.3.0"
,
"parseurl"
:
"~1.3.3"
,
"path-to-regexp"
:
"0.1.7"
,
"proxy-addr"
:
"~2.0.5"
,
"qs"
:
"6.7.0"
,
"range-parser"
:
"~1.2.1"
,
"safe-buffer"
:
"5.1.2"
,
"send"
:
"0.17.1"
,
"serve-static"
:
"1.14.1"
,
"setprototypeof"
:
"1.1.1"
,
"statuses"
:
"~1.5.0"
,
"type-is"
:
"~1.6.18"
,
"utils-merge"
:
"1.0.1"
,
"vary"
:
"~1.1.2"
},
"dependencies"
:
{
"debug"
:
{
"version"
:
"2.6.9"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
,
"integrity"
:
"sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
,
"dev"
:
true
,
"requires"
:
{
"ms"
:
"2.0.0"
}
},
"ms"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
,
"integrity"
:
"sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
,
"dev"
:
true
},
"safe-buffer"
:
{
"version"
:
"5.1.2"
,
"resolved"
:
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
,
"integrity"
:
"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
,
"dev"
:
true
}
}
},
"express-session"
:
{
"version"
:
"1.17.2"
,
"resolved"
:
"https://registry.npmjs.org/express-session/-/express-session-1.17.2.tgz"
,
"integrity"
:
"sha512-mPcYcLA0lvh7D4Oqr5aNJFMtBMKPLl++OKKxkHzZ0U0oDq1rpKBnkR5f5vCHR26VeArlTOEF9td4x5IjICksRQ=="
,
"dev"
:
true
,
"requires"
:
{
"cookie"
:
"0.4.1"
,
"cookie-signature"
:
"1.0.6"
,
"debug"
:
"2.6.9"
,
"depd"
:
"~2.0.0"
,
"on-headers"
:
"~1.0.2"
,
"parseurl"
:
"~1.3.3"
,
"safe-buffer"
:
"5.2.1"
,
"uid-safe"
:
"~2.1.5"
},
"dependencies"
:
{
"cookie"
:
{
"version"
:
"0.4.1"
,
"resolved"
:
"https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz"
,
"integrity"
:
"sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
,
"dev"
:
true
},
"debug"
:
{
"version"
:
"2.6.9"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
,
"integrity"
:
"sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
,
"dev"
:
true
,
"requires"
:
{
"ms"
:
"2.0.0"
}
},
"depd"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/depd/-/depd-2.0.0.tgz"
,
"integrity"
:
"sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
,
"dev"
:
true
},
"ms"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
,
"integrity"
:
"sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
,
"dev"
:
true
}
}
},
"extend"
:
{
"version"
:
"3.0.2"
,
"resolved"
:
"https://registry.npmjs.org/extend/-/extend-3.0.2.tgz"
,
"integrity"
:
"sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
,
"dev"
:
true
},
"fast-deep-equal"
:
{
"version"
:
"3.1.3"
,
"resolved"
:
"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
,
"integrity"
:
"sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
,
"dev"
:
true
},
"fill-range"
:
{
"version"
:
"7.0.1"
,
"resolved"
:
"https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz"
,
"integrity"
:
"sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ=="
,
"requires"
:
{
"to-regex-range"
:
"^5.0.1"
}
},
"finalhandler"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz"
,
"integrity"
:
"sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA=="
,
"dev"
:
true
,
"requires"
:
{
"debug"
:
"2.6.9"
,
"encodeurl"
:
"~1.0.2"
,
"escape-html"
:
"~1.0.3"
,
"on-finished"
:
"~2.3.0"
,
"parseurl"
:
"~1.3.3"
,
"statuses"
:
"~1.5.0"
,
"unpipe"
:
"~1.0.0"
},
"dependencies"
:
{
"debug"
:
{
"version"
:
"2.6.9"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
,
"integrity"
:
"sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
,
"dev"
:
true
,
"requires"
:
{
"ms"
:
"2.0.0"
}
},
"ms"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
,
"integrity"
:
"sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
,
"dev"
:
true
}
}
},
"find-up"
:
{
"version"
:
"4.1.0"
,
"resolved"
:
"https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz"
,
"integrity"
:
"sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="
,
"dev"
:
true
,
"requires"
:
{
"locate-path"
:
"^5.0.0"
,
"path-exists"
:
"^4.0.0"
}
},
"flat"
:
{
"version"
:
"5.0.2"
,
"resolved"
:
"https://registry.npmjs.org/flat/-/flat-5.0.2.tgz"
,
"integrity"
:
"sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="
},
"follow-redirects"
:
{
"version"
:
"1.14.6"
,
"resolved"
:
"https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz"
,
"integrity"
:
"sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A=="
},
"form-data"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz"
,
"integrity"
:
"sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww=="
,
"dev"
:
true
,
"requires"
:
{
"asynckit"
:
"^0.4.0"
,
"combined-stream"
:
"^1.0.8"
,
"mime-types"
:
"^2.1.12"
}
},
"formidable"
:
{
"version"
:
"1.2.6"
,
"resolved"
:
"https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz"
,
"integrity"
:
"sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ=="
,
"dev"
:
true
},
"forwarded"
:
{
"version"
:
"0.2.0"
,
"resolved"
:
"https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz"
,
"integrity"
:
"sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
,
"dev"
:
true
},
"fresh"
:
{
"version"
:
"0.5.2"
,
"resolved"
:
"https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz"
,
"integrity"
:
"sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
,
"dev"
:
true
},
"fs-extra"
:
{
"version"
:
"10.0.0"
,
"resolved"
:
"https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz"
,
"integrity"
:
"sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ=="
,
"dev"
:
true
,
"requires"
:
{
"graceful-fs"
:
"^4.2.0"
,
"jsonfile"
:
"^6.0.1"
,
"universalify"
:
"^2.0.0"
}
},
"fs-minipass"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz"
,
"integrity"
:
"sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="
,
"dev"
:
true
,
"requires"
:
{
"minipass"
:
"^3.0.0"
}
},
"fs.notify"
:
{
"version"
:
"0.0.4"
,
"resolved"
:
"https://registry.npmjs.org/fs.notify/-/fs.notify-0.0.4.tgz"
,
"integrity"
:
"sha1-YyhNRaNLUs5gCIpt2+xbd208AT0="
,
"dev"
:
true
,
"requires"
:
{
"async"
:
"~0.1.22"
,
"retry"
:
"~0.6.0"
}
},
"fs.realpath"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
,
"integrity"
:
"sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"fsevents"
:
{
"version"
:
"2.3.2"
,
"resolved"
:
"https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz"
,
"integrity"
:
"sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="
,
"optional"
:
true
},
"function-bind"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
,
"integrity"
:
"sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
,
"dev"
:
true
},
"gauge"
:
{
"version"
:
"3.0.2"
,
"resolved"
:
"https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz"
,
"integrity"
:
"sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"aproba"
:
"^1.0.3 || ^2.0.0"
,
"color-support"
:
"^1.1.2"
,
"console-control-strings"
:
"^1.0.0"
,
"has-unicode"
:
"^2.0.1"
,
"object-assign"
:
"^4.1.1"
,
"signal-exit"
:
"^3.0.0"
,
"string-width"
:
"^4.2.3"
,
"strip-ansi"
:
"^6.0.1"
,
"wide-align"
:
"^1.1.2"
}
},
"get-caller-file"
:
{
"version"
:
"2.0.5"
,
"resolved"
:
"https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"
,
"integrity"
:
"sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
},
"get-stream"
:
{
"version"
:
"5.2.0"
,
"resolved"
:
"https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz"
,
"integrity"
:
"sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="
,
"dev"
:
true
,
"requires"
:
{
"pump"
:
"^3.0.0"
}
},
"glob"
:
{
"version"
:
"7.2.0"
,
"resolved"
:
"https://registry.npmjs.org/glob/-/glob-7.2.0.tgz"
,
"integrity"
:
"sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q=="
,
"dev"
:
true
,
"requires"
:
{
"fs.realpath"
:
"^1.0.0"
,
"inflight"
:
"^1.0.4"
,
"inherits"
:
"2"
,
"minimatch"
:
"^3.0.4"
,
"once"
:
"^1.3.0"
,
"path-is-absolute"
:
"^1.0.0"
}
},
"glob-parent"
:
{
"version"
:
"5.1.2"
,
"resolved"
:
"https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
,
"integrity"
:
"sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="
,
"requires"
:
{
"is-glob"
:
"^4.0.1"
}
},
"got"
:
{
"version"
:
"11.8.3"
,
"resolved"
:
"https://registry.npmjs.org/got/-/got-11.8.3.tgz"
,
"integrity"
:
"sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg=="
,
"dev"
:
true
,
"requires"
:
{
"@sindresorhus/is"
:
"^4.0.0"
,
"@szmarczak/http-timer"
:
"^4.0.5"
,
"@types/cacheable-request"
:
"^6.0.1"
,
"@types/responselike"
:
"^1.0.0"
,
"cacheable-lookup"
:
"^5.0.3"
,
"cacheable-request"
:
"^7.0.2"
,
"decompress-response"
:
"^6.0.0"
,
"http2-wrapper"
:
"^1.0.0-beta.5.2"
,
"lowercase-keys"
:
"^2.0.0"
,
"p-cancelable"
:
"^2.0.0"
,
"responselike"
:
"^2.0.0"
}
},
"graceful-fs"
:
{
"version"
:
"4.2.8"
,
"resolved"
:
"https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz"
,
"integrity"
:
"sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
,
"dev"
:
true
},
"growl"
:
{
"version"
:
"1.10.5"
,
"resolved"
:
"https://registry.npmjs.org/growl/-/growl-1.10.5.tgz"
,
"integrity"
:
"sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA=="
},
"has"
:
{
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/has/-/has-1.0.3.tgz"
,
"integrity"
:
"sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw=="
,
"dev"
:
true
,
"requires"
:
{
"function-bind"
:
"^1.1.1"
}
},
"has-flag"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"
,
"integrity"
:
"sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
,
"dev"
:
true
},
"has-unicode"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz"
,
"integrity"
:
"sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
,
"dev"
:
true
,
"optional"
:
true
},
"hash-sum"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz"
,
"integrity"
:
"sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg=="
,
"dev"
:
true
},
"he"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/he/-/he-1.2.0.tgz"
,
"integrity"
:
"sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
},
"help-me"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/help-me/-/help-me-3.0.0.tgz"
,
"integrity"
:
"sha512-hx73jClhyk910sidBB7ERlnhMlFsJJIBqSVMFDwPN8o2v9nmp5KgLq1Xz1Bf1fCMMZ6mPrX159iG0VLy/fPMtQ=="
,
"dev"
:
true
,
"requires"
:
{
"glob"
:
"^7.1.6"
,
"readable-stream"
:
"^3.6.0"
}
},
"hosted-git-info"
:
{
"version"
:
"2.8.9"
,
"resolved"
:
"https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz"
,
"integrity"
:
"sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
,
"dev"
:
true
},
"hpagent"
:
{
"version"
:
"0.1.2"
,
"resolved"
:
"https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz"
,
"integrity"
:
"sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ=="
,
"dev"
:
true
},
"htmlparser2"
:
{
"version"
:
"6.1.0"
,
"resolved"
:
"https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz"
,
"integrity"
:
"sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A=="
,
"dev"
:
true
,
"requires"
:
{
"domelementtype"
:
"^2.0.1"
,
"domhandler"
:
"^4.0.0"
,
"domutils"
:
"^2.5.2"
,
"entities"
:
"^2.0.0"
}
},
"http-cache-semantics"
:
{
"version"
:
"4.1.0"
,
"resolved"
:
"https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz"
,
"integrity"
:
"sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
,
"dev"
:
true
},
"http-errors"
:
{
"version"
:
"1.7.2"
,
"resolved"
:
"https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz"
,
"integrity"
:
"sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg=="
,
"dev"
:
true
,
"requires"
:
{
"depd"
:
"~1.1.2"
,
"inherits"
:
"2.0.3"
,
"setprototypeof"
:
"1.1.1"
,
"statuses"
:
">= 1.5.0 < 2"
,
"toidentifier"
:
"1.0.0"
},
"dependencies"
:
{
"inherits"
:
{
"version"
:
"2.0.3"
,
"resolved"
:
"https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"
,
"integrity"
:
"sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
,
"dev"
:
true
}
}
},
"http2-wrapper"
:
{
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz"
,
"integrity"
:
"sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg=="
,
"dev"
:
true
,
"requires"
:
{
"quick-lru"
:
"^5.1.1"
,
"resolve-alpn"
:
"^1.0.0"
}
},
"https-proxy-agent"
:
{
"version"
:
"5.0.0"
,
"resolved"
:
"https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz"
,
"integrity"
:
"sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA=="
,
"dev"
:
true
,
"requires"
:
{
"agent-base"
:
"6"
,
"debug"
:
"4"
}
},
"i18next"
:
{
"version"
:
"21.5.4"
,
"resolved"
:
"https://registry.npmjs.org/i18next/-/i18next-21.5.4.tgz"
,
"integrity"
:
"sha512-ukwRJpLhYg4EUfCOtbaKjlwF71qyel1XMXQN78OkQMcaQG68UzlYgLC6g2fhoTNBvoH2tJkaaqzDumhC9skAhA=="
,
"dev"
:
true
,
"requires"
:
{
"@babel/runtime"
:
"^7.12.0"
}
},
"iconv-lite"
:
{
"version"
:
"0.4.24"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
,
"integrity"
:
"sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="
,
"dev"
:
true
,
"requires"
:
{
"safer-buffer"
:
">= 2.1.2 < 3"
}
},
"ieee754"
:
{
"version"
:
"1.2.1"
,
"resolved"
:
"https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz"
,
"integrity"
:
"sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
,
"dev"
:
true
},
"inflight"
:
{
"version"
:
"1.0.6"
,
"resolved"
:
"https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
,
"integrity"
:
"sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk="
,
"requires"
:
{
"once"
:
"^1.3.0"
,
"wrappy"
:
"1"
}
},
"inherits"
:
{
"version"
:
"2.0.4"
,
"resolved"
:
"https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
,
"integrity"
:
"sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"ipaddr.js"
:
{
"version"
:
"1.9.1"
,
"resolved"
:
"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz"
,
"integrity"
:
"sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
,
"dev"
:
true
},
"is-arrayish"
:
{
"version"
:
"0.2.1"
,
"resolved"
:
"https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz"
,
"integrity"
:
"sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
,
"dev"
:
true
},
"is-binary-path"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz"
,
"integrity"
:
"sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="
,
"requires"
:
{
"binary-extensions"
:
"^2.0.0"
}
},
"is-core-module"
:
{
"version"
:
"2.8.0"
,
"resolved"
:
"https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz"
,
"integrity"
:
"sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw=="
,
"dev"
:
true
,
"requires"
:
{
"has"
:
"^1.0.3"
}
},
"is-extglob"
:
{
"version"
:
"2.1.1"
,
"resolved"
:
"https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
,
"integrity"
:
"sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
},
"is-fullwidth-code-point"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"
,
"integrity"
:
"sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
},
"is-glob"
:
{
"version"
:
"4.0.3"
,
"resolved"
:
"https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
,
"integrity"
:
"sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="
,
"requires"
:
{
"is-extglob"
:
"^2.1.1"
}
},
"is-number"
:
{
"version"
:
"7.0.0"
,
"resolved"
:
"https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
,
"integrity"
:
"sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
},
"is-plain-obj"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz"
,
"integrity"
:
"sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="
},
"is-unicode-supported"
:
{
"version"
:
"0.1.0"
,
"resolved"
:
"https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz"
,
"integrity"
:
"sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="
},
"is-utf8"
:
{
"version"
:
"0.2.1"
,
"resolved"
:
"https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz"
,
"integrity"
:
"sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
,
"dev"
:
true
},
"isarray"
:
{
"version"
:
"0.0.1"
,
"resolved"
:
"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
,
"integrity"
:
"sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
,
"dev"
:
true
},
"isexe"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
,
"integrity"
:
"sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
},
"js-tokens"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
,
"integrity"
:
"sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
,
"dev"
:
true
},
"js-yaml"
:
{
"version"
:
"3.14.1"
,
"resolved"
:
"https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz"
,
"integrity"
:
"sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g=="
,
"dev"
:
true
,
"requires"
:
{
"argparse"
:
"^1.0.7"
,
"esprima"
:
"^4.0.0"
}
},
"json-buffer"
:
{
"version"
:
"3.0.1"
,
"resolved"
:
"https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz"
,
"integrity"
:
"sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
,
"dev"
:
true
},
"json-parse-even-better-errors"
:
{
"version"
:
"2.3.1"
,
"resolved"
:
"https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz"
,
"integrity"
:
"sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
,
"dev"
:
true
},
"json-schema-traverse"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz"
,
"integrity"
:
"sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
,
"dev"
:
true
},
"json-stringify-safe"
:
{
"version"
:
"5.0.1"
,
"resolved"
:
"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"
,
"integrity"
:
"sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
,
"dev"
:
true
},
"jsonata"
:
{
"version"
:
"1.8.5"
,
"resolved"
:
"https://registry.npmjs.org/jsonata/-/jsonata-1.8.5.tgz"
,
"integrity"
:
"sha512-ilDyTBkg6qhNoNVr8PUPzz5GYvRK+REKOM5MdOGzH2y6V4yvPRMegSvbZLpbTtI0QAgz09QM7drDhSHUlwp9pA=="
,
"dev"
:
true
},
"jsonfile"
:
{
"version"
:
"6.1.0"
,
"resolved"
:
"https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz"
,
"integrity"
:
"sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ=="
,
"dev"
:
true
,
"requires"
:
{
"graceful-fs"
:
"^4.1.6"
,
"universalify"
:
"^2.0.0"
}
},
"just-extend"
:
{
"version"
:
"4.2.1"
,
"resolved"
:
"https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz"
,
"integrity"
:
"sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg=="
,
"dev"
:
true
},
"keyv"
:
{
"version"
:
"4.0.4"
,
"resolved"
:
"https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz"
,
"integrity"
:
"sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg=="
,
"dev"
:
true
,
"requires"
:
{
"json-buffer"
:
"3.0.1"
}
},
"leven"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/leven/-/leven-2.1.0.tgz"
,
"integrity"
:
"sha1-wuep93IJTe6dNCAq6KzORoeHVYA="
,
"dev"
:
true
},
"lines-and-columns"
:
{
"version"
:
"1.2.4"
,
"resolved"
:
"https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz"
,
"integrity"
:
"sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
,
"dev"
:
true
},
"locate-path"
:
{
"version"
:
"5.0.0"
,
"resolved"
:
"https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz"
,
"integrity"
:
"sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="
,
"dev"
:
true
,
"requires"
:
{
"p-locate"
:
"^4.1.0"
}
},
"lodash.clonedeep"
:
{
"version"
:
"4.5.0"
,
"resolved"
:
"https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz"
,
"integrity"
:
"sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
,
"dev"
:
true
},
"lodash.get"
:
{
"version"
:
"4.4.2"
,
"resolved"
:
"https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz"
,
"integrity"
:
"sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
,
"dev"
:
true
},
"log-symbols"
:
{
"version"
:
"4.1.0"
,
"resolved"
:
"https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz"
,
"integrity"
:
"sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="
,
"requires"
:
{
"chalk"
:
"^4.1.0"
,
"is-unicode-supported"
:
"^0.1.0"
},
"dependencies"
:
{
"ansi-styles"
:
{
"version"
:
"4.3.0"
,
"resolved"
:
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
,
"integrity"
:
"sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
,
"requires"
:
{
"color-convert"
:
"^2.0.1"
}
},
"chalk"
:
{
"version"
:
"4.1.2"
,
"resolved"
:
"https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
,
"integrity"
:
"sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="
,
"requires"
:
{
"ansi-styles"
:
"^4.1.0"
,
"supports-color"
:
"^7.1.0"
}
},
"color-convert"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
,
"integrity"
:
"sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="
,
"requires"
:
{
"color-name"
:
"~1.1.4"
}
},
"color-name"
:
{
"version"
:
"1.1.4"
,
"resolved"
:
"https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
,
"integrity"
:
"sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"has-flag"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
,
"integrity"
:
"sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
},
"supports-color"
:
{
"version"
:
"7.2.0"
,
"resolved"
:
"https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
,
"integrity"
:
"sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="
,
"requires"
:
{
"has-flag"
:
"^4.0.0"
}
}
}
},
"lowercase-keys"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz"
,
"integrity"
:
"sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
,
"dev"
:
true
},
"lru-cache"
:
{
"version"
:
"6.0.0"
,
"resolved"
:
"https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
,
"integrity"
:
"sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="
,
"dev"
:
true
,
"requires"
:
{
"yallist"
:
"^4.0.0"
}
},
"make-dir"
:
{
"version"
:
"3.1.0"
,
"resolved"
:
"https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz"
,
"integrity"
:
"sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"semver"
:
"^6.0.0"
},
"dependencies"
:
{
"semver"
:
{
"version"
:
"6.3.0"
,
"resolved"
:
"https://registry.npmjs.org/semver/-/semver-6.3.0.tgz"
,
"integrity"
:
"sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
,
"dev"
:
true
,
"optional"
:
true
}
}
},
"media-typer"
:
{
"version"
:
"0.3.0"
,
"resolved"
:
"https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"
,
"integrity"
:
"sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
,
"dev"
:
true
},
"memorystore"
:
{
"version"
:
"1.6.6"
,
"resolved"
:
"https://registry.npmjs.org/memorystore/-/memorystore-1.6.6.tgz"
,
"integrity"
:
"sha512-EbLl1xg9+DlnjXkZK/eMUoWyhZ1IxcWMpSuFyqyA/Z4BNuH7BR+E0yC40WbLZZ6G8LxHiUZ2DPhqV8DR8+9UQQ=="
,
"dev"
:
true
,
"requires"
:
{
"debug"
:
"^4.3.0"
,
"lru-cache"
:
"^4.0.3"
},
"dependencies"
:
{
"lru-cache"
:
{
"version"
:
"4.1.5"
,
"resolved"
:
"https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz"
,
"integrity"
:
"sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g=="
,
"dev"
:
true
,
"requires"
:
{
"pseudomap"
:
"^1.0.2"
,
"yallist"
:
"^2.1.2"
}
},
"yallist"
:
{
"version"
:
"2.1.2"
,
"resolved"
:
"https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz"
,
"integrity"
:
"sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
,
"dev"
:
true
}
}
},
"merge-descriptors"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz"
,
"integrity"
:
"sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
,
"dev"
:
true
},
"methods"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/methods/-/methods-1.1.2.tgz"
,
"integrity"
:
"sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
,
"dev"
:
true
},
"mime"
:
{
"version"
:
"2.5.2"
,
"resolved"
:
"https://registry.npmjs.org/mime/-/mime-2.5.2.tgz"
,
"integrity"
:
"sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg=="
,
"dev"
:
true
},
"mime-db"
:
{
"version"
:
"1.51.0"
,
"resolved"
:
"https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz"
,
"integrity"
:
"sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g=="
,
"dev"
:
true
},
"mime-types"
:
{
"version"
:
"2.1.34"
,
"resolved"
:
"https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz"
,
"integrity"
:
"sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A=="
,
"dev"
:
true
,
"requires"
:
{
"mime-db"
:
"1.51.0"
}
},
"mimic-response"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz"
,
"integrity"
:
"sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
,
"dev"
:
true
},
"minimatch"
:
{
"version"
:
"3.0.4"
,
"resolved"
:
"https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz"
,
"integrity"
:
"sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA=="
,
"requires"
:
{
"brace-expansion"
:
"^1.1.7"
}
},
"minimist"
:
{
"version"
:
"1.2.5"
,
"resolved"
:
"https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz"
,
"integrity"
:
"sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
,
"dev"
:
true
},
"minipass"
:
{
"version"
:
"3.1.6"
,
"resolved"
:
"https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz"
,
"integrity"
:
"sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ=="
,
"dev"
:
true
,
"requires"
:
{
"yallist"
:
"^4.0.0"
}
},
"minizlib"
:
{
"version"
:
"2.1.2"
,
"resolved"
:
"https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz"
,
"integrity"
:
"sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg=="
,
"dev"
:
true
,
"requires"
:
{
"minipass"
:
"^3.0.0"
,
"yallist"
:
"^4.0.0"
}
},
"mkdirp"
:
{
"version"
:
"1.0.4"
,
"resolved"
:
"https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"
,
"integrity"
:
"sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
,
"dev"
:
true
},
"mocha"
:
{
"version"
:
"9.1.3"
,
"resolved"
:
"https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz"
,
"integrity"
:
"sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw=="
,
"requires"
:
{
"@ungap/promise-all-settled"
:
"1.1.2"
,
"ansi-colors"
:
"4.1.1"
,
"browser-stdout"
:
"1.3.1"
,
"chokidar"
:
"3.5.2"
,
"debug"
:
"4.3.2"
,
"diff"
:
"5.0.0"
,
"escape-string-regexp"
:
"4.0.0"
,
"find-up"
:
"5.0.0"
,
"glob"
:
"7.1.7"
,
"growl"
:
"1.10.5"
,
"he"
:
"1.2.0"
,
"js-yaml"
:
"4.1.0"
,
"log-symbols"
:
"4.1.0"
,
"minimatch"
:
"3.0.4"
,
"ms"
:
"2.1.3"
,
"nanoid"
:
"3.1.25"
,
"serialize-javascript"
:
"6.0.0"
,
"strip-json-comments"
:
"3.1.1"
,
"supports-color"
:
"8.1.1"
,
"which"
:
"2.0.2"
,
"workerpool"
:
"6.1.5"
,
"yargs"
:
"16.2.0"
,
"yargs-parser"
:
"20.2.4"
,
"yargs-unparser"
:
"2.0.0"
},
"dependencies"
:
{
"argparse"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz"
,
"integrity"
:
"sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
},
"debug"
:
{
"version"
:
"4.3.2"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-4.3.2.tgz"
,
"integrity"
:
"sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw=="
,
"requires"
:
{
"ms"
:
"2.1.2"
},
"dependencies"
:
{
"ms"
:
{
"version"
:
"2.1.2"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
,
"integrity"
:
"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"diff"
:
{
"version"
:
"5.0.0"
,
"resolved"
:
"https://registry.npmjs.org/diff/-/diff-5.0.0.tgz"
,
"integrity"
:
"sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w=="
},
"escape-string-regexp"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
,
"integrity"
:
"sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
},
"find-up"
:
{
"version"
:
"5.0.0"
,
"resolved"
:
"https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz"
,
"integrity"
:
"sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="
,
"requires"
:
{
"locate-path"
:
"^6.0.0"
,
"path-exists"
:
"^4.0.0"
}
},
"glob"
:
{
"version"
:
"7.1.7"
,
"resolved"
:
"https://registry.npmjs.org/glob/-/glob-7.1.7.tgz"
,
"integrity"
:
"sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ=="
,
"requires"
:
{
"fs.realpath"
:
"^1.0.0"
,
"inflight"
:
"^1.0.4"
,
"inherits"
:
"2"
,
"minimatch"
:
"^3.0.4"
,
"once"
:
"^1.3.0"
,
"path-is-absolute"
:
"^1.0.0"
}
},
"has-flag"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
,
"integrity"
:
"sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
},
"js-yaml"
:
{
"version"
:
"4.1.0"
,
"resolved"
:
"https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz"
,
"integrity"
:
"sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="
,
"requires"
:
{
"argparse"
:
"^2.0.1"
}
},
"locate-path"
:
{
"version"
:
"6.0.0"
,
"resolved"
:
"https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz"
,
"integrity"
:
"sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="
,
"requires"
:
{
"p-locate"
:
"^5.0.0"
}
},
"ms"
:
{
"version"
:
"2.1.3"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
,
"integrity"
:
"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
"p-limit"
:
{
"version"
:
"3.1.0"
,
"resolved"
:
"https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz"
,
"integrity"
:
"sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="
,
"requires"
:
{
"yocto-queue"
:
"^0.1.0"
}
},
"p-locate"
:
{
"version"
:
"5.0.0"
,
"resolved"
:
"https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz"
,
"integrity"
:
"sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="
,
"requires"
:
{
"p-limit"
:
"^3.0.2"
}
},
"supports-color"
:
{
"version"
:
"8.1.1"
,
"resolved"
:
"https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz"
,
"integrity"
:
"sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="
,
"requires"
:
{
"has-flag"
:
"^4.0.0"
}
}
}
},
"moment"
:
{
"version"
:
"2.29.1"
,
"resolved"
:
"https://registry.npmjs.org/moment/-/moment-2.29.1.tgz"
,
"integrity"
:
"sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
,
"dev"
:
true
},
"moment-timezone"
:
{
"version"
:
"0.5.34"
,
"resolved"
:
"https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz"
,
"integrity"
:
"sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg=="
,
"dev"
:
true
,
"requires"
:
{
"moment"
:
">= 2.9.0"
}
},
"mqtt"
:
{
"version"
:
"4.2.8"
,
"resolved"
:
"https://registry.npmjs.org/mqtt/-/mqtt-4.2.8.tgz"
,
"integrity"
:
"sha512-DJYjlXODVXtSDecN8jnNzi6ItX3+ufGsEs9OB3YV24HtkRrh7kpx8L5M1LuyF0KzaiGtWr2PzDcMGAY60KGOSA=="
,
"dev"
:
true
,
"requires"
:
{
"commist"
:
"^1.0.0"
,
"concat-stream"
:
"^2.0.0"
,
"debug"
:
"^4.1.1"
,
"duplexify"
:
"^4.1.1"
,
"help-me"
:
"^3.0.0"
,
"inherits"
:
"^2.0.3"
,
"minimist"
:
"^1.2.5"
,
"mqtt-packet"
:
"^6.8.0"
,
"pump"
:
"^3.0.0"
,
"readable-stream"
:
"^3.6.0"
,
"reinterval"
:
"^1.1.0"
,
"split2"
:
"^3.1.0"
,
"ws"
:
"^7.5.0"
,
"xtend"
:
"^4.0.2"
},
"dependencies"
:
{
"concat-stream"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz"
,
"integrity"
:
"sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A=="
,
"dev"
:
true
,
"requires"
:
{
"buffer-from"
:
"^1.0.0"
,
"inherits"
:
"^2.0.3"
,
"readable-stream"
:
"^3.0.2"
,
"typedarray"
:
"^0.0.6"
}
}
}
},
"mqtt-packet"
:
{
"version"
:
"6.10.0"
,
"resolved"
:
"https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-6.10.0.tgz"
,
"integrity"
:
"sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA=="
,
"dev"
:
true
,
"requires"
:
{
"bl"
:
"^4.0.2"
,
"debug"
:
"^4.1.1"
,
"process-nextick-args"
:
"^2.0.1"
}
},
"ms"
:
{
"version"
:
"2.1.2"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
,
"integrity"
:
"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
,
"dev"
:
true
},
"multer"
:
{
"version"
:
"1.4.3"
,
"resolved"
:
"https://registry.npmjs.org/multer/-/multer-1.4.3.tgz"
,
"integrity"
:
"sha512-np0YLKncuZoTzufbkM6wEKp68EhWJXcU6fq6QqrSwkckd2LlMgd1UqhUJLj6NS/5sZ8dE8LYDWslsltJznnXlg=="
,
"dev"
:
true
,
"requires"
:
{
"append-field"
:
"^1.0.0"
,
"busboy"
:
"^0.2.11"
,
"concat-stream"
:
"^1.5.2"
,
"mkdirp"
:
"^0.5.4"
,
"object-assign"
:
"^4.1.1"
,
"on-finished"
:
"^2.3.0"
,
"type-is"
:
"^1.6.4"
,
"xtend"
:
"^4.0.0"
},
"dependencies"
:
{
"mkdirp"
:
{
"version"
:
"0.5.5"
,
"resolved"
:
"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz"
,
"integrity"
:
"sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ=="
,
"dev"
:
true
,
"requires"
:
{
"minimist"
:
"^1.2.5"
}
}
}
},
"mustache"
:
{
"version"
:
"4.2.0"
,
"resolved"
:
"https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz"
,
"integrity"
:
"sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ=="
,
"dev"
:
true
},
"mute-stream"
:
{
"version"
:
"0.0.8"
,
"resolved"
:
"https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz"
,
"integrity"
:
"sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
,
"dev"
:
true
},
"nanoid"
:
{
"version"
:
"3.1.25"
,
"resolved"
:
"https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz"
,
"integrity"
:
"sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q=="
},
"negotiator"
:
{
"version"
:
"0.6.2"
,
"resolved"
:
"https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz"
,
"integrity"
:
"sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
,
"dev"
:
true
},
"nise"
:
{
"version"
:
"4.1.0"
,
"resolved"
:
"https://registry.npmjs.org/nise/-/nise-4.1.0.tgz"
,
"integrity"
:
"sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA=="
,
"dev"
:
true
,
"requires"
:
{
"@sinonjs/commons"
:
"^1.7.0"
,
"@sinonjs/fake-timers"
:
"^6.0.0"
,
"@sinonjs/text-encoding"
:
"^0.7.1"
,
"just-extend"
:
"^4.0.2"
,
"path-to-regexp"
:
"^1.7.0"
},
"dependencies"
:
{
"path-to-regexp"
:
{
"version"
:
"1.8.0"
,
"resolved"
:
"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz"
,
"integrity"
:
"sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA=="
,
"dev"
:
true
,
"requires"
:
{
"isarray"
:
"0.0.1"
}
}
}
},
"node-addon-api"
:
{
"version"
:
"3.2.1"
,
"resolved"
:
"https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz"
,
"integrity"
:
"sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A=="
,
"dev"
:
true
,
"optional"
:
true
},
"node-fetch"
:
{
"version"
:
"2.6.6"
,
"resolved"
:
"https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz"
,
"integrity"
:
"sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"whatwg-url"
:
"^5.0.0"
}
},
"node-red"
:
{
"version"
:
"2.1.4"
,
"resolved"
:
"https://registry.npmjs.org/node-red/-/node-red-2.1.4.tgz"
,
"integrity"
:
"sha512-ScpFFE0G+NlxFWrHnMcIkaF8gW+6jwK7n5qRGId66fCTICYnBGkOxXBvV3Q45H+4iQUro5aIRj737Gu7shjsJw=="
,
"dev"
:
true
,
"requires"
:
{
"@node-red/editor-api"
:
"2.1.4"
,
"@node-red/nodes"
:
"2.1.4"
,
"@node-red/runtime"
:
"2.1.4"
,
"@node-red/util"
:
"2.1.4"
,
"basic-auth"
:
"2.0.1"
,
"bcrypt"
:
"5.0.1"
,
"bcryptjs"
:
"2.4.3"
,
"express"
:
"4.17.1"
,
"fs-extra"
:
"10.0.0"
,
"node-red-admin"
:
"^2.2.1"
,
"nopt"
:
"5.0.0"
,
"semver"
:
"7.3.5"
}
},
"node-red-admin"
:
{
"version"
:
"2.2.1"
,
"resolved"
:
"https://registry.npmjs.org/node-red-admin/-/node-red-admin-2.2.1.tgz"
,
"integrity"
:
"sha512-xYp6mZaRbAWLR8nO4HRVvthYZoPGBotPvetAGho4AXpRJW7fXw38XwK0KPSffvLSis6cxaskJq9nZBLp3PJtng=="
,
"dev"
:
true
,
"requires"
:
{
"ansi-colors"
:
"^4.1.1"
,
"axios"
:
"0.22.0"
,
"bcrypt"
:
"5.0.1"
,
"bcryptjs"
:
"^2.4.3"
,
"cli-table"
:
"^0.3.4"
,
"enquirer"
:
"^2.3.6"
,
"minimist"
:
"^1.2.5"
,
"mustache"
:
"^4.2.0"
,
"read"
:
"^1.0.7"
},
"dependencies"
:
{
"axios"
:
{
"version"
:
"0.22.0"
,
"resolved"
:
"https://registry.npmjs.org/axios/-/axios-0.22.0.tgz"
,
"integrity"
:
"sha512-Z0U3uhqQeg1oNcihswf4ZD57O3NrR1+ZXhxaROaWpDmsDTx7T2HNBV2ulBtie2hwJptu8UvgnJoK+BIqdzh/1w=="
,
"dev"
:
true
,
"requires"
:
{
"follow-redirects"
:
"^1.14.4"
}
}
}
},
"node-red-node-test-helper"
:
{
"version"
:
"0.2.7"
,
"resolved"
:
"https://registry.npmjs.org/node-red-node-test-helper/-/node-red-node-test-helper-0.2.7.tgz"
,
"integrity"
:
"sha512-OanSQ1hrsigHVtMjL/cuhtjxhTdRBXxd3IALJC9eg0WOHRF75ZI7RYhFWqqOsvQ++BwmNj8ki1S49D8cZyZTWA=="
,
"dev"
:
true
,
"requires"
:
{
"body-parser"
:
"1.19.0"
,
"express"
:
"4.17.1"
,
"read-pkg-up"
:
"7.0.1"
,
"semver"
:
"7.3.4"
,
"should"
:
"^13.2.3"
,
"should-sinon"
:
"0.0.6"
,
"sinon"
:
"9.2.4"
,
"stoppable"
:
"1.1.0"
,
"supertest"
:
"4.0.2"
},
"dependencies"
:
{
"semver"
:
{
"version"
:
"7.3.4"
,
"resolved"
:
"https://registry.npmjs.org/semver/-/semver-7.3.4.tgz"
,
"integrity"
:
"sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw=="
,
"dev"
:
true
,
"requires"
:
{
"lru-cache"
:
"^6.0.0"
}
}
}
},
"nopt"
:
{
"version"
:
"5.0.0"
,
"resolved"
:
"https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz"
,
"integrity"
:
"sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ=="
,
"dev"
:
true
,
"requires"
:
{
"abbrev"
:
"1"
}
},
"normalize-package-data"
:
{
"version"
:
"2.5.0"
,
"resolved"
:
"https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz"
,
"integrity"
:
"sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="
,
"dev"
:
true
,
"requires"
:
{
"hosted-git-info"
:
"^2.1.4"
,
"resolve"
:
"^1.10.0"
,
"semver"
:
"2 || 3 || 4 || 5"
,
"validate-npm-package-license"
:
"^3.0.1"
},
"dependencies"
:
{
"semver"
:
{
"version"
:
"5.7.1"
,
"resolved"
:
"https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"
,
"integrity"
:
"sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
,
"dev"
:
true
}
}
},
"normalize-path"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"
,
"integrity"
:
"sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
},
"normalize-url"
:
{
"version"
:
"6.1.0"
,
"resolved"
:
"https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz"
,
"integrity"
:
"sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="
,
"dev"
:
true
},
"npmlog"
:
{
"version"
:
"5.0.1"
,
"resolved"
:
"https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz"
,
"integrity"
:
"sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"are-we-there-yet"
:
"^2.0.0"
,
"console-control-strings"
:
"^1.1.0"
,
"gauge"
:
"^3.0.0"
,
"set-blocking"
:
"^2.0.0"
}
},
"nth-check"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz"
,
"integrity"
:
"sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w=="
,
"dev"
:
true
,
"requires"
:
{
"boolbase"
:
"^1.0.0"
}
},
"oauth2orize"
:
{
"version"
:
"1.11.1"
,
"resolved"
:
"https://registry.npmjs.org/oauth2orize/-/oauth2orize-1.11.1.tgz"
,
"integrity"
:
"sha512-9dSx/Gwm0J2Rvj4RH9+h7iXVnRXZ6biwWRgb2dCeQhCosODS0nYdM9I/G7BUGsjbgn0pHjGcn1zcCRtzj2SlRA=="
,
"dev"
:
true
,
"requires"
:
{
"debug"
:
"2.x.x"
,
"uid2"
:
"0.0.x"
,
"utils-merge"
:
"1.x.x"
},
"dependencies"
:
{
"debug"
:
{
"version"
:
"2.6.9"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
,
"integrity"
:
"sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
,
"dev"
:
true
,
"requires"
:
{
"ms"
:
"2.0.0"
}
},
"ms"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
,
"integrity"
:
"sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
,
"dev"
:
true
}
}
},
"object-assign"
:
{
"version"
:
"4.1.1"
,
"resolved"
:
"https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
,
"integrity"
:
"sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
,
"dev"
:
true
},
"on-finished"
:
{
"version"
:
"2.3.0"
,
"resolved"
:
"https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz"
,
"integrity"
:
"sha1-IPEzZIGwg811M3mSoWlxqi2QaUc="
,
"dev"
:
true
,
"requires"
:
{
"ee-first"
:
"1.1.1"
}
},
"on-headers"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz"
,
"integrity"
:
"sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
,
"dev"
:
true
},
"once"
:
{
"version"
:
"1.4.0"
,
"resolved"
:
"https://registry.npmjs.org/once/-/once-1.4.0.tgz"
,
"integrity"
:
"sha1-WDsap3WWHUsROsF9nFC6753Xa9E="
,
"requires"
:
{
"wrappy"
:
"1"
}
},
"p-cancelable"
:
{
"version"
:
"2.1.1"
,
"resolved"
:
"https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz"
,
"integrity"
:
"sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="
,
"dev"
:
true
},
"p-limit"
:
{
"version"
:
"2.3.0"
,
"resolved"
:
"https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz"
,
"integrity"
:
"sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="
,
"dev"
:
true
,
"requires"
:
{
"p-try"
:
"^2.0.0"
}
},
"p-locate"
:
{
"version"
:
"4.1.0"
,
"resolved"
:
"https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz"
,
"integrity"
:
"sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="
,
"dev"
:
true
,
"requires"
:
{
"p-limit"
:
"^2.2.0"
}
},
"p-try"
:
{
"version"
:
"2.2.0"
,
"resolved"
:
"https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz"
,
"integrity"
:
"sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
,
"dev"
:
true
},
"parse-json"
:
{
"version"
:
"5.2.0"
,
"resolved"
:
"https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz"
,
"integrity"
:
"sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="
,
"dev"
:
true
,
"requires"
:
{
"@babel/code-frame"
:
"^7.0.0"
,
"error-ex"
:
"^1.3.1"
,
"json-parse-even-better-errors"
:
"^2.3.0"
,
"lines-and-columns"
:
"^1.1.6"
}
},
"parse5"
:
{
"version"
:
"6.0.1"
,
"resolved"
:
"https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz"
,
"integrity"
:
"sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
,
"dev"
:
true
},
"parse5-htmlparser2-tree-adapter"
:
{
"version"
:
"6.0.1"
,
"resolved"
:
"https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz"
,
"integrity"
:
"sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA=="
,
"dev"
:
true
,
"requires"
:
{
"parse5"
:
"^6.0.1"
}
},
"parseurl"
:
{
"version"
:
"1.3.3"
,
"resolved"
:
"https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz"
,
"integrity"
:
"sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
,
"dev"
:
true
},
"passport"
:
{
"version"
:
"0.5.0"
,
"resolved"
:
"https://registry.npmjs.org/passport/-/passport-0.5.0.tgz"
,
"integrity"
:
"sha512-ln+ue5YaNDS+fes6O5PCzXKSseY5u8MYhX9H5Co4s+HfYI5oqvnHKoOORLYDUPh+8tHvrxugF2GFcUA1Q1Gqfg=="
,
"dev"
:
true
,
"requires"
:
{
"passport-strategy"
:
"1.x.x"
,
"pause"
:
"0.0.1"
}
},
"passport-http-bearer"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/passport-http-bearer/-/passport-http-bearer-1.0.1.tgz"
,
"integrity"
:
"sha1-FHRp6jZp4qhMYWfvmdu3fh8AmKg="
,
"dev"
:
true
,
"requires"
:
{
"passport-strategy"
:
"1.x.x"
}
},
"passport-oauth2-client-password"
:
{
"version"
:
"0.1.2"
,
"resolved"
:
"https://registry.npmjs.org/passport-oauth2-client-password/-/passport-oauth2-client-password-0.1.2.tgz"
,
"integrity"
:
"sha1-TzeLZ4uS0W270jOmxwZSAJPlYbo="
,
"dev"
:
true
,
"requires"
:
{
"passport-strategy"
:
"1.x.x"
}
},
"passport-strategy"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz"
,
"integrity"
:
"sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ="
,
"dev"
:
true
},
"path-exists"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
,
"integrity"
:
"sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
},
"path-is-absolute"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
,
"integrity"
:
"sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"path-parse"
:
{
"version"
:
"1.0.7"
,
"resolved"
:
"https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"
,
"integrity"
:
"sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
,
"dev"
:
true
},
"path-to-regexp"
:
{
"version"
:
"0.1.7"
,
"resolved"
:
"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz"
,
"integrity"
:
"sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
,
"dev"
:
true
},
"pause"
:
{
"version"
:
"0.0.1"
,
"resolved"
:
"https://registry.npmjs.org/pause/-/pause-0.0.1.tgz"
,
"integrity"
:
"sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
,
"dev"
:
true
},
"picomatch"
:
{
"version"
:
"2.3.0"
,
"resolved"
:
"https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz"
,
"integrity"
:
"sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw=="
},
"process-nextick-args"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz"
,
"integrity"
:
"sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
,
"dev"
:
true
},
"proxy-addr"
:
{
"version"
:
"2.0.7"
,
"resolved"
:
"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz"
,
"integrity"
:
"sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="
,
"dev"
:
true
,
"requires"
:
{
"forwarded"
:
"0.2.0"
,
"ipaddr.js"
:
"1.9.1"
}
},
"pseudomap"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz"
,
"integrity"
:
"sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
,
"dev"
:
true
},
"psl"
:
{
"version"
:
"1.8.0"
,
"resolved"
:
"https://registry.npmjs.org/psl/-/psl-1.8.0.tgz"
,
"integrity"
:
"sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
,
"dev"
:
true
},
"pump"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/pump/-/pump-3.0.0.tgz"
,
"integrity"
:
"sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww=="
,
"dev"
:
true
,
"requires"
:
{
"end-of-stream"
:
"^1.1.0"
,
"once"
:
"^1.3.1"
}
},
"punycode"
:
{
"version"
:
"2.1.1"
,
"resolved"
:
"https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz"
,
"integrity"
:
"sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
,
"dev"
:
true
},
"qs"
:
{
"version"
:
"6.7.0"
,
"resolved"
:
"https://registry.npmjs.org/qs/-/qs-6.7.0.tgz"
,
"integrity"
:
"sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
,
"dev"
:
true
},
"quick-lru"
:
{
"version"
:
"5.1.1"
,
"resolved"
:
"https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz"
,
"integrity"
:
"sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
,
"dev"
:
true
},
"random-bytes"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz"
,
"integrity"
:
"sha1-T2ih3Arli9P7lYSMMDJNt11kNgs="
,
"dev"
:
true
},
"randombytes"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz"
,
"integrity"
:
"sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="
,
"requires"
:
{
"safe-buffer"
:
"^5.1.0"
}
},
"range-parser"
:
{
"version"
:
"1.2.1"
,
"resolved"
:
"https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz"
,
"integrity"
:
"sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
,
"dev"
:
true
},
"raw-body"
:
{
"version"
:
"2.4.0"
,
"resolved"
:
"https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz"
,
"integrity"
:
"sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q=="
,
"dev"
:
true
,
"requires"
:
{
"bytes"
:
"3.1.0"
,
"http-errors"
:
"1.7.2"
,
"iconv-lite"
:
"0.4.24"
,
"unpipe"
:
"1.0.0"
}
},
"read"
:
{
"version"
:
"1.0.7"
,
"resolved"
:
"https://registry.npmjs.org/read/-/read-1.0.7.tgz"
,
"integrity"
:
"sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ="
,
"dev"
:
true
,
"requires"
:
{
"mute-stream"
:
"~0.0.4"
}
},
"read-pkg"
:
{
"version"
:
"5.2.0"
,
"resolved"
:
"https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz"
,
"integrity"
:
"sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg=="
,
"dev"
:
true
,
"requires"
:
{
"@types/normalize-package-data"
:
"^2.4.0"
,
"normalize-package-data"
:
"^2.5.0"
,
"parse-json"
:
"^5.0.0"
,
"type-fest"
:
"^0.6.0"
},
"dependencies"
:
{
"type-fest"
:
{
"version"
:
"0.6.0"
,
"resolved"
:
"https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz"
,
"integrity"
:
"sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg=="
,
"dev"
:
true
}
}
},
"read-pkg-up"
:
{
"version"
:
"7.0.1"
,
"resolved"
:
"https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz"
,
"integrity"
:
"sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg=="
,
"dev"
:
true
,
"requires"
:
{
"find-up"
:
"^4.1.0"
,
"read-pkg"
:
"^5.2.0"
,
"type-fest"
:
"^0.8.1"
}
},
"readable-stream"
:
{
"version"
:
"3.6.0"
,
"resolved"
:
"https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz"
,
"integrity"
:
"sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA=="
,
"dev"
:
true
,
"requires"
:
{
"inherits"
:
"^2.0.3"
,
"string_decoder"
:
"^1.1.1"
,
"util-deprecate"
:
"^1.0.1"
}
},
"readdirp"
:
{
"version"
:
"3.6.0"
,
"resolved"
:
"https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz"
,
"integrity"
:
"sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="
,
"requires"
:
{
"picomatch"
:
"^2.2.1"
}
},
"regenerator-runtime"
:
{
"version"
:
"0.13.9"
,
"resolved"
:
"https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz"
,
"integrity"
:
"sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
,
"dev"
:
true
},
"reinterval"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/reinterval/-/reinterval-1.1.0.tgz"
,
"integrity"
:
"sha1-M2Hs+jymwYKDOA3Qu5VG85D17Oc="
,
"dev"
:
true
},
"require-directory"
:
{
"version"
:
"2.1.1"
,
"resolved"
:
"https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz"
,
"integrity"
:
"sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
},
"require-from-string"
:
{
"version"
:
"2.0.2"
,
"resolved"
:
"https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz"
,
"integrity"
:
"sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
,
"dev"
:
true
},
"resolve"
:
{
"version"
:
"1.20.0"
,
"resolved"
:
"https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz"
,
"integrity"
:
"sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A=="
,
"dev"
:
true
,
"requires"
:
{
"is-core-module"
:
"^2.2.0"
,
"path-parse"
:
"^1.0.6"
}
},
"resolve-alpn"
:
{
"version"
:
"1.2.1"
,
"resolved"
:
"https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz"
,
"integrity"
:
"sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
,
"dev"
:
true
},
"responselike"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz"
,
"integrity"
:
"sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw=="
,
"dev"
:
true
,
"requires"
:
{
"lowercase-keys"
:
"^2.0.0"
}
},
"retry"
:
{
"version"
:
"0.6.1"
,
"resolved"
:
"https://registry.npmjs.org/retry/-/retry-0.6.1.tgz"
,
"integrity"
:
"sha1-/ckO7ZQ/3hG4k1VLjMY9DombqRg="
,
"dev"
:
true
},
"rimraf"
:
{
"version"
:
"3.0.2"
,
"resolved"
:
"https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz"
,
"integrity"
:
"sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"glob"
:
"^7.1.3"
}
},
"safe-buffer"
:
{
"version"
:
"5.2.1"
,
"resolved"
:
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
,
"integrity"
:
"sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"safer-buffer"
:
{
"version"
:
"2.1.2"
,
"resolved"
:
"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
,
"integrity"
:
"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
,
"dev"
:
true
},
"sax"
:
{
"version"
:
"1.2.4"
,
"resolved"
:
"https://registry.npmjs.org/sax/-/sax-1.2.4.tgz"
,
"integrity"
:
"sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
,
"dev"
:
true
},
"semver"
:
{
"version"
:
"7.3.5"
,
"resolved"
:
"https://registry.npmjs.org/semver/-/semver-7.3.5.tgz"
,
"integrity"
:
"sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ=="
,
"dev"
:
true
,
"requires"
:
{
"lru-cache"
:
"^6.0.0"
}
},
"send"
:
{
"version"
:
"0.17.1"
,
"resolved"
:
"https://registry.npmjs.org/send/-/send-0.17.1.tgz"
,
"integrity"
:
"sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg=="
,
"dev"
:
true
,
"requires"
:
{
"debug"
:
"2.6.9"
,
"depd"
:
"~1.1.2"
,
"destroy"
:
"~1.0.4"
,
"encodeurl"
:
"~1.0.2"
,
"escape-html"
:
"~1.0.3"
,
"etag"
:
"~1.8.1"
,
"fresh"
:
"0.5.2"
,
"http-errors"
:
"~1.7.2"
,
"mime"
:
"1.6.0"
,
"ms"
:
"2.1.1"
,
"on-finished"
:
"~2.3.0"
,
"range-parser"
:
"~1.2.1"
,
"statuses"
:
"~1.5.0"
},
"dependencies"
:
{
"debug"
:
{
"version"
:
"2.6.9"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
,
"integrity"
:
"sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
,
"dev"
:
true
,
"requires"
:
{
"ms"
:
"2.0.0"
},
"dependencies"
:
{
"ms"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
,
"integrity"
:
"sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
,
"dev"
:
true
}
}
},
"mime"
:
{
"version"
:
"1.6.0"
,
"resolved"
:
"https://registry.npmjs.org/mime/-/mime-1.6.0.tgz"
,
"integrity"
:
"sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
,
"dev"
:
true
},
"ms"
:
{
"version"
:
"2.1.1"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.1.1.tgz"
,
"integrity"
:
"sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
,
"dev"
:
true
}
}
},
"serialize-javascript"
:
{
"version"
:
"6.0.0"
,
"resolved"
:
"https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz"
,
"integrity"
:
"sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag=="
,
"requires"
:
{
"randombytes"
:
"^2.1.0"
}
},
"serve-static"
:
{
"version"
:
"1.14.1"
,
"resolved"
:
"https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz"
,
"integrity"
:
"sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg=="
,
"dev"
:
true
,
"requires"
:
{
"encodeurl"
:
"~1.0.2"
,
"escape-html"
:
"~1.0.3"
,
"parseurl"
:
"~1.3.3"
,
"send"
:
"0.17.1"
}
},
"set-blocking"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz"
,
"integrity"
:
"sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
,
"dev"
:
true
,
"optional"
:
true
},
"setprototypeof"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz"
,
"integrity"
:
"sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
,
"dev"
:
true
},
"should"
:
{
"version"
:
"13.2.3"
,
"resolved"
:
"https://registry.npmjs.org/should/-/should-13.2.3.tgz"
,
"integrity"
:
"sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ=="
,
"dev"
:
true
,
"requires"
:
{
"should-equal"
:
"^2.0.0"
,
"should-format"
:
"^3.0.3"
,
"should-type"
:
"^1.4.0"
,
"should-type-adaptors"
:
"^1.0.1"
,
"should-util"
:
"^1.0.0"
}
},
"should-equal"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz"
,
"integrity"
:
"sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA=="
,
"dev"
:
true
,
"requires"
:
{
"should-type"
:
"^1.4.0"
}
},
"should-format"
:
{
"version"
:
"3.0.3"
,
"resolved"
:
"https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz"
,
"integrity"
:
"sha1-m/yPdPo5IFxT04w01xcwPidxJPE="
,
"dev"
:
true
,
"requires"
:
{
"should-type"
:
"^1.3.0"
,
"should-type-adaptors"
:
"^1.0.1"
}
},
"should-sinon"
:
{
"version"
:
"0.0.6"
,
"resolved"
:
"https://registry.npmjs.org/should-sinon/-/should-sinon-0.0.6.tgz"
,
"integrity"
:
"sha512-ScBOH5uW5QVFaONmUnIXANSR6z5B8IKzEmBP3HE5sPOCDuZ88oTMdUdnKoCVQdLcCIrRrhRLPS5YT+7H40a04g=="
,
"dev"
:
true
},
"should-type"
:
{
"version"
:
"1.4.0"
,
"resolved"
:
"https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz"
,
"integrity"
:
"sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM="
,
"dev"
:
true
},
"should-type-adaptors"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz"
,
"integrity"
:
"sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA=="
,
"dev"
:
true
,
"requires"
:
{
"should-type"
:
"^1.3.0"
,
"should-util"
:
"^1.0.0"
}
},
"should-util"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz"
,
"integrity"
:
"sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g=="
,
"dev"
:
true
},
"signal-exit"
:
{
"version"
:
"3.0.6"
,
"resolved"
:
"https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz"
,
"integrity"
:
"sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ=="
,
"dev"
:
true
,
"optional"
:
true
},
"sinon"
:
{
"version"
:
"9.2.4"
,
"resolved"
:
"https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz"
,
"integrity"
:
"sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg=="
,
"dev"
:
true
,
"requires"
:
{
"@sinonjs/commons"
:
"^1.8.1"
,
"@sinonjs/fake-timers"
:
"^6.0.1"
,
"@sinonjs/samsam"
:
"^5.3.1"
,
"diff"
:
"^4.0.2"
,
"nise"
:
"^4.0.4"
,
"supports-color"
:
"^7.1.0"
},
"dependencies"
:
{
"has-flag"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
,
"integrity"
:
"sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
,
"dev"
:
true
},
"supports-color"
:
{
"version"
:
"7.2.0"
,
"resolved"
:
"https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
,
"integrity"
:
"sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="
,
"dev"
:
true
,
"requires"
:
{
"has-flag"
:
"^4.0.0"
}
}
}
},
"spdx-correct"
:
{
"version"
:
"3.1.1"
,
"resolved"
:
"https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz"
,
"integrity"
:
"sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w=="
,
"dev"
:
true
,
"requires"
:
{
"spdx-expression-parse"
:
"^3.0.0"
,
"spdx-license-ids"
:
"^3.0.0"
}
},
"spdx-exceptions"
:
{
"version"
:
"2.3.0"
,
"resolved"
:
"https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz"
,
"integrity"
:
"sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
,
"dev"
:
true
},
"spdx-expression-parse"
:
{
"version"
:
"3.0.1"
,
"resolved"
:
"https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz"
,
"integrity"
:
"sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q=="
,
"dev"
:
true
,
"requires"
:
{
"spdx-exceptions"
:
"^2.1.0"
,
"spdx-license-ids"
:
"^3.0.0"
}
},
"spdx-license-ids"
:
{
"version"
:
"3.0.11"
,
"resolved"
:
"https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz"
,
"integrity"
:
"sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g=="
,
"dev"
:
true
},
"split2"
:
{
"version"
:
"3.2.2"
,
"resolved"
:
"https://registry.npmjs.org/split2/-/split2-3.2.2.tgz"
,
"integrity"
:
"sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg=="
,
"dev"
:
true
,
"requires"
:
{
"readable-stream"
:
"^3.0.0"
}
},
"sprintf-js"
:
{
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"
,
"integrity"
:
"sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
,
"dev"
:
true
},
"statuses"
:
{
"version"
:
"1.5.0"
,
"resolved"
:
"https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"
,
"integrity"
:
"sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
,
"dev"
:
true
},
"stoppable"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz"
,
"integrity"
:
"sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw=="
,
"dev"
:
true
},
"stream-shift"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz"
,
"integrity"
:
"sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
,
"dev"
:
true
},
"streamsearch"
:
{
"version"
:
"0.1.2"
,
"resolved"
:
"https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz"
,
"integrity"
:
"sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
,
"dev"
:
true
},
"string-width"
:
{
"version"
:
"4.2.3"
,
"resolved"
:
"https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
,
"integrity"
:
"sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="
,
"requires"
:
{
"emoji-regex"
:
"^8.0.0"
,
"is-fullwidth-code-point"
:
"^3.0.0"
,
"strip-ansi"
:
"^6.0.1"
}
},
"string_decoder"
:
{
"version"
:
"1.3.0"
,
"resolved"
:
"https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz"
,
"integrity"
:
"sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="
,
"dev"
:
true
,
"requires"
:
{
"safe-buffer"
:
"~5.2.0"
}
},
"strip-ansi"
:
{
"version"
:
"6.0.1"
,
"resolved"
:
"https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
,
"integrity"
:
"sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="
,
"requires"
:
{
"ansi-regex"
:
"^5.0.1"
}
},
"strip-json-comments"
:
{
"version"
:
"3.1.1"
,
"resolved"
:
"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
,
"integrity"
:
"sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
},
"superagent"
:
{
"version"
:
"3.8.3"
,
"resolved"
:
"https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz"
,
"integrity"
:
"sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA=="
,
"dev"
:
true
,
"requires"
:
{
"component-emitter"
:
"^1.2.0"
,
"cookiejar"
:
"^2.1.0"
,
"debug"
:
"^3.1.0"
,
"extend"
:
"^3.0.0"
,
"form-data"
:
"^2.3.1"
,
"formidable"
:
"^1.2.0"
,
"methods"
:
"^1.1.1"
,
"mime"
:
"^1.4.1"
,
"qs"
:
"^6.5.1"
,
"readable-stream"
:
"^2.3.5"
},
"dependencies"
:
{
"debug"
:
{
"version"
:
"3.2.7"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
,
"integrity"
:
"sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="
,
"dev"
:
true
,
"requires"
:
{
"ms"
:
"^2.1.1"
}
},
"form-data"
:
{
"version"
:
"2.5.1"
,
"resolved"
:
"https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz"
,
"integrity"
:
"sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA=="
,
"dev"
:
true
,
"requires"
:
{
"asynckit"
:
"^0.4.0"
,
"combined-stream"
:
"^1.0.6"
,
"mime-types"
:
"^2.1.12"
}
},
"isarray"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
,
"integrity"
:
"sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
,
"dev"
:
true
},
"mime"
:
{
"version"
:
"1.6.0"
,
"resolved"
:
"https://registry.npmjs.org/mime/-/mime-1.6.0.tgz"
,
"integrity"
:
"sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
,
"dev"
:
true
},
"readable-stream"
:
{
"version"
:
"2.3.7"
,
"resolved"
:
"https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz"
,
"integrity"
:
"sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw=="
,
"dev"
:
true
,
"requires"
:
{
"core-util-is"
:
"~1.0.0"
,
"inherits"
:
"~2.0.3"
,
"isarray"
:
"~1.0.0"
,
"process-nextick-args"
:
"~2.0.0"
,
"safe-buffer"
:
"~5.1.1"
,
"string_decoder"
:
"~1.1.1"
,
"util-deprecate"
:
"~1.0.1"
}
},
"safe-buffer"
:
{
"version"
:
"5.1.2"
,
"resolved"
:
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
,
"integrity"
:
"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
,
"dev"
:
true
},
"string_decoder"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"
,
"integrity"
:
"sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="
,
"dev"
:
true
,
"requires"
:
{
"safe-buffer"
:
"~5.1.0"
}
}
}
},
"supertest"
:
{
"version"
:
"4.0.2"
,
"resolved"
:
"https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz"
,
"integrity"
:
"sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ=="
,
"dev"
:
true
,
"requires"
:
{
"methods"
:
"^1.1.2"
,
"superagent"
:
"^3.8.3"
}
},
"supports-color"
:
{
"version"
:
"5.5.0"
,
"resolved"
:
"https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"
,
"integrity"
:
"sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="
,
"dev"
:
true
,
"requires"
:
{
"has-flag"
:
"^3.0.0"
}
},
"tar"
:
{
"version"
:
"6.1.11"
,
"resolved"
:
"https://registry.npmjs.org/tar/-/tar-6.1.11.tgz"
,
"integrity"
:
"sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA=="
,
"dev"
:
true
,
"requires"
:
{
"chownr"
:
"^2.0.0"
,
"fs-minipass"
:
"^2.0.0"
,
"minipass"
:
"^3.0.0"
,
"minizlib"
:
"^2.1.1"
,
"mkdirp"
:
"^1.0.3"
,
"yallist"
:
"^4.0.0"
}
},
"to-regex-range"
:
{
"version"
:
"5.0.1"
,
"resolved"
:
"https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
,
"integrity"
:
"sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="
,
"requires"
:
{
"is-number"
:
"^7.0.0"
}
},
"toidentifier"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz"
,
"integrity"
:
"sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
,
"dev"
:
true
},
"tough-cookie"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz"
,
"integrity"
:
"sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg=="
,
"dev"
:
true
,
"requires"
:
{
"psl"
:
"^1.1.33"
,
"punycode"
:
"^2.1.1"
,
"universalify"
:
"^0.1.2"
},
"dependencies"
:
{
"universalify"
:
{
"version"
:
"0.1.2"
,
"resolved"
:
"https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz"
,
"integrity"
:
"sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
,
"dev"
:
true
}
}
},
"tr46"
:
{
"version"
:
"0.0.3"
,
"resolved"
:
"https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz"
,
"integrity"
:
"sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
,
"dev"
:
true
,
"optional"
:
true
},
"tslib"
:
{
"version"
:
"2.3.1"
,
"resolved"
:
"https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz"
,
"integrity"
:
"sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
,
"dev"
:
true
},
"type-detect"
:
{
"version"
:
"4.0.8"
,
"resolved"
:
"https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz"
,
"integrity"
:
"sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="
,
"dev"
:
true
},
"type-fest"
:
{
"version"
:
"0.8.1"
,
"resolved"
:
"https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz"
,
"integrity"
:
"sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
,
"dev"
:
true
},
"type-is"
:
{
"version"
:
"1.6.18"
,
"resolved"
:
"https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"
,
"integrity"
:
"sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="
,
"dev"
:
true
,
"requires"
:
{
"media-typer"
:
"0.3.0"
,
"mime-types"
:
"~2.1.24"
}
},
"typedarray"
:
{
"version"
:
"0.0.6"
,
"resolved"
:
"https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
,
"integrity"
:
"sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
,
"dev"
:
true
},
"uglify-js"
:
{
"version"
:
"3.14.4"
,
"resolved"
:
"https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.4.tgz"
,
"integrity"
:
"sha512-AbiSR44J0GoCeV81+oxcy/jDOElO2Bx3d0MfQCUShq7JRXaM4KtQopZsq2vFv8bCq2yMaGrw1FgygUd03RyRDA=="
,
"dev"
:
true
},
"uid-safe"
:
{
"version"
:
"2.1.5"
,
"resolved"
:
"https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz"
,
"integrity"
:
"sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA=="
,
"dev"
:
true
,
"requires"
:
{
"random-bytes"
:
"~1.0.0"
}
},
"uid2"
:
{
"version"
:
"0.0.4"
,
"resolved"
:
"https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz"
,
"integrity"
:
"sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA=="
,
"dev"
:
true
},
"universalify"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz"
,
"integrity"
:
"sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
,
"dev"
:
true
},
"unpipe"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
,
"integrity"
:
"sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
,
"dev"
:
true
},
"uri-js"
:
{
"version"
:
"4.4.1"
,
"resolved"
:
"https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"
,
"integrity"
:
"sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="
,
"dev"
:
true
,
"requires"
:
{
"punycode"
:
"^2.1.0"
}
},
"util-deprecate"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
,
"integrity"
:
"sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
,
"dev"
:
true
},
"utils-merge"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz"
,
"integrity"
:
"sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
,
"dev"
:
true
},
"uuid"
:
{
"version"
:
"8.3.2"
,
"resolved"
:
"https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz"
,
"integrity"
:
"sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
,
"dev"
:
true
},
"validate-npm-package-license"
:
{
"version"
:
"3.0.4"
,
"resolved"
:
"https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz"
,
"integrity"
:
"sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew=="
,
"dev"
:
true
,
"requires"
:
{
"spdx-correct"
:
"^3.0.0"
,
"spdx-expression-parse"
:
"^3.0.0"
}
},
"vary"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
,
"integrity"
:
"sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
,
"dev"
:
true
},
"webidl-conversions"
:
{
"version"
:
"3.0.1"
,
"resolved"
:
"https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz"
,
"integrity"
:
"sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
,
"dev"
:
true
,
"optional"
:
true
},
"whatwg-url"
:
{
"version"
:
"5.0.0"
,
"resolved"
:
"https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz"
,
"integrity"
:
"sha1-lmRU6HZUYuN2RNNib2dCzotwll0="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"tr46"
:
"~0.0.3"
,
"webidl-conversions"
:
"^3.0.0"
}
},
"which"
:
{
"version"
:
"2.0.2"
,
"resolved"
:
"https://registry.npmjs.org/which/-/which-2.0.2.tgz"
,
"integrity"
:
"sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="
,
"requires"
:
{
"isexe"
:
"^2.0.0"
}
},
"wide-align"
:
{
"version"
:
"1.1.5"
,
"resolved"
:
"https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz"
,
"integrity"
:
"sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"string-width"
:
"^1.0.2 || 2 || 3 || 4"
}
},
"workerpool"
:
{
"version"
:
"6.1.5"
,
"resolved"
:
"https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz"
,
"integrity"
:
"sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw=="
},
"wrap-ansi"
:
{
"version"
:
"7.0.0"
,
"resolved"
:
"https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"
,
"integrity"
:
"sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="
,
"requires"
:
{
"ansi-styles"
:
"^4.0.0"
,
"string-width"
:
"^4.1.0"
,
"strip-ansi"
:
"^6.0.0"
},
"dependencies"
:
{
"ansi-styles"
:
{
"version"
:
"4.3.0"
,
"resolved"
:
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
,
"integrity"
:
"sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
,
"requires"
:
{
"color-convert"
:
"^2.0.1"
}
},
"color-convert"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
,
"integrity"
:
"sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="
,
"requires"
:
{
"color-name"
:
"~1.1.4"
}
},
"color-name"
:
{
"version"
:
"1.1.4"
,
"resolved"
:
"https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
,
"integrity"
:
"sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
}
}
},
"wrappy"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
,
"integrity"
:
"sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"ws"
:
{
"version"
:
"7.5.1"
,
"resolved"
:
"https://registry.npmjs.org/ws/-/ws-7.5.1.tgz"
,
"integrity"
:
"sha512-2c6faOUH/nhoQN6abwMloF7Iyl0ZS2E9HGtsiLrWn0zOOMWlhtDmdf/uihDt6jnuCxgtwGBNy6Onsoy2s2O2Ow=="
,
"dev"
:
true
},
"xml2js"
:
{
"version"
:
"0.4.23"
,
"resolved"
:
"https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz"
,
"integrity"
:
"sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug=="
,
"dev"
:
true
,
"requires"
:
{
"sax"
:
">=0.6.0"
,
"xmlbuilder"
:
"~11.0.0"
}
},
"xmlbuilder"
:
{
"version"
:
"11.0.1"
,
"resolved"
:
"https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz"
,
"integrity"
:
"sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
,
"dev"
:
true
},
"xtend"
:
{
"version"
:
"4.0.2"
,
"resolved"
:
"https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"
,
"integrity"
:
"sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
,
"dev"
:
true
},
"y18n"
:
{
"version"
:
"5.0.8"
,
"resolved"
:
"https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz"
,
"integrity"
:
"sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
},
"yallist"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
,
"integrity"
:
"sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
,
"dev"
:
true
},
"yargs"
:
{
"version"
:
"16.2.0"
,
"resolved"
:
"https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz"
,
"integrity"
:
"sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw=="
,
"requires"
:
{
"cliui"
:
"^7.0.2"
,
"escalade"
:
"^3.1.1"
,
"get-caller-file"
:
"^2.0.5"
,
"require-directory"
:
"^2.1.1"
,
"string-width"
:
"^4.2.0"
,
"y18n"
:
"^5.0.5"
,
"yargs-parser"
:
"^20.2.2"
}
},
"yargs-parser"
:
{
"version"
:
"20.2.4"
,
"resolved"
:
"https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz"
,
"integrity"
:
"sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA=="
},
"yargs-unparser"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz"
,
"integrity"
:
"sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA=="
,
"requires"
:
{
"camelcase"
:
"^6.0.0"
,
"decamelize"
:
"^4.0.0"
,
"flat"
:
"^5.0.2"
,
"is-plain-obj"
:
"^2.1.0"
}
},
"yocto-queue"
:
{
"version"
:
"0.1.0"
,
"resolved"
:
"https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
,
"integrity"
:
"sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
}
}
}
src/connector/node-red-contrib-tdengine/package.json
0 → 100644
浏览文件 @
ac423f56
{
"name"
:
"node-red-contrib-tdengine"
,
"version"
:
"0.0.2"
,
"description"
:
""
,
"main"
:
"tdengine.js"
,
"repository"
:
{
"type"
:
"git"
,
"url"
:
"git+https://github.com/kevinpan45/node-red-contrib-tdengine.git"
},
"author"
:
"kevinpan45@163.com"
,
"license"
:
"ISC"
,
"dependencies"
:
{
"axios"
:
"^0.24.0"
,
"mocha"
:
"^9.1.3"
},
"node-red"
:
{
"nodes"
:
{
"tdengine"
:
"tdengine.js"
}
},
"keywords"
:
[
"node-red"
,
"tdengine"
],
"devDependencies"
:
{
"node-red"
:
"^2.1.4"
,
"node-red-node-test-helper"
:
"^0.2.7"
}
}
src/connector/node-red-contrib-tdengine/tdengine.html
0 → 100644
浏览文件 @
ac423f56
<script
type=
"text/javascript"
>
"
use strict
"
;
/*global RED*/
RED
.
nodes
.
registerType
(
'
taos-config
'
,
{
category
:
'
config
'
,
defaults
:
{
host
:
{
value
:
"
localhost
"
,
required
:
true
},
port
:
{
value
:
"
6030
"
,
required
:
true
},
username
:
{
value
:
""
,
required
:
false
},
password
:
{
value
:
""
,
required
:
false
}
},
label
:
function
()
{
return
this
.
host
||
"
TDEngine host
"
;
}
});
</script>
<script
type=
"text/x-red"
data-template-name=
"taos-config"
>
<
div
class
=
"
form-row
"
>
<
label
for
=
"
node-config-input-host
"
><
i
class
=
"
fa fa-server
"
><
/i> Host</
label
>
<
input
type
=
"
text
"
id
=
"
node-config-input-host
"
>
<
/div
>
<
div
class
=
"
form-row
"
>
<
label
for
=
"
node-config-input-port
"
><
i
class
=
"
fa fa-server
"
><
/i> Port</
label
>
<
input
type
=
"
text
"
id
=
"
node-config-input-port
"
>
<
/div
>
<
div
class
=
"
form-row
"
>
<
label
for
=
"
node-config-input-username
"
><
i
class
=
"
fa fa-server
"
><
/i> User Name</
label
>
<
input
type
=
"
text
"
id
=
"
node-config-input-username
"
>
<
/div
>
<
div
class
=
"
form-row
"
>
<
label
for
=
"
node-config-input-password
"
><
i
class
=
"
fa fa-server
"
><
/i> Password</
label
>
<
input
type
=
"
text
"
id
=
"
node-config-input-password
"
>
<
/div
>
</script>
<script
type=
"text/javascript"
>
/*global RED*/
RED
.
nodes
.
registerType
(
'
taos-query
'
,
{
category
:
'
TDEngine
'
,
inputs
:
1
,
outputs
:
1
,
color
:
"
#ffffff
"
,
paletteLabel
:
"
taos query
"
,
defaults
:
{
server
:
{
value
:
""
,
type
:
"
taos-config
"
},
database
:
{
value
:
""
},
sql
:
{
value
:
""
}
},
label
:
function
()
{
return
this
.
name
||
"
taos
"
+
this
.
database
;
}
});
</script>
<script
type=
"text/x-red"
data-template-name=
"taos-query"
>
<
div
class
=
"
form-row
"
>
<
label
for
=
"
node-input-server
"
><
i
class
=
"
fa fa-globe
"
><
/i> Server</
label
>
<
input
type
=
"
text
"
id
=
"
node-input-server
"
placeholder
=
"
Server
"
>
<
/div
>
<
div
class
=
"
form-row
"
>
<
label
for
=
"
node-input-database
"
><
i
class
=
"
fa fa-tag
"
><
/i> Database</
label
>
<
input
type
=
"
text
"
id
=
"
node-input-database
"
placeholder
=
"
Database
"
>
<
/div
>
</script>
<script
type=
"text/x-red"
data-help-name=
"taos-query"
>
<
p
>
TDEngine
Query
<
/p
>
<
p
>
Execute
SQL
on
remote
TDEngine
server
by
restful
API
<
/p
>
</script>
\ No newline at end of file
src/connector/node-red-contrib-tdengine/tdengine.js
0 → 100644
浏览文件 @
ac423f56
module
.
exports
=
function
(
RED
)
{
"
use strict
"
;
const
axios
=
require
(
'
axios
'
);
function
TaosConfig
(
n
)
{
RED
.
nodes
.
createNode
(
this
,
n
);
this
.
host
=
n
.
host
;
this
.
port
=
n
.
port
;
this
.
username
=
n
.
username
;
this
.
password
=
n
.
password
;
}
RED
.
nodes
.
registerType
(
"
taos-config
"
,
TaosConfig
);
function
TaosQuery
(
n
)
{
RED
.
nodes
.
createNode
(
this
,
n
);
this
.
server
=
RED
.
nodes
.
getNode
(
n
.
server
);
this
.
database
=
n
.
database
;
var
node
=
this
;
node
.
on
(
"
close
"
,
function
(
done
)
{
node
.
status
({});
client
=
null
;
done
();
});
node
.
on
(
"
input
"
,
async
function
(
msg
,
send
,
done
)
{
send
=
send
||
function
()
{
node
.
send
.
apply
(
node
,
arguments
)
}
done
=
done
||
function
(
err
)
{
if
(
err
)
node
.
error
(
err
,
msg
);
}
let
sql
=
msg
.
payload
;
if
(
!
msg
.
payload
||
msg
.
payload
==
""
)
{
throw
new
Error
(
"
Execute SQL must be set.
"
);
}
try
{
msg
.
payload
=
await
query
(
this
.
server
,
sql
);
send
(
msg
);
done
();
}
catch
(
error
)
{
done
(
error
);
}
});
}
RED
.
nodes
.
registerType
(
"
taos-query
"
,
TaosQuery
);
function
query
(
server
,
sql
)
{
console
.
log
(
"
Start to execute SQL :
"
+
sql
);
let
url
=
generateUrl
(
server
);
return
axios
.
post
(
url
,
sql
,
{
headers
:
{
'
Authorization
'
:
token
(
server
)
}
}).
then
(
function
(
response
)
{
console
.
log
(
'
Get http response from taos :
'
+
response
.
data
.
data
);
return
response
.
data
.
data
;
}).
catch
(
function
(
error
)
{
console
.
error
(
"
Request Failed
"
+
e
);
throw
new
Error
(
response
.
desc
);
});
}
function
generateUrl
(
server
)
{
return
"
http://
"
+
server
.
host
+
"
:
"
+
server
.
port
+
'
/rest/sql
'
;
}
function
token
(
server
)
{
return
'
Basic
'
+
Buffer
.
from
(
server
.
username
+
"
:
"
+
server
.
password
).
toString
(
'
base64
'
)
}
};
src/kit/shell/src/shellEngine.c
浏览文件 @
ac423f56
...
...
@@ -448,9 +448,29 @@ static char* formatTimestamp(char* buf, int64_t val, int precision) {
tt = 0;
}
*/
#ifdef WINDOWS
if
(
tt
<
0
)
tt
=
0
;
if
(
tt
<
0
)
{
SYSTEMTIME
a
=
{
1970
,
1
,
5
,
1
,
0
,
0
,
0
,
0
};
// SYSTEMTIME struct support 1601-01-01. set 1970 to compatible with Epoch time.
FILETIME
b
;
// unit is 100ns
ULARGE_INTEGER
c
;
SystemTimeToFileTime
(
&
a
,
&
b
);
c
.
LowPart
=
b
.
dwLowDateTime
;
c
.
HighPart
=
b
.
dwHighDateTime
;
c
.
QuadPart
+=
tt
*
10000000
;
b
.
dwLowDateTime
=
c
.
LowPart
;
b
.
dwHighDateTime
=
c
.
HighPart
;
FileTimeToLocalFileTime
(
&
b
,
&
b
);
FileTimeToSystemTime
(
&
b
,
&
a
);
int
pos
=
sprintf
(
buf
,
"%02d-%02d-%02d %02d:%02d:%02d"
,
a
.
wYear
,
a
.
wMonth
,
a
.
wDay
,
a
.
wHour
,
a
.
wMinute
,
a
.
wSecond
);
if
(
precision
==
TSDB_TIME_PRECISION_NANO
)
{
sprintf
(
buf
+
pos
,
".%09d"
,
ms
);
}
else
if
(
precision
==
TSDB_TIME_PRECISION_MICRO
)
{
sprintf
(
buf
+
pos
,
".%06d"
,
ms
);
}
else
{
sprintf
(
buf
+
pos
,
".%03d"
,
ms
);
}
return
buf
;
}
#endif
if
(
tt
<=
0
&&
ms
<
0
)
{
tt
--
;
...
...
src/util/src/tlosertree.c
浏览文件 @
ac423f56
...
...
@@ -96,6 +96,11 @@ void tLoserTreeAdjust(SLoserTreeInfo* pTree, int32_t idx) {
return
;
}
/* there is a risk
* there should be pTree->comparFn(&pCur->index, &kLeaf.index, pTree->param)
* but the first element in SLoserTreeNode is int32_t
* and the comparFn get data as *(int32_t*)(void *), so it is just ok.
*/
int32_t
ret
=
pTree
->
comparFn
(
pCur
,
&
kLeaf
,
pTree
->
param
);
if
(
ret
<
0
)
{
SLoserTreeNode
t
=
pTree
->
pNode
[
parentId
];
...
...
tests/develop-test/0-others/TD-12435.py
0 → 100644
浏览文件 @
ac423f56
###################################################################
# Copyright (c) 2016 by TAOS Technologies, Inc.
# All rights reserved.
#
# This file is proprietary and confidential to TAOS Technologies.
# No part of this file may be reproduced, db_test.stored, transmitted,
# disclosed or used in any form or by any means other than as
# expressly provided by the written permission from Jianhui Tao
#
###################################################################
# -*- coding: utf-8 -*-
import
sys
import
taos
from
util.log
import
tdLog
from
util.cases
import
tdCases
from
util.sql
import
tdSql
import
json
class
TDTestCase
:
def
caseDescription
(
self
):
'''
case1: [TD-12435] fix ` identifier in table column name if using create table as subquery
'''
return
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
def
run
(
self
):
tdSql
.
prepare
()
print
(
"============== STEP 1 ===== prepare data & validate json string"
)
tdSql
.
execute
(
"create table if not exists st(ts timestamp, dataInt int)"
)
tdSql
.
execute
(
"create table st_from_sub as select avg(`dataInt`) from st interval(1m)"
)
tdSql
.
query
(
"describe st_from_sub"
)
tdSql
.
checkData
(
1
,
0
,
'avg__dataInt__'
)
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/develop-test/3-connectors/go/test.sh
浏览文件 @
ac423f56
...
...
@@ -18,3 +18,6 @@ sleep 10
cd
../../
WKC
=
`
pwd
`
git clone git@github.com:taosdata/driver-go.git
--branch
develop
--single-branch
--depth
1
cd
driver-go
go
test
-v
./...
\ No newline at end of file
tests/develop-test/fulltest-others.sh
浏览文件 @
ac423f56
python3 ./test.py
-f
0-others/json_tag.py
\ No newline at end of file
python3 ./test.py
-f
0-others/json_tag.py
python3 ./test.py
-f
0-others/TD-12435.py
\ No newline at end of file
tests/examples/JDBC/taosdemo/src/main/resources/insert.json
浏览文件 @
ac423f56
...
...
@@ -16,7 +16,7 @@
"cache"
:
16
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/dockerCluster/insert.json
浏览文件 @
ac423f56
...
...
@@ -18,7 +18,7 @@
"cache"
:
16
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/manualTest/TD-5114/insertDataDb3Replica2.json
浏览文件 @
ac423f56
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/query/nestedQuery/insertData.json
浏览文件 @
ac423f56
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/tsdb/insertDataDb1.json
浏览文件 @
ac423f56
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/tsdb/insertDataDb1Replica2.json
浏览文件 @
ac423f56
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/tsdb/insertDataDb2.json
浏览文件 @
ac423f56
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/tsdb/insertDataDb2Newstab.json
浏览文件 @
ac423f56
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/tsdb/insertDataDb2NewstabReplica2.json
浏览文件 @
ac423f56
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/tsdb/insertDataDb2Replica2.json
浏览文件 @
ac423f56
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/wal/insertDataDb1.json
浏览文件 @
ac423f56
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/wal/insertDataDb1Replica2.json
浏览文件 @
ac423f56
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/wal/insertDataDb2.json
浏览文件 @
ac423f56
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/wal/insertDataDb2Newstab.json
浏览文件 @
ac423f56
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/wal/insertDataDb2NewstabReplica2.json
浏览文件 @
ac423f56
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/wal/insertDataDb2Replica2.json
浏览文件 @
ac423f56
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/system-test/1-insert/Null_tag_Line_insert.py
0 → 100644
浏览文件 @
ac423f56
###################################################################
# Copyright (c) 2021 by TAOS Technologies, Inc.
# All rights reserved.
#
# This file is proprietary and confidential to TAOS Technologies.
# No part of this file may be reproduced, stored, transmitted,
# disclosed or used in any form or by any means other than as
# expressly provided by the written permission from Jianhui Tao
#
###################################################################
# -*- coding: utf-8 -*-
import
sys
,
os
import
time
import
taos
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
from
util.dnodes
import
*
from
util.types
import
TDSmlProtocolType
,
TDSmlTimestampType
class
TDTestCase
():
updatecfgDict
=
{
"smlTagNullName"
,
"setname"
}
# add extra client params
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
self
.
_conn
=
conn
def
caseDescription
(
self
):
'''
case1 <wenzhouwww>: [TD-11436] : this is an test case for line proto no tag insert into TDengine .
'''
return
def
getBuildPath
(
self
,
tool
=
"taosd"
):
buildPath
=
""
selfPath
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
if
(
"community"
in
selfPath
):
projPath
=
selfPath
[:
selfPath
.
find
(
"community"
)]
else
:
projPath
=
selfPath
[:
selfPath
.
find
(
"tests"
)]
for
root
,
dirs
,
files
in
os
.
walk
(
projPath
):
if
((
tool
)
in
files
):
rootRealPath
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
root
))
if
(
"packaging"
not
in
rootRealPath
):
buildPath
=
root
[:
len
(
root
)
-
len
(
"/build/bin"
)]
break
return
buildPath
def
no_tag_single_line_insert
(
self
,
name
):
self
.
name
=
name
lines3
=
[
"sti c1=4i64,c3=L
\"
passit
\"
,c2=false,c4=4f64 1626006833639000000"
,
"sti c1=3i64,c3=L
\"
passitagin
\"
,c2=true,c4=5f64,c5=5f64 1626006833640000000"
]
code
=
self
.
_conn
.
schemaless_insert
(
lines3
,
TDSmlProtocolType
.
LINE
.
value
,
TDSmlTimestampType
.
NANO_SECOND
.
value
)
print
(
"schemaless_insert result {}"
.
format
(
code
))
tdSql
.
query
(
'select * from sti'
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
'select tbname from sti'
)
tdSql
.
checkRows
(
1
)
col_names
=
tdSql
.
getResult
(
"describe sti"
)
if
col_names
[
-
1
][
0
]
==
self
.
name
:
tdLog
.
info
(
" ====================get expected tag name ==============="
)
else
:
tdLog
.
exit
(
"======================error occured for null tag=================="
)
def
no_tag_mulit_line_insert
(
self
,
name
):
lines3
=
[
"sti c1=4i64,c3=L
\"
passit
\"
,c2=false,c4=4f64 1626006833639000000"
,
"sti c1=3i64,c3=L
\"
passitagin
\"
,c2=true,c4=5f64,c5=5f64 1626006833640000000"
]
code
=
self
.
_conn
.
schemaless_insert
(
lines3
,
TDSmlProtocolType
.
LINE
.
value
,
TDSmlTimestampType
.
NANO_SECOND
.
value
)
print
(
"schemaless_insert result {}"
.
format
(
code
))
tdSql
.
query
(
'select * from sti'
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
'select tbname from sti'
)
tdSql
.
checkRows
(
1
)
col_names
=
tdSql
.
getResult
(
"describe sti"
)
if
col_names
[
-
1
][
0
]
==
self
.
name
:
tdLog
.
info
(
" ====================get expected tag name ==============="
)
else
:
tdLog
.
exit
(
"======================error occured for null tag=================="
)
def
part_tag_single_insert
(
self
,
name
):
lines5
=
[
"sti,t3=1 c1=4i64,c3=L
\"
passit
\"
,c2=false,c4=4f64 1626006833639050000"
,
"sti,t1=abc c1=3i64,c3=L
\"
passitagin
\"
,c2=true,c4=5f64,c5=5f64 1626006833640050000"
,
"sti,t2=abc c1=3i64,c3=L
\"
passitagin
\"
,c4=5f64,c5=5f64,c6=true 1626006833640050000"
]
code
=
self
.
_conn
.
schemaless_insert
([
lines5
[
0
]
],
TDSmlProtocolType
.
LINE
.
value
,
TDSmlTimestampType
.
NANO_SECOND
.
value
)
print
(
"schemaless_insert result {}"
.
format
(
code
))
code
=
self
.
_conn
.
schemaless_insert
([
lines5
[
1
]
],
TDSmlProtocolType
.
LINE
.
value
,
TDSmlTimestampType
.
NANO_SECOND
.
value
)
print
(
"schemaless_insert result {}"
.
format
(
code
))
code
=
self
.
_conn
.
schemaless_insert
([
lines5
[
2
]
],
TDSmlProtocolType
.
LINE
.
value
,
TDSmlTimestampType
.
NANO_SECOND
.
value
)
print
(
"schemaless_insert result {}"
.
format
(
code
))
tdSql
.
query
(
'select * from sti'
)
tdSql
.
checkRows
(
5
)
tdSql
.
checkData
(
4
,
3
,
None
)
tdSql
.
checkData
(
4
,
6
,
True
)
tdSql
.
checkData
(
2
,
8
,
"1"
)
tdSql
.
checkData
(
3
,
9
,
"abc"
)
tdSql
.
query
(
'select tbname from sti'
)
tdSql
.
checkRows
(
4
)
col_names
=
tdSql
.
getResult
(
"describe sti"
)
if
col_names
[
-
4
][
0
]
==
self
.
name
and
col_names
[
-
3
][
0
]
==
"t3"
and
col_names
[
-
2
][
0
]
==
"t1"
and
col_names
[
-
1
][
0
]
==
"t2"
:
tdLog
.
info
(
" ====================get expected tag name ==============="
)
else
:
tdLog
.
exit
(
"======================error occured for null tag=================="
)
def
part_tag_multi_insert
(
self
,
name
):
lines6
=
[
"str c1=4i64,c3=L
\"
passit
\"
,c2=false,c4=4f64 1626006833639000000"
,
"str,t1=abc c1=3i64,c3=L
\"
passitagin
\"
,c2=true,c4=5f64,c5=5f64 1626006833640000000"
,
"str,t2=abc c1=3i64,c3=L
\"
passitagin
\"
,c4=5f64,c5=5f64,c6=true 1626006833640000000"
]
code
=
self
.
_conn
.
schemaless_insert
(
lines6
,
TDSmlProtocolType
.
LINE
.
value
,
TDSmlTimestampType
.
NANO_SECOND
.
value
)
print
(
"schemaless_insert result {}"
.
format
(
code
))
tdSql
.
query
(
'select * from str'
)
tdSql
.
checkRows
(
3
)
tdSql
.
checkData
(
0
,
3
,
True
)
tdSql
.
checkData
(
1
,
3
,
None
)
tdSql
.
checkData
(
1
,
6
,
True
)
tdSql
.
checkData
(
0
,
8
,
"abc"
)
tdSql
.
checkData
(
1
,
9
,
"abc"
)
tdSql
.
query
(
'select tbname from str'
)
tdSql
.
checkRows
(
3
)
col_names
=
tdSql
.
getResult
(
"describe str"
)
if
col_names
[
-
3
][
0
]
==
self
.
name
and
col_names
[
-
2
][
0
]
==
"t1"
and
col_names
[
-
1
][
0
]
==
"t2"
:
tdLog
.
info
(
" ====================get expected tag name ==============="
)
else
:
tdLog
.
exit
(
"======================error occured for null tag=================="
)
def
run
(
self
):
print
(
"running {}"
.
format
(
__file__
))
tdSql
.
execute
(
"drop database if exists test"
)
tdSql
.
execute
(
"create database if not exists test precision 'us'"
)
tdSql
.
execute
(
'use test'
)
self
.
no_tag_single_line_insert
(
"_tag_null"
)
self
.
no_tag_mulit_line_insert
(
"_tag_null"
)
self
.
part_tag_single_insert
(
"_tag_null"
)
self
.
part_tag_multi_insert
(
"_tag_null"
)
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/system-test/3-connectors/c#/TDengineDriver/TDengineDriver.cs
0 → 100644
浏览文件 @
ac423f56
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using
System
;
using
System.Collections.Generic
;
using
System.Runtime.InteropServices
;
namespace
TDengineDriver
{
public
enum
TDengineDataType
{
TSDB_DATA_TYPE_NULL
=
0
,
// 1 bytes
TSDB_DATA_TYPE_BOOL
=
1
,
// 1 bytes
TSDB_DATA_TYPE_TINYINT
=
2
,
// 1 bytes
TSDB_DATA_TYPE_SMALLINT
=
3
,
// 2 bytes
TSDB_DATA_TYPE_INT
=
4
,
// 4 bytes
TSDB_DATA_TYPE_BIGINT
=
5
,
// 8 bytes
TSDB_DATA_TYPE_FLOAT
=
6
,
// 4 bytes
TSDB_DATA_TYPE_DOUBLE
=
7
,
// 8 bytes
TSDB_DATA_TYPE_BINARY
=
8
,
// string
TSDB_DATA_TYPE_TIMESTAMP
=
9
,
// 8 bytes
TSDB_DATA_TYPE_NCHAR
=
10
,
// unicode string
TSDB_DATA_TYPE_UTINYINT
=
11
,
// 1 byte
TSDB_DATA_TYPE_USMALLINT
=
12
,
// 2 bytes
TSDB_DATA_TYPE_UINT
=
13
,
// 4 bytes
TSDB_DATA_TYPE_UBIGINT
=
14
,
// 8 bytes
TSDB_DATA_TYPE_JSONTAG
=
15
//4096 bytes
}
public
enum
TDengineInitOption
{
TSDB_OPTION_LOCALE
=
0
,
TSDB_OPTION_CHARSET
=
1
,
TSDB_OPTION_TIMEZONE
=
2
,
TDDB_OPTION_CONFIGDIR
=
3
,
TDDB_OPTION_SHELL_ACTIVITY_TIMER
=
4
}
enum
TaosField
{
STRUCT_SIZE
=
68
,
NAME_LENGTH
=
65
,
TYPE_OFFSET
=
65
,
BYTES_OFFSET
=
66
,
}
public
class
TDengineMeta
{
public
string
name
;
public
short
size
;
public
byte
type
;
public
string
TypeName
()
{
switch
((
TDengineDataType
)
type
)
{
case
TDengineDataType
.
TSDB_DATA_TYPE_BOOL
:
return
"BOOL"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_TINYINT
:
return
"TINYINT"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_SMALLINT
:
return
"SMALLINT"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_INT
:
return
"INT"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_BIGINT
:
return
"BIGINT"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_UTINYINT
:
return
"TINYINT UNSIGNED"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_USMALLINT
:
return
"SMALLINT UNSIGNED"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_UINT
:
return
"INT UNSIGNED"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_UBIGINT
:
return
"BIGINT UNSIGNED"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_FLOAT
:
return
"FLOAT"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_DOUBLE
:
return
"DOUBLE"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_BINARY
:
return
"STRING"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_TIMESTAMP
:
return
"TIMESTAMP"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_NCHAR
:
return
"NCHAR"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_JSONTAG
:
return
"JSON"
;
default
:
return
"undefine"
;
}
}
}
[
StructLayout
(
LayoutKind
.
Sequential
,
CharSet
=
CharSet
.
Ansi
)]
public
struct
TAOS_BIND
{
// column type
public
int
buffer_type
;
// one column value
public
IntPtr
buffer
;
// unused
public
Int32
buffer_length
;
// actual value length in buffer
public
IntPtr
length
;
// indicates the column value is null or not
public
IntPtr
is_null
;
// unused
public
int
is_unsigned
;
// unused
public
IntPtr
error
;
public
Int64
u
;
public
uint
allocated
;
}
[
StructLayout
(
LayoutKind
.
Sequential
)]
public
struct
TAOS_MULTI_BIND
{
// column type
public
int
buffer_type
;
// array, one or more lines column value
public
IntPtr
buffer
;
//length of element in TAOS_MULTI_BIND.buffer (for binary and nchar it is the longest element's length)
public
ulong
buffer_length
;
//array, actual data length for each value
public
IntPtr
length
;
//array, indicates each column value is null or not
public
IntPtr
is_null
;
// line number, or the values number in buffer
public
int
num
;
}
public
class
TDengine
{
public
const
int
TSDB_CODE_SUCCESS
=
0
;
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_init"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
void
Init
();
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_cleanup"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
void
Cleanup
();
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_options"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
void
Options
(
int
option
,
string
value
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_connect"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
Connect
(
string
ip
,
string
user
,
string
password
,
string
db
,
short
port
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_errstr"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
private
IntPtr
taos_errstr
(
IntPtr
res
);
static
public
string
Error
(
IntPtr
res
)
{
IntPtr
errPtr
=
taos_errstr
(
res
);
return
Marshal
.
PtrToStringAnsi
(
errPtr
);
}
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_errno"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
ErrorNo
(
IntPtr
res
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_query"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
Query
(
IntPtr
conn
,
string
sqlstr
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_affected_rows"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
AffectRows
(
IntPtr
res
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_field_count"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
FieldCount
(
IntPtr
res
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_fetch_fields"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
private
IntPtr
taos_fetch_fields
(
IntPtr
res
);
static
public
List
<
TDengineMeta
>
FetchFields
(
IntPtr
res
)
{
// const int fieldSize = 68;
List
<
TDengineMeta
>
metas
=
new
List
<
TDengineMeta
>();
if
(
res
==
IntPtr
.
Zero
)
{
return
metas
;
}
int
fieldCount
=
FieldCount
(
res
);
IntPtr
fieldsPtr
=
taos_fetch_fields
(
res
);
for
(
int
i
=
0
;
i
<
fieldCount
;
++
i
)
{
int
offset
=
i
*
(
int
)
TaosField
.
STRUCT_SIZE
;
TDengineMeta
meta
=
new
TDengineMeta
();
meta
.
name
=
Marshal
.
PtrToStringAnsi
(
fieldsPtr
+
offset
);
meta
.
type
=
Marshal
.
ReadByte
(
fieldsPtr
+
offset
+
(
int
)
TaosField
.
TYPE_OFFSET
);
meta
.
size
=
Marshal
.
ReadInt16
(
fieldsPtr
+
offset
+
(
int
)
TaosField
.
BYTES_OFFSET
);
metas
.
Add
(
meta
);
}
return
metas
;
}
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_fetch_row"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
FetchRows
(
IntPtr
res
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_free_result"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
FreeResult
(
IntPtr
res
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_close"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
Close
(
IntPtr
taos
);
//get precision of restultset
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_result_precision"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
ResultPrecision
(
IntPtr
taos
);
//stmt APIs:
/// <summary>
/// init a TAOS_STMT object for later use.
/// </summary>
/// <param name="taos">a valid taos connection</param>
/// <returns>
/// Not NULL returned for success, NULL for failure. And it should be freed with taos_stmt_close.
/// </returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_init"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
StmtInit
(
IntPtr
taos
);
/// <summary>
/// prepare a sql statement,'sql' should be a valid INSERT/SELECT statement.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <param name="sql">sql string,used to bind parameters with</param>
/// <param name="length">no used</param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_prepare"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtPrepare
(
IntPtr
stmt
,
string
sql
);
/// <summary>
/// For INSERT only. Used to bind table name as a parmeter for the input stmt object.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <param name="name">table name you want to bind</param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_set_tbname"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtSetTbname
(
IntPtr
stmt
,
string
name
);
/// <summary>
/// For INSERT only.
/// Set a table name for binding table name as parameter. Only used for binding all tables
/// in one stable, user application must call 'loadTableInfo' API to load all table
/// meta before calling this API. If the table meta is not cached locally, it will return error.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <param name="name">table name which is belong to an stable</param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_set_sub_tbname"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtSetSubTbname
(
IntPtr
stmt
,
string
name
);
/// <summary>
/// For INSERT only.
/// set a table name for binding table name as parameter and tag values for all tag parameters.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <param name="name">use to set table name</param>
/// <param name="tags">
/// is an array contains all tag values,each item in the array represents a tag column's value.
/// the item number and sequence should keep consistence with that in stable tag definition.
/// </param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_set_tbname_tags"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtSetTbnameTags
(
IntPtr
stmt
,
string
name
,
TAOS_BIND
[]
tags
);
/// <summary>
/// For both INSERT and SELECT.
/// bind a whole line data.
/// The usage of structure TAOS_BIND is the same with MYSQL_BIND in MySQL.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <param name="bind">
/// points to an array contains the whole line data.
/// the item number and sequence should keep consistence with columns in sql statement.
/// </param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_bind_param"
,
CallingConvention
=
CallingConvention
.
Cdecl
,
SetLastError
=
true
)]
static
extern
public
int
StmtBindParam
(
IntPtr
stmt
,
TAOS_BIND
[]
bind
);
/// <summary>
/// bind a single column's data, INTERNAL used and for INSERT only.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <param name="bind">points to a column's data which could be the one or more lines. </param>
/// <param name="colIdx">the column's index in prepared sql statement, it starts from 0.</param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_bind_single_param_batch"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtBindSingleParamBatch
(
IntPtr
stmt
,
ref
TAOS_MULTI_BIND
bind
,
int
colIdx
);
/// <summary>
/// for INSERT only
/// bind one or multiple lines data. The parameter 'bind'
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <param name="bind">
/// points to an array contains one or more lines data.Each item in array represents a column's value(s),
/// the item number and sequence should keep consistence with columns in sql statement.
/// </param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_bind_param_batch"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtBindParamBatch
(
IntPtr
stmt
,
[
In
,
Out
]
TAOS_MULTI_BIND
[]
bind
);
/// <summary>
/// For INSERT only.
/// add all current bound parameters to batch process. Must be called after each call to
/// StmtBindParam/StmtBindSingleParamBatch, or all columns binds for one or more lines
/// with StmtBindSingleParamBatch. User application can call any bind parameter
/// API again to bind more data lines after calling to this API.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_add_batch"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtAddBatch
(
IntPtr
stmt
);
/// <summary>
/// actually execute the INSERT/SELECT sql statement.
/// User application can continue to bind new data after calling to this API.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <returns></returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_execute"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtExecute
(
IntPtr
stmt
);
/// <summary>
/// For SELECT only,getting the query result. User application should free it with API 'FreeResult' at the end.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <returns>Not NULL for success, NULL for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_use_result"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
StmtUseResult
(
IntPtr
stmt
);
/// <summary>
/// close STMT object and free resources.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_close"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtClose
(
IntPtr
stmt
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_load_table_info"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
/// <summary>
/// user application must call this API to load all tables meta,
/// </summary>
/// <param name="taos">taos connection</param>
/// <param name="tableList">tablelist</param>
/// <returns></returns>
static
extern
private
int
LoadTableInfoDll
(
IntPtr
taos
,
string
tableList
);
/// <summary>
/// user application call this API to load all tables meta,this method call the native
/// method LoadTableInfoDll.
/// this method must be called before StmtSetSubTbname(IntPtr stmt, string name);
/// </summary>
/// <param name="taos">taos connection</param>
/// <param name="tableList">tables need to load meta info are form in an array</param>
/// <returns></returns>
static
public
int
LoadTableInfo
(
IntPtr
taos
,
string
[]
tableList
)
{
string
listStr
=
string
.
Join
(
","
,
tableList
);
return
LoadTableInfoDll
(
taos
,
listStr
);
}
/// <summary>
/// get detail error message when got failure for any stmt API call. If not failure, the result
/// returned in this API is unknown.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <returns>piont the error message</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_errstr"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
private
IntPtr
StmtErrPtr
(
IntPtr
stmt
);
/// <summary>
/// get detail error message when got failure for any stmt API call. If not failure, the result
/// returned in this API is unknown.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <returns>error string</returns>
static
public
string
StmtErrorStr
(
IntPtr
stmt
)
{
IntPtr
stmtErrPrt
=
StmtErrPtr
(
stmt
);
return
Marshal
.
PtrToStringAnsi
(
stmtErrPrt
);
}
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_fetch_lengths"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
FetchLengths
(
IntPtr
taos
);
}
}
tests/system-test/3-connectors/c#/TDengineDriver/TDengineDriver.csproj
0 → 100644
浏览文件 @
ac423f56
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
tests/system-test/3-connectors/c#/TDengineDriver/TaosBind.cs
0 → 100644
浏览文件 @
ac423f56
using
System
;
using
System.Runtime.InteropServices
;
using
System.Text
;
namespace
TDengineDriver
{
/// <summary>
/// this class used to get an instance of struct of TAO_BIND or TAOS_MULTI_BIND
/// And the instance is corresponding with TDengine data type. For example, calling
/// "bindBinary" will return a TAOS_BIND object that is corresponding with TDengine's
/// binary type.
/// </summary>
public
class
TaosBind
{
public
static
TAOS_BIND
BindBool
(
bool
val
)
{
TAOS_BIND
bind
=
new
TAOS_BIND
();
byte
[]
boolByteArr
=
BitConverter
.
GetBytes
(
val
);
int
boolByteArrSize
=
Marshal
.
SizeOf
(
boolByteArr
[
0
])
*
boolByteArr
.
Length
;
IntPtr
bo
=
Marshal
.
AllocHGlobal
(
1
);
Marshal
.
Copy
(
boolByteArr
,
0
,
bo
,
boolByteArr
.
Length
);
int
length
=
sizeof
(
Boolean
);
IntPtr
lengPtr
=
Marshal
.
AllocHGlobal
(
sizeof
(
int
));
Marshal
.
WriteInt32
(
lengPtr
,
length
);
bind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_BOOL
;
bind
.
buffer
=
bo
;
bind
.
buffer_length
=
length
;
bind
.
length
=
lengPtr
;
bind
.
is_null
=
IntPtr
.
Zero
;
return
bind
;
}
public
static
TAOS_BIND
BindTinyInt
(
sbyte
val
)
{
TAOS_BIND
bind
=
new
TAOS_BIND
();
byte
[]
tinyIntByteArr
=
BitConverter
.
GetBytes
(
val
);
int
tinyIntByteArrSize
=
Marshal
.
SizeOf
(
tinyIntByteArr
[
0
])
*
tinyIntByteArr
.
Length
;
IntPtr
uManageTinyInt
=
Marshal
.
AllocHGlobal
(
tinyIntByteArrSize
);
Marshal
.
Copy
(
tinyIntByteArr
,
0
,
uManageTinyInt
,
tinyIntByteArr
.
Length
);
int
length
=
sizeof
(
sbyte
);
IntPtr
lengPtr
=
Marshal
.
AllocHGlobal
(
sizeof
(
int
));
Marshal
.
WriteInt32
(
lengPtr
,
length
);
bind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_TINYINT
;
bind
.
buffer
=
uManageTinyInt
;
bind
.
buffer_length
=
length
;
bind
.
length
=
lengPtr
;
bind
.
is_null
=
IntPtr
.
Zero
;
return
bind
;
}
public
static
TAOS_BIND
BindSmallInt
(
short
val
)
{
TAOS_BIND
bind
=
new
TAOS_BIND
();
IntPtr
uManageSmallInt
=
Marshal
.
AllocHGlobal
(
sizeof
(
short
));
Marshal
.
WriteInt16
(
uManageSmallInt
,
val
);
int
length
=
sizeof
(
short
);
IntPtr
lengPtr
=
Marshal
.
AllocHGlobal
(
sizeof
(
int
));
Marshal
.
WriteInt32
(
lengPtr
,
length
);
bind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_SMALLINT
;
bind
.
buffer
=
uManageSmallInt
;
bind
.
buffer_length
=
length
;
bind
.
length
=
lengPtr
;
bind
.
is_null
=
IntPtr
.
Zero
;
return
bind
;
}
public
static
TAOS_BIND
BindInt
(
int
val
)
{
TAOS_BIND
bind
=
new
TAOS_BIND
();
IntPtr
uManageInt
=
Marshal
.
AllocHGlobal
(
sizeof
(
int
));
Marshal
.
WriteInt32
(
uManageInt
,
val
);
int
length
=
sizeof
(
int
);
IntPtr
lengPtr
=
Marshal
.
AllocHGlobal
(
sizeof
(
int
));
Marshal
.
WriteInt32
(
lengPtr
,
length
);
bind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_INT
;
bind
.
buffer
=
uManageInt
;
bind
.
buffer_length
=
length
;
bind
.
length
=
lengPtr
;
bind
.
is_null
=
IntPtr
.
Zero
;
return
bind
;
}
public
static
TAOS_BIND
BindBigInt
(
long
val
)
{
TAOS_BIND
bind
=
new
TAOS_BIND
();
IntPtr
uManageBigInt
=
Marshal
.
AllocHGlobal
(
sizeof
(
long
));
Marshal
.
WriteInt64
(
uManageBigInt
,
val
);
int
length
=
sizeof
(
long
);
IntPtr
lengPtr
=
Marshal
.
AllocHGlobal
(
sizeof
(
int
));
Marshal
.
WriteInt32
(
lengPtr
,
length
);
bind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_BIGINT
;
bind
.
buffer
=
uManageBigInt
;
bind
.
buffer_length
=
length
;
bind
.
length
=
lengPtr
;
bind
.
is_null
=
IntPtr
.
Zero
;
return
bind
;
}
public
static
TAOS_BIND
BindUTinyInt
(
byte
val
)
{
TAOS_BIND
bind
=
new
TAOS_BIND
();
IntPtr
uManageTinyInt
=
Marshal
.
AllocHGlobal
(
sizeof
(
byte
));
Marshal
.
WriteByte
(
uManageTinyInt
,
val
);
int
length
=
sizeof
(
byte
);
IntPtr
lengPtr
=
Marshal
.
AllocHGlobal
(
sizeof
(
int
));
Marshal
.
WriteInt32
(
lengPtr
,
length
);
bind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_UTINYINT
;
bind
.
buffer
=
uManageTinyInt
;
bind
.
buffer_length
=
length
;
bind
.
length
=
lengPtr
;
bind
.
is_null
=
IntPtr
.
Zero
;
return
bind
;
}
public
static
TAOS_BIND
BindUSmallInt
(
UInt16
val
)
{
TAOS_BIND
bind
=
new
TAOS_BIND
();
byte
[]
uSmallIntByteArr
=
BitConverter
.
GetBytes
(
val
);
int
usmallSize
=
Marshal
.
SizeOf
(
uSmallIntByteArr
[
0
])
*
uSmallIntByteArr
.
Length
;
IntPtr
uManageUnsignSmallInt
=
Marshal
.
AllocHGlobal
(
usmallSize
);
Marshal
.
Copy
(
uSmallIntByteArr
,
0
,
uManageUnsignSmallInt
,
uSmallIntByteArr
.
Length
);
int
length
=
sizeof
(
UInt16
);
IntPtr
lengPtr
=
Marshal
.
AllocHGlobal
(
sizeof
(
int
));
Marshal
.
WriteInt32
(
lengPtr
,
length
);
bind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_USMALLINT
;
bind
.
buffer
=
uManageUnsignSmallInt
;
bind
.
buffer_length
=
length
;
bind
.
length
=
lengPtr
;
bind
.
is_null
=
IntPtr
.
Zero
;
return
bind
;
}
public
static
TAOS_BIND
BindUInt
(
uint
val
)
{
TAOS_BIND
bind
=
new
TAOS_BIND
();
byte
[]
uManageIntByteArr
=
BitConverter
.
GetBytes
(
val
);
int
usmallSize
=
Marshal
.
SizeOf
(
uManageIntByteArr
[
0
])
*
uManageIntByteArr
.
Length
;
IntPtr
uManageInt
=
Marshal
.
AllocHGlobal
(
usmallSize
);
Marshal
.
Copy
(
uManageIntByteArr
,
0
,
uManageInt
,
uManageIntByteArr
.
Length
);
int
length
=
sizeof
(
uint
);
IntPtr
lengPtr
=
Marshal
.
AllocHGlobal
(
sizeof
(
int
));
Marshal
.
WriteInt32
(
lengPtr
,
length
);
bind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_UINT
;
bind
.
buffer
=
uManageInt
;
bind
.
buffer_length
=
length
;
bind
.
length
=
lengPtr
;
bind
.
is_null
=
IntPtr
.
Zero
;
return
bind
;
}
public
static
TAOS_BIND
BindUBigInt
(
ulong
val
)
{
TAOS_BIND
bind
=
new
TAOS_BIND
();
byte
[]
uManageBigIntByteArr
=
BitConverter
.
GetBytes
(
val
);
int
usmallSize
=
Marshal
.
SizeOf
(
uManageBigIntByteArr
[
0
])
*
uManageBigIntByteArr
.
Length
;
IntPtr
uManageBigInt
=
Marshal
.
AllocHGlobal
(
usmallSize
);
Marshal
.
Copy
(
uManageBigIntByteArr
,
0
,
uManageBigInt
,
uManageBigIntByteArr
.
Length
);
int
length
=
sizeof
(
ulong
);
IntPtr
lengPtr
=
Marshal
.
AllocHGlobal
(
sizeof
(
int
));
Marshal
.
WriteInt32
(
lengPtr
,
length
);
bind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_UBIGINT
;
bind
.
buffer
=
uManageBigInt
;
bind
.
buffer_length
=
length
;
bind
.
length
=
lengPtr
;
bind
.
is_null
=
IntPtr
.
Zero
;
return
bind
;
}
public
static
TAOS_BIND
BindFloat
(
float
val
)
{
TAOS_BIND
bind
=
new
TAOS_BIND
();
byte
[]
floatByteArr
=
BitConverter
.
GetBytes
(
val
);
int
floatByteArrSize
=
Marshal
.
SizeOf
(
floatByteArr
[
0
])
*
floatByteArr
.
Length
;
IntPtr
uManageFloat
=
Marshal
.
AllocHGlobal
(
floatByteArrSize
);
Marshal
.
Copy
(
floatByteArr
,
0
,
uManageFloat
,
floatByteArr
.
Length
);
int
length
=
sizeof
(
float
);
IntPtr
lengPtr
=
Marshal
.
AllocHGlobal
(
sizeof
(
int
));
Marshal
.
WriteInt32
(
lengPtr
,
length
);
bind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_FLOAT
;
bind
.
buffer
=
uManageFloat
;
bind
.
buffer_length
=
length
;
bind
.
length
=
lengPtr
;
bind
.
is_null
=
IntPtr
.
Zero
;
return
bind
;
}
public
static
TAOS_BIND
BindDouble
(
Double
val
)
{
TAOS_BIND
bind
=
new
TAOS_BIND
();
byte
[]
doubleByteArr
=
BitConverter
.
GetBytes
(
val
);
int
doubleByteArrSize
=
Marshal
.
SizeOf
(
doubleByteArr
[
0
])
*
doubleByteArr
.
Length
;
IntPtr
uManageDouble
=
Marshal
.
AllocHGlobal
(
doubleByteArrSize
);
Marshal
.
Copy
(
doubleByteArr
,
0
,
uManageDouble
,
doubleByteArr
.
Length
);
int
length
=
sizeof
(
Double
);
IntPtr
lengPtr
=
Marshal
.
AllocHGlobal
(
sizeof
(
int
));
Marshal
.
WriteInt32
(
lengPtr
,
length
);
bind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_DOUBLE
;
bind
.
buffer
=
uManageDouble
;
bind
.
buffer_length
=
length
;
bind
.
length
=
lengPtr
;
bind
.
is_null
=
IntPtr
.
Zero
;
return
bind
;
}
public
static
TAOS_BIND
BindBinary
(
String
val
)
{
TAOS_BIND
bind
=
new
TAOS_BIND
();
IntPtr
umanageBinary
=
Marshal
.
StringToHGlobalAnsi
(
val
);
var
strToBytes
=
System
.
Text
.
Encoding
.
Default
.
GetBytes
(
val
);
int
leng
=
strToBytes
.
Length
;
IntPtr
lenPtr
=
Marshal
.
AllocHGlobal
(
sizeof
(
ulong
));
Marshal
.
WriteInt64
(
lenPtr
,
leng
);
bind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_BINARY
;
bind
.
buffer
=
umanageBinary
;
bind
.
buffer_length
=
leng
;
bind
.
length
=
lenPtr
;
bind
.
is_null
=
IntPtr
.
Zero
;
return
bind
;
}
public
static
TAOS_BIND
BindNchar
(
String
val
)
{
TAOS_BIND
bind
=
new
TAOS_BIND
();
var
strToBytes
=
System
.
Text
.
Encoding
.
Default
.
GetBytes
(
val
);
IntPtr
umanageNchar
=
(
IntPtr
)
Marshal
.
StringToHGlobalAnsi
(
val
);
int
leng
=
strToBytes
.
Length
;
IntPtr
lenPtr
=
Marshal
.
AllocHGlobal
(
sizeof
(
ulong
));
Marshal
.
WriteInt64
(
lenPtr
,
leng
);
bind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_NCHAR
;
bind
.
buffer
=
umanageNchar
;
bind
.
buffer_length
=
leng
;
bind
.
length
=
lenPtr
;
bind
.
is_null
=
IntPtr
.
Zero
;
return
bind
;
}
public
static
TAOS_BIND
BindNil
()
{
TAOS_BIND
bind
=
new
TAOS_BIND
();
int
isNull
=
1
;
//IntPtr.Size;
IntPtr
lenPtr
=
Marshal
.
AllocHGlobal
(
sizeof
(
int
));
Marshal
.
WriteInt32
(
lenPtr
,
isNull
);
bind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_NULL
;
bind
.
is_null
=
lenPtr
;
return
bind
;
}
public
static
TAOS_BIND
BindTimestamp
(
long
ts
)
{
TAOS_BIND
bind
=
new
TAOS_BIND
();
IntPtr
uManageTs
=
Marshal
.
AllocHGlobal
(
sizeof
(
long
));
Marshal
.
WriteInt64
(
uManageTs
,
ts
);
int
length
=
sizeof
(
long
);
IntPtr
lengPtr
=
Marshal
.
AllocHGlobal
(
4
);
Marshal
.
WriteInt32
(
lengPtr
,
length
);
bind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_TIMESTAMP
;
bind
.
buffer
=
uManageTs
;
bind
.
buffer_length
=
length
;
bind
.
length
=
lengPtr
;
bind
.
is_null
=
IntPtr
.
Zero
;
return
bind
;
}
public
static
void
FreeTaosBind
(
TAOS_BIND
[]
binds
)
{
foreach
(
TAOS_BIND
bind
in
binds
)
{
Marshal
.
FreeHGlobal
(
bind
.
buffer
);
Marshal
.
FreeHGlobal
(
bind
.
length
);
if
(
bind
.
is_null
!=
IntPtr
.
Zero
)
{
// Console.WriteLine(bind.is_null);
Marshal
.
FreeHGlobal
(
bind
.
is_null
);
}
}
}
}
}
\ No newline at end of file
tests/system-test/3-connectors/c#/TDengineDriver/TaosMultiBind.cs
0 → 100644
浏览文件 @
ac423f56
using
System
;
using
System.Text
;
using
System.Runtime.InteropServices
;
namespace
TDengineDriver
{
public
class
TaosMultiBind
{
public
static
TAOS_MULTI_BIND
MultiBindBool
(
bool
?[]
arr
)
{
TAOS_MULTI_BIND
multiBind
=
new
TAOS_MULTI_BIND
();
int
elementCount
=
arr
.
Length
;
//the size of buffer array element
int
typeSize
=
sizeof
(
bool
);
//size of int
int
intSize
=
sizeof
(
int
);
int
byteSize
=
sizeof
(
byte
);
//TAOS_MULTI_BIND.buffer
IntPtr
unmanagedBoolArr
=
Marshal
.
AllocHGlobal
(
elementCount
*
typeSize
);
//TAOS_MULTI_BIND.length
IntPtr
lengthArr
=
Marshal
.
AllocHGlobal
(
intSize
*
elementCount
);
//TAOS_MULTI_BIND.is_null
IntPtr
nullArr
=
Marshal
.
AllocHGlobal
(
byteSize
*
elementCount
);
for
(
int
i
=
0
;
i
<
elementCount
;
i
++)
{
//set TAOS_MULTI_BIND.buffer
Marshal
.
WriteByte
(
unmanagedBoolArr
,
typeSize
*
i
,
Convert
.
ToByte
(
arr
[
i
]
??
false
));
//set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
typeSize
);
//set TAOS_MULTI_BIND.is_null
Marshal
.
WriteByte
(
nullArr
,
byteSize
*
i
,
Convert
.
ToByte
(
arr
[
i
].
Equals
(
null
)
?
1
:
0
));
}
//config TAOS_MULTI_BIND
multiBind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_BOOL
;
multiBind
.
buffer
=
unmanagedBoolArr
;
multiBind
.
buffer_length
=
(
ulong
)
typeSize
;
multiBind
.
length
=
lengthArr
;
multiBind
.
is_null
=
nullArr
;
multiBind
.
num
=
elementCount
;
return
multiBind
;
}
public
static
TAOS_MULTI_BIND
MultiBindTinyInt
(
sbyte
?[]
arr
)
{
TAOS_MULTI_BIND
multiBind
=
new
TAOS_MULTI_BIND
();
int
elementCount
=
arr
.
Length
;
//the size of buffer array element
int
typeSize
=
sizeof
(
byte
);
int
byteSize
=
sizeof
(
byte
);
//size of int
int
intSize
=
sizeof
(
int
);
//TAOS_MULTI_BIND.buffer
IntPtr
unmanagedTintIntArr
=
Marshal
.
AllocHGlobal
(
elementCount
);
//TAOS_MULTI_BIND.length
IntPtr
lengthArr
=
Marshal
.
AllocHGlobal
(
intSize
*
elementCount
);
//TAOS_MULTI_BIND.is_null
IntPtr
nullArr
=
Marshal
.
AllocHGlobal
(
intSize
*
elementCount
);
for
(
int
i
=
0
;
i
<
elementCount
;
i
++)
{
Byte
[]
toByteArr
=
BitConverter
.
GetBytes
(
arr
[
i
]
??
sbyte
.
MinValue
);
//set TAOS_MULTI_BIND.buffer
Marshal
.
WriteByte
(
unmanagedTintIntArr
,
typeSize
*
i
,
toByteArr
[
0
]);
//set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
typeSize
);
//set TAOS_MULTI_BIND.is_null
Marshal
.
WriteByte
(
nullArr
,
byteSize
*
i
,
Convert
.
ToByte
(
arr
[
i
].
Equals
(
null
)
?
1
:
0
));
}
//config TAOS_MULTI_BIND
multiBind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_TINYINT
;
multiBind
.
buffer
=
unmanagedTintIntArr
;
multiBind
.
buffer_length
=
(
ulong
)
typeSize
;
multiBind
.
length
=
lengthArr
;
multiBind
.
is_null
=
nullArr
;
multiBind
.
num
=
elementCount
;
return
multiBind
;
}
public
static
TAOS_MULTI_BIND
MultiBindSmallInt
(
short
?[]
arr
)
{
TAOS_MULTI_BIND
multiBind
=
new
TAOS_MULTI_BIND
();
int
elementCount
=
arr
.
Length
;
//the size of buffer array element
int
typeSize
=
sizeof
(
short
);
//size of int
int
intSize
=
sizeof
(
int
);
int
byteSize
=
sizeof
(
byte
);
//TAOS_MULTI_BIND.buffer
IntPtr
unmanagedSmallIntArr
=
Marshal
.
AllocHGlobal
(
elementCount
*
typeSize
);
//TAOS_MULTI_BIND.length
IntPtr
lengthArr
=
Marshal
.
AllocHGlobal
(
intSize
*
elementCount
);
//TAOS_MULTI_BIND.is_null
IntPtr
nullArr
=
Marshal
.
AllocHGlobal
(
byteSize
*
elementCount
);
for
(
int
i
=
0
;
i
<
elementCount
;
i
++)
{
//set TAOS_MULTI_BIND.buffer
Marshal
.
WriteInt16
(
unmanagedSmallIntArr
,
typeSize
*
i
,
arr
[
i
]
??
short
.
MinValue
);
//set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
typeSize
);
//set TAOS_MULTI_BIND.is_null
Marshal
.
WriteByte
(
nullArr
,
byteSize
*
i
,
Convert
.
ToByte
(
arr
[
i
].
Equals
(
null
)
?
1
:
0
));
}
//config TAOS_MULTI_BIND
multiBind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_SMALLINT
;
multiBind
.
buffer
=
unmanagedSmallIntArr
;
multiBind
.
buffer_length
=
(
ulong
)
typeSize
;
multiBind
.
length
=
lengthArr
;
multiBind
.
is_null
=
nullArr
;
multiBind
.
num
=
elementCount
;
return
multiBind
;
}
public
static
TAOS_MULTI_BIND
MultiBindInt
(
int
?[]
arr
)
{
TAOS_MULTI_BIND
multiBind
=
new
TAOS_MULTI_BIND
();
int
elementCount
=
arr
.
Length
;
int
typeSize
=
sizeof
(
int
);
int
intSize
=
sizeof
(
int
);
int
byteSize
=
sizeof
(
byte
);
//TAOS_MULTI_BIND.buffer
IntPtr
intBuff
=
Marshal
.
AllocHGlobal
(
typeSize
*
elementCount
);
//TAOS_MULTI_BIND.length
IntPtr
lengthArr
=
Marshal
.
AllocHGlobal
(
intSize
*
elementCount
);
//TAOS_MULTI_BIND.is_null
IntPtr
nullArr
=
Marshal
.
AllocHGlobal
(
byteSize
*
elementCount
);
for
(
int
i
=
0
;
i
<
elementCount
;
i
++)
{
//set TAOS_MULTI_BIND.buffer
Marshal
.
WriteInt32
(
intBuff
,
typeSize
*
i
,
arr
[
i
]
??
int
.
MinValue
);
//set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
typeSize
);
//set TAOS_MULTI_BIND.is_null
Marshal
.
WriteByte
(
nullArr
,
byteSize
*
i
,
Convert
.
ToByte
(
arr
[
i
].
Equals
(
null
)
?
1
:
0
));
}
//config TAOS_MULTI_BIND
multiBind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_INT
;
multiBind
.
buffer
=
intBuff
;
multiBind
.
buffer_length
=
(
ulong
)
typeSize
;
multiBind
.
length
=
lengthArr
;
multiBind
.
is_null
=
nullArr
;
multiBind
.
num
=
elementCount
;
return
multiBind
;
}
public
static
TAOS_MULTI_BIND
MultiBindBigint
(
long
?[]
arr
)
{
TAOS_MULTI_BIND
multiBind
=
new
TAOS_MULTI_BIND
();
int
elementCount
=
arr
.
Length
;
int
typeSize
=
sizeof
(
long
);
int
intSize
=
sizeof
(
int
);
int
byteSize
=
sizeof
(
byte
);
//TAOS_MULTI_BIND.buffer
IntPtr
intBuff
=
Marshal
.
AllocHGlobal
(
typeSize
*
elementCount
);
//TAOS_MULTI_BIND.length
IntPtr
lengthArr
=
Marshal
.
AllocHGlobal
(
intSize
*
elementCount
);
//TAOS_MULTI_BIND.is_null
IntPtr
nullArr
=
Marshal
.
AllocHGlobal
(
byteSize
*
elementCount
);
for
(
int
i
=
0
;
i
<
elementCount
;
i
++)
{
//set TAOS_MULTI_BIND.buffer
Marshal
.
WriteInt64
(
intBuff
,
typeSize
*
i
,
arr
[
i
]
??
long
.
MinValue
);
//set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
typeSize
);
//set TAOS_MULTI_BIND.is_null
Marshal
.
WriteByte
(
nullArr
,
byteSize
*
i
,
Convert
.
ToByte
(
arr
[
i
].
Equals
(
null
)
?
1
:
0
));
}
//config TAOS_MULTI_BIND
multiBind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_BIGINT
;
multiBind
.
buffer
=
intBuff
;
multiBind
.
buffer_length
=
(
ulong
)
typeSize
;
multiBind
.
length
=
lengthArr
;
multiBind
.
is_null
=
nullArr
;
multiBind
.
num
=
elementCount
;
return
multiBind
;
}
public
static
TAOS_MULTI_BIND
MultiBindFloat
(
float
?[]
arr
)
{
TAOS_MULTI_BIND
multiBind
=
new
TAOS_MULTI_BIND
();
int
elementCount
=
arr
.
Length
;
int
typeSize
=
sizeof
(
float
);
int
intSize
=
sizeof
(
int
);
int
byteSize
=
sizeof
(
byte
);
//used to replace null
float
[]
arrTmp
=
new
float
[
elementCount
];
//TAOS_MULTI_BIND.buffer
IntPtr
floatBuff
=
Marshal
.
AllocHGlobal
(
typeSize
*
elementCount
);
//TAOS_MULTI_BIND.length
IntPtr
lengthArr
=
Marshal
.
AllocHGlobal
(
intSize
*
elementCount
);
//TAOS_MULTI_BIND.is_null
IntPtr
nullArr
=
Marshal
.
AllocHGlobal
(
byteSize
*
elementCount
);
for
(
int
i
=
0
;
i
<
elementCount
;
i
++)
{
arrTmp
[
i
]
=
arr
[
i
]
??
float
.
MinValue
;
//set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
typeSize
);
//set TAOS_MULTI_BIND.is_null
Marshal
.
WriteByte
(
nullArr
,
byteSize
*
i
,
Convert
.
ToByte
(
arr
[
i
].
Equals
(
null
)
?
1
:
0
));
}
//set TAOS_MULTI_BIND.buffer
Marshal
.
Copy
(
arrTmp
,
0
,
floatBuff
,
elementCount
);
//config TAOS_MULTI_BIND
multiBind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_FLOAT
;
multiBind
.
buffer
=
floatBuff
;
multiBind
.
buffer_length
=
(
ulong
)
typeSize
;
multiBind
.
length
=
lengthArr
;
multiBind
.
is_null
=
nullArr
;
multiBind
.
num
=
elementCount
;
return
multiBind
;
}
public
static
TAOS_MULTI_BIND
MultiBindDouble
(
double
?[]
arr
)
{
TAOS_MULTI_BIND
multiBind
=
new
TAOS_MULTI_BIND
();
int
elementCount
=
arr
.
Length
;
int
typeSize
=
sizeof
(
double
);
int
intSize
=
sizeof
(
int
);
int
byteSize
=
sizeof
(
byte
);
//used to replace null
double
[]
arrTmp
=
new
double
[
elementCount
];
//TAOS_MULTI_BIND.buffer
IntPtr
doubleBuff
=
Marshal
.
AllocHGlobal
(
typeSize
*
elementCount
);
//TAOS_MULTI_BIND.length
IntPtr
lengthArr
=
Marshal
.
AllocHGlobal
(
intSize
*
elementCount
);
//TAOS_MULTI_BIND.is_null
IntPtr
nullArr
=
Marshal
.
AllocHGlobal
(
byteSize
*
elementCount
);
for
(
int
i
=
0
;
i
<
elementCount
;
i
++)
{
arrTmp
[
i
]
=
arr
[
i
]
??
double
.
MinValue
;
//set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
typeSize
);
//set TAOS_MULTI_BIND.is_null
Marshal
.
WriteByte
(
nullArr
,
byteSize
*
i
,
Convert
.
ToByte
(
arr
[
i
].
Equals
(
null
)
?
1
:
0
));
}
//set TAOS_MULTI_BIND.buffer
Marshal
.
Copy
(
arrTmp
,
0
,
doubleBuff
,
elementCount
);
//config TAOS_MULTI_BIND
multiBind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_DOUBLE
;
multiBind
.
buffer
=
doubleBuff
;
multiBind
.
buffer_length
=
(
ulong
)
typeSize
;
multiBind
.
length
=
lengthArr
;
multiBind
.
is_null
=
nullArr
;
multiBind
.
num
=
elementCount
;
return
multiBind
;
}
public
static
TAOS_MULTI_BIND
MultiBindUTinyInt
(
byte
?[]
arr
)
{
TAOS_MULTI_BIND
multiBind
=
new
TAOS_MULTI_BIND
();
int
elementCount
=
arr
.
Length
;
int
typeSize
=
sizeof
(
byte
);
int
intSize
=
sizeof
(
int
);
int
byteSize
=
sizeof
(
byte
);
//used to replace null
//TAOS_MULTI_BIND.buffer
IntPtr
uTinyIntBuff
=
Marshal
.
AllocHGlobal
(
typeSize
*
elementCount
);
//TAOS_MULTI_BIND.length
IntPtr
lengthArr
=
Marshal
.
AllocHGlobal
(
intSize
*
elementCount
);
//TAOS_MULTI_BIND.is_null
IntPtr
nullArr
=
Marshal
.
AllocHGlobal
(
byteSize
*
elementCount
);
for
(
int
i
=
0
;
i
<
elementCount
;
i
++)
{
//set TAOS_MULTI_BIND.buffer
Marshal
.
WriteByte
(
uTinyIntBuff
,
typeSize
*
i
,
arr
[
i
]
??
byte
.
MaxValue
);
//set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
typeSize
);
//set TAOS_MULTI_BIND.is_null
Marshal
.
WriteByte
(
nullArr
,
byteSize
*
i
,
Convert
.
ToByte
(
arr
[
i
].
Equals
(
null
)
?
1
:
0
));
}
//config TAOS_MULTI_BIND
multiBind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_UTINYINT
;
multiBind
.
buffer
=
uTinyIntBuff
;
multiBind
.
buffer_length
=
(
ulong
)
typeSize
;
multiBind
.
length
=
lengthArr
;
multiBind
.
is_null
=
nullArr
;
multiBind
.
num
=
elementCount
;
return
multiBind
;
}
public
static
TAOS_MULTI_BIND
MultiBindUSmallInt
(
ushort
?[]
arr
)
{
TAOS_MULTI_BIND
multiBind
=
new
TAOS_MULTI_BIND
();
int
elementCount
=
arr
.
Length
;
int
typeSize
=
sizeof
(
ushort
);
int
intSize
=
sizeof
(
int
);
int
byteSize
=
sizeof
(
byte
);
//used to replace null
//TAOS_MULTI_BIND.buffer
IntPtr
uSmallIntBuff
=
Marshal
.
AllocHGlobal
(
typeSize
*
elementCount
);
//TAOS_MULTI_BIND.length
IntPtr
lengthArr
=
Marshal
.
AllocHGlobal
(
intSize
*
elementCount
);
//TAOS_MULTI_BIND.is_null
IntPtr
nullArr
=
Marshal
.
AllocHGlobal
(
byteSize
*
elementCount
);
for
(
int
i
=
0
;
i
<
elementCount
;
i
++)
{
byte
[]
byteArr
=
BitConverter
.
GetBytes
(
arr
[
i
]
??
ushort
.
MaxValue
);
for
(
int
j
=
0
;
j
<
byteArr
.
Length
;
j
++)
{
//set TAOS_MULTI_BIND.buffer
Marshal
.
WriteByte
(
uSmallIntBuff
,
typeSize
*
i
+
j
*
byteSize
,
byteArr
[
j
]);
}
//set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
typeSize
);
//set TAOS_MULTI_BIND.is_null
Marshal
.
WriteByte
(
nullArr
,
byteSize
*
i
,
Convert
.
ToByte
(
arr
[
i
].
Equals
(
null
)
?
1
:
0
));
}
//config TAOS_MULTI_BIND
multiBind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_USMALLINT
;
multiBind
.
buffer
=
uSmallIntBuff
;
multiBind
.
buffer_length
=
(
ulong
)
typeSize
;
multiBind
.
length
=
lengthArr
;
multiBind
.
is_null
=
nullArr
;
multiBind
.
num
=
elementCount
;
return
multiBind
;
}
public
static
TAOS_MULTI_BIND
MultiBindUInt
(
uint
?[]
arr
)
{
TAOS_MULTI_BIND
multiBind
=
new
TAOS_MULTI_BIND
();
int
elementCount
=
arr
.
Length
;
int
typeSize
=
sizeof
(
uint
);
int
intSize
=
sizeof
(
int
);
int
byteSize
=
sizeof
(
byte
);
//used to replace null
//TAOS_MULTI_BIND.buffer
IntPtr
uIntBuff
=
Marshal
.
AllocHGlobal
(
typeSize
*
elementCount
);
//TAOS_MULTI_BIND.length
IntPtr
lengthArr
=
Marshal
.
AllocHGlobal
(
intSize
*
elementCount
);
//TAOS_MULTI_BIND.is_null
IntPtr
nullArr
=
Marshal
.
AllocHGlobal
(
byteSize
*
elementCount
);
for
(
int
i
=
0
;
i
<
elementCount
;
i
++)
{
byte
[]
byteArr
=
BitConverter
.
GetBytes
(
arr
[
i
]
??
uint
.
MaxValue
);
for
(
int
j
=
0
;
j
<
byteArr
.
Length
;
j
++)
{
//set TAOS_MULTI_BIND.buffer
Marshal
.
WriteByte
(
uIntBuff
,
typeSize
*
i
+
j
*
byteSize
,
byteArr
[
j
]);
}
//set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
typeSize
);
//set TAOS_MULTI_BIND.is_null
Marshal
.
WriteByte
(
nullArr
,
byteSize
*
i
,
Convert
.
ToByte
(
arr
[
i
].
Equals
(
null
)
?
1
:
0
));
}
//config TAOS_MULTI_BIND
multiBind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_UINT
;
multiBind
.
buffer
=
uIntBuff
;
multiBind
.
buffer_length
=
(
ulong
)
typeSize
;
multiBind
.
length
=
lengthArr
;
multiBind
.
is_null
=
nullArr
;
multiBind
.
num
=
elementCount
;
return
multiBind
;
}
public
static
TAOS_MULTI_BIND
MultiBindUBigInt
(
ulong
?[]
arr
)
{
TAOS_MULTI_BIND
multiBind
=
new
TAOS_MULTI_BIND
();
int
elementCount
=
arr
.
Length
;
int
typeSize
=
sizeof
(
ulong
);
int
intSize
=
sizeof
(
int
);
int
byteSize
=
sizeof
(
byte
);
//used to replace null
//TAOS_MULTI_BIND.buffer
IntPtr
uBigIntBuff
=
Marshal
.
AllocHGlobal
(
typeSize
*
elementCount
);
//TAOS_MULTI_BIND.length
IntPtr
lengthArr
=
Marshal
.
AllocHGlobal
(
intSize
*
elementCount
);
//TAOS_MULTI_BIND.is_null
IntPtr
nullArr
=
Marshal
.
AllocHGlobal
(
byteSize
*
elementCount
);
for
(
int
i
=
0
;
i
<
elementCount
;
i
++)
{
byte
[]
byteArr
=
BitConverter
.
GetBytes
(
arr
[
i
]
??
ulong
.
MaxValue
);
for
(
int
j
=
0
;
j
<
byteArr
.
Length
;
j
++)
{
//set TAOS_MULTI_BIND.buffer
Marshal
.
WriteByte
(
uBigIntBuff
,
typeSize
*
i
+
j
*
byteSize
,
byteArr
[
j
]);
}
//set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
typeSize
);
//set TAOS_MULTI_BIND.is_null
Marshal
.
WriteByte
(
nullArr
,
byteSize
*
i
,
Convert
.
ToByte
(
arr
[
i
].
Equals
(
null
)
?
1
:
0
));
}
//config TAOS_MULTI_BIND
multiBind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_UBIGINT
;
multiBind
.
buffer
=
uBigIntBuff
;
multiBind
.
buffer_length
=
(
ulong
)
typeSize
;
multiBind
.
length
=
lengthArr
;
multiBind
.
is_null
=
nullArr
;
multiBind
.
num
=
elementCount
;
return
multiBind
;
}
public
static
TAOS_MULTI_BIND
MultiBindBinary
(
string
[]
arr
)
{
TAOS_MULTI_BIND
multiBind
=
new
TAOS_MULTI_BIND
();
int
elementCount
=
arr
.
Length
;
int
typeSize
=
MaxElementLength
(
arr
);
int
intSize
=
sizeof
(
int
);
int
byteSize
=
sizeof
(
byte
);
StringBuilder
arrStrBuilder
=
new
StringBuilder
();
;
//TAOS_MULTI_BIND.length
IntPtr
lengthArr
=
Marshal
.
AllocHGlobal
(
intSize
*
elementCount
);
//TAOS_MULTI_BIND.is_null
IntPtr
nullArr
=
Marshal
.
AllocHGlobal
(
byteSize
*
elementCount
);
for
(
int
i
=
0
;
i
<
elementCount
;
i
++)
{
int
itemLength
=
0
;
byte
[]
decodeByte
=
GetStringEncodeByte
(
arr
[
i
]);
itemLength
=
decodeByte
.
Length
;
// if element if not null and element length is less then typeSize
// fill the memory with default char.Since arr element memory need align.
if
(!
String
.
IsNullOrEmpty
(
arr
[
i
])
&&
typeSize
==
itemLength
)
{
arrStrBuilder
.
Append
(
arr
[
i
]);
}
else
if
(!
String
.
IsNullOrEmpty
(
arr
[
i
])
&&
typeSize
>
itemLength
)
{
arrStrBuilder
.
Append
(
arr
[
i
]);
arrStrBuilder
.
Append
(
AlignCharArr
(
typeSize
-
itemLength
));
}
else
{
// if is null value,fill the memory with default values.
arrStrBuilder
.
Append
(
AlignCharArr
(
typeSize
));
}
//set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
typeSize
);
//set TAOS_MULTI_BIND.is_null
Marshal
.
WriteByte
(
nullArr
,
byteSize
*
i
,
Convert
.
ToByte
(
String
.
IsNullOrEmpty
(
arr
[
i
])
?
1
:
0
));
}
//set TAOS_MULTI_BIND.buffer
IntPtr
uBinaryBuff
=
(
IntPtr
)
Marshal
.
StringToHGlobalAnsi
(
arrStrBuilder
.
ToString
());
//config TAOS_MULTI_BIND
multiBind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_BINARY
;
multiBind
.
buffer
=
uBinaryBuff
;
multiBind
.
buffer_length
=
(
ulong
)
typeSize
;
multiBind
.
length
=
lengthArr
;
multiBind
.
is_null
=
nullArr
;
multiBind
.
num
=
elementCount
;
return
multiBind
;
}
public
static
TAOS_MULTI_BIND
MultiBindNchar
(
string
[]
arr
)
{
TAOS_MULTI_BIND
multiBind
=
new
TAOS_MULTI_BIND
();
int
elementCount
=
arr
.
Length
;
int
typeSize
=
MaxElementLength
(
arr
);
int
intSize
=
sizeof
(
int
);
int
byteSize
=
sizeof
(
byte
);
StringBuilder
arrStrBuilder
=
new
StringBuilder
();
;
//TAOS_MULTI_BIND.length
IntPtr
lengthArr
=
Marshal
.
AllocHGlobal
(
intSize
*
elementCount
);
//TAOS_MULTI_BIND.is_null
IntPtr
nullArr
=
Marshal
.
AllocHGlobal
(
byteSize
*
elementCount
);
for
(
int
i
=
0
;
i
<
elementCount
;
i
++)
{
int
itemLength
=
0
;
byte
[]
decodeByte
=
GetStringEncodeByte
(
arr
[
i
]);
itemLength
=
decodeByte
.
Length
;
// if element if not null and element length is less then typeSize
// fill the memory with default char.Since arr element memory need align.
if
(!
String
.
IsNullOrEmpty
(
arr
[
i
])
&&
typeSize
==
itemLength
)
{
arrStrBuilder
.
Append
(
arr
[
i
]);
}
else
if
(!
String
.
IsNullOrEmpty
(
arr
[
i
])
&&
typeSize
>
itemLength
)
{
arrStrBuilder
.
Append
(
arr
[
i
]);
arrStrBuilder
.
Append
(
AlignCharArr
(
typeSize
-
itemLength
));
}
else
{
// if is null value,fill the memory with default values.
arrStrBuilder
.
Append
(
AlignCharArr
(
typeSize
));
}
//set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
typeSize
);
//set TAOS_MULTI_BIND.is_null
Marshal
.
WriteByte
(
nullArr
,
byteSize
*
i
,
Convert
.
ToByte
(
String
.
IsNullOrEmpty
(
arr
[
i
])
?
1
:
0
));
}
//set TAOS_MULTI_BIND.buffer
IntPtr
uNcharBuff
=
(
IntPtr
)
Marshal
.
StringToHGlobalAnsi
(
arrStrBuilder
.
ToString
());
//config TAOS_MULTI_BIND
multiBind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_NCHAR
;
multiBind
.
buffer
=
uNcharBuff
;
multiBind
.
buffer_length
=
(
ulong
)
typeSize
;
multiBind
.
length
=
lengthArr
;
multiBind
.
is_null
=
nullArr
;
multiBind
.
num
=
elementCount
;
return
multiBind
;
}
public
static
TAOS_MULTI_BIND
MultiBindTimestamp
(
long
[]
arr
)
{
TAOS_MULTI_BIND
multiBind
=
new
TAOS_MULTI_BIND
();
int
elementCount
=
arr
.
Length
;
int
typeSize
=
sizeof
(
long
);
int
intSize
=
sizeof
(
int
);
int
byteSize
=
sizeof
(
byte
);
//TAOS_MULTI_BIND.buffer
IntPtr
unmanagedTsArr
=
Marshal
.
AllocHGlobal
(
typeSize
*
elementCount
);
//TAOS_MULTI_BIND.length
IntPtr
lengthArr
=
Marshal
.
AllocHGlobal
(
intSize
*
elementCount
);
//TAOS_MULTI_BIND.is_null
IntPtr
nullArr
=
Marshal
.
AllocHGlobal
(
byteSize
*
elementCount
);
for
(
int
i
=
0
;
i
<
elementCount
;
i
++)
{
//set TAOS_MULTI_BIND.buffer
Marshal
.
WriteInt64
(
unmanagedTsArr
,
typeSize
*
i
,
arr
[
i
]);
//set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
typeSize
);
//set TAOS_MULTI_BIND.is_null
Marshal
.
WriteByte
(
nullArr
,
byteSize
*
i
,
0
);
}
//config TAOS_MULTI_BIND
multiBind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_TIMESTAMP
;
multiBind
.
buffer
=
unmanagedTsArr
;
multiBind
.
buffer_length
=
(
ulong
)
typeSize
;
multiBind
.
length
=
lengthArr
;
multiBind
.
is_null
=
nullArr
;
multiBind
.
num
=
elementCount
;
return
multiBind
;
}
public
static
void
FreeTaosBind
(
TAOS_MULTI_BIND
[]
mBinds
)
{
foreach
(
TAOS_MULTI_BIND
bind
in
mBinds
)
{
Marshal
.
FreeHGlobal
(
bind
.
buffer
);
Marshal
.
FreeHGlobal
(
bind
.
length
);
Marshal
.
FreeHGlobal
(
bind
.
is_null
);
}
}
private
static
char
[]
AlignCharArr
(
int
offSet
)
{
char
[]
alignChar
=
new
char
[
offSet
];
for
(
int
i
=
0
;
i
<
offSet
;
i
++)
{
alignChar
[
i
]
=
char
.
MinValue
;
}
return
alignChar
;
}
private
static
int
MaxElementLength
(
String
[]
strArr
)
{
int
max
=
0
;
for
(
int
i
=
0
;
i
<
strArr
.
Length
;
i
++)
{
int
tmpLength
=
GetStringEncodeByte
(
strArr
[
i
]).
Length
;
if
(!
String
.
IsNullOrEmpty
(
strArr
[
i
])
&&
max
<
tmpLength
)
{
max
=
tmpLength
;
}
}
return
max
;
}
private
static
Byte
[]
GetStringEncodeByte
(
string
str
)
{
Byte
[]
strToBytes
=
null
;
if
(
String
.
IsNullOrEmpty
(
str
))
{
strToBytes
=
System
.
Text
.
Encoding
.
Default
.
GetBytes
(
String
.
Empty
);
}
else
{
strToBytes
=
System
.
Text
.
Encoding
.
Default
.
GetBytes
(
str
);
}
return
strToBytes
;
}
}
}
\ No newline at end of file
tests/system-test/3-connectors/c#/stmtfunction/stmtfunction.cs
0 → 100644
浏览文件 @
ac423f56
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using
System
;
using
System.Text
;
using
System.Collections.Generic
;
using
System.Runtime.InteropServices
;
using
System.Collections
;
namespace
TDengineDriver
{
public
class
stmtfunction
{
//connection parameters
private
string
host
=
"127.0.0.1"
;
private
string
configDir
=
"/etc/taos"
;
private
string
user
=
"root"
;
private
string
passwd
=
"taosdata"
;
private
short
port
=
6030
;
private
IntPtr
conn
=
IntPtr
.
Zero
;
private
IntPtr
stmt
=
IntPtr
.
Zero
;
//prepare the tags value
//Integer
public
TAOS_BIND
[]
InitBindArr1
()
{
TAOS_BIND
[]
binds
=
new
TAOS_BIND
[
4
];
binds
[
0
]
=
TaosBind
.
BindTinyInt
(-
2
);
binds
[
1
]
=
TaosBind
.
BindSmallInt
(
short
.
MaxValue
);
binds
[
2
]
=
TaosBind
.
BindInt
(
int
.
MaxValue
);
binds
[
3
]
=
TaosBind
.
BindBigInt
(
Int64
.
MaxValue
);
return
binds
;
}
//unsigned Integer
public
TAOS_BIND
[]
InitBindArr2
()
{
TAOS_BIND
[]
binds
=
new
TAOS_BIND
[
4
];
binds
[
0
]
=
TaosBind
.
BindUTinyInt
(
byte
.
MaxValue
-
1
);
binds
[
1
]
=
TaosBind
.
BindUSmallInt
(
UInt16
.
MaxValue
-
1
);
binds
[
2
]
=
TaosBind
.
BindUInt
(
uint
.
MinValue
+
1
);
binds
[
3
]
=
TaosBind
.
BindUBigInt
(
UInt64
.
MinValue
+
1
);
return
binds
;
}
//float and double
public
TAOS_BIND
[]
InitBindArr3
()
{
TAOS_BIND
[]
binds
=
new
TAOS_BIND
[
6
];
binds
[
0
]
=
TaosBind
.
BindFloat
(
11.11F
);
binds
[
1
]
=
TaosBind
.
BindFloat
(
float
.
MinValue
+
1
);
binds
[
2
]
=
TaosBind
.
BindFloat
(
float
.
MaxValue
-
1
);
binds
[
3
]
=
TaosBind
.
BindDouble
(
22.22D
);
binds
[
4
]
=
TaosBind
.
BindDouble
(
double
.
MinValue
+
1
);
binds
[
5
]
=
TaosBind
.
BindDouble
(
double
.
MaxValue
-
1
);
return
binds
;
}
//binary and nchar
public
TAOS_BIND
[]
InitBindArr4
()
{
TAOS_BIND
[]
binds
=
new
TAOS_BIND
[
2
];
string
a
=
"abcdABCD123`~!@#$%^&*()-=+_[]{}:;\",.<>/?\\\\'"
;
string
b
=
"abcdABCD123`~!@#$%^&*()-=+_[]{}:;\",.<>/?taos涛思"
;
//Console.WriteLine(a);
//Console.WriteLine(b);
binds
[
0
]
=
TaosBind
.
BindBinary
(
a
);
binds
[
1
]
=
TaosBind
.
BindNchar
(
b
);
return
binds
;
}
//prepare the column values
//Integer
public
TAOS_MULTI_BIND
[]
InitMultBindArr1
()
{
TAOS_MULTI_BIND
[]
mBinds
=
new
TAOS_MULTI_BIND
[
5
];
long
[]
tsArr
=
new
long
[
5
]
{
1637064040000
,
1637064041000
,
1637064042000
,
1637064043000
,
1637064044000
};
sbyte
?[]
tinyIntArr
=
new
sbyte
?[
5
]
{
-
127
,
0
,
null
,
8
,
127
};
short
?[]
shortArr
=
new
short
?[
5
]
{
short
.
MinValue
+
1
,
-
200
,
null
,
100
,
short
.
MaxValue
};
int
?[]
intArr
=
new
int
?[
5
]
{
-
200
,
-
100
,
null
,
0
,
300
};
long
?[]
longArr
=
new
long
?[
5
]
{
long
.
MinValue
+
1
,
-
2000
,
null
,
1000
,
long
.
MaxValue
};
mBinds
[
0
]
=
TaosMultiBind
.
MultiBindTimestamp
(
tsArr
);
mBinds
[
1
]
=
TaosMultiBind
.
MultiBindTinyInt
(
tinyIntArr
);
mBinds
[
2
]
=
TaosMultiBind
.
MultiBindSmallInt
(
shortArr
);
mBinds
[
3
]
=
TaosMultiBind
.
MultiBindInt
(
intArr
);
mBinds
[
4
]
=
TaosMultiBind
.
MultiBindBigint
(
longArr
);
return
mBinds
;
}
//Unsigned Integer
public
TAOS_MULTI_BIND
[]
InitMultBindArr2
()
{
TAOS_MULTI_BIND
[]
mBinds
=
new
TAOS_MULTI_BIND
[
5
];
long
[]
tsArr
=
new
long
[
5
]
{
1637064040000
,
1637064041000
,
1637064042000
,
1637064043000
,
1637064044000
};
byte
?[]
uTinyIntArr
=
new
byte
?[
5
]
{
byte
.
MinValue
,
0
,
null
,
89
,
byte
.
MaxValue
-
1
};
ushort
?[]
uShortArr
=
new
ushort
?[
5
]
{
ushort
.
MinValue
,
0
,
null
,
400
,
ushort
.
MaxValue
-
1
};
uint
?[]
uIntArr
=
new
uint
?[
5
]
{
uint
.
MinValue
,
0
,
null
,
2001
,
uint
.
MaxValue
-
1
};
ulong
?[]
uLongArr
=
new
ulong
?[
5
]
{
ulong
.
MinValue
,
0
,
null
,
1000
,
long
.
MaxValue
-
1
};
mBinds
[
0
]
=
TaosMultiBind
.
MultiBindTimestamp
(
tsArr
);
mBinds
[
1
]
=
TaosMultiBind
.
MultiBindUTinyInt
(
uTinyIntArr
);
mBinds
[
2
]
=
TaosMultiBind
.
MultiBindUSmallInt
(
uShortArr
);
mBinds
[
3
]
=
TaosMultiBind
.
MultiBindUInt
(
uIntArr
);
mBinds
[
4
]
=
TaosMultiBind
.
MultiBindUBigInt
(
uLongArr
);
return
mBinds
;
}
//float and double
public
TAOS_MULTI_BIND
[]
InitMultBindArr3
()
{
TAOS_MULTI_BIND
[]
mBinds
=
new
TAOS_MULTI_BIND
[
3
];
long
[]
tsArr
=
new
long
[
5
]
{
1637064040000
,
1637064041000
,
1637064042000
,
1637064043000
,
1637064044000
};
float
?[]
floatArr
=
new
float
?[
5
]
{
float
.
MinValue
+
1
,
-
12.1F
,
null
,
0F
,
float
.
MaxValue
};
double
?[]
doubleArr
=
new
double
?[
5
]
{
double
.
MinValue
+
1
,
-
19.112D
,
null
,
0D
,
double
.
MaxValue
};
mBinds
[
0
]
=
TaosMultiBind
.
MultiBindTimestamp
(
tsArr
);
mBinds
[
1
]
=
TaosMultiBind
.
MultiBindFloat
(
floatArr
);
mBinds
[
2
]
=
TaosMultiBind
.
MultiBindDouble
(
doubleArr
);
return
mBinds
;
}
//binary and nchar
public
TAOS_MULTI_BIND
[]
InitMultBindArr4
()
{
TAOS_MULTI_BIND
[]
mBinds
=
new
TAOS_MULTI_BIND
[
3
];
long
[]
tsArr
=
new
long
[
3
]
{
1637064040000
,
1637064041000
,
1637064042000
};
string
[]
binaryArr
=
new
string
[
3
]
{
"abcdABCD123`~!@#$%^&*()-=+_[]{}:;\",.<>/?"
,
String
.
Empty
,
null
};
string
[]
ncharArr
=
new
string
[
3
]
{
"abcdABCD123`~!@#$%^&*()-=+_[]{}:;\",.<>/?涛思"
,
null
,
string
.
Empty
};
mBinds
[
0
]
=
TaosMultiBind
.
MultiBindTimestamp
(
tsArr
);
mBinds
[
1
]
=
TaosMultiBind
.
MultiBindBinary
(
binaryArr
);
mBinds
[
2
]
=
TaosMultiBind
.
MultiBindNchar
(
ncharArr
);
return
mBinds
;
}
static
void
Main
(
string
[]
args
)
{
stmtfunction
test
=
new
stmtfunction
();
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
Console
.
WriteLine
(
"Start Stmtfunction case1 insert Testing..."
);
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
//Init and connect TDengine
test
.
InitTDengine
();
test
.
ConnectTDengine
();
//create database
test
.
executeQuery
(
"drop database if exists csharptest"
);
test
.
executeQuery
(
"create database if not exists csharptest "
);
test
.
executeQuery
(
"use csharptest"
);
test
.
executeQuery
(
"drop table if exists stmttest"
);
//case1:tinyint,smallint,int,bigint
string
createTable1
=
"create stable stmttest1 (ts timestamp,c1 tinyint,c2 smallint,c3 int,c4 bigint) tags(t1 tinyint,t2 smallint,t3 int,t4 bigint)"
;
test
.
executeQuery
(
createTable1
);
test
.
StmtInit
();
test
.
StmtPrepare
(
"insert into ? using stmttest1 tags(?,?,?,?) values(?,?,?,?,?)"
);
TAOS_BIND
[]
Ibinds
=
test
.
InitBindArr1
();
TAOS_MULTI_BIND
[]
Imbinds
=
test
.
InitMultBindArr1
();
test
.
SetTableNameTags
(
"t1"
,
Ibinds
);
test
.
BindParamBatch
(
Imbinds
);
test
.
AddBatch
();
test
.
StmtExecute
();
TaosBind
.
FreeTaosBind
(
Ibinds
);
TaosMultiBind
.
FreeTaosBind
(
Imbinds
);
test
.
StmtClose
();
//select
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
Console
.
WriteLine
(
"start Stmtfunction case1 select Testing..."
);
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
test
.
StmtInit
();
test
.
StmtPrepare
(
"select * from t1 where c1>? and c2 >?"
);
TAOS_BIND
[]
queryCondition1
=
new
TAOS_BIND
[
2
];
queryCondition1
[
0
]
=
TaosBind
.
BindTinyInt
(
0
);
queryCondition1
[
1
]
=
TaosBind
.
BindInt
(
100
);
test
.
BindParam
(
queryCondition1
);
test
.
StmtExecute
();
test
.
StmtUseResult
();
test
.
StmtClose
();
TaosBind
.
FreeTaosBind
(
queryCondition1
);
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
Console
.
WriteLine
(
"Stop Stmtfunction case1 Testing..."
);
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
// //case2:utinyint,usmallint,uint,ubigint
string
createTable2
=
"create stable stmttest2 (ts timestamp,c1 tinyint unsigned,c2 smallint unsigned,c3 int unsigned,c4 bigint unsigned)"
+
" tags(t1 tinyint unsigned,t2 smallint unsigned,t3 int unsigned,t4 bigint unsigned)"
;
test
.
executeQuery
(
createTable2
);
test
.
StmtInit
();
test
.
StmtPrepare
(
"insert into ? using stmttest2 tags(?,?,?,?) values(?,?,?,?,?)"
);
TAOS_BIND
[]
Ubinds
=
test
.
InitBindArr2
();
TAOS_MULTI_BIND
[]
Umbinds
=
test
.
InitMultBindArr2
();
test
.
SetTableNameTags
(
"t2"
,
Ubinds
);
test
.
BindParamBatch
(
Umbinds
);
test
.
AddBatch
();
test
.
StmtExecute
();
TaosBind
.
FreeTaosBind
(
Ubinds
);
TaosMultiBind
.
FreeTaosBind
(
Umbinds
);
test
.
StmtClose
();
//select
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
Console
.
WriteLine
(
"start Stmtfunction case2 select Testing..."
);
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
test
.
StmtInit
();
test
.
StmtPrepare
(
"select * from t2 where c1>? and c3 >?"
);
TAOS_BIND
[]
queryCondition2
=
new
TAOS_BIND
[
2
];
queryCondition2
[
0
]
=
TaosBind
.
BindUTinyInt
(
80
);
queryCondition2
[
1
]
=
TaosBind
.
BindUInt
(
1000
);
test
.
BindParam
(
queryCondition2
);
test
.
StmtExecute
();
test
.
StmtUseResult
();
test
.
StmtClose
();
TaosBind
.
FreeTaosBind
(
queryCondition2
);
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
Console
.
WriteLine
(
"Stop Stmtfunction case2 Testing..."
);
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
// //case3:float,double
string
createTable3
=
"create stable stmttest3 (ts timestamp,c1 float,c2 double)"
+
" tags(t1 float,t2 float,t3 float,t4 double,t5 double,t6 double)"
;
test
.
executeQuery
(
createTable3
);
test
.
StmtInit
();
test
.
StmtPrepare
(
"insert into ? using stmttest3 tags(?,?,?,?,?,?) values(?,?,?)"
);
TAOS_BIND
[]
fdbinds
=
test
.
InitBindArr3
();
TAOS_MULTI_BIND
[]
fdmbinds
=
test
.
InitMultBindArr3
();
test
.
SetTableNameTags
(
"t3"
,
fdbinds
);
test
.
BindParamBatch
(
fdmbinds
);
test
.
AddBatch
();
test
.
StmtExecute
();
TaosBind
.
FreeTaosBind
(
fdbinds
);
TaosMultiBind
.
FreeTaosBind
(
fdmbinds
);
test
.
StmtClose
();
//select
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
Console
.
WriteLine
(
"start Stmtfunction case3 select Testing..."
);
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
test
.
StmtInit
();
test
.
StmtPrepare
(
"select * from t3 where c1>? and c2 >?"
);
TAOS_BIND
[]
queryCondition3
=
new
TAOS_BIND
[
2
];
queryCondition3
[
0
]
=
TaosBind
.
BindFloat
(
80
);
queryCondition3
[
1
]
=
TaosBind
.
BindDouble
(
1000
);
test
.
BindParam
(
queryCondition3
);
test
.
StmtExecute
();
test
.
StmtUseResult
();
test
.
StmtClose
();
TaosBind
.
FreeTaosBind
(
queryCondition3
);
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
Console
.
WriteLine
(
"Stop Stmtfunction case3 Testing..."
);
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
//case4:binary,nchar
string
createTable4
=
"create stable stmttest4 (ts timestamp,c1 binary(50),c2 nchar(50))tags(t1 binary(50),t2 nchar(50))"
;
//Console.WriteLine(createTable4);
test
.
executeQuery
(
createTable4
);
test
.
StmtInit
();
test
.
StmtPrepare
(
"insert into ? using stmttest4 tags(?,?) values(?,?,?)"
);
TAOS_BIND
[]
bnbinds
=
test
.
InitBindArr4
();
TAOS_MULTI_BIND
[]
bnmbinds
=
test
.
InitMultBindArr4
();
test
.
SetTableNameTags
(
"t4"
,
bnbinds
);
test
.
BindParamBatch
(
bnmbinds
);
test
.
AddBatch
();
test
.
StmtExecute
();
TaosBind
.
FreeTaosBind
(
bnbinds
);
TaosMultiBind
.
FreeTaosBind
(
bnmbinds
);
test
.
StmtClose
();
//select
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
Console
.
WriteLine
(
"start Stmtfunction case4 select Testing..."
);
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
test
.
StmtInit
();
test
.
StmtPrepare
(
"select * from t4 where c1 match ?"
);
TAOS_BIND
[]
queryCondition4
=
new
TAOS_BIND
[
1
];
queryCondition4
[
0
]
=
TaosBind
.
BindBinary
(
"\"^a\""
);
test
.
BindParam
(
queryCondition4
);
test
.
StmtExecute
();
test
.
StmtUseResult
();
test
.
StmtClose
();
TaosBind
.
FreeTaosBind
(
queryCondition4
);
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
Console
.
WriteLine
(
"Stop Stmtfunction case4 Testing..."
);
Console
.
WriteLine
(
"---------------------------------------------------------------"
);
test
.
CloseConnection
();
ExitProgram
();
}
//Start here are the framework functions
public
void
InitTDengine
()
{
TDengine
.
Options
((
int
)
TDengineInitOption
.
TDDB_OPTION_CONFIGDIR
,
this
.
configDir
);
TDengine
.
Options
((
int
)
TDengineInitOption
.
TDDB_OPTION_SHELL_ACTIVITY_TIMER
,
"60"
);
Console
.
WriteLine
(
"init..."
);
TDengine
.
Init
();
Console
.
WriteLine
(
"get connection starting..."
);
}
public
void
ConnectTDengine
()
{
string
db
=
""
;
this
.
conn
=
TDengine
.
Connect
(
host
,
this
.
user
,
this
.
passwd
,
db
,
this
.
port
);
if
(
this
.
conn
==
IntPtr
.
Zero
)
{
Console
.
WriteLine
(
"connection failed: "
+
this
.
host
);
ExitProgramFailed
();
}
else
{
Console
.
WriteLine
(
"[ OK ] Connection established."
);
}
}
public
void
StmtInit
()
{
this
.
stmt
=
TDengine
.
StmtInit
(
conn
);
if
(
this
.
stmt
==
IntPtr
.
Zero
)
{
Console
.
WriteLine
(
"Init stmt failed"
);
ExitProgramFailed
();
}
else
{
Console
.
WriteLine
(
"Init stmt success"
);
}
}
public
void
StmtPrepare
(
string
sql
)
{
int
res
=
TDengine
.
StmtPrepare
(
this
.
stmt
,
sql
);
if
(
res
==
0
)
{
Console
.
WriteLine
(
"stmt prepare success"
);
}
else
{
Console
.
WriteLine
(
"stmt prepare failed "
+
TDengine
.
StmtErrorStr
(
stmt
));
ExitProgramFailed
();
}
}
public
void
SetTableName
(
String
tableName
)
{
int
res
=
TDengine
.
StmtSetTbname
(
this
.
stmt
,
tableName
);
Console
.
WriteLine
(
"setTableName():"
+
res
);
if
(
res
==
0
)
{
Console
.
WriteLine
(
"set_tbname success"
);
}
else
{
Console
.
Write
(
"set_tbname failed, "
+
TDengine
.
StmtErrorStr
(
stmt
));
StmtClose
();
ExitProgramFailed
();
}
}
public
void
executeQuery
(
String
sql
)
{
IntPtr
res
=
TDengine
.
Query
(
conn
,
sql
);
if
((
res
==
IntPtr
.
Zero
)
||
(
TDengine
.
ErrorNo
(
res
)
!=
0
))
{
Console
.
Write
(
sql
.
ToString
()
+
" failure, "
);
if
(
res
!=
IntPtr
.
Zero
)
{
Console
.
Write
(
"reason: "
+
TDengine
.
Error
(
res
));
}
Console
.
WriteLine
(
""
);
ExitProgramFailed
();
}
else
{
Console
.
WriteLine
(
sql
.
ToString
()
+
" success"
);
}
TDengine
.
FreeResult
(
res
);
}
public
void
SetTableNameTags
(
String
tableName
,
TAOS_BIND
[]
tags
)
{
int
res
=
TDengine
.
StmtSetTbnameTags
(
this
.
stmt
,
tableName
,
tags
);
if
(
res
==
0
)
{
Console
.
WriteLine
(
"set tbname && tags success"
);
}
else
{
Console
.
Write
(
"set tbname && tags failed, "
+
TDengine
.
StmtErrorStr
(
stmt
));
StmtClose
();
ExitProgramFailed
();
}
}
public
void
SetSubTableName
(
string
name
)
{
int
res
=
TDengine
.
StmtSetSubTbname
(
this
.
stmt
,
name
);
if
(
res
==
0
)
{
Console
.
WriteLine
(
"set subtable name success"
);
}
else
{
Console
.
Write
(
"set subtable name failed, "
+
TDengine
.
StmtErrorStr
(
stmt
));
StmtClose
();
ExitProgramFailed
();
}
}
public
void
BindParam
(
TAOS_BIND
[]
binds
)
{
Console
.
WriteLine
(
"in bindParam()"
);
int
res
=
TDengine
.
StmtBindParam
(
this
.
stmt
,
binds
);
if
(
res
==
0
)
{
Console
.
WriteLine
(
"bind para success"
);
}
else
{
Console
.
Write
(
"bind para failed, "
+
TDengine
.
StmtErrorStr
(
stmt
));
StmtClose
();
ExitProgramFailed
();
}
}
public
void
BindSingleParamBatch
(
TAOS_MULTI_BIND
bind
,
int
index
)
{
int
res
=
TDengine
.
StmtBindSingleParamBatch
(
this
.
stmt
,
ref
bind
,
index
);
if
(
res
==
0
)
{
Console
.
WriteLine
(
"single bind batch success"
);
}
else
{
Console
.
Write
(
"single bind batch failed: "
+
TDengine
.
StmtErrorStr
(
stmt
));
StmtClose
();
ExitProgramFailed
();
}
}
public
void
BindParamBatch
(
TAOS_MULTI_BIND
[]
bind
)
{
int
res
=
TDengine
.
StmtBindParamBatch
(
this
.
stmt
,
bind
);
if
(
res
==
0
)
{
Console
.
WriteLine
(
"bind parameter batch success"
);
}
else
{
Console
.
WriteLine
(
"bind parameter batch failed, "
+
TDengine
.
StmtErrorStr
(
stmt
));
StmtClose
();
ExitProgramFailed
();
}
}
public
void
AddBatch
()
{
int
res
=
TDengine
.
StmtAddBatch
(
this
.
stmt
);
if
(
res
==
0
)
{
Console
.
WriteLine
(
"stmt add batch success"
);
}
else
{
Console
.
Write
(
"stmt add batch failed,reason: "
+
TDengine
.
StmtErrorStr
(
stmt
));
StmtClose
();
ExitProgramFailed
();
}
}
public
void
StmtExecute
()
{
int
res
=
TDengine
.
StmtExecute
(
this
.
stmt
);
if
(
res
==
0
)
{
Console
.
WriteLine
(
"Execute stmt success"
);
}
else
{
Console
.
Write
(
"Execute stmt failed,reason: "
+
TDengine
.
StmtErrorStr
(
stmt
));
StmtClose
();
ExitProgramFailed
();
}
}
public
void
StmtClose
()
{
int
res
=
TDengine
.
StmtClose
(
this
.
stmt
);
if
(
res
==
0
)
{
Console
.
WriteLine
(
"close stmt success"
);
}
else
{
Console
.
WriteLine
(
"close stmt failed, "
+
TDengine
.
StmtErrorStr
(
stmt
));
StmtClose
();
ExitProgramFailed
();
}
}
public
void
CloseConnection
()
{
if
(
this
.
conn
!=
IntPtr
.
Zero
)
{
if
(
TDengine
.
Close
(
this
.
conn
)
==
0
)
{
Console
.
WriteLine
(
"close connection sucess"
);
}
else
{
Console
.
WriteLine
(
"close Connection failed"
);
ExitProgramFailed
();
}
}
}
//select only
public
void
StmtUseResult
()
{
IntPtr
res
=
TDengine
.
StmtUseResult
(
this
.
stmt
);
if
((
res
==
IntPtr
.
Zero
)
||
(
TDengine
.
ErrorNo
(
res
)
!=
0
))
{
if
(
res
!=
IntPtr
.
Zero
)
{
Console
.
Write
(
"reason: "
+
TDengine
.
Error
(
res
));
}
Console
.
WriteLine
(
""
);
StmtClose
();
CloseConnection
();
ExitProgramFailed
();
}
else
{
Console
.
WriteLine
(
"{0},query success"
);
DisplayRes
(
res
);
TDengine
.
FreeResult
(
res
);
}
}
public
void
DisplayRes
(
IntPtr
res
)
{
long
queryRows
=
0
;
if
((
res
==
IntPtr
.
Zero
)
||
(
TDengine
.
ErrorNo
(
res
)
!=
0
))
{
if
(
res
!=
IntPtr
.
Zero
)
{
Console
.
Write
(
"reason: "
+
TDengine
.
Error
(
res
));
}
Console
.
WriteLine
(
""
);
ExitProgramFailed
();
}
int
fieldCount
=
TDengine
.
FieldCount
(
res
);
List
<
TDengineMeta
>
metas
=
TDengine
.
FetchFields
(
res
);
for
(
int
j
=
0
;
j
<
metas
.
Count
;
j
++)
{
TDengineMeta
meta
=
(
TDengineMeta
)
metas
[
j
];
}
IntPtr
rowdata
;
StringBuilder
builder
=
new
StringBuilder
();
while
((
rowdata
=
TDengine
.
FetchRows
(
res
))
!=
IntPtr
.
Zero
)
{
queryRows
++;
for
(
int
fields
=
0
;
fields
<
fieldCount
;
++
fields
)
{
TDengineMeta
meta
=
metas
[
fields
];
int
offset
=
IntPtr
.
Size
*
fields
;
IntPtr
data
=
Marshal
.
ReadIntPtr
(
rowdata
,
offset
);
builder
.
Append
(
"---"
);
if
(
data
==
IntPtr
.
Zero
)
{
builder
.
Append
(
"NULL"
);
continue
;
}
switch
((
TDengineDataType
)
meta
.
type
)
{
case
TDengineDataType
.
TSDB_DATA_TYPE_BOOL
:
bool
v1
=
Marshal
.
ReadByte
(
data
)
==
0
?
false
:
true
;
builder
.
Append
(
v1
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_TINYINT
:
byte
v2
=
Marshal
.
ReadByte
(
data
);
builder
.
Append
(
v2
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_SMALLINT
:
short
v3
=
Marshal
.
ReadInt16
(
data
);
builder
.
Append
(
v3
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_INT
:
int
v4
=
Marshal
.
ReadInt32
(
data
);
builder
.
Append
(
v4
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_BIGINT
:
long
v5
=
Marshal
.
ReadInt64
(
data
);
builder
.
Append
(
v5
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_FLOAT
:
float
v6
=
(
float
)
Marshal
.
PtrToStructure
(
data
,
typeof
(
float
));
builder
.
Append
(
v6
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_DOUBLE
:
double
v7
=
(
double
)
Marshal
.
PtrToStructure
(
data
,
typeof
(
double
));
builder
.
Append
(
v7
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_BINARY
:
string
v8
=
Marshal
.
PtrToStringAnsi
(
data
);
builder
.
Append
(
v8
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_TIMESTAMP
:
long
v9
=
Marshal
.
ReadInt64
(
data
);
builder
.
Append
(
v9
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_NCHAR
:
string
v10
=
Marshal
.
PtrToStringAnsi
(
data
);
builder
.
Append
(
v10
);
break
;
}
}
builder
.
Append
(
"---"
);
if
(
queryRows
<=
10
)
{
Console
.
WriteLine
(
builder
.
ToString
());
}
builder
.
Clear
();
}
if
(
TDengine
.
ErrorNo
(
res
)
!=
0
)
{
Console
.
Write
(
"Query is not complete, Error {0:G}"
,
TDengine
.
ErrorNo
(
res
),
TDengine
.
Error
(
res
));
}
Console
.
WriteLine
(
""
);
}
public
static
void
ExitProgram
()
{
TDengine
.
Cleanup
();
System
.
Environment
.
Exit
(
0
);
}
public
static
void
ExitProgramFailed
()
{
TDengine
.
Cleanup
();
System
.
Environment
.
Exit
(
1
);
}
}
}
tests/system-test/3-connectors/c#/stmtfunction/stmtfunction.csproj
0 → 100644
浏览文件 @
ac423f56
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\TDengineDriver\TDengineDriver.csproj" />
</ItemGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<!-- <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> -->
</PropertyGroup>
</Project>
tests/system-test/3-connectors/c#/test.sh
浏览文件 @
ac423f56
...
...
@@ -26,6 +26,9 @@ dotnet run --project C#checker/C#checker.csproj
dotnet run
--project
TDengineTest/TDengineTest.csproj
dotnet run
--project
schemaless/schemaless.csproj
cd
${
WKC
}
/tests/system-test/3-connectors/c#/stmtfunction
dotnet run
||
exit
1
cd
${
WKC
}
/tests/examples/C#/taosdemo
dotnet build
-c
Release
tree |
true
...
...
tests/system-test/3-connectors/go/test.sh
浏览文件 @
ac423f56
...
...
@@ -17,4 +17,3 @@ nohup taosd -c /etc/taos/ > /dev/null 2>&1 &
sleep
10
cd
../../
WKC
=
`
pwd
`
tests/system-test/fulltest-insert.sh
浏览文件 @
ac423f56
python3 test.py
-f
1-insert/TD-11970.py
python3 test.py
-f
1-insert/stmt_error.py
python3 test.py
-f
1-insert/Null_tag_Line_insert.py
tests/test-CI.sh
浏览文件 @
ac423f56
...
...
@@ -124,11 +124,9 @@ function runPyCaseOneByOnefq() {
else
echo
$line
if
[[
$line
=
~ ^bash.
*
]]
;
then
# $line > case.log 2>&1 || cat case.log && exit 8
# cat case.log
$line
>
case
.log 2>&1
cat
case
.log
if
[
$?
-ne
0
]
;
then
cat
case
.log
exit
8
fi
fi
...
...
tests/test-all.sh
浏览文件 @
ac423f56
...
...
@@ -139,17 +139,17 @@ function runPyCaseOneByOne {
case
=
`
echo
$line
|awk
'{print $NF}'
`
fi
start_time
=
`
date
+%s
`
date
+%F
\
%T
|
tee
-a
pytest-out.log
date
+%F
\
%T
|
tee
-a
$tests_dir
/
pytest-out.log
echo
-n
$case
$line
>
/dev/null 2>&1
&&
\
echo
-e
"
${
GREEN
}
success
${
NC
}
"
|
tee
-a
pytest-out.log
||
\
echo
-e
"
${
RED
}
failed
${
NC
}
"
|
tee
-a
pytest-out.log
echo
-e
"
${
GREEN
}
success
${
NC
}
"
|
tee
-a
$tests_dir
/
pytest-out.log
||
\
echo
-e
"
${
RED
}
failed
${
NC
}
"
|
tee
-a
$tests_dir
/
pytest-out.log
end_time
=
`
date
+%s
`
out_log
=
`
tail
-1
pytest-out.log
`
# if [[ $out_log =~ 'failed' ]];then
# exit 8
# fi
echo
execution
time
of
$case
was
`
expr
$end_time
-
$start_time
`
s.
|
tee
-a
pytest-out.log
echo
execution
time
of
$case
was
`
expr
$end_time
-
$start_time
`
s.
|
tee
-a
$tests_dir
/
pytest-out.log
else
$line
>
/dev/null 2>&1
fi
...
...
@@ -339,10 +339,9 @@ if [ "$2" != "sim" ] && [ "$2" != "jdbc" ] && [ "$2" != "unit" ] && [ "$2" != "
export
LD_LIBRARY_PATH
=
$TOP_DIR
/
$LIB_DIR
:
$LD_LIBRARY_PATH
[
-f
$tests_dir
/pytest-out.log
]
&&
rm
-f
$tests_dir
/pytest-out.log
cd
$tests_dir
/pytest
[
-f
pytest-out.log
]
&&
rm
-f
pytest-out.log
if
[
"
$1
"
==
"cron"
]
;
then
echo
"### run Python regression test ###"
runPyCaseOneByOne regressiontest.sh
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录