fix
This commit is contained in:
5
.env
Normal file
5
.env
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# MongoDB Atlas 连接字符串
|
||||||
|
# 请将下方的连接字符串替换为你自己的MongoDB Atlas连接字符串
|
||||||
|
# MONGODB_URI=mongodb+srv://<username>:<password>@cluster0.xxxxx.mongodb.net/suggestions?retryWrites=true&w=majority
|
||||||
|
MONGODB_URI=mongodb+srv://devops:u8yRO4OyhqXBhLjW@cluster0.izylsxc.mongodb.net/suggestions?retryWrites=true&w=majority
|
||||||
|
PORT=3000
|
||||||
0
.gitignore
vendored
Normal file
0
.gitignore
vendored
Normal file
35
README.md
Normal file
35
README.md
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# MongoDB Atlas 配置指南
|
||||||
|
|
||||||
|
## 步骤 1: 创建 MongoDB Atlas 账号
|
||||||
|
1. 访问 https://www.mongodb.com/cloud/atlas
|
||||||
|
2. 注册免费账号
|
||||||
|
3. 创建免费集群 (Free Tier)
|
||||||
|
|
||||||
|
## 步骤 2: 获取连接字符串
|
||||||
|
1. 在 Atlas 面板,点击 "Connect"
|
||||||
|
2. 选择 "Connect your application"
|
||||||
|
3. 复制连接字符串,格式类似:
|
||||||
|
```
|
||||||
|
mongodb+srv://<username>:<password>@cluster0.xxxxx.mongodb.net/suggestions?retryWrites=true&w=majority
|
||||||
|
```
|
||||||
|
|
||||||
|
## 步骤 3: 配置 .env 文件
|
||||||
|
编辑项目根目录的 `.env` 文件:
|
||||||
|
```
|
||||||
|
MONGODB_URI=你的连接字符串
|
||||||
|
PORT=3000
|
||||||
|
```
|
||||||
|
|
||||||
|
**注意**: 将 `<username>` 和 `<password>` 替换为你的数据库用户名和密码。
|
||||||
|
|
||||||
|
## 步骤 4: 运行项目
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
npm start
|
||||||
|
```
|
||||||
|
|
||||||
|
访问 http://localhost:3000
|
||||||
|
|
||||||
|
## API 说明
|
||||||
|
- `POST /api/suggestions` - 提交建议
|
||||||
|
- `GET /api/suggestions/:id` - 查询建议进度
|
||||||
16
node_modules/.bin/mime
generated
vendored
Normal file
16
node_modules/.bin/mime
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../mime/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../mime/cli.js" "$@"
|
||||||
|
fi
|
||||||
17
node_modules/.bin/mime.cmd
generated
vendored
Normal file
17
node_modules/.bin/mime.cmd
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mime\cli.js" %*
|
||||||
28
node_modules/.bin/mime.ps1
generated
vendored
Normal file
28
node_modules/.bin/mime.ps1
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../mime/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../mime/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../mime/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../mime/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
1099
node_modules/.package-lock.json
generated
vendored
Normal file
1099
node_modules/.package-lock.json
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
22
node_modules/@mongodb-js/saslprep/LICENSE
generated
vendored
Normal file
22
node_modules/@mongodb-js/saslprep/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
Copyright (c) 2014 Dmitry Tsvettsikh
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person
|
||||||
|
obtaining a copy of this software and associated documentation
|
||||||
|
files (the "Software"), to deal in the Software without
|
||||||
|
restriction, including without limitation the rights to use,
|
||||||
|
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following
|
||||||
|
conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
4
node_modules/@mongodb-js/saslprep/dist/.esm-wrapper.mjs
generated
vendored
Normal file
4
node_modules/@mongodb-js/saslprep/dist/.esm-wrapper.mjs
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
import mod from "./node.js";
|
||||||
|
|
||||||
|
export default mod;
|
||||||
|
export const saslprep = mod.saslprep;
|
||||||
5
node_modules/@mongodb-js/saslprep/dist/browser.d.ts
generated
vendored
Normal file
5
node_modules/@mongodb-js/saslprep/dist/browser.d.ts
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
declare const saslprep: (input: string, opts?: {
|
||||||
|
allowUnassigned?: boolean;
|
||||||
|
} | undefined) => string;
|
||||||
|
export = saslprep;
|
||||||
|
//# sourceMappingURL=browser.d.ts.map
|
||||||
1
node_modules/@mongodb-js/saslprep/dist/browser.d.ts.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/browser.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,QAAQ;;wBAAmC,CAAC;AAIlD,SAAS,QAAQ,CAAC"}
|
||||||
12
node_modules/@mongodb-js/saslprep/dist/browser.js
generated
vendored
Normal file
12
node_modules/@mongodb-js/saslprep/dist/browser.js
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
"use strict";
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
const index_1 = __importDefault(require("./index"));
|
||||||
|
const memory_code_points_1 = require("./memory-code-points");
|
||||||
|
const code_points_data_browser_1 = __importDefault(require("./code-points-data-browser"));
|
||||||
|
const codePoints = (0, memory_code_points_1.createMemoryCodePoints)(code_points_data_browser_1.default);
|
||||||
|
const saslprep = index_1.default.bind(null, codePoints);
|
||||||
|
Object.assign(saslprep, { saslprep, default: saslprep });
|
||||||
|
module.exports = saslprep;
|
||||||
|
//# sourceMappingURL=browser.js.map
|
||||||
1
node_modules/@mongodb-js/saslprep/dist/browser.js.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/browser.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":";;;;AAAA,oDAAgC;AAChC,6DAA8D;AAC9D,0FAA8C;AAE9C,MAAM,UAAU,GAAG,IAAA,2CAAsB,EAAC,kCAAI,CAAC,CAAC;AAEhD,MAAM,QAAQ,GAAG,eAAS,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AAEzD,iBAAS,QAAQ,CAAC"}
|
||||||
3
node_modules/@mongodb-js/saslprep/dist/code-points-data-browser.d.ts
generated
vendored
Normal file
3
node_modules/@mongodb-js/saslprep/dist/code-points-data-browser.d.ts
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
declare const data: Buffer<ArrayBuffer>;
|
||||||
|
export default data;
|
||||||
|
//# sourceMappingURL=code-points-data-browser.d.ts.map
|
||||||
1
node_modules/@mongodb-js/saslprep/dist/code-points-data-browser.d.ts.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/code-points-data-browser.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"code-points-data-browser.d.ts","sourceRoot":"","sources":["../src/code-points-data-browser.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,IAAI,qBAGT,CAAC;AACF,eAAe,IAAI,CAAC"}
|
||||||
5
node_modules/@mongodb-js/saslprep/dist/code-points-data-browser.js
generated
vendored
Normal file
5
node_modules/@mongodb-js/saslprep/dist/code-points-data-browser.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
node_modules/@mongodb-js/saslprep/dist/code-points-data-browser.js.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/code-points-data-browser.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"code-points-data-browser.js","sourceRoot":"","sources":["../src/code-points-data-browser.ts"],"names":[],"mappings":";;AAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CACtB,8sliBAA8sliB,EAC9sliB,QAAQ,CACT,CAAC;AACF,kBAAe,IAAI,CAAC"}
|
||||||
3
node_modules/@mongodb-js/saslprep/dist/code-points-data.d.ts
generated
vendored
Normal file
3
node_modules/@mongodb-js/saslprep/dist/code-points-data.d.ts
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
declare const _default: Buffer<ArrayBufferLike>;
|
||||||
|
export default _default;
|
||||||
|
//# sourceMappingURL=code-points-data.d.ts.map
|
||||||
1
node_modules/@mongodb-js/saslprep/dist/code-points-data.d.ts.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/code-points-data.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"code-points-data.d.ts","sourceRoot":"","sources":["../src/code-points-data.ts"],"names":[],"mappings":";AAEA,wBAKE"}
|
||||||
5
node_modules/@mongodb-js/saslprep/dist/code-points-data.js
generated
vendored
Normal file
5
node_modules/@mongodb-js/saslprep/dist/code-points-data.js
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const zlib_1 = require("zlib");
|
||||||
|
exports.default = (0, zlib_1.gunzipSync)(Buffer.from('H4sIAAAAAAACA+3dTYgcaRkA4LemO9Mhxm0FITnE9Cwr4jHgwgZ22B6YywqCJ0HQg5CL4sGTuOjCtGSF4CkHEW856MlTQHD3EJnWkU0Owh5VxE3LHlYQdNxd2U6mU59UV/d09fw4M2EySSXPAzNdP1/9fX/99bzVNZEN4jisRDulVFnQmLxm1aXF9Id/2/xMxNJ4XZlg576yuYlGt9gupV6xoFf8jhu9YvulVrFlp5XSx+lfvYhORGPXvqIRWSxERKtIm8bKFd10WNfKDS5Fo9jJWrq2+M2IlW+8uHgl/+BsROfPF4v5L7148Ur68Sha6dqZpYiVVy8tvLCWXo80Sf/lS89dGX2wHGvpzoXVn75/YWH5wmqe8uika82ViJXTy83Ve2k5Urozm38wm4/ls6t5uT6yfsTSJ7J3T0VKt8c5ExEXI8aFkH729c3eT+7EC6ca8cVULZUiYacX0R5PNWNxlh9L1y90q5kyzrpyy+9WcvOV6URntqw7La9sNVstXyczWVaWYbaaTYqzOHpr7pyiNT3/YzKuT63Z/FqKZlFTiuXtFM2vVOtIq7jiyKJbWZaOWD0euz0yoV2Z7kY0xq2x0YhfzVpmM5px9nTEH7JZ0ot5u39p0ma75Z472/s/H+2yr2inYyuq7fMvJivH2rM72N/Z3lyL31F2b1ya1P0zn816k2KP6JU9UzseucdQH5YqVeH/lFajSN2udg+TLJ9rksNxlvV2lki19rXKI43TPLejFu4ov7k3nMbhyhfY3Xb37f8BAGCf0eMTOH5szf154KmnNgKcnLb+Fzi2AfXktbN7fJelwTAiO/W5uQ2KINXRYu+znqo/WTAdLadURHmy3qciazd3bra4T3w16/f7t7Ms9U5gfJu10955sx1r3vmhBAAAAAAAgId20J1iZbDowNvIjuH427Gr5l/eiC+8OplZON8sVjx/qr9y+Pj+YRItT+NqAM+kkZs3AAAAAID6yfx1FwCAI97/dCh1/ub6SA0AAAAAAAAAgNoT/wcAAAAAAACA+hP/BwAAAAAAAID6E/8HAAAAAAAAgPoT/wcAAAAAAACA+hP/BwAAAAAAAID6E/8HAAAAAAAAgPoT/wcAAAAAAACA+hP/BwAAAAAAAID6E/8HAAAAAAAAgPoT/wcAAAAAAACA+hutp5SiQpYAAAAAAAAAQO2MIpZiT804flnAE2fhwjOeAZXr76kOAAAAAAAA8FjNf4N/l0NE3U/vuVQskLpSd4/Yh2xu9xTu0tFeeNYsLI2f/VMdNxTzj6Je9E/+6pp6Nn3awW3A54goe4Bss6v+PGsjQGMAAAAAAOBp5XEgwH6e7J7rwEQHRb/XvAMAAAAAAAA8yzoDeQDwVGjIAgAAAAAAAACoPfF/AAAAAAAAAKg/8X8AAAAAAAAAqD/xfwAAAAAAAACoP/F/AAAAAAAAAKg/8X8AAAAAAAAAqD/xfwAAAAAAAACoP/F/AAAAAAAAAKg/8X8AAAAAAAAAqD/xfwAAAAAAAACoP/F/AAAAAAAAAKg/8X8AAAAAAAAAqL/GSkSkClkCAAAAAAAAALXTSAAAAAAAAABA3Y1kAQAAAAAAAADUX8RSXZ9dsHC9+M8Fg2Ex/em1lAZpEBGttcrVjZqLEa+k0XpKw9mG4zWx4ukPUMhkAQAAAAAAABzBqbSe3//rXOS9HxGdo4TqR2XkutCdBu+LaPZw/lBbO7cbHnh2C7N7AIo4evEznllqLqWUp/LnYOtpM2bnOH66wI1+9GO4sOuISwv/TOlumu56FDv3NZhc4mR9v7zYIrafr40j/Cccvj9Xns3t3mu99E7qxUv3bqS0/ouNH/08++RGemfQ+nsx/5uNXsQPGulynPvv3ZTW37zd+1ovrqaYpP/122X6Xpx779Z3zr/3YOPKW1lkaRDf31pPaf3j/msRsVGkL+d/f+/m4sJsPm1cfSsr16e8m9Ldj/KsnyIuR3nXw83Is3EhxLd/2V773ks3m/cj/THKUummdP9qKhIOImuOU0Xjwb3y+oqt735rpTetVbF9n8R4x9crRfO77TKqVOZpDclv5bfK18lMnk+q0K18UpxF/RrGXE0Zxtqx3tWSj+vxbL4XaasfKb0dRbtLW73JsfPGg177H+OmGKlfvS1msllt7JEJm9XOJqXR+Fkfo1H66uy5H1v3Xx5+uJmGLw9jro2u7Loj4PnuR6+f+e3d261+eazNhzrL7X83MohoHpS4PddV8ki1it61//pw1g7z6p1U/26Nm2llST57B5rUvuG0XqSU/rPd7jYrqWcbd+beJQ77BgPMDwn37/8BAGCf0eMTOH4cPlufv9VGgJOzqf8Fjm1APXkd7B7f5dF57GPMaWy/MTvjvNvtXj6h8W2+GXvnzXaseeeHEgAAAAAAAB7aQXeKlcGiadBoEOeLb2dtpGOL2MyOtf391a3P/zD96c3JzIP3t4oV797vrh8+vn+YRL5bBuj/AQAAAABqJvfHXQAAHkX82zfXAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeAgkAAAAAAAAAqLuRLAAAAAAAAACA2hv9D1iu/VAYaAYA', 'base64'));
|
||||||
|
//# sourceMappingURL=code-points-data.js.map
|
||||||
1
node_modules/@mongodb-js/saslprep/dist/code-points-data.js.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/code-points-data.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"code-points-data.js","sourceRoot":"","sources":["../src/code-points-data.ts"],"names":[],"mappings":";;AAAA,+BAAkC;AAElC,kBAAe,IAAA,iBAAU,EACvB,MAAM,CAAC,IAAI,CACT,knFAAknF,EAClnF,QAAQ,CACT,CACF,CAAC"}
|
||||||
7
node_modules/@mongodb-js/saslprep/dist/code-points-src.d.ts
generated
vendored
Normal file
7
node_modules/@mongodb-js/saslprep/dist/code-points-src.d.ts
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
export declare const unassigned_code_points: Set<number>;
|
||||||
|
export declare const commonly_mapped_to_nothing: Set<number>;
|
||||||
|
export declare const non_ASCII_space_characters: Set<number>;
|
||||||
|
export declare const prohibited_characters: Set<number>;
|
||||||
|
export declare const bidirectional_r_al: Set<number>;
|
||||||
|
export declare const bidirectional_l: Set<number>;
|
||||||
|
//# sourceMappingURL=code-points-src.d.ts.map
|
||||||
1
node_modules/@mongodb-js/saslprep/dist/code-points-src.d.ts.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/code-points-src.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"code-points-src.d.ts","sourceRoot":"","sources":["../src/code-points-src.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,sBAAsB,aA6YjC,CAAC;AAMH,eAAO,MAAM,0BAA0B,aAIrC,CAAC;AAMH,eAAO,MAAM,0BAA0B,aASrC,CAAC;AAMH,eAAO,MAAM,qBAAqB,aA6GhC,CAAC;AAMH,eAAO,MAAM,kBAAkB,aAmC7B,CAAC;AAMH,eAAO,MAAM,eAAe,aAyW1B,CAAC"}
|
||||||
881
node_modules/@mongodb-js/saslprep/dist/code-points-src.js
generated
vendored
Normal file
881
node_modules/@mongodb-js/saslprep/dist/code-points-src.js
generated
vendored
Normal file
@@ -0,0 +1,881 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.bidirectional_l = exports.bidirectional_r_al = exports.prohibited_characters = exports.non_ASCII_space_characters = exports.commonly_mapped_to_nothing = exports.unassigned_code_points = void 0;
|
||||||
|
const util_1 = require("./util");
|
||||||
|
exports.unassigned_code_points = new Set([
|
||||||
|
0x0221,
|
||||||
|
...(0, util_1.range)(0x0234, 0x024f),
|
||||||
|
...(0, util_1.range)(0x02ae, 0x02af),
|
||||||
|
...(0, util_1.range)(0x02ef, 0x02ff),
|
||||||
|
...(0, util_1.range)(0x0350, 0x035f),
|
||||||
|
...(0, util_1.range)(0x0370, 0x0373),
|
||||||
|
...(0, util_1.range)(0x0376, 0x0379),
|
||||||
|
...(0, util_1.range)(0x037b, 0x037d),
|
||||||
|
...(0, util_1.range)(0x037f, 0x0383),
|
||||||
|
0x038b,
|
||||||
|
0x038d,
|
||||||
|
0x03a2,
|
||||||
|
0x03cf,
|
||||||
|
...(0, util_1.range)(0x03f7, 0x03ff),
|
||||||
|
0x0487,
|
||||||
|
0x04cf,
|
||||||
|
...(0, util_1.range)(0x04f6, 0x04f7),
|
||||||
|
...(0, util_1.range)(0x04fa, 0x04ff),
|
||||||
|
...(0, util_1.range)(0x0510, 0x0530),
|
||||||
|
...(0, util_1.range)(0x0557, 0x0558),
|
||||||
|
0x0560,
|
||||||
|
0x0588,
|
||||||
|
...(0, util_1.range)(0x058b, 0x0590),
|
||||||
|
0x05a2,
|
||||||
|
0x05ba,
|
||||||
|
...(0, util_1.range)(0x05c5, 0x05cf),
|
||||||
|
...(0, util_1.range)(0x05eb, 0x05ef),
|
||||||
|
...(0, util_1.range)(0x05f5, 0x060b),
|
||||||
|
...(0, util_1.range)(0x060d, 0x061a),
|
||||||
|
...(0, util_1.range)(0x061c, 0x061e),
|
||||||
|
0x0620,
|
||||||
|
...(0, util_1.range)(0x063b, 0x063f),
|
||||||
|
...(0, util_1.range)(0x0656, 0x065f),
|
||||||
|
...(0, util_1.range)(0x06ee, 0x06ef),
|
||||||
|
0x06ff,
|
||||||
|
0x070e,
|
||||||
|
...(0, util_1.range)(0x072d, 0x072f),
|
||||||
|
...(0, util_1.range)(0x074b, 0x077f),
|
||||||
|
...(0, util_1.range)(0x07b2, 0x0900),
|
||||||
|
0x0904,
|
||||||
|
...(0, util_1.range)(0x093a, 0x093b),
|
||||||
|
...(0, util_1.range)(0x094e, 0x094f),
|
||||||
|
...(0, util_1.range)(0x0955, 0x0957),
|
||||||
|
...(0, util_1.range)(0x0971, 0x0980),
|
||||||
|
0x0984,
|
||||||
|
...(0, util_1.range)(0x098d, 0x098e),
|
||||||
|
...(0, util_1.range)(0x0991, 0x0992),
|
||||||
|
0x09a9,
|
||||||
|
0x09b1,
|
||||||
|
...(0, util_1.range)(0x09b3, 0x09b5),
|
||||||
|
...(0, util_1.range)(0x09ba, 0x09bb),
|
||||||
|
0x09bd,
|
||||||
|
...(0, util_1.range)(0x09c5, 0x09c6),
|
||||||
|
...(0, util_1.range)(0x09c9, 0x09ca),
|
||||||
|
...(0, util_1.range)(0x09ce, 0x09d6),
|
||||||
|
...(0, util_1.range)(0x09d8, 0x09db),
|
||||||
|
0x09de,
|
||||||
|
...(0, util_1.range)(0x09e4, 0x09e5),
|
||||||
|
...(0, util_1.range)(0x09fb, 0x0a01),
|
||||||
|
...(0, util_1.range)(0x0a03, 0x0a04),
|
||||||
|
...(0, util_1.range)(0x0a0b, 0x0a0e),
|
||||||
|
...(0, util_1.range)(0x0a11, 0x0a12),
|
||||||
|
0x0a29,
|
||||||
|
0x0a31,
|
||||||
|
0x0a34,
|
||||||
|
0x0a37,
|
||||||
|
...(0, util_1.range)(0x0a3a, 0x0a3b),
|
||||||
|
0x0a3d,
|
||||||
|
...(0, util_1.range)(0x0a43, 0x0a46),
|
||||||
|
...(0, util_1.range)(0x0a49, 0x0a4a),
|
||||||
|
...(0, util_1.range)(0x0a4e, 0x0a58),
|
||||||
|
0x0a5d,
|
||||||
|
...(0, util_1.range)(0x0a5f, 0x0a65),
|
||||||
|
...(0, util_1.range)(0x0a75, 0x0a80),
|
||||||
|
0x0a84,
|
||||||
|
0x0a8c,
|
||||||
|
0x0a8e,
|
||||||
|
0x0a92,
|
||||||
|
0x0aa9,
|
||||||
|
0x0ab1,
|
||||||
|
0x0ab4,
|
||||||
|
...(0, util_1.range)(0x0aba, 0x0abb),
|
||||||
|
0x0ac6,
|
||||||
|
0x0aca,
|
||||||
|
...(0, util_1.range)(0x0ace, 0x0acf),
|
||||||
|
...(0, util_1.range)(0x0ad1, 0x0adf),
|
||||||
|
...(0, util_1.range)(0x0ae1, 0x0ae5),
|
||||||
|
...(0, util_1.range)(0x0af0, 0x0b00),
|
||||||
|
0x0b04,
|
||||||
|
...(0, util_1.range)(0x0b0d, 0x0b0e),
|
||||||
|
...(0, util_1.range)(0x0b11, 0x0b12),
|
||||||
|
0x0b29,
|
||||||
|
0x0b31,
|
||||||
|
...(0, util_1.range)(0x0b34, 0x0b35),
|
||||||
|
...(0, util_1.range)(0x0b3a, 0x0b3b),
|
||||||
|
...(0, util_1.range)(0x0b44, 0x0b46),
|
||||||
|
...(0, util_1.range)(0x0b49, 0x0b4a),
|
||||||
|
...(0, util_1.range)(0x0b4e, 0x0b55),
|
||||||
|
...(0, util_1.range)(0x0b58, 0x0b5b),
|
||||||
|
0x0b5e,
|
||||||
|
...(0, util_1.range)(0x0b62, 0x0b65),
|
||||||
|
...(0, util_1.range)(0x0b71, 0x0b81),
|
||||||
|
0x0b84,
|
||||||
|
...(0, util_1.range)(0x0b8b, 0x0b8d),
|
||||||
|
0x0b91,
|
||||||
|
...(0, util_1.range)(0x0b96, 0x0b98),
|
||||||
|
0x0b9b,
|
||||||
|
0x0b9d,
|
||||||
|
...(0, util_1.range)(0x0ba0, 0x0ba2),
|
||||||
|
...(0, util_1.range)(0x0ba5, 0x0ba7),
|
||||||
|
...(0, util_1.range)(0x0bab, 0x0bad),
|
||||||
|
0x0bb6,
|
||||||
|
...(0, util_1.range)(0x0bba, 0x0bbd),
|
||||||
|
...(0, util_1.range)(0x0bc3, 0x0bc5),
|
||||||
|
0x0bc9,
|
||||||
|
...(0, util_1.range)(0x0bce, 0x0bd6),
|
||||||
|
...(0, util_1.range)(0x0bd8, 0x0be6),
|
||||||
|
...(0, util_1.range)(0x0bf3, 0x0c00),
|
||||||
|
0x0c04,
|
||||||
|
0x0c0d,
|
||||||
|
0x0c11,
|
||||||
|
0x0c29,
|
||||||
|
0x0c34,
|
||||||
|
...(0, util_1.range)(0x0c3a, 0x0c3d),
|
||||||
|
0x0c45,
|
||||||
|
0x0c49,
|
||||||
|
...(0, util_1.range)(0x0c4e, 0x0c54),
|
||||||
|
...(0, util_1.range)(0x0c57, 0x0c5f),
|
||||||
|
...(0, util_1.range)(0x0c62, 0x0c65),
|
||||||
|
...(0, util_1.range)(0x0c70, 0x0c81),
|
||||||
|
0x0c84,
|
||||||
|
0x0c8d,
|
||||||
|
0x0c91,
|
||||||
|
0x0ca9,
|
||||||
|
0x0cb4,
|
||||||
|
...(0, util_1.range)(0x0cba, 0x0cbd),
|
||||||
|
0x0cc5,
|
||||||
|
0x0cc9,
|
||||||
|
...(0, util_1.range)(0x0cce, 0x0cd4),
|
||||||
|
...(0, util_1.range)(0x0cd7, 0x0cdd),
|
||||||
|
0x0cdf,
|
||||||
|
...(0, util_1.range)(0x0ce2, 0x0ce5),
|
||||||
|
...(0, util_1.range)(0x0cf0, 0x0d01),
|
||||||
|
0x0d04,
|
||||||
|
0x0d0d,
|
||||||
|
0x0d11,
|
||||||
|
0x0d29,
|
||||||
|
...(0, util_1.range)(0x0d3a, 0x0d3d),
|
||||||
|
...(0, util_1.range)(0x0d44, 0x0d45),
|
||||||
|
0x0d49,
|
||||||
|
...(0, util_1.range)(0x0d4e, 0x0d56),
|
||||||
|
...(0, util_1.range)(0x0d58, 0x0d5f),
|
||||||
|
...(0, util_1.range)(0x0d62, 0x0d65),
|
||||||
|
...(0, util_1.range)(0x0d70, 0x0d81),
|
||||||
|
0x0d84,
|
||||||
|
...(0, util_1.range)(0x0d97, 0x0d99),
|
||||||
|
0x0db2,
|
||||||
|
0x0dbc,
|
||||||
|
...(0, util_1.range)(0x0dbe, 0x0dbf),
|
||||||
|
...(0, util_1.range)(0x0dc7, 0x0dc9),
|
||||||
|
...(0, util_1.range)(0x0dcb, 0x0dce),
|
||||||
|
0x0dd5,
|
||||||
|
0x0dd7,
|
||||||
|
...(0, util_1.range)(0x0de0, 0x0df1),
|
||||||
|
...(0, util_1.range)(0x0df5, 0x0e00),
|
||||||
|
...(0, util_1.range)(0x0e3b, 0x0e3e),
|
||||||
|
...(0, util_1.range)(0x0e5c, 0x0e80),
|
||||||
|
0x0e83,
|
||||||
|
...(0, util_1.range)(0x0e85, 0x0e86),
|
||||||
|
0x0e89,
|
||||||
|
...(0, util_1.range)(0x0e8b, 0x0e8c),
|
||||||
|
...(0, util_1.range)(0x0e8e, 0x0e93),
|
||||||
|
0x0e98,
|
||||||
|
0x0ea0,
|
||||||
|
0x0ea4,
|
||||||
|
0x0ea6,
|
||||||
|
...(0, util_1.range)(0x0ea8, 0x0ea9),
|
||||||
|
0x0eac,
|
||||||
|
0x0eba,
|
||||||
|
...(0, util_1.range)(0x0ebe, 0x0ebf),
|
||||||
|
0x0ec5,
|
||||||
|
0x0ec7,
|
||||||
|
...(0, util_1.range)(0x0ece, 0x0ecf),
|
||||||
|
...(0, util_1.range)(0x0eda, 0x0edb),
|
||||||
|
...(0, util_1.range)(0x0ede, 0x0eff),
|
||||||
|
0x0f48,
|
||||||
|
...(0, util_1.range)(0x0f6b, 0x0f70),
|
||||||
|
...(0, util_1.range)(0x0f8c, 0x0f8f),
|
||||||
|
0x0f98,
|
||||||
|
0x0fbd,
|
||||||
|
...(0, util_1.range)(0x0fcd, 0x0fce),
|
||||||
|
...(0, util_1.range)(0x0fd0, 0x0fff),
|
||||||
|
0x1022,
|
||||||
|
0x1028,
|
||||||
|
0x102b,
|
||||||
|
...(0, util_1.range)(0x1033, 0x1035),
|
||||||
|
...(0, util_1.range)(0x103a, 0x103f),
|
||||||
|
...(0, util_1.range)(0x105a, 0x109f),
|
||||||
|
...(0, util_1.range)(0x10c6, 0x10cf),
|
||||||
|
...(0, util_1.range)(0x10f9, 0x10fa),
|
||||||
|
...(0, util_1.range)(0x10fc, 0x10ff),
|
||||||
|
...(0, util_1.range)(0x115a, 0x115e),
|
||||||
|
...(0, util_1.range)(0x11a3, 0x11a7),
|
||||||
|
...(0, util_1.range)(0x11fa, 0x11ff),
|
||||||
|
0x1207,
|
||||||
|
0x1247,
|
||||||
|
0x1249,
|
||||||
|
...(0, util_1.range)(0x124e, 0x124f),
|
||||||
|
0x1257,
|
||||||
|
0x1259,
|
||||||
|
...(0, util_1.range)(0x125e, 0x125f),
|
||||||
|
0x1287,
|
||||||
|
0x1289,
|
||||||
|
...(0, util_1.range)(0x128e, 0x128f),
|
||||||
|
0x12af,
|
||||||
|
0x12b1,
|
||||||
|
...(0, util_1.range)(0x12b6, 0x12b7),
|
||||||
|
0x12bf,
|
||||||
|
0x12c1,
|
||||||
|
...(0, util_1.range)(0x12c6, 0x12c7),
|
||||||
|
0x12cf,
|
||||||
|
0x12d7,
|
||||||
|
0x12ef,
|
||||||
|
0x130f,
|
||||||
|
0x1311,
|
||||||
|
...(0, util_1.range)(0x1316, 0x1317),
|
||||||
|
0x131f,
|
||||||
|
0x1347,
|
||||||
|
...(0, util_1.range)(0x135b, 0x1360),
|
||||||
|
...(0, util_1.range)(0x137d, 0x139f),
|
||||||
|
...(0, util_1.range)(0x13f5, 0x1400),
|
||||||
|
...(0, util_1.range)(0x1677, 0x167f),
|
||||||
|
...(0, util_1.range)(0x169d, 0x169f),
|
||||||
|
...(0, util_1.range)(0x16f1, 0x16ff),
|
||||||
|
0x170d,
|
||||||
|
...(0, util_1.range)(0x1715, 0x171f),
|
||||||
|
...(0, util_1.range)(0x1737, 0x173f),
|
||||||
|
...(0, util_1.range)(0x1754, 0x175f),
|
||||||
|
0x176d,
|
||||||
|
0x1771,
|
||||||
|
...(0, util_1.range)(0x1774, 0x177f),
|
||||||
|
...(0, util_1.range)(0x17dd, 0x17df),
|
||||||
|
...(0, util_1.range)(0x17ea, 0x17ff),
|
||||||
|
0x180f,
|
||||||
|
...(0, util_1.range)(0x181a, 0x181f),
|
||||||
|
...(0, util_1.range)(0x1878, 0x187f),
|
||||||
|
...(0, util_1.range)(0x18aa, 0x1dff),
|
||||||
|
...(0, util_1.range)(0x1e9c, 0x1e9f),
|
||||||
|
...(0, util_1.range)(0x1efa, 0x1eff),
|
||||||
|
...(0, util_1.range)(0x1f16, 0x1f17),
|
||||||
|
...(0, util_1.range)(0x1f1e, 0x1f1f),
|
||||||
|
...(0, util_1.range)(0x1f46, 0x1f47),
|
||||||
|
...(0, util_1.range)(0x1f4e, 0x1f4f),
|
||||||
|
0x1f58,
|
||||||
|
0x1f5a,
|
||||||
|
0x1f5c,
|
||||||
|
0x1f5e,
|
||||||
|
...(0, util_1.range)(0x1f7e, 0x1f7f),
|
||||||
|
0x1fb5,
|
||||||
|
0x1fc5,
|
||||||
|
...(0, util_1.range)(0x1fd4, 0x1fd5),
|
||||||
|
0x1fdc,
|
||||||
|
...(0, util_1.range)(0x1ff0, 0x1ff1),
|
||||||
|
0x1ff5,
|
||||||
|
0x1fff,
|
||||||
|
...(0, util_1.range)(0x2053, 0x2056),
|
||||||
|
...(0, util_1.range)(0x2058, 0x205e),
|
||||||
|
...(0, util_1.range)(0x2064, 0x2069),
|
||||||
|
...(0, util_1.range)(0x2072, 0x2073),
|
||||||
|
...(0, util_1.range)(0x208f, 0x209f),
|
||||||
|
...(0, util_1.range)(0x20b2, 0x20cf),
|
||||||
|
...(0, util_1.range)(0x20eb, 0x20ff),
|
||||||
|
...(0, util_1.range)(0x213b, 0x213c),
|
||||||
|
...(0, util_1.range)(0x214c, 0x2152),
|
||||||
|
...(0, util_1.range)(0x2184, 0x218f),
|
||||||
|
...(0, util_1.range)(0x23cf, 0x23ff),
|
||||||
|
...(0, util_1.range)(0x2427, 0x243f),
|
||||||
|
...(0, util_1.range)(0x244b, 0x245f),
|
||||||
|
0x24ff,
|
||||||
|
...(0, util_1.range)(0x2614, 0x2615),
|
||||||
|
0x2618,
|
||||||
|
...(0, util_1.range)(0x267e, 0x267f),
|
||||||
|
...(0, util_1.range)(0x268a, 0x2700),
|
||||||
|
0x2705,
|
||||||
|
...(0, util_1.range)(0x270a, 0x270b),
|
||||||
|
0x2728,
|
||||||
|
0x274c,
|
||||||
|
0x274e,
|
||||||
|
...(0, util_1.range)(0x2753, 0x2755),
|
||||||
|
0x2757,
|
||||||
|
...(0, util_1.range)(0x275f, 0x2760),
|
||||||
|
...(0, util_1.range)(0x2795, 0x2797),
|
||||||
|
0x27b0,
|
||||||
|
...(0, util_1.range)(0x27bf, 0x27cf),
|
||||||
|
...(0, util_1.range)(0x27ec, 0x27ef),
|
||||||
|
...(0, util_1.range)(0x2b00, 0x2e7f),
|
||||||
|
0x2e9a,
|
||||||
|
...(0, util_1.range)(0x2ef4, 0x2eff),
|
||||||
|
...(0, util_1.range)(0x2fd6, 0x2fef),
|
||||||
|
...(0, util_1.range)(0x2ffc, 0x2fff),
|
||||||
|
0x3040,
|
||||||
|
...(0, util_1.range)(0x3097, 0x3098),
|
||||||
|
...(0, util_1.range)(0x3100, 0x3104),
|
||||||
|
...(0, util_1.range)(0x312d, 0x3130),
|
||||||
|
0x318f,
|
||||||
|
...(0, util_1.range)(0x31b8, 0x31ef),
|
||||||
|
...(0, util_1.range)(0x321d, 0x321f),
|
||||||
|
...(0, util_1.range)(0x3244, 0x3250),
|
||||||
|
...(0, util_1.range)(0x327c, 0x327e),
|
||||||
|
...(0, util_1.range)(0x32cc, 0x32cf),
|
||||||
|
0x32ff,
|
||||||
|
...(0, util_1.range)(0x3377, 0x337a),
|
||||||
|
...(0, util_1.range)(0x33de, 0x33df),
|
||||||
|
0x33ff,
|
||||||
|
...(0, util_1.range)(0x4db6, 0x4dff),
|
||||||
|
...(0, util_1.range)(0x9fa6, 0x9fff),
|
||||||
|
...(0, util_1.range)(0xa48d, 0xa48f),
|
||||||
|
...(0, util_1.range)(0xa4c7, 0xabff),
|
||||||
|
...(0, util_1.range)(0xd7a4, 0xd7ff),
|
||||||
|
...(0, util_1.range)(0xfa2e, 0xfa2f),
|
||||||
|
...(0, util_1.range)(0xfa6b, 0xfaff),
|
||||||
|
...(0, util_1.range)(0xfb07, 0xfb12),
|
||||||
|
...(0, util_1.range)(0xfb18, 0xfb1c),
|
||||||
|
0xfb37,
|
||||||
|
0xfb3d,
|
||||||
|
0xfb3f,
|
||||||
|
0xfb42,
|
||||||
|
0xfb45,
|
||||||
|
...(0, util_1.range)(0xfbb2, 0xfbd2),
|
||||||
|
...(0, util_1.range)(0xfd40, 0xfd4f),
|
||||||
|
...(0, util_1.range)(0xfd90, 0xfd91),
|
||||||
|
...(0, util_1.range)(0xfdc8, 0xfdcf),
|
||||||
|
...(0, util_1.range)(0xfdfd, 0xfdff),
|
||||||
|
...(0, util_1.range)(0xfe10, 0xfe1f),
|
||||||
|
...(0, util_1.range)(0xfe24, 0xfe2f),
|
||||||
|
...(0, util_1.range)(0xfe47, 0xfe48),
|
||||||
|
0xfe53,
|
||||||
|
0xfe67,
|
||||||
|
...(0, util_1.range)(0xfe6c, 0xfe6f),
|
||||||
|
0xfe75,
|
||||||
|
...(0, util_1.range)(0xfefd, 0xfefe),
|
||||||
|
0xff00,
|
||||||
|
...(0, util_1.range)(0xffbf, 0xffc1),
|
||||||
|
...(0, util_1.range)(0xffc8, 0xffc9),
|
||||||
|
...(0, util_1.range)(0xffd0, 0xffd1),
|
||||||
|
...(0, util_1.range)(0xffd8, 0xffd9),
|
||||||
|
...(0, util_1.range)(0xffdd, 0xffdf),
|
||||||
|
0xffe7,
|
||||||
|
...(0, util_1.range)(0xffef, 0xfff8),
|
||||||
|
...(0, util_1.range)(0x10000, 0x102ff),
|
||||||
|
0x1031f,
|
||||||
|
...(0, util_1.range)(0x10324, 0x1032f),
|
||||||
|
...(0, util_1.range)(0x1034b, 0x103ff),
|
||||||
|
...(0, util_1.range)(0x10426, 0x10427),
|
||||||
|
...(0, util_1.range)(0x1044e, 0x1cfff),
|
||||||
|
...(0, util_1.range)(0x1d0f6, 0x1d0ff),
|
||||||
|
...(0, util_1.range)(0x1d127, 0x1d129),
|
||||||
|
...(0, util_1.range)(0x1d1de, 0x1d3ff),
|
||||||
|
0x1d455,
|
||||||
|
0x1d49d,
|
||||||
|
...(0, util_1.range)(0x1d4a0, 0x1d4a1),
|
||||||
|
...(0, util_1.range)(0x1d4a3, 0x1d4a4),
|
||||||
|
...(0, util_1.range)(0x1d4a7, 0x1d4a8),
|
||||||
|
0x1d4ad,
|
||||||
|
0x1d4ba,
|
||||||
|
0x1d4bc,
|
||||||
|
0x1d4c1,
|
||||||
|
0x1d4c4,
|
||||||
|
0x1d506,
|
||||||
|
...(0, util_1.range)(0x1d50b, 0x1d50c),
|
||||||
|
0x1d515,
|
||||||
|
0x1d51d,
|
||||||
|
0x1d53a,
|
||||||
|
0x1d53f,
|
||||||
|
0x1d545,
|
||||||
|
...(0, util_1.range)(0x1d547, 0x1d549),
|
||||||
|
0x1d551,
|
||||||
|
...(0, util_1.range)(0x1d6a4, 0x1d6a7),
|
||||||
|
...(0, util_1.range)(0x1d7ca, 0x1d7cd),
|
||||||
|
...(0, util_1.range)(0x1d800, 0x1fffd),
|
||||||
|
...(0, util_1.range)(0x2a6d7, 0x2f7ff),
|
||||||
|
...(0, util_1.range)(0x2fa1e, 0x2fffd),
|
||||||
|
...(0, util_1.range)(0x30000, 0x3fffd),
|
||||||
|
...(0, util_1.range)(0x40000, 0x4fffd),
|
||||||
|
...(0, util_1.range)(0x50000, 0x5fffd),
|
||||||
|
...(0, util_1.range)(0x60000, 0x6fffd),
|
||||||
|
...(0, util_1.range)(0x70000, 0x7fffd),
|
||||||
|
...(0, util_1.range)(0x80000, 0x8fffd),
|
||||||
|
...(0, util_1.range)(0x90000, 0x9fffd),
|
||||||
|
...(0, util_1.range)(0xa0000, 0xafffd),
|
||||||
|
...(0, util_1.range)(0xb0000, 0xbfffd),
|
||||||
|
...(0, util_1.range)(0xc0000, 0xcfffd),
|
||||||
|
...(0, util_1.range)(0xd0000, 0xdfffd),
|
||||||
|
0xe0000,
|
||||||
|
...(0, util_1.range)(0xe0002, 0xe001f),
|
||||||
|
...(0, util_1.range)(0xe0080, 0xefffd),
|
||||||
|
]);
|
||||||
|
exports.commonly_mapped_to_nothing = new Set([
|
||||||
|
0x00ad, 0x034f, 0x1806, 0x180b, 0x180c, 0x180d, 0x200b, 0x200c, 0x200d,
|
||||||
|
0x2060, 0xfe00, 0xfe01, 0xfe02, 0xfe03, 0xfe04, 0xfe05, 0xfe06, 0xfe07,
|
||||||
|
0xfe08, 0xfe09, 0xfe0a, 0xfe0b, 0xfe0c, 0xfe0d, 0xfe0e, 0xfe0f, 0xfeff,
|
||||||
|
]);
|
||||||
|
exports.non_ASCII_space_characters = new Set([
|
||||||
|
0x00a0, 0x1680,
|
||||||
|
0x2000, 0x2001, 0x2002,
|
||||||
|
0x2003, 0x2004,
|
||||||
|
0x2005, 0x2006,
|
||||||
|
0x2007, 0x2008,
|
||||||
|
0x2009, 0x200a,
|
||||||
|
0x200b, 0x202f,
|
||||||
|
0x205f, 0x3000,
|
||||||
|
]);
|
||||||
|
exports.prohibited_characters = new Set([
|
||||||
|
...exports.non_ASCII_space_characters,
|
||||||
|
...(0, util_1.range)(0, 0x001f),
|
||||||
|
0x007f,
|
||||||
|
...(0, util_1.range)(0x0080, 0x009f),
|
||||||
|
0x06dd,
|
||||||
|
0x070f,
|
||||||
|
0x180e,
|
||||||
|
0x200c,
|
||||||
|
0x200d,
|
||||||
|
0x2028,
|
||||||
|
0x2029,
|
||||||
|
0x2060,
|
||||||
|
0x2061,
|
||||||
|
0x2062,
|
||||||
|
0x2063,
|
||||||
|
...(0, util_1.range)(0x206a, 0x206f),
|
||||||
|
0xfeff,
|
||||||
|
...(0, util_1.range)(0xfff9, 0xfffc),
|
||||||
|
...(0, util_1.range)(0x1d173, 0x1d17a),
|
||||||
|
...(0, util_1.range)(0xe000, 0xf8ff),
|
||||||
|
...(0, util_1.range)(0xf0000, 0xffffd),
|
||||||
|
...(0, util_1.range)(0x100000, 0x10fffd),
|
||||||
|
...(0, util_1.range)(0xfdd0, 0xfdef),
|
||||||
|
...(0, util_1.range)(0xfffe, 0xffff),
|
||||||
|
...(0, util_1.range)(0x1fffe, 0x1ffff),
|
||||||
|
...(0, util_1.range)(0x2fffe, 0x2ffff),
|
||||||
|
...(0, util_1.range)(0x3fffe, 0x3ffff),
|
||||||
|
...(0, util_1.range)(0x4fffe, 0x4ffff),
|
||||||
|
...(0, util_1.range)(0x5fffe, 0x5ffff),
|
||||||
|
...(0, util_1.range)(0x6fffe, 0x6ffff),
|
||||||
|
...(0, util_1.range)(0x7fffe, 0x7ffff),
|
||||||
|
...(0, util_1.range)(0x8fffe, 0x8ffff),
|
||||||
|
...(0, util_1.range)(0x9fffe, 0x9ffff),
|
||||||
|
...(0, util_1.range)(0xafffe, 0xaffff),
|
||||||
|
...(0, util_1.range)(0xbfffe, 0xbffff),
|
||||||
|
...(0, util_1.range)(0xcfffe, 0xcffff),
|
||||||
|
...(0, util_1.range)(0xdfffe, 0xdffff),
|
||||||
|
...(0, util_1.range)(0xefffe, 0xeffff),
|
||||||
|
...(0, util_1.range)(0x10fffe, 0x10ffff),
|
||||||
|
...(0, util_1.range)(0xd800, 0xdfff),
|
||||||
|
0xfff9,
|
||||||
|
0xfffa,
|
||||||
|
0xfffb,
|
||||||
|
0xfffc,
|
||||||
|
0xfffd,
|
||||||
|
...(0, util_1.range)(0x2ff0, 0x2ffb),
|
||||||
|
0x0340,
|
||||||
|
0x0341,
|
||||||
|
0x200e,
|
||||||
|
0x200f,
|
||||||
|
0x202a,
|
||||||
|
0x202b,
|
||||||
|
0x202c,
|
||||||
|
0x202d,
|
||||||
|
0x202e,
|
||||||
|
0x206a,
|
||||||
|
0x206b,
|
||||||
|
0x206c,
|
||||||
|
0x206d,
|
||||||
|
0x206e,
|
||||||
|
0x206f,
|
||||||
|
0xe0001,
|
||||||
|
...(0, util_1.range)(0xe0020, 0xe007f),
|
||||||
|
]);
|
||||||
|
exports.bidirectional_r_al = new Set([
|
||||||
|
0x05be,
|
||||||
|
0x05c0,
|
||||||
|
0x05c3,
|
||||||
|
...(0, util_1.range)(0x05d0, 0x05ea),
|
||||||
|
...(0, util_1.range)(0x05f0, 0x05f4),
|
||||||
|
0x061b,
|
||||||
|
0x061f,
|
||||||
|
...(0, util_1.range)(0x0621, 0x063a),
|
||||||
|
...(0, util_1.range)(0x0640, 0x064a),
|
||||||
|
...(0, util_1.range)(0x066d, 0x066f),
|
||||||
|
...(0, util_1.range)(0x0671, 0x06d5),
|
||||||
|
0x06dd,
|
||||||
|
...(0, util_1.range)(0x06e5, 0x06e6),
|
||||||
|
...(0, util_1.range)(0x06fa, 0x06fe),
|
||||||
|
...(0, util_1.range)(0x0700, 0x070d),
|
||||||
|
0x0710,
|
||||||
|
...(0, util_1.range)(0x0712, 0x072c),
|
||||||
|
...(0, util_1.range)(0x0780, 0x07a5),
|
||||||
|
0x07b1,
|
||||||
|
0x200f,
|
||||||
|
0xfb1d,
|
||||||
|
...(0, util_1.range)(0xfb1f, 0xfb28),
|
||||||
|
...(0, util_1.range)(0xfb2a, 0xfb36),
|
||||||
|
...(0, util_1.range)(0xfb38, 0xfb3c),
|
||||||
|
0xfb3e,
|
||||||
|
...(0, util_1.range)(0xfb40, 0xfb41),
|
||||||
|
...(0, util_1.range)(0xfb43, 0xfb44),
|
||||||
|
...(0, util_1.range)(0xfb46, 0xfbb1),
|
||||||
|
...(0, util_1.range)(0xfbd3, 0xfd3d),
|
||||||
|
...(0, util_1.range)(0xfd50, 0xfd8f),
|
||||||
|
...(0, util_1.range)(0xfd92, 0xfdc7),
|
||||||
|
...(0, util_1.range)(0xfdf0, 0xfdfc),
|
||||||
|
...(0, util_1.range)(0xfe70, 0xfe74),
|
||||||
|
...(0, util_1.range)(0xfe76, 0xfefc),
|
||||||
|
]);
|
||||||
|
exports.bidirectional_l = new Set([
|
||||||
|
...(0, util_1.range)(0x0041, 0x005a),
|
||||||
|
...(0, util_1.range)(0x0061, 0x007a),
|
||||||
|
0x00aa,
|
||||||
|
0x00b5,
|
||||||
|
0x00ba,
|
||||||
|
...(0, util_1.range)(0x00c0, 0x00d6),
|
||||||
|
...(0, util_1.range)(0x00d8, 0x00f6),
|
||||||
|
...(0, util_1.range)(0x00f8, 0x0220),
|
||||||
|
...(0, util_1.range)(0x0222, 0x0233),
|
||||||
|
...(0, util_1.range)(0x0250, 0x02ad),
|
||||||
|
...(0, util_1.range)(0x02b0, 0x02b8),
|
||||||
|
...(0, util_1.range)(0x02bb, 0x02c1),
|
||||||
|
...(0, util_1.range)(0x02d0, 0x02d1),
|
||||||
|
...(0, util_1.range)(0x02e0, 0x02e4),
|
||||||
|
0x02ee,
|
||||||
|
0x037a,
|
||||||
|
0x0386,
|
||||||
|
...(0, util_1.range)(0x0388, 0x038a),
|
||||||
|
0x038c,
|
||||||
|
...(0, util_1.range)(0x038e, 0x03a1),
|
||||||
|
...(0, util_1.range)(0x03a3, 0x03ce),
|
||||||
|
...(0, util_1.range)(0x03d0, 0x03f5),
|
||||||
|
...(0, util_1.range)(0x0400, 0x0482),
|
||||||
|
...(0, util_1.range)(0x048a, 0x04ce),
|
||||||
|
...(0, util_1.range)(0x04d0, 0x04f5),
|
||||||
|
...(0, util_1.range)(0x04f8, 0x04f9),
|
||||||
|
...(0, util_1.range)(0x0500, 0x050f),
|
||||||
|
...(0, util_1.range)(0x0531, 0x0556),
|
||||||
|
...(0, util_1.range)(0x0559, 0x055f),
|
||||||
|
...(0, util_1.range)(0x0561, 0x0587),
|
||||||
|
0x0589,
|
||||||
|
0x0903,
|
||||||
|
...(0, util_1.range)(0x0905, 0x0939),
|
||||||
|
...(0, util_1.range)(0x093d, 0x0940),
|
||||||
|
...(0, util_1.range)(0x0949, 0x094c),
|
||||||
|
0x0950,
|
||||||
|
...(0, util_1.range)(0x0958, 0x0961),
|
||||||
|
...(0, util_1.range)(0x0964, 0x0970),
|
||||||
|
...(0, util_1.range)(0x0982, 0x0983),
|
||||||
|
...(0, util_1.range)(0x0985, 0x098c),
|
||||||
|
...(0, util_1.range)(0x098f, 0x0990),
|
||||||
|
...(0, util_1.range)(0x0993, 0x09a8),
|
||||||
|
...(0, util_1.range)(0x09aa, 0x09b0),
|
||||||
|
0x09b2,
|
||||||
|
...(0, util_1.range)(0x09b6, 0x09b9),
|
||||||
|
...(0, util_1.range)(0x09be, 0x09c0),
|
||||||
|
...(0, util_1.range)(0x09c7, 0x09c8),
|
||||||
|
...(0, util_1.range)(0x09cb, 0x09cc),
|
||||||
|
0x09d7,
|
||||||
|
...(0, util_1.range)(0x09dc, 0x09dd),
|
||||||
|
...(0, util_1.range)(0x09df, 0x09e1),
|
||||||
|
...(0, util_1.range)(0x09e6, 0x09f1),
|
||||||
|
...(0, util_1.range)(0x09f4, 0x09fa),
|
||||||
|
...(0, util_1.range)(0x0a05, 0x0a0a),
|
||||||
|
...(0, util_1.range)(0x0a0f, 0x0a10),
|
||||||
|
...(0, util_1.range)(0x0a13, 0x0a28),
|
||||||
|
...(0, util_1.range)(0x0a2a, 0x0a30),
|
||||||
|
...(0, util_1.range)(0x0a32, 0x0a33),
|
||||||
|
...(0, util_1.range)(0x0a35, 0x0a36),
|
||||||
|
...(0, util_1.range)(0x0a38, 0x0a39),
|
||||||
|
...(0, util_1.range)(0x0a3e, 0x0a40),
|
||||||
|
...(0, util_1.range)(0x0a59, 0x0a5c),
|
||||||
|
0x0a5e,
|
||||||
|
...(0, util_1.range)(0x0a66, 0x0a6f),
|
||||||
|
...(0, util_1.range)(0x0a72, 0x0a74),
|
||||||
|
0x0a83,
|
||||||
|
...(0, util_1.range)(0x0a85, 0x0a8b),
|
||||||
|
0x0a8d,
|
||||||
|
...(0, util_1.range)(0x0a8f, 0x0a91),
|
||||||
|
...(0, util_1.range)(0x0a93, 0x0aa8),
|
||||||
|
...(0, util_1.range)(0x0aaa, 0x0ab0),
|
||||||
|
...(0, util_1.range)(0x0ab2, 0x0ab3),
|
||||||
|
...(0, util_1.range)(0x0ab5, 0x0ab9),
|
||||||
|
...(0, util_1.range)(0x0abd, 0x0ac0),
|
||||||
|
0x0ac9,
|
||||||
|
...(0, util_1.range)(0x0acb, 0x0acc),
|
||||||
|
0x0ad0,
|
||||||
|
0x0ae0,
|
||||||
|
...(0, util_1.range)(0x0ae6, 0x0aef),
|
||||||
|
...(0, util_1.range)(0x0b02, 0x0b03),
|
||||||
|
...(0, util_1.range)(0x0b05, 0x0b0c),
|
||||||
|
...(0, util_1.range)(0x0b0f, 0x0b10),
|
||||||
|
...(0, util_1.range)(0x0b13, 0x0b28),
|
||||||
|
...(0, util_1.range)(0x0b2a, 0x0b30),
|
||||||
|
...(0, util_1.range)(0x0b32, 0x0b33),
|
||||||
|
...(0, util_1.range)(0x0b36, 0x0b39),
|
||||||
|
...(0, util_1.range)(0x0b3d, 0x0b3e),
|
||||||
|
0x0b40,
|
||||||
|
...(0, util_1.range)(0x0b47, 0x0b48),
|
||||||
|
...(0, util_1.range)(0x0b4b, 0x0b4c),
|
||||||
|
0x0b57,
|
||||||
|
...(0, util_1.range)(0x0b5c, 0x0b5d),
|
||||||
|
...(0, util_1.range)(0x0b5f, 0x0b61),
|
||||||
|
...(0, util_1.range)(0x0b66, 0x0b70),
|
||||||
|
0x0b83,
|
||||||
|
...(0, util_1.range)(0x0b85, 0x0b8a),
|
||||||
|
...(0, util_1.range)(0x0b8e, 0x0b90),
|
||||||
|
...(0, util_1.range)(0x0b92, 0x0b95),
|
||||||
|
...(0, util_1.range)(0x0b99, 0x0b9a),
|
||||||
|
0x0b9c,
|
||||||
|
...(0, util_1.range)(0x0b9e, 0x0b9f),
|
||||||
|
...(0, util_1.range)(0x0ba3, 0x0ba4),
|
||||||
|
...(0, util_1.range)(0x0ba8, 0x0baa),
|
||||||
|
...(0, util_1.range)(0x0bae, 0x0bb5),
|
||||||
|
...(0, util_1.range)(0x0bb7, 0x0bb9),
|
||||||
|
...(0, util_1.range)(0x0bbe, 0x0bbf),
|
||||||
|
...(0, util_1.range)(0x0bc1, 0x0bc2),
|
||||||
|
...(0, util_1.range)(0x0bc6, 0x0bc8),
|
||||||
|
...(0, util_1.range)(0x0bca, 0x0bcc),
|
||||||
|
0x0bd7,
|
||||||
|
...(0, util_1.range)(0x0be7, 0x0bf2),
|
||||||
|
...(0, util_1.range)(0x0c01, 0x0c03),
|
||||||
|
...(0, util_1.range)(0x0c05, 0x0c0c),
|
||||||
|
...(0, util_1.range)(0x0c0e, 0x0c10),
|
||||||
|
...(0, util_1.range)(0x0c12, 0x0c28),
|
||||||
|
...(0, util_1.range)(0x0c2a, 0x0c33),
|
||||||
|
...(0, util_1.range)(0x0c35, 0x0c39),
|
||||||
|
...(0, util_1.range)(0x0c41, 0x0c44),
|
||||||
|
...(0, util_1.range)(0x0c60, 0x0c61),
|
||||||
|
...(0, util_1.range)(0x0c66, 0x0c6f),
|
||||||
|
...(0, util_1.range)(0x0c82, 0x0c83),
|
||||||
|
...(0, util_1.range)(0x0c85, 0x0c8c),
|
||||||
|
...(0, util_1.range)(0x0c8e, 0x0c90),
|
||||||
|
...(0, util_1.range)(0x0c92, 0x0ca8),
|
||||||
|
...(0, util_1.range)(0x0caa, 0x0cb3),
|
||||||
|
...(0, util_1.range)(0x0cb5, 0x0cb9),
|
||||||
|
0x0cbe,
|
||||||
|
...(0, util_1.range)(0x0cc0, 0x0cc4),
|
||||||
|
...(0, util_1.range)(0x0cc7, 0x0cc8),
|
||||||
|
...(0, util_1.range)(0x0cca, 0x0ccb),
|
||||||
|
...(0, util_1.range)(0x0cd5, 0x0cd6),
|
||||||
|
0x0cde,
|
||||||
|
...(0, util_1.range)(0x0ce0, 0x0ce1),
|
||||||
|
...(0, util_1.range)(0x0ce6, 0x0cef),
|
||||||
|
...(0, util_1.range)(0x0d02, 0x0d03),
|
||||||
|
...(0, util_1.range)(0x0d05, 0x0d0c),
|
||||||
|
...(0, util_1.range)(0x0d0e, 0x0d10),
|
||||||
|
...(0, util_1.range)(0x0d12, 0x0d28),
|
||||||
|
...(0, util_1.range)(0x0d2a, 0x0d39),
|
||||||
|
...(0, util_1.range)(0x0d3e, 0x0d40),
|
||||||
|
...(0, util_1.range)(0x0d46, 0x0d48),
|
||||||
|
...(0, util_1.range)(0x0d4a, 0x0d4c),
|
||||||
|
0x0d57,
|
||||||
|
...(0, util_1.range)(0x0d60, 0x0d61),
|
||||||
|
...(0, util_1.range)(0x0d66, 0x0d6f),
|
||||||
|
...(0, util_1.range)(0x0d82, 0x0d83),
|
||||||
|
...(0, util_1.range)(0x0d85, 0x0d96),
|
||||||
|
...(0, util_1.range)(0x0d9a, 0x0db1),
|
||||||
|
...(0, util_1.range)(0x0db3, 0x0dbb),
|
||||||
|
0x0dbd,
|
||||||
|
...(0, util_1.range)(0x0dc0, 0x0dc6),
|
||||||
|
...(0, util_1.range)(0x0dcf, 0x0dd1),
|
||||||
|
...(0, util_1.range)(0x0dd8, 0x0ddf),
|
||||||
|
...(0, util_1.range)(0x0df2, 0x0df4),
|
||||||
|
...(0, util_1.range)(0x0e01, 0x0e30),
|
||||||
|
...(0, util_1.range)(0x0e32, 0x0e33),
|
||||||
|
...(0, util_1.range)(0x0e40, 0x0e46),
|
||||||
|
...(0, util_1.range)(0x0e4f, 0x0e5b),
|
||||||
|
...(0, util_1.range)(0x0e81, 0x0e82),
|
||||||
|
0x0e84,
|
||||||
|
...(0, util_1.range)(0x0e87, 0x0e88),
|
||||||
|
0x0e8a,
|
||||||
|
0x0e8d,
|
||||||
|
...(0, util_1.range)(0x0e94, 0x0e97),
|
||||||
|
...(0, util_1.range)(0x0e99, 0x0e9f),
|
||||||
|
...(0, util_1.range)(0x0ea1, 0x0ea3),
|
||||||
|
0x0ea5,
|
||||||
|
0x0ea7,
|
||||||
|
...(0, util_1.range)(0x0eaa, 0x0eab),
|
||||||
|
...(0, util_1.range)(0x0ead, 0x0eb0),
|
||||||
|
...(0, util_1.range)(0x0eb2, 0x0eb3),
|
||||||
|
0x0ebd,
|
||||||
|
...(0, util_1.range)(0x0ec0, 0x0ec4),
|
||||||
|
0x0ec6,
|
||||||
|
...(0, util_1.range)(0x0ed0, 0x0ed9),
|
||||||
|
...(0, util_1.range)(0x0edc, 0x0edd),
|
||||||
|
...(0, util_1.range)(0x0f00, 0x0f17),
|
||||||
|
...(0, util_1.range)(0x0f1a, 0x0f34),
|
||||||
|
0x0f36,
|
||||||
|
0x0f38,
|
||||||
|
...(0, util_1.range)(0x0f3e, 0x0f47),
|
||||||
|
...(0, util_1.range)(0x0f49, 0x0f6a),
|
||||||
|
0x0f7f,
|
||||||
|
0x0f85,
|
||||||
|
...(0, util_1.range)(0x0f88, 0x0f8b),
|
||||||
|
...(0, util_1.range)(0x0fbe, 0x0fc5),
|
||||||
|
...(0, util_1.range)(0x0fc7, 0x0fcc),
|
||||||
|
0x0fcf,
|
||||||
|
...(0, util_1.range)(0x1000, 0x1021),
|
||||||
|
...(0, util_1.range)(0x1023, 0x1027),
|
||||||
|
...(0, util_1.range)(0x1029, 0x102a),
|
||||||
|
0x102c,
|
||||||
|
0x1031,
|
||||||
|
0x1038,
|
||||||
|
...(0, util_1.range)(0x1040, 0x1057),
|
||||||
|
...(0, util_1.range)(0x10a0, 0x10c5),
|
||||||
|
...(0, util_1.range)(0x10d0, 0x10f8),
|
||||||
|
0x10fb,
|
||||||
|
...(0, util_1.range)(0x1100, 0x1159),
|
||||||
|
...(0, util_1.range)(0x115f, 0x11a2),
|
||||||
|
...(0, util_1.range)(0x11a8, 0x11f9),
|
||||||
|
...(0, util_1.range)(0x1200, 0x1206),
|
||||||
|
...(0, util_1.range)(0x1208, 0x1246),
|
||||||
|
0x1248,
|
||||||
|
...(0, util_1.range)(0x124a, 0x124d),
|
||||||
|
...(0, util_1.range)(0x1250, 0x1256),
|
||||||
|
0x1258,
|
||||||
|
...(0, util_1.range)(0x125a, 0x125d),
|
||||||
|
...(0, util_1.range)(0x1260, 0x1286),
|
||||||
|
0x1288,
|
||||||
|
...(0, util_1.range)(0x128a, 0x128d),
|
||||||
|
...(0, util_1.range)(0x1290, 0x12ae),
|
||||||
|
0x12b0,
|
||||||
|
...(0, util_1.range)(0x12b2, 0x12b5),
|
||||||
|
...(0, util_1.range)(0x12b8, 0x12be),
|
||||||
|
0x12c0,
|
||||||
|
...(0, util_1.range)(0x12c2, 0x12c5),
|
||||||
|
...(0, util_1.range)(0x12c8, 0x12ce),
|
||||||
|
...(0, util_1.range)(0x12d0, 0x12d6),
|
||||||
|
...(0, util_1.range)(0x12d8, 0x12ee),
|
||||||
|
...(0, util_1.range)(0x12f0, 0x130e),
|
||||||
|
0x1310,
|
||||||
|
...(0, util_1.range)(0x1312, 0x1315),
|
||||||
|
...(0, util_1.range)(0x1318, 0x131e),
|
||||||
|
...(0, util_1.range)(0x1320, 0x1346),
|
||||||
|
...(0, util_1.range)(0x1348, 0x135a),
|
||||||
|
...(0, util_1.range)(0x1361, 0x137c),
|
||||||
|
...(0, util_1.range)(0x13a0, 0x13f4),
|
||||||
|
...(0, util_1.range)(0x1401, 0x1676),
|
||||||
|
...(0, util_1.range)(0x1681, 0x169a),
|
||||||
|
...(0, util_1.range)(0x16a0, 0x16f0),
|
||||||
|
...(0, util_1.range)(0x1700, 0x170c),
|
||||||
|
...(0, util_1.range)(0x170e, 0x1711),
|
||||||
|
...(0, util_1.range)(0x1720, 0x1731),
|
||||||
|
...(0, util_1.range)(0x1735, 0x1736),
|
||||||
|
...(0, util_1.range)(0x1740, 0x1751),
|
||||||
|
...(0, util_1.range)(0x1760, 0x176c),
|
||||||
|
...(0, util_1.range)(0x176e, 0x1770),
|
||||||
|
...(0, util_1.range)(0x1780, 0x17b6),
|
||||||
|
...(0, util_1.range)(0x17be, 0x17c5),
|
||||||
|
...(0, util_1.range)(0x17c7, 0x17c8),
|
||||||
|
...(0, util_1.range)(0x17d4, 0x17da),
|
||||||
|
0x17dc,
|
||||||
|
...(0, util_1.range)(0x17e0, 0x17e9),
|
||||||
|
...(0, util_1.range)(0x1810, 0x1819),
|
||||||
|
...(0, util_1.range)(0x1820, 0x1877),
|
||||||
|
...(0, util_1.range)(0x1880, 0x18a8),
|
||||||
|
...(0, util_1.range)(0x1e00, 0x1e9b),
|
||||||
|
...(0, util_1.range)(0x1ea0, 0x1ef9),
|
||||||
|
...(0, util_1.range)(0x1f00, 0x1f15),
|
||||||
|
...(0, util_1.range)(0x1f18, 0x1f1d),
|
||||||
|
...(0, util_1.range)(0x1f20, 0x1f45),
|
||||||
|
...(0, util_1.range)(0x1f48, 0x1f4d),
|
||||||
|
...(0, util_1.range)(0x1f50, 0x1f57),
|
||||||
|
0x1f59,
|
||||||
|
0x1f5b,
|
||||||
|
0x1f5d,
|
||||||
|
...(0, util_1.range)(0x1f5f, 0x1f7d),
|
||||||
|
...(0, util_1.range)(0x1f80, 0x1fb4),
|
||||||
|
...(0, util_1.range)(0x1fb6, 0x1fbc),
|
||||||
|
0x1fbe,
|
||||||
|
...(0, util_1.range)(0x1fc2, 0x1fc4),
|
||||||
|
...(0, util_1.range)(0x1fc6, 0x1fcc),
|
||||||
|
...(0, util_1.range)(0x1fd0, 0x1fd3),
|
||||||
|
...(0, util_1.range)(0x1fd6, 0x1fdb),
|
||||||
|
...(0, util_1.range)(0x1fe0, 0x1fec),
|
||||||
|
...(0, util_1.range)(0x1ff2, 0x1ff4),
|
||||||
|
...(0, util_1.range)(0x1ff6, 0x1ffc),
|
||||||
|
0x200e,
|
||||||
|
0x2071,
|
||||||
|
0x207f,
|
||||||
|
0x2102,
|
||||||
|
0x2107,
|
||||||
|
...(0, util_1.range)(0x210a, 0x2113),
|
||||||
|
0x2115,
|
||||||
|
...(0, util_1.range)(0x2119, 0x211d),
|
||||||
|
0x2124,
|
||||||
|
0x2126,
|
||||||
|
0x2128,
|
||||||
|
...(0, util_1.range)(0x212a, 0x212d),
|
||||||
|
...(0, util_1.range)(0x212f, 0x2131),
|
||||||
|
...(0, util_1.range)(0x2133, 0x2139),
|
||||||
|
...(0, util_1.range)(0x213d, 0x213f),
|
||||||
|
...(0, util_1.range)(0x2145, 0x2149),
|
||||||
|
...(0, util_1.range)(0x2160, 0x2183),
|
||||||
|
...(0, util_1.range)(0x2336, 0x237a),
|
||||||
|
0x2395,
|
||||||
|
...(0, util_1.range)(0x249c, 0x24e9),
|
||||||
|
...(0, util_1.range)(0x3005, 0x3007),
|
||||||
|
...(0, util_1.range)(0x3021, 0x3029),
|
||||||
|
...(0, util_1.range)(0x3031, 0x3035),
|
||||||
|
...(0, util_1.range)(0x3038, 0x303c),
|
||||||
|
...(0, util_1.range)(0x3041, 0x3096),
|
||||||
|
...(0, util_1.range)(0x309d, 0x309f),
|
||||||
|
...(0, util_1.range)(0x30a1, 0x30fa),
|
||||||
|
...(0, util_1.range)(0x30fc, 0x30ff),
|
||||||
|
...(0, util_1.range)(0x3105, 0x312c),
|
||||||
|
...(0, util_1.range)(0x3131, 0x318e),
|
||||||
|
...(0, util_1.range)(0x3190, 0x31b7),
|
||||||
|
...(0, util_1.range)(0x31f0, 0x321c),
|
||||||
|
...(0, util_1.range)(0x3220, 0x3243),
|
||||||
|
...(0, util_1.range)(0x3260, 0x327b),
|
||||||
|
...(0, util_1.range)(0x327f, 0x32b0),
|
||||||
|
...(0, util_1.range)(0x32c0, 0x32cb),
|
||||||
|
...(0, util_1.range)(0x32d0, 0x32fe),
|
||||||
|
...(0, util_1.range)(0x3300, 0x3376),
|
||||||
|
...(0, util_1.range)(0x337b, 0x33dd),
|
||||||
|
...(0, util_1.range)(0x33e0, 0x33fe),
|
||||||
|
...(0, util_1.range)(0x3400, 0x4db5),
|
||||||
|
...(0, util_1.range)(0x4e00, 0x9fa5),
|
||||||
|
...(0, util_1.range)(0xa000, 0xa48c),
|
||||||
|
...(0, util_1.range)(0xac00, 0xd7a3),
|
||||||
|
...(0, util_1.range)(0xd800, 0xfa2d),
|
||||||
|
...(0, util_1.range)(0xfa30, 0xfa6a),
|
||||||
|
...(0, util_1.range)(0xfb00, 0xfb06),
|
||||||
|
...(0, util_1.range)(0xfb13, 0xfb17),
|
||||||
|
...(0, util_1.range)(0xff21, 0xff3a),
|
||||||
|
...(0, util_1.range)(0xff41, 0xff5a),
|
||||||
|
...(0, util_1.range)(0xff66, 0xffbe),
|
||||||
|
...(0, util_1.range)(0xffc2, 0xffc7),
|
||||||
|
...(0, util_1.range)(0xffca, 0xffcf),
|
||||||
|
...(0, util_1.range)(0xffd2, 0xffd7),
|
||||||
|
...(0, util_1.range)(0xffda, 0xffdc),
|
||||||
|
...(0, util_1.range)(0x10300, 0x1031e),
|
||||||
|
...(0, util_1.range)(0x10320, 0x10323),
|
||||||
|
...(0, util_1.range)(0x10330, 0x1034a),
|
||||||
|
...(0, util_1.range)(0x10400, 0x10425),
|
||||||
|
...(0, util_1.range)(0x10428, 0x1044d),
|
||||||
|
...(0, util_1.range)(0x1d000, 0x1d0f5),
|
||||||
|
...(0, util_1.range)(0x1d100, 0x1d126),
|
||||||
|
...(0, util_1.range)(0x1d12a, 0x1d166),
|
||||||
|
...(0, util_1.range)(0x1d16a, 0x1d172),
|
||||||
|
...(0, util_1.range)(0x1d183, 0x1d184),
|
||||||
|
...(0, util_1.range)(0x1d18c, 0x1d1a9),
|
||||||
|
...(0, util_1.range)(0x1d1ae, 0x1d1dd),
|
||||||
|
...(0, util_1.range)(0x1d400, 0x1d454),
|
||||||
|
...(0, util_1.range)(0x1d456, 0x1d49c),
|
||||||
|
...(0, util_1.range)(0x1d49e, 0x1d49f),
|
||||||
|
0x1d4a2,
|
||||||
|
...(0, util_1.range)(0x1d4a5, 0x1d4a6),
|
||||||
|
...(0, util_1.range)(0x1d4a9, 0x1d4ac),
|
||||||
|
...(0, util_1.range)(0x1d4ae, 0x1d4b9),
|
||||||
|
0x1d4bb,
|
||||||
|
...(0, util_1.range)(0x1d4bd, 0x1d4c0),
|
||||||
|
...(0, util_1.range)(0x1d4c2, 0x1d4c3),
|
||||||
|
...(0, util_1.range)(0x1d4c5, 0x1d505),
|
||||||
|
...(0, util_1.range)(0x1d507, 0x1d50a),
|
||||||
|
...(0, util_1.range)(0x1d50d, 0x1d514),
|
||||||
|
...(0, util_1.range)(0x1d516, 0x1d51c),
|
||||||
|
...(0, util_1.range)(0x1d51e, 0x1d539),
|
||||||
|
...(0, util_1.range)(0x1d53b, 0x1d53e),
|
||||||
|
...(0, util_1.range)(0x1d540, 0x1d544),
|
||||||
|
0x1d546,
|
||||||
|
...(0, util_1.range)(0x1d54a, 0x1d550),
|
||||||
|
...(0, util_1.range)(0x1d552, 0x1d6a3),
|
||||||
|
...(0, util_1.range)(0x1d6a8, 0x1d7c9),
|
||||||
|
...(0, util_1.range)(0x20000, 0x2a6d6),
|
||||||
|
...(0, util_1.range)(0x2f800, 0x2fa1d),
|
||||||
|
...(0, util_1.range)(0xf0000, 0xffffd),
|
||||||
|
...(0, util_1.range)(0x100000, 0x10fffd),
|
||||||
|
]);
|
||||||
|
//# sourceMappingURL=code-points-src.js.map
|
||||||
1
node_modules/@mongodb-js/saslprep/dist/code-points-src.js.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/code-points-src.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
2
node_modules/@mongodb-js/saslprep/dist/generate-code-points.d.ts
generated
vendored
Normal file
2
node_modules/@mongodb-js/saslprep/dist/generate-code-points.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
export {};
|
||||||
|
//# sourceMappingURL=generate-code-points.d.ts.map
|
||||||
1
node_modules/@mongodb-js/saslprep/dist/generate-code-points.d.ts.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/generate-code-points.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"generate-code-points.d.ts","sourceRoot":"","sources":["../src/generate-code-points.ts"],"names":[],"mappings":""}
|
||||||
83
node_modules/@mongodb-js/saslprep/dist/generate-code-points.js
generated
vendored
Normal file
83
node_modules/@mongodb-js/saslprep/dist/generate-code-points.js
generated
vendored
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
"use strict";
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||||
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc);
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || (function () {
|
||||||
|
var ownKeys = function(o) {
|
||||||
|
ownKeys = Object.getOwnPropertyNames || function (o) {
|
||||||
|
var ar = [];
|
||||||
|
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
||||||
|
return ar;
|
||||||
|
};
|
||||||
|
return ownKeys(o);
|
||||||
|
};
|
||||||
|
return function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
})();
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const zlib_1 = require("zlib");
|
||||||
|
const sparse_bitfield_1 = __importDefault(require("sparse-bitfield"));
|
||||||
|
const codePoints = __importStar(require("./code-points-src"));
|
||||||
|
const fs_1 = require("fs");
|
||||||
|
const prettier = __importStar(require("prettier"));
|
||||||
|
const unassigned_code_points = (0, sparse_bitfield_1.default)();
|
||||||
|
const commonly_mapped_to_nothing = (0, sparse_bitfield_1.default)();
|
||||||
|
const non_ascii_space_characters = (0, sparse_bitfield_1.default)();
|
||||||
|
const prohibited_characters = (0, sparse_bitfield_1.default)();
|
||||||
|
const bidirectional_r_al = (0, sparse_bitfield_1.default)();
|
||||||
|
const bidirectional_l = (0, sparse_bitfield_1.default)();
|
||||||
|
function traverse(bits, src) {
|
||||||
|
for (const code of src.keys()) {
|
||||||
|
bits.set(code, true);
|
||||||
|
}
|
||||||
|
const buffer = bits.toBuffer();
|
||||||
|
return Buffer.concat([createSize(buffer), buffer]);
|
||||||
|
}
|
||||||
|
function createSize(buffer) {
|
||||||
|
const buf = Buffer.alloc(4);
|
||||||
|
buf.writeUInt32BE(buffer.length);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
const memory = [];
|
||||||
|
memory.push(traverse(unassigned_code_points, codePoints.unassigned_code_points), traverse(commonly_mapped_to_nothing, codePoints.commonly_mapped_to_nothing), traverse(non_ascii_space_characters, codePoints.non_ASCII_space_characters), traverse(prohibited_characters, codePoints.prohibited_characters), traverse(bidirectional_r_al, codePoints.bidirectional_r_al), traverse(bidirectional_l, codePoints.bidirectional_l));
|
||||||
|
async function writeCodepoints() {
|
||||||
|
const config = await prettier.resolveConfig(__dirname);
|
||||||
|
const formatOptions = { ...config, parser: 'typescript' };
|
||||||
|
function write(stream, chunk) {
|
||||||
|
return new Promise((resolve) => stream.write(chunk, () => resolve()));
|
||||||
|
}
|
||||||
|
await write((0, fs_1.createWriteStream)(process.argv[2]), await prettier.format(`import { gunzipSync } from 'zlib';
|
||||||
|
|
||||||
|
export default gunzipSync(
|
||||||
|
Buffer.from(
|
||||||
|
'${(0, zlib_1.gzipSync)(Buffer.concat(memory), { level: 9 }).toString('base64')}',
|
||||||
|
'base64'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
`, formatOptions));
|
||||||
|
const fsStreamUncompressedData = (0, fs_1.createWriteStream)(process.argv[3]);
|
||||||
|
await write(fsStreamUncompressedData, await prettier.format(`const data = Buffer.from('${Buffer.concat(memory).toString('base64')}', 'base64');\nexport default data;\n`, formatOptions));
|
||||||
|
}
|
||||||
|
writeCodepoints().catch((error) => console.error('error occurred generating saslprep codepoint data', { error }));
|
||||||
|
//# sourceMappingURL=generate-code-points.js.map
|
||||||
1
node_modules/@mongodb-js/saslprep/dist/generate-code-points.js.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/generate-code-points.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"generate-code-points.js","sourceRoot":"","sources":["../src/generate-code-points.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAAgC;AAChC,sEAAuC;AACvC,8DAAgD;AAChD,2BAAuC;AACvC,mDAAqC;AAGrC,MAAM,sBAAsB,GAAG,IAAA,yBAAQ,GAAE,CAAC;AAC1C,MAAM,0BAA0B,GAAG,IAAA,yBAAQ,GAAE,CAAC;AAC9C,MAAM,0BAA0B,GAAG,IAAA,yBAAQ,GAAE,CAAC;AAC9C,MAAM,qBAAqB,GAAG,IAAA,yBAAQ,GAAE,CAAC;AACzC,MAAM,kBAAkB,GAAG,IAAA,yBAAQ,GAAE,CAAC;AACtC,MAAM,eAAe,GAAG,IAAA,yBAAQ,GAAE,CAAC;AAMnC,SAAS,QAAQ,CAAC,IAA+B,EAAE,GAAgB;IACjE,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEjC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,MAAM,GAAa,EAAE,CAAC;AAE5B,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC,sBAAsB,EAAE,UAAU,CAAC,sBAAsB,CAAC,EACnE,QAAQ,CAAC,0BAA0B,EAAE,UAAU,CAAC,0BAA0B,CAAC,EAC3E,QAAQ,CAAC,0BAA0B,EAAE,UAAU,CAAC,0BAA0B,CAAC,EAC3E,QAAQ,CAAC,qBAAqB,EAAE,UAAU,CAAC,qBAAqB,CAAC,EACjE,QAAQ,CAAC,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,CAAC,EAC3D,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC,eAAe,CAAC,CACtD,CAAC;AAEF,KAAK,UAAU,eAAe;IAC5B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAE1D,SAAS,KAAK,CAAC,MAAgB,EAAE,KAAa;QAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,KAAK,CACT,IAAA,sBAAiB,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAClC,MAAM,QAAQ,CAAC,MAAM,CACnB;;;;SAIG,IAAA,eAAQ,EAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;;;;GAItE,EACG,aAAa,CACd,CACF,CAAC;IAEF,MAAM,wBAAwB,GAAG,IAAA,sBAAiB,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpE,MAAM,KAAK,CACT,wBAAwB,EACxB,MAAM,QAAQ,CAAC,MAAM,CACnB,6BAA6B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CACzD,QAAQ,CACT,uCAAuC,EACxC,aAAa,CACd,CACF,CAAC;AACJ,CAAC;AAED,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAEhC,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,EAAE,KAAK,EAAE,CAAC,CAC9E,CAAC"}
|
||||||
11
node_modules/@mongodb-js/saslprep/dist/index.d.ts
generated
vendored
Normal file
11
node_modules/@mongodb-js/saslprep/dist/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import type { createMemoryCodePoints } from './memory-code-points';
|
||||||
|
declare function saslprep({ unassigned_code_points, commonly_mapped_to_nothing, non_ASCII_space_characters, prohibited_characters, bidirectional_r_al, bidirectional_l, }: ReturnType<typeof createMemoryCodePoints>, input: string, opts?: {
|
||||||
|
allowUnassigned?: boolean;
|
||||||
|
}): string;
|
||||||
|
declare namespace saslprep {
|
||||||
|
export var saslprep: typeof import(".");
|
||||||
|
var _a: typeof import(".");
|
||||||
|
export { _a as default };
|
||||||
|
}
|
||||||
|
export = saslprep;
|
||||||
|
//# sourceMappingURL=index.d.ts.map
|
||||||
1
node_modules/@mongodb-js/saslprep/dist/index.d.ts.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/index.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAsCnE,iBAAS,QAAQ,CACf,EACE,sBAAsB,EACtB,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GAChB,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,EAC5C,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAO,GACvC,MAAM,CAqGR;kBAhHQ,QAAQ;;;;;AAoHjB,SAAS,QAAQ,CAAC"}
|
||||||
65
node_modules/@mongodb-js/saslprep/dist/index.js
generated
vendored
Normal file
65
node_modules/@mongodb-js/saslprep/dist/index.js
generated
vendored
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
"use strict";
|
||||||
|
const getCodePoint = (character) => character.codePointAt(0);
|
||||||
|
const first = (x) => x[0];
|
||||||
|
const last = (x) => x[x.length - 1];
|
||||||
|
function toCodePoints(input) {
|
||||||
|
const codepoints = [];
|
||||||
|
const size = input.length;
|
||||||
|
for (let i = 0; i < size; i += 1) {
|
||||||
|
const before = input.charCodeAt(i);
|
||||||
|
if (before >= 0xd800 && before <= 0xdbff && size > i + 1) {
|
||||||
|
const next = input.charCodeAt(i + 1);
|
||||||
|
if (next >= 0xdc00 && next <= 0xdfff) {
|
||||||
|
codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000);
|
||||||
|
i += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
codepoints.push(before);
|
||||||
|
}
|
||||||
|
return codepoints;
|
||||||
|
}
|
||||||
|
function saslprep({ unassigned_code_points, commonly_mapped_to_nothing, non_ASCII_space_characters, prohibited_characters, bidirectional_r_al, bidirectional_l, }, input, opts = {}) {
|
||||||
|
const mapping2space = non_ASCII_space_characters;
|
||||||
|
const mapping2nothing = commonly_mapped_to_nothing;
|
||||||
|
if (typeof input !== 'string') {
|
||||||
|
throw new TypeError('Expected string.');
|
||||||
|
}
|
||||||
|
if (input.length === 0) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
const mapped_input = toCodePoints(input)
|
||||||
|
.map((character) => (mapping2space.get(character) ? 0x20 : character))
|
||||||
|
.filter((character) => !mapping2nothing.get(character));
|
||||||
|
const normalized_input = String.fromCodePoint
|
||||||
|
.apply(null, mapped_input)
|
||||||
|
.normalize('NFKC');
|
||||||
|
const normalized_map = toCodePoints(normalized_input);
|
||||||
|
const hasProhibited = normalized_map.some((character) => prohibited_characters.get(character));
|
||||||
|
if (hasProhibited) {
|
||||||
|
throw new Error('Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3');
|
||||||
|
}
|
||||||
|
if (opts.allowUnassigned !== true) {
|
||||||
|
const hasUnassigned = normalized_map.some((character) => unassigned_code_points.get(character));
|
||||||
|
if (hasUnassigned) {
|
||||||
|
throw new Error('Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const hasBidiRAL = normalized_map.some((character) => bidirectional_r_al.get(character));
|
||||||
|
const hasBidiL = normalized_map.some((character) => bidirectional_l.get(character));
|
||||||
|
if (hasBidiRAL && hasBidiL) {
|
||||||
|
throw new Error('String must not contain RandALCat and LCat at the same time,' +
|
||||||
|
' see https://tools.ietf.org/html/rfc3454#section-6');
|
||||||
|
}
|
||||||
|
const isFirstBidiRAL = bidirectional_r_al.get(getCodePoint(first(normalized_input)));
|
||||||
|
const isLastBidiRAL = bidirectional_r_al.get(getCodePoint(last(normalized_input)));
|
||||||
|
if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) {
|
||||||
|
throw new Error('Bidirectional RandALCat character must be the first and the last' +
|
||||||
|
' character of the string, see https://tools.ietf.org/html/rfc3454#section-6');
|
||||||
|
}
|
||||||
|
return normalized_input;
|
||||||
|
}
|
||||||
|
saslprep.saslprep = saslprep;
|
||||||
|
saslprep.default = saslprep;
|
||||||
|
module.exports = saslprep;
|
||||||
|
//# sourceMappingURL=index.js.map
|
||||||
1
node_modules/@mongodb-js/saslprep/dist/index.js.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/index.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACrE,MAAM,KAAK,GAAG,CAA2B,CAAI,EAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,MAAM,IAAI,GAAG,CAA2B,CAAI,EAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAO5E,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;IAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAEnC,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAErC,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACrC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;gBACrE,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAKD,SAAS,QAAQ,CACf,EACE,sBAAsB,EACtB,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GAC2B,EAC5C,KAAa,EACb,OAAsC,EAAE;IAQxC,MAAM,aAAa,GAAG,0BAA0B,CAAC;IAMjD,MAAM,eAAe,GAAG,0BAA0B,CAAC;IAEnD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IAGD,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC;SAErC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;SAErE,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAG1D,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa;SAC1C,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC;SACzB,SAAS,CAAC,MAAM,CAAC,CAAC;IAErB,MAAM,cAAc,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;IAGtD,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CACtD,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CACrC,CAAC;IAEF,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;IACJ,CAAC;IAGD,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;QAClC,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CACtD,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,CACtC,CAAC;QAEF,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;QACJ,CAAC;IACH,CAAC;IAID,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CACnD,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAClC,CAAC;IAEF,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CACjD,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAC/B,CAAC;IAIF,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,8DAA8D;YAC5D,oDAAoD,CACvD,CAAC;IACJ,CAAC;IAQD,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAC3C,YAAY,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAE,CACvC,CAAC;IACF,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAC1C,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAE,CACtC,CAAC;IAEF,IAAI,UAAU,IAAI,CAAC,CAAC,cAAc,IAAI,aAAa,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CACb,kEAAkE;YAChE,6EAA6E,CAChF,CAAC;IACJ,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC7B,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC;AAC5B,iBAAS,QAAQ,CAAC"}
|
||||||
10
node_modules/@mongodb-js/saslprep/dist/memory-code-points.d.ts
generated
vendored
Normal file
10
node_modules/@mongodb-js/saslprep/dist/memory-code-points.d.ts
generated
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import bitfield from 'sparse-bitfield';
|
||||||
|
export declare function createMemoryCodePoints(data: Buffer): {
|
||||||
|
unassigned_code_points: bitfield.BitFieldInstance;
|
||||||
|
commonly_mapped_to_nothing: bitfield.BitFieldInstance;
|
||||||
|
non_ASCII_space_characters: bitfield.BitFieldInstance;
|
||||||
|
prohibited_characters: bitfield.BitFieldInstance;
|
||||||
|
bidirectional_r_al: bitfield.BitFieldInstance;
|
||||||
|
bidirectional_l: bitfield.BitFieldInstance;
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=memory-code-points.d.ts.map
|
||||||
1
node_modules/@mongodb-js/saslprep/dist/memory-code-points.d.ts.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/memory-code-points.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"memory-code-points.d.ts","sourceRoot":"","sources":["../src/memory-code-points.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAEvC,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM;;;;;;;EA+BlD"}
|
||||||
32
node_modules/@mongodb-js/saslprep/dist/memory-code-points.js
generated
vendored
Normal file
32
node_modules/@mongodb-js/saslprep/dist/memory-code-points.js
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
"use strict";
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.createMemoryCodePoints = createMemoryCodePoints;
|
||||||
|
const sparse_bitfield_1 = __importDefault(require("sparse-bitfield"));
|
||||||
|
function createMemoryCodePoints(data) {
|
||||||
|
let offset = 0;
|
||||||
|
function read() {
|
||||||
|
const size = data.readUInt32BE(offset);
|
||||||
|
offset += 4;
|
||||||
|
const codepoints = data.slice(offset, offset + size);
|
||||||
|
offset += size;
|
||||||
|
return (0, sparse_bitfield_1.default)({ buffer: codepoints });
|
||||||
|
}
|
||||||
|
const unassigned_code_points = read();
|
||||||
|
const commonly_mapped_to_nothing = read();
|
||||||
|
const non_ASCII_space_characters = read();
|
||||||
|
const prohibited_characters = read();
|
||||||
|
const bidirectional_r_al = read();
|
||||||
|
const bidirectional_l = read();
|
||||||
|
return {
|
||||||
|
unassigned_code_points,
|
||||||
|
commonly_mapped_to_nothing,
|
||||||
|
non_ASCII_space_characters,
|
||||||
|
prohibited_characters,
|
||||||
|
bidirectional_r_al,
|
||||||
|
bidirectional_l,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=memory-code-points.js.map
|
||||||
1
node_modules/@mongodb-js/saslprep/dist/memory-code-points.js.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/memory-code-points.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"memory-code-points.js","sourceRoot":"","sources":["../src/memory-code-points.ts"],"names":[],"mappings":";;;;;AAEA,wDA+BC;AAjCD,sEAAuC;AAEvC,SAAgB,sBAAsB,CAAC,IAAY;IACjD,IAAI,MAAM,GAAG,CAAC,CAAC;IAKf,SAAS,IAAI;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,CAAC;QAEZ,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;QACrD,MAAM,IAAI,IAAI,CAAC;QAEf,OAAO,IAAA,yBAAQ,EAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,sBAAsB,GAAG,IAAI,EAAE,CAAC;IACtC,MAAM,0BAA0B,GAAG,IAAI,EAAE,CAAC;IAC1C,MAAM,0BAA0B,GAAG,IAAI,EAAE,CAAC;IAC1C,MAAM,qBAAqB,GAAG,IAAI,EAAE,CAAC;IACrC,MAAM,kBAAkB,GAAG,IAAI,EAAE,CAAC;IAClC,MAAM,eAAe,GAAG,IAAI,EAAE,CAAC;IAE/B,OAAO;QACL,sBAAsB;QACtB,0BAA0B;QAC1B,0BAA0B;QAC1B,qBAAqB;QACrB,kBAAkB;QAClB,eAAe;KAChB,CAAC;AACJ,CAAC"}
|
||||||
10
node_modules/@mongodb-js/saslprep/dist/node.d.ts
generated
vendored
Normal file
10
node_modules/@mongodb-js/saslprep/dist/node.d.ts
generated
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
declare function saslprep(input: string, opts?: {
|
||||||
|
allowUnassigned?: boolean;
|
||||||
|
}): string;
|
||||||
|
declare namespace saslprep {
|
||||||
|
export var saslprep: typeof import("./node");
|
||||||
|
var _a: typeof import("./node");
|
||||||
|
export { _a as default };
|
||||||
|
}
|
||||||
|
export = saslprep;
|
||||||
|
//# sourceMappingURL=node.d.ts.map
|
||||||
1
node_modules/@mongodb-js/saslprep/dist/node.d.ts.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/node.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAMA,iBAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAE7E;kBAFQ,QAAQ;;;;;AAOjB,SAAS,QAAQ,CAAC"}
|
||||||
15
node_modules/@mongodb-js/saslprep/dist/node.js
generated
vendored
Normal file
15
node_modules/@mongodb-js/saslprep/dist/node.js
generated
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
"use strict";
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
const index_1 = __importDefault(require("./index"));
|
||||||
|
const memory_code_points_1 = require("./memory-code-points");
|
||||||
|
const code_points_data_1 = __importDefault(require("./code-points-data"));
|
||||||
|
const codePoints = (0, memory_code_points_1.createMemoryCodePoints)(code_points_data_1.default);
|
||||||
|
function saslprep(input, opts) {
|
||||||
|
return (0, index_1.default)(codePoints, input, opts);
|
||||||
|
}
|
||||||
|
saslprep.saslprep = saslprep;
|
||||||
|
saslprep.default = saslprep;
|
||||||
|
module.exports = saslprep;
|
||||||
|
//# sourceMappingURL=node.js.map
|
||||||
1
node_modules/@mongodb-js/saslprep/dist/node.js.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/node.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":";;;;AAAA,oDAAgC;AAChC,6DAA8D;AAC9D,0EAAsC;AAEtC,MAAM,UAAU,GAAG,IAAA,2CAAsB,EAAC,0BAAI,CAAC,CAAC;AAEhD,SAAS,QAAQ,CAAC,KAAa,EAAE,IAAoC;IACnE,OAAO,IAAA,eAAS,EAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC7B,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC;AAE5B,iBAAS,QAAQ,CAAC"}
|
||||||
2
node_modules/@mongodb-js/saslprep/dist/util.d.ts
generated
vendored
Normal file
2
node_modules/@mongodb-js/saslprep/dist/util.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
export declare function range(from: number, to: number): number[];
|
||||||
|
//# sourceMappingURL=util.d.ts.map
|
||||||
1
node_modules/@mongodb-js/saslprep/dist/util.d.ts.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/util.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAGA,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAQxD"}
|
||||||
11
node_modules/@mongodb-js/saslprep/dist/util.js
generated
vendored
Normal file
11
node_modules/@mongodb-js/saslprep/dist/util.js
generated
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.range = range;
|
||||||
|
function range(from, to) {
|
||||||
|
const list = new Array(to - from + 1);
|
||||||
|
for (let i = 0; i < list.length; i += 1) {
|
||||||
|
list[i] = from + i;
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=util.js.map
|
||||||
1
node_modules/@mongodb-js/saslprep/dist/util.js.map
generated
vendored
Normal file
1
node_modules/@mongodb-js/saslprep/dist/util.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;AAGA,sBAQC;AARD,SAAgB,KAAK,CAAC,IAAY,EAAE,EAAU;IAE5C,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;IAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
||||||
87
node_modules/@mongodb-js/saslprep/package.json
generated
vendored
Normal file
87
node_modules/@mongodb-js/saslprep/package.json
generated
vendored
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
{
|
||||||
|
"name": "@mongodb-js/saslprep",
|
||||||
|
"description": "SASLprep: Stringprep Profile for User Names and Passwords, rfc4013",
|
||||||
|
"keywords": [
|
||||||
|
"sasl",
|
||||||
|
"saslprep",
|
||||||
|
"stringprep",
|
||||||
|
"rfc4013",
|
||||||
|
"4013"
|
||||||
|
],
|
||||||
|
"author": "Dmitry Tsvettsikh <me@reklatsmasters.com>",
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"main": "dist/node.js",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://jira.mongodb.org/projects/COMPASS/issues",
|
||||||
|
"email": "compass@mongodb.com"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/mongodb-js/devtools-shared/tree/main/packages/saslprep",
|
||||||
|
"version": "1.4.6",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/mongodb-js/devtools-shared.git"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"dist"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"exports": {
|
||||||
|
"browser": {
|
||||||
|
"types": "./dist/browser.d.ts",
|
||||||
|
"default": "./dist/browser.js"
|
||||||
|
},
|
||||||
|
"import": {
|
||||||
|
"types": "./dist/node.d.ts",
|
||||||
|
"default": "./dist/.esm-wrapper.mjs"
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"types": "./dist/node.d.ts",
|
||||||
|
"default": "./dist/node.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"types": "./dist/node.d.ts",
|
||||||
|
"scripts": {
|
||||||
|
"gen-code-points": "ts-node src/generate-code-points.ts src/code-points-data.ts src/code-points-data-browser.ts",
|
||||||
|
"bootstrap": "npm run compile",
|
||||||
|
"prepublishOnly": "npm run compile",
|
||||||
|
"compile": "npm run gen-code-points && tsc -p tsconfig.json && gen-esm-wrapper . ./dist/.esm-wrapper.mjs",
|
||||||
|
"typecheck": "tsc --noEmit",
|
||||||
|
"eslint": "eslint",
|
||||||
|
"prettier": "prettier",
|
||||||
|
"lint": "npm run eslint . && npm run prettier -- --check .",
|
||||||
|
"depcheck": "depcheck",
|
||||||
|
"check": "npm run typecheck && npm run lint && npm run depcheck",
|
||||||
|
"check-ci": "npm run check",
|
||||||
|
"test": "mocha",
|
||||||
|
"test-cov": "nyc -x \"**/*.spec.*\" --reporter=lcov --reporter=text --reporter=html npm run test",
|
||||||
|
"test-watch": "npm run test -- --watch",
|
||||||
|
"test-ci": "npm run test-cov",
|
||||||
|
"reformat": "npm run prettier -- --write ."
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"sparse-bitfield": "^3.0.3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@mongodb-js/eslint-config-devtools": "^0.11.3",
|
||||||
|
"@mongodb-js/mocha-config-devtools": "^1.1.0",
|
||||||
|
"@mongodb-js/prettier-config-devtools": "^1.0.2",
|
||||||
|
"@mongodb-js/tsconfig-devtools": "^1.1.1",
|
||||||
|
"@types/chai": "^4.2.21",
|
||||||
|
"@types/mocha": "^9.1.1",
|
||||||
|
"@types/node": "^22.15.30",
|
||||||
|
"@types/sinon-chai": "^3.2.5",
|
||||||
|
"@types/sparse-bitfield": "^3.0.1",
|
||||||
|
"chai": "^4.5.0",
|
||||||
|
"depcheck": "^1.4.7",
|
||||||
|
"eslint": "^7.25.0 || ^8.0.0",
|
||||||
|
"gen-esm-wrapper": "^1.1.3",
|
||||||
|
"mocha": "^8.4.0",
|
||||||
|
"nyc": "^15.1.0",
|
||||||
|
"prettier": "^3.5.3",
|
||||||
|
"sinon": "^9.2.3",
|
||||||
|
"typescript": "^5.9.3"
|
||||||
|
},
|
||||||
|
"gitHead": "351125bdca5cc071e432b25605b411b00b2eb336"
|
||||||
|
}
|
||||||
29
node_modules/@mongodb-js/saslprep/readme.md
generated
vendored
Normal file
29
node_modules/@mongodb-js/saslprep/readme.md
generated
vendored
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# saslprep
|
||||||
|
|
||||||
|
_Note: This is a fork of the original [`saslprep`](https://www.npmjs.com/package/saslprep) npm package
|
||||||
|
and provides equivalent functionality._
|
||||||
|
|
||||||
|
Stringprep Profile for User Names and Passwords, [rfc4013](https://tools.ietf.org/html/rfc4013)
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
```js
|
||||||
|
const saslprep = require('@mongodb-js/saslprep');
|
||||||
|
|
||||||
|
saslprep('password\u00AD'); // password
|
||||||
|
saslprep('password\u0007'); // Error: prohibited character
|
||||||
|
```
|
||||||
|
|
||||||
|
### API
|
||||||
|
|
||||||
|
##### `saslprep(input: String, opts: Options): String`
|
||||||
|
|
||||||
|
Normalize user name or password.
|
||||||
|
|
||||||
|
##### `Options.allowUnassigned: bool`
|
||||||
|
|
||||||
|
A special behavior for unassigned code points, see https://tools.ietf.org/html/rfc4013#section-2.5. Disabled by default.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT, 2017-2019 (c) Dmitriy Tsvettsikh
|
||||||
21
node_modules/@types/webidl-conversions/LICENSE
generated
vendored
Normal file
21
node_modules/@types/webidl-conversions/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) Microsoft Corporation.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE
|
||||||
15
node_modules/@types/webidl-conversions/README.md
generated
vendored
Normal file
15
node_modules/@types/webidl-conversions/README.md
generated
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# Installation
|
||||||
|
> `npm install --save @types/webidl-conversions`
|
||||||
|
|
||||||
|
# Summary
|
||||||
|
This package contains type definitions for webidl-conversions (https://github.com/jsdom/webidl-conversions#readme).
|
||||||
|
|
||||||
|
# Details
|
||||||
|
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/webidl-conversions.
|
||||||
|
|
||||||
|
### Additional Details
|
||||||
|
* Last updated: Tue, 07 Nov 2023 15:11:36 GMT
|
||||||
|
* Dependencies: none
|
||||||
|
|
||||||
|
# Credits
|
||||||
|
These definitions were written by [ExE Boss](https://github.com/ExE-Boss), and [BendingBender](https://github.com/BendingBender).
|
||||||
91
node_modules/@types/webidl-conversions/index.d.ts
generated
vendored
Normal file
91
node_modules/@types/webidl-conversions/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
declare namespace WebIDLConversions {
|
||||||
|
interface Globals {
|
||||||
|
[key: string]: unknown;
|
||||||
|
|
||||||
|
Number: (value?: unknown) => number;
|
||||||
|
String: (value?: unknown) => string;
|
||||||
|
TypeError: new(message?: string) => TypeError;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Options {
|
||||||
|
context?: string | undefined;
|
||||||
|
globals?: Globals | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IntegerOptions extends Options {
|
||||||
|
enforceRange?: boolean | undefined;
|
||||||
|
clamp?: boolean | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface StringOptions extends Options {
|
||||||
|
treatNullAsEmptyString?: boolean | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface BufferSourceOptions extends Options {
|
||||||
|
allowShared?: boolean | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
type IntegerConversion = (V: unknown, opts?: IntegerOptions) => number;
|
||||||
|
type StringConversion = (V: unknown, opts?: StringOptions) => string;
|
||||||
|
type NumberConversion = (V: unknown, opts?: Options) => number;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare const WebIDLConversions: {
|
||||||
|
any<V>(V: V, opts?: WebIDLConversions.Options): V;
|
||||||
|
undefined(V?: unknown, opts?: WebIDLConversions.Options): void;
|
||||||
|
boolean(V: unknown, opts?: WebIDLConversions.Options): boolean;
|
||||||
|
|
||||||
|
byte(V: unknown, opts?: WebIDLConversions.IntegerOptions): number;
|
||||||
|
octet(V: unknown, opts?: WebIDLConversions.IntegerOptions): number;
|
||||||
|
|
||||||
|
short(V: unknown, opts?: WebIDLConversions.IntegerOptions): number;
|
||||||
|
["unsigned short"](V: unknown, opts?: WebIDLConversions.IntegerOptions): number;
|
||||||
|
|
||||||
|
long(V: unknown, opts?: WebIDLConversions.IntegerOptions): number;
|
||||||
|
["unsigned long"](V: unknown, opts?: WebIDLConversions.IntegerOptions): number;
|
||||||
|
|
||||||
|
["long long"](V: unknown, opts?: WebIDLConversions.IntegerOptions): number;
|
||||||
|
["unsigned long long"](V: unknown, opts?: WebIDLConversions.IntegerOptions): number;
|
||||||
|
|
||||||
|
double(V: unknown, opts?: WebIDLConversions.Options): number;
|
||||||
|
["unrestricted double"](V: unknown, opts?: WebIDLConversions.Options): number;
|
||||||
|
|
||||||
|
float(V: unknown, opts?: WebIDLConversions.Options): number;
|
||||||
|
["unrestricted float"](V: unknown, opts?: WebIDLConversions.Options): number;
|
||||||
|
|
||||||
|
DOMString(V: unknown, opts?: WebIDLConversions.StringOptions): string;
|
||||||
|
ByteString(V: unknown, opts?: WebIDLConversions.StringOptions): string;
|
||||||
|
USVString(V: unknown, opts?: WebIDLConversions.StringOptions): string;
|
||||||
|
|
||||||
|
object<V>(V: V, opts?: WebIDLConversions.Options): V extends object ? V : V & object;
|
||||||
|
ArrayBuffer(
|
||||||
|
V: unknown,
|
||||||
|
opts?: WebIDLConversions.BufferSourceOptions & { allowShared?: false | undefined },
|
||||||
|
): ArrayBuffer;
|
||||||
|
ArrayBuffer(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): ArrayBufferLike;
|
||||||
|
DataView(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): DataView;
|
||||||
|
|
||||||
|
Int8Array(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Int8Array;
|
||||||
|
Int16Array(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Int16Array;
|
||||||
|
Int32Array(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Int32Array;
|
||||||
|
|
||||||
|
Uint8Array(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Uint8Array;
|
||||||
|
Uint16Array(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Uint16Array;
|
||||||
|
Uint32Array(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Uint32Array;
|
||||||
|
Uint8ClampedArray(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Uint8ClampedArray;
|
||||||
|
|
||||||
|
Float32Array(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Float32Array;
|
||||||
|
Float64Array(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Float64Array;
|
||||||
|
|
||||||
|
ArrayBufferView(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): ArrayBufferView;
|
||||||
|
BufferSource(
|
||||||
|
V: unknown,
|
||||||
|
opts?: WebIDLConversions.BufferSourceOptions & { allowShared?: false | undefined },
|
||||||
|
): ArrayBuffer | ArrayBufferView;
|
||||||
|
BufferSource(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): ArrayBufferLike | ArrayBufferView;
|
||||||
|
|
||||||
|
DOMTimeStamp(V: unknown, opts?: WebIDLConversions.Options): number;
|
||||||
|
};
|
||||||
|
|
||||||
|
// This can't use ES6 style exports, as those can't have spaces in export names.
|
||||||
|
export = WebIDLConversions;
|
||||||
30
node_modules/@types/webidl-conversions/package.json
generated
vendored
Normal file
30
node_modules/@types/webidl-conversions/package.json
generated
vendored
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"name": "@types/webidl-conversions",
|
||||||
|
"version": "7.0.3",
|
||||||
|
"description": "TypeScript definitions for webidl-conversions",
|
||||||
|
"homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/webidl-conversions",
|
||||||
|
"license": "MIT",
|
||||||
|
"contributors": [
|
||||||
|
{
|
||||||
|
"name": "ExE Boss",
|
||||||
|
"githubUsername": "ExE-Boss",
|
||||||
|
"url": "https://github.com/ExE-Boss"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BendingBender",
|
||||||
|
"githubUsername": "BendingBender",
|
||||||
|
"url": "https://github.com/BendingBender"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"main": "",
|
||||||
|
"types": "index.d.ts",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
|
||||||
|
"directory": "types/webidl-conversions"
|
||||||
|
},
|
||||||
|
"scripts": {},
|
||||||
|
"dependencies": {},
|
||||||
|
"typesPublisherContentHash": "ff1514e10869784e8b7cca9c4099a4213d3f14b48c198b1bf116300df94bf608",
|
||||||
|
"typeScriptVersion": "4.5"
|
||||||
|
}
|
||||||
21
node_modules/@types/whatwg-url/LICENSE
generated
vendored
Normal file
21
node_modules/@types/whatwg-url/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) Microsoft Corporation.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE
|
||||||
15
node_modules/@types/whatwg-url/README.md
generated
vendored
Normal file
15
node_modules/@types/whatwg-url/README.md
generated
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# Installation
|
||||||
|
> `npm install --save @types/whatwg-url`
|
||||||
|
|
||||||
|
# Summary
|
||||||
|
This package contains type definitions for whatwg-url (https://github.com/jsdom/whatwg-url#readme).
|
||||||
|
|
||||||
|
# Details
|
||||||
|
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/whatwg-url.
|
||||||
|
|
||||||
|
### Additional Details
|
||||||
|
* Last updated: Sat, 18 May 2024 21:06:54 GMT
|
||||||
|
* Dependencies: [@types/webidl-conversions](https://npmjs.com/package/@types/webidl-conversions)
|
||||||
|
|
||||||
|
# Credits
|
||||||
|
These definitions were written by [Alexander Marks](https://github.com/aomarks), [ExE Boss](https://github.com/ExE-Boss), and [BendingBender](https://github.com/BendingBender).
|
||||||
169
node_modules/@types/whatwg-url/index.d.ts
generated
vendored
Normal file
169
node_modules/@types/whatwg-url/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
/// <reference lib="es2020"/>
|
||||||
|
/** https://url.spec.whatwg.org/#url-representation */
|
||||||
|
export interface URLRecord {
|
||||||
|
scheme: string;
|
||||||
|
username: string;
|
||||||
|
password: string;
|
||||||
|
host: string | number | IPv6Address | null;
|
||||||
|
port: number | null;
|
||||||
|
path: string | string[];
|
||||||
|
query: string | null;
|
||||||
|
fragment: string | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#concept-ipv6 */
|
||||||
|
export type IPv6Address = [number, number, number, number, number, number, number, number];
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#url-class */
|
||||||
|
export class URL {
|
||||||
|
constructor(url: string, base?: string | URL);
|
||||||
|
|
||||||
|
get href(): string;
|
||||||
|
set href(V: string);
|
||||||
|
|
||||||
|
get origin(): string;
|
||||||
|
|
||||||
|
get protocol(): string;
|
||||||
|
set protocol(V: string);
|
||||||
|
|
||||||
|
get username(): string;
|
||||||
|
set username(V: string);
|
||||||
|
|
||||||
|
get password(): string;
|
||||||
|
set password(V: string);
|
||||||
|
|
||||||
|
get host(): string;
|
||||||
|
set host(V: string);
|
||||||
|
|
||||||
|
get hostname(): string;
|
||||||
|
set hostname(V: string);
|
||||||
|
|
||||||
|
get port(): string;
|
||||||
|
set port(V: string);
|
||||||
|
|
||||||
|
get pathname(): string;
|
||||||
|
set pathname(V: string);
|
||||||
|
|
||||||
|
get search(): string;
|
||||||
|
set search(V: string);
|
||||||
|
|
||||||
|
get searchParams(): URLSearchParams;
|
||||||
|
|
||||||
|
get hash(): string;
|
||||||
|
set hash(V: string);
|
||||||
|
|
||||||
|
toJSON(): string;
|
||||||
|
|
||||||
|
readonly [Symbol.toStringTag]: "URL";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#interface-urlsearchparams */
|
||||||
|
export class URLSearchParams {
|
||||||
|
constructor(
|
||||||
|
init?:
|
||||||
|
| ReadonlyArray<readonly [name: string, value: string]>
|
||||||
|
| Iterable<readonly [name: string, value: string]>
|
||||||
|
| { readonly [name: string]: string }
|
||||||
|
| string,
|
||||||
|
);
|
||||||
|
|
||||||
|
append(name: string, value: string): void;
|
||||||
|
delete(name: string): void;
|
||||||
|
get(name: string): string | null;
|
||||||
|
getAll(name: string): string[];
|
||||||
|
has(name: string): boolean;
|
||||||
|
set(name: string, value: string): void;
|
||||||
|
sort(): void;
|
||||||
|
|
||||||
|
keys(): IterableIterator<string>;
|
||||||
|
values(): IterableIterator<string>;
|
||||||
|
entries(): IterableIterator<[name: string, value: string]>;
|
||||||
|
forEach<THIS_ARG = void>(
|
||||||
|
callback: (this: THIS_ARG, value: string, name: string, searchParams: this) => void,
|
||||||
|
thisArg?: THIS_ARG,
|
||||||
|
): void;
|
||||||
|
|
||||||
|
readonly [Symbol.toStringTag]: "URLSearchParams";
|
||||||
|
[Symbol.iterator](): IterableIterator<[name: string, value: string]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#concept-url-parser */
|
||||||
|
export function parseURL(input: string, options?: { readonly baseURL?: URLRecord | undefined }): URLRecord | null;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#concept-basic-url-parser */
|
||||||
|
export function basicURLParse(
|
||||||
|
input: string,
|
||||||
|
options?: {
|
||||||
|
baseURL?: URLRecord | undefined;
|
||||||
|
url?: URLRecord | undefined;
|
||||||
|
stateOverride?: StateOverride | undefined;
|
||||||
|
},
|
||||||
|
): URLRecord | null;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#scheme-start-state */
|
||||||
|
export type StateOverride =
|
||||||
|
| "scheme start"
|
||||||
|
| "scheme"
|
||||||
|
| "no scheme"
|
||||||
|
| "special relative or authority"
|
||||||
|
| "path or authority"
|
||||||
|
| "relative"
|
||||||
|
| "relative slash"
|
||||||
|
| "special authority slashes"
|
||||||
|
| "special authority ignore slashes"
|
||||||
|
| "authority"
|
||||||
|
| "host"
|
||||||
|
| "hostname"
|
||||||
|
| "port"
|
||||||
|
| "file"
|
||||||
|
| "file slash"
|
||||||
|
| "file host"
|
||||||
|
| "path start"
|
||||||
|
| "path"
|
||||||
|
| "opaque path"
|
||||||
|
| "query"
|
||||||
|
| "fragment";
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#concept-url-serializer */
|
||||||
|
export function serializeURL(urlRecord: URLRecord, excludeFragment?: boolean): string;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#concept-host-serializer */
|
||||||
|
export function serializeHost(host: string | number | IPv6Address): string;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#url-path-serializer */
|
||||||
|
export function serializePath(urlRecord: URLRecord): string;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#serialize-an-integer */
|
||||||
|
export function serializeInteger(number: number): string;
|
||||||
|
|
||||||
|
/** https://html.spec.whatwg.org#ascii-serialisation-of-an-origin */
|
||||||
|
export function serializeURLOrigin(urlRecord: URLRecord): string;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#set-the-username */
|
||||||
|
export function setTheUsername(urlRecord: URLRecord, username: string): void;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#set-the-password */
|
||||||
|
export function setThePassword(urlRecord: URLRecord, password: string): void;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#url-opaque-path */
|
||||||
|
export function hasAnOpaquePath(urlRecord: URLRecord): boolean;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#cannot-have-a-username-password-port */
|
||||||
|
export function cannotHaveAUsernamePasswordPort(urlRecord: URLRecord): boolean;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#percent-decode */
|
||||||
|
export function percentDecodeBytes(buffer: TypedArray): Uint8Array;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#string-percent-decode */
|
||||||
|
export function percentDecodeString(string: string): Uint8Array;
|
||||||
|
|
||||||
|
export type TypedArray =
|
||||||
|
| Uint8Array
|
||||||
|
| Uint8ClampedArray
|
||||||
|
| Uint16Array
|
||||||
|
| Uint32Array
|
||||||
|
| Int8Array
|
||||||
|
| Int16Array
|
||||||
|
| Int32Array
|
||||||
|
| Float32Array
|
||||||
|
| Float64Array;
|
||||||
22
node_modules/@types/whatwg-url/lib/URL-impl.d.ts
generated
vendored
Normal file
22
node_modules/@types/whatwg-url/lib/URL-impl.d.ts
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { Globals } from "webidl-conversions";
|
||||||
|
import { implementation as URLSearchParamsImpl } from "./URLSearchParams-impl";
|
||||||
|
|
||||||
|
declare class URLImpl {
|
||||||
|
constructor(globalObject: Globals, constructorArgs: readonly [url: string, base?: string]);
|
||||||
|
|
||||||
|
href: string;
|
||||||
|
readonly origin: string;
|
||||||
|
protocol: string;
|
||||||
|
username: string;
|
||||||
|
password: string;
|
||||||
|
host: string;
|
||||||
|
hostname: string;
|
||||||
|
port: string;
|
||||||
|
pathname: string;
|
||||||
|
search: string;
|
||||||
|
readonly searchParams: URLSearchParamsImpl;
|
||||||
|
hash: string;
|
||||||
|
|
||||||
|
toJSON(): string;
|
||||||
|
}
|
||||||
|
export { URLImpl as implementation };
|
||||||
66
node_modules/@types/whatwg-url/lib/URL.d.ts
generated
vendored
Normal file
66
node_modules/@types/whatwg-url/lib/URL.d.ts
generated
vendored
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
import { URL } from "../index";
|
||||||
|
import { implementation as URLImpl } from "./URL-impl";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether `obj` is a `URL` object with an implementation
|
||||||
|
* provided by this package.
|
||||||
|
*/
|
||||||
|
export function is(obj: unknown): obj is URL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether `obj` is a `URLImpl` WebIDL2JS implementation object
|
||||||
|
* provided by this package.
|
||||||
|
*/
|
||||||
|
export function isImpl(obj: unknown): obj is URLImpl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts the `URL` wrapper into a `URLImpl` object.
|
||||||
|
*
|
||||||
|
* @throws {TypeError} If `obj` is not a `URL` wrapper instance provided by this package.
|
||||||
|
*/
|
||||||
|
export function convert(globalObject: object, obj: unknown, { context }?: { context: string }): URLImpl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new `URL` instance.
|
||||||
|
*
|
||||||
|
* @throws {Error} If the `globalObject` doesn't have a WebIDL2JS constructor
|
||||||
|
* registry or a `URL` constructor provided by this package
|
||||||
|
* in the WebIDL2JS constructor registry.
|
||||||
|
*/
|
||||||
|
export function create(globalObject: object, constructorArgs: readonly [url: string, base?: string]): URL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calls `create()` and returns the internal `URLImpl`.
|
||||||
|
*
|
||||||
|
* @throws {Error} If the `globalObject` doesn't have a WebIDL2JS constructor
|
||||||
|
* registry or a `URL` constructor provided by this package
|
||||||
|
* in the WebIDL2JS constructor registry.
|
||||||
|
*/
|
||||||
|
export function createImpl(globalObject: object, constructorArgs: readonly [url: string, base?: string]): URLImpl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the `URL` instance, called by `create()`.
|
||||||
|
*
|
||||||
|
* Useful when manually sub-classing a non-constructable wrapper object.
|
||||||
|
*/
|
||||||
|
export function setup<T extends URL>(
|
||||||
|
obj: T,
|
||||||
|
globalObject: object,
|
||||||
|
constructorArgs: readonly [url: string, base?: string],
|
||||||
|
): T;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new `URL` object without runing the constructor steps.
|
||||||
|
*
|
||||||
|
* Useful when implementing specifications that initialize objects
|
||||||
|
* in different ways than their constructors do.
|
||||||
|
*/
|
||||||
|
declare function _new(globalObject: object, newTarget?: new(url: string, base?: string) => URL): URLImpl;
|
||||||
|
export { _new as new };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Installs the `URL` constructor onto the `globalObject`.
|
||||||
|
*
|
||||||
|
* @throws {Error} If the target `globalObject` doesn't have an `Error` constructor.
|
||||||
|
*/
|
||||||
|
export function install(globalObject: object, globalNames: readonly string[]): void;
|
||||||
20
node_modules/@types/whatwg-url/lib/URLSearchParams-impl.d.ts
generated
vendored
Normal file
20
node_modules/@types/whatwg-url/lib/URLSearchParams-impl.d.ts
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
declare class URLSearchParamsImpl {
|
||||||
|
constructor(
|
||||||
|
globalObject: object,
|
||||||
|
constructorArgs: readonly [
|
||||||
|
init?: ReadonlyArray<readonly [name: string, value: string]> | { readonly [name: string]: string } | string,
|
||||||
|
],
|
||||||
|
privateData: { readonly doNotStripQMark?: boolean | undefined },
|
||||||
|
);
|
||||||
|
|
||||||
|
append(name: string, value: string): void;
|
||||||
|
delete(name: string): void;
|
||||||
|
get(name: string): string | null;
|
||||||
|
getAll(name: string): string[];
|
||||||
|
has(name: string): boolean;
|
||||||
|
set(name: string, value: string): void;
|
||||||
|
sort(): void;
|
||||||
|
|
||||||
|
[Symbol.iterator](): IterableIterator<[name: string, value: string]>;
|
||||||
|
}
|
||||||
|
export { URLSearchParamsImpl as implementation };
|
||||||
92
node_modules/@types/whatwg-url/lib/URLSearchParams.d.ts
generated
vendored
Normal file
92
node_modules/@types/whatwg-url/lib/URLSearchParams.d.ts
generated
vendored
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
import { URLSearchParams } from "../index";
|
||||||
|
import { implementation as URLSearchParamsImpl } from "./URLSearchParams-impl";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether `obj` is a `URLSearchParams` object with an implementation
|
||||||
|
* provided by this package.
|
||||||
|
*/
|
||||||
|
export function is(obj: unknown): obj is URLSearchParams;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether `obj` is a `URLSearchParamsImpl` WebIDL2JS implementation object
|
||||||
|
* provided by this package.
|
||||||
|
*/
|
||||||
|
export function isImpl(obj: unknown): obj is URLSearchParamsImpl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts the `URLSearchParams` wrapper into a `URLSearchParamsImpl` object.
|
||||||
|
*
|
||||||
|
* @throws {TypeError} If `obj` is not a `URLSearchParams` wrapper instance provided by this package.
|
||||||
|
*/
|
||||||
|
export function convert(globalObject: object, obj: unknown, { context }?: { context: string }): URLSearchParamsImpl;
|
||||||
|
|
||||||
|
export function createDefaultIterator<TIteratorKind extends "key" | "value" | "key+value">(
|
||||||
|
globalObject: object,
|
||||||
|
target: URLSearchParamsImpl,
|
||||||
|
kind: TIteratorKind,
|
||||||
|
): IterableIterator<TIteratorKind extends "key" | "value" ? string : [name: string, value: string]>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new `URLSearchParams` instance.
|
||||||
|
*
|
||||||
|
* @throws {Error} If the `globalObject` doesn't have a WebIDL2JS constructor
|
||||||
|
* registry or a `URLSearchParams` constructor provided by this package
|
||||||
|
* in the WebIDL2JS constructor registry.
|
||||||
|
*/
|
||||||
|
export function create(
|
||||||
|
globalObject: object,
|
||||||
|
constructorArgs?: readonly [
|
||||||
|
init: ReadonlyArray<[name: string, value: string]> | { readonly [name: string]: string } | string,
|
||||||
|
],
|
||||||
|
privateData?: { doNotStripQMark?: boolean | undefined },
|
||||||
|
): URLSearchParams;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calls `create()` and returns the internal `URLSearchParamsImpl`.
|
||||||
|
*
|
||||||
|
* @throws {Error} If the `globalObject` doesn't have a WebIDL2JS constructor
|
||||||
|
* registry or a `URLSearchParams` constructor provided by this package
|
||||||
|
* in the WebIDL2JS constructor registry.
|
||||||
|
*/
|
||||||
|
export function createImpl(
|
||||||
|
globalObject: object,
|
||||||
|
constructorArgs?: readonly [
|
||||||
|
init: ReadonlyArray<[name: string, value: string]> | { readonly [name: string]: string } | string,
|
||||||
|
],
|
||||||
|
privateData?: { doNotStripQMark?: boolean | undefined },
|
||||||
|
): URLSearchParamsImpl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the `URLSearchParams` instance, called by `create()`.
|
||||||
|
*
|
||||||
|
* Useful when manually sub-classing a non-constructable wrapper object.
|
||||||
|
*/
|
||||||
|
export function setup<T extends URLSearchParams>(
|
||||||
|
obj: T,
|
||||||
|
globalObject: object,
|
||||||
|
constructorArgs?: readonly [
|
||||||
|
init: ReadonlyArray<[name: string, value: string]> | { readonly [name: string]: string } | string,
|
||||||
|
],
|
||||||
|
privateData?: { doNotStripQMark?: boolean | undefined },
|
||||||
|
): T;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new `URLSearchParams` object without runing the constructor steps.
|
||||||
|
*
|
||||||
|
* Useful when implementing specifications that initialize objects
|
||||||
|
* in different ways than their constructors do.
|
||||||
|
*/
|
||||||
|
declare function _new(
|
||||||
|
globalObject: object,
|
||||||
|
newTarget?: new(
|
||||||
|
init: ReadonlyArray<[name: string, value: string]> | { readonly [name: string]: string } | string,
|
||||||
|
) => URLSearchParams,
|
||||||
|
): URLSearchParamsImpl;
|
||||||
|
export { _new as new };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Installs the `URLSearchParams` constructor onto the `globalObject`.
|
||||||
|
*
|
||||||
|
* @throws {Error} If the target `globalObject` doesn't have an `Error` constructor.
|
||||||
|
*/
|
||||||
|
export function install(globalObject: object, globalNames: readonly string[]): void;
|
||||||
37
node_modules/@types/whatwg-url/package.json
generated
vendored
Normal file
37
node_modules/@types/whatwg-url/package.json
generated
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"name": "@types/whatwg-url",
|
||||||
|
"version": "11.0.5",
|
||||||
|
"description": "TypeScript definitions for whatwg-url",
|
||||||
|
"homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/whatwg-url",
|
||||||
|
"license": "MIT",
|
||||||
|
"contributors": [
|
||||||
|
{
|
||||||
|
"name": "Alexander Marks",
|
||||||
|
"githubUsername": "aomarks",
|
||||||
|
"url": "https://github.com/aomarks"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ExE Boss",
|
||||||
|
"githubUsername": "ExE-Boss",
|
||||||
|
"url": "https://github.com/ExE-Boss"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BendingBender",
|
||||||
|
"githubUsername": "BendingBender",
|
||||||
|
"url": "https://github.com/BendingBender"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"main": "",
|
||||||
|
"types": "index.d.ts",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
|
||||||
|
"directory": "types/whatwg-url"
|
||||||
|
},
|
||||||
|
"scripts": {},
|
||||||
|
"dependencies": {
|
||||||
|
"@types/webidl-conversions": "*"
|
||||||
|
},
|
||||||
|
"typesPublisherContentHash": "c6cfac1bbd7b2ef315fdad11fc9bdb6a8f0ae2b1c3ff057cfca7bc9880eeaa9d",
|
||||||
|
"typeScriptVersion": "4.7"
|
||||||
|
}
|
||||||
4
node_modules/@types/whatwg-url/webidl2js-wrapper.d.ts
generated
vendored
Normal file
4
node_modules/@types/whatwg-url/webidl2js-wrapper.d.ts
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
import * as URL from "./lib/URL";
|
||||||
|
import * as URLSearchParams from "./lib/URLSearchParams";
|
||||||
|
|
||||||
|
export { URL, URLSearchParams };
|
||||||
243
node_modules/accepts/HISTORY.md
generated
vendored
Normal file
243
node_modules/accepts/HISTORY.md
generated
vendored
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
1.3.8 / 2022-02-02
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.34
|
||||||
|
- deps: mime-db@~1.51.0
|
||||||
|
* deps: negotiator@0.6.3
|
||||||
|
|
||||||
|
1.3.7 / 2019-04-29
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: negotiator@0.6.2
|
||||||
|
- Fix sorting charset, encoding, and language with extra parameters
|
||||||
|
|
||||||
|
1.3.6 / 2019-04-28
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.24
|
||||||
|
- deps: mime-db@~1.40.0
|
||||||
|
|
||||||
|
1.3.5 / 2018-02-28
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.18
|
||||||
|
- deps: mime-db@~1.33.0
|
||||||
|
|
||||||
|
1.3.4 / 2017-08-22
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.16
|
||||||
|
- deps: mime-db@~1.29.0
|
||||||
|
|
||||||
|
1.3.3 / 2016-05-02
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.11
|
||||||
|
- deps: mime-db@~1.23.0
|
||||||
|
* deps: negotiator@0.6.1
|
||||||
|
- perf: improve `Accept` parsing speed
|
||||||
|
- perf: improve `Accept-Charset` parsing speed
|
||||||
|
- perf: improve `Accept-Encoding` parsing speed
|
||||||
|
- perf: improve `Accept-Language` parsing speed
|
||||||
|
|
||||||
|
1.3.2 / 2016-03-08
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.10
|
||||||
|
- Fix extension of `application/dash+xml`
|
||||||
|
- Update primary extension for `audio/mp4`
|
||||||
|
- deps: mime-db@~1.22.0
|
||||||
|
|
||||||
|
1.3.1 / 2016-01-19
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.9
|
||||||
|
- deps: mime-db@~1.21.0
|
||||||
|
|
||||||
|
1.3.0 / 2015-09-29
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.7
|
||||||
|
- deps: mime-db@~1.19.0
|
||||||
|
* deps: negotiator@0.6.0
|
||||||
|
- Fix including type extensions in parameters in `Accept` parsing
|
||||||
|
- Fix parsing `Accept` parameters with quoted equals
|
||||||
|
- Fix parsing `Accept` parameters with quoted semicolons
|
||||||
|
- Lazy-load modules from main entry point
|
||||||
|
- perf: delay type concatenation until needed
|
||||||
|
- perf: enable strict mode
|
||||||
|
- perf: hoist regular expressions
|
||||||
|
- perf: remove closures getting spec properties
|
||||||
|
- perf: remove a closure from media type parsing
|
||||||
|
- perf: remove property delete from media type parsing
|
||||||
|
|
||||||
|
1.2.13 / 2015-09-06
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.6
|
||||||
|
- deps: mime-db@~1.18.0
|
||||||
|
|
||||||
|
1.2.12 / 2015-07-30
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.4
|
||||||
|
- deps: mime-db@~1.16.0
|
||||||
|
|
||||||
|
1.2.11 / 2015-07-16
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.3
|
||||||
|
- deps: mime-db@~1.15.0
|
||||||
|
|
||||||
|
1.2.10 / 2015-07-01
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.2
|
||||||
|
- deps: mime-db@~1.14.0
|
||||||
|
|
||||||
|
1.2.9 / 2015-06-08
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.1
|
||||||
|
- perf: fix deopt during mapping
|
||||||
|
|
||||||
|
1.2.8 / 2015-06-07
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.0
|
||||||
|
- deps: mime-db@~1.13.0
|
||||||
|
* perf: avoid argument reassignment & argument slice
|
||||||
|
* perf: avoid negotiator recursive construction
|
||||||
|
* perf: enable strict mode
|
||||||
|
* perf: remove unnecessary bitwise operator
|
||||||
|
|
||||||
|
1.2.7 / 2015-05-10
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: negotiator@0.5.3
|
||||||
|
- Fix media type parameter matching to be case-insensitive
|
||||||
|
|
||||||
|
1.2.6 / 2015-05-07
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.0.11
|
||||||
|
- deps: mime-db@~1.9.1
|
||||||
|
* deps: negotiator@0.5.2
|
||||||
|
- Fix comparing media types with quoted values
|
||||||
|
- Fix splitting media types with quoted commas
|
||||||
|
|
||||||
|
1.2.5 / 2015-03-13
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.0.10
|
||||||
|
- deps: mime-db@~1.8.0
|
||||||
|
|
||||||
|
1.2.4 / 2015-02-14
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Support Node.js 0.6
|
||||||
|
* deps: mime-types@~2.0.9
|
||||||
|
- deps: mime-db@~1.7.0
|
||||||
|
* deps: negotiator@0.5.1
|
||||||
|
- Fix preference sorting to be stable for long acceptable lists
|
||||||
|
|
||||||
|
1.2.3 / 2015-01-31
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.0.8
|
||||||
|
- deps: mime-db@~1.6.0
|
||||||
|
|
||||||
|
1.2.2 / 2014-12-30
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.0.7
|
||||||
|
- deps: mime-db@~1.5.0
|
||||||
|
|
||||||
|
1.2.1 / 2014-12-30
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.0.5
|
||||||
|
- deps: mime-db@~1.3.1
|
||||||
|
|
||||||
|
1.2.0 / 2014-12-19
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: negotiator@0.5.0
|
||||||
|
- Fix list return order when large accepted list
|
||||||
|
- Fix missing identity encoding when q=0 exists
|
||||||
|
- Remove dynamic building of Negotiator class
|
||||||
|
|
||||||
|
1.1.4 / 2014-12-10
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.0.4
|
||||||
|
- deps: mime-db@~1.3.0
|
||||||
|
|
||||||
|
1.1.3 / 2014-11-09
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.0.3
|
||||||
|
- deps: mime-db@~1.2.0
|
||||||
|
|
||||||
|
1.1.2 / 2014-10-14
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: negotiator@0.4.9
|
||||||
|
- Fix error when media type has invalid parameter
|
||||||
|
|
||||||
|
1.1.1 / 2014-09-28
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.0.2
|
||||||
|
- deps: mime-db@~1.1.0
|
||||||
|
* deps: negotiator@0.4.8
|
||||||
|
- Fix all negotiations to be case-insensitive
|
||||||
|
- Stable sort preferences of same quality according to client order
|
||||||
|
|
||||||
|
1.1.0 / 2014-09-02
|
||||||
|
==================
|
||||||
|
|
||||||
|
* update `mime-types`
|
||||||
|
|
||||||
|
1.0.7 / 2014-07-04
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix wrong type returned from `type` when match after unknown extension
|
||||||
|
|
||||||
|
1.0.6 / 2014-06-24
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: negotiator@0.4.7
|
||||||
|
|
||||||
|
1.0.5 / 2014-06-20
|
||||||
|
==================
|
||||||
|
|
||||||
|
* fix crash when unknown extension given
|
||||||
|
|
||||||
|
1.0.4 / 2014-06-19
|
||||||
|
==================
|
||||||
|
|
||||||
|
* use `mime-types`
|
||||||
|
|
||||||
|
1.0.3 / 2014-06-11
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: negotiator@0.4.6
|
||||||
|
- Order by specificity when quality is the same
|
||||||
|
|
||||||
|
1.0.2 / 2014-05-29
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix interpretation when header not in request
|
||||||
|
* deps: pin negotiator@0.4.5
|
||||||
|
|
||||||
|
1.0.1 / 2014-01-18
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Identity encoding isn't always acceptable
|
||||||
|
* deps: negotiator@~0.4.0
|
||||||
|
|
||||||
|
1.0.0 / 2013-12-27
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Genesis
|
||||||
23
node_modules/accepts/LICENSE
generated
vendored
Normal file
23
node_modules/accepts/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
(The MIT License)
|
||||||
|
|
||||||
|
Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
|
||||||
|
Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
'Software'), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
140
node_modules/accepts/README.md
generated
vendored
Normal file
140
node_modules/accepts/README.md
generated
vendored
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
# accepts
|
||||||
|
|
||||||
|
[![NPM Version][npm-version-image]][npm-url]
|
||||||
|
[![NPM Downloads][npm-downloads-image]][npm-url]
|
||||||
|
[![Node.js Version][node-version-image]][node-version-url]
|
||||||
|
[![Build Status][github-actions-ci-image]][github-actions-ci-url]
|
||||||
|
[![Test Coverage][coveralls-image]][coveralls-url]
|
||||||
|
|
||||||
|
Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator).
|
||||||
|
Extracted from [koa](https://www.npmjs.com/package/koa) for general use.
|
||||||
|
|
||||||
|
In addition to negotiator, it allows:
|
||||||
|
|
||||||
|
- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])`
|
||||||
|
as well as `('text/html', 'application/json')`.
|
||||||
|
- Allows type shorthands such as `json`.
|
||||||
|
- Returns `false` when no types match
|
||||||
|
- Treats non-existent headers as `*`
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
This is a [Node.js](https://nodejs.org/en/) module available through the
|
||||||
|
[npm registry](https://www.npmjs.com/). Installation is done using the
|
||||||
|
[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm install accepts
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
```js
|
||||||
|
var accepts = require('accepts')
|
||||||
|
```
|
||||||
|
|
||||||
|
### accepts(req)
|
||||||
|
|
||||||
|
Create a new `Accepts` object for the given `req`.
|
||||||
|
|
||||||
|
#### .charset(charsets)
|
||||||
|
|
||||||
|
Return the first accepted charset. If nothing in `charsets` is accepted,
|
||||||
|
then `false` is returned.
|
||||||
|
|
||||||
|
#### .charsets()
|
||||||
|
|
||||||
|
Return the charsets that the request accepts, in the order of the client's
|
||||||
|
preference (most preferred first).
|
||||||
|
|
||||||
|
#### .encoding(encodings)
|
||||||
|
|
||||||
|
Return the first accepted encoding. If nothing in `encodings` is accepted,
|
||||||
|
then `false` is returned.
|
||||||
|
|
||||||
|
#### .encodings()
|
||||||
|
|
||||||
|
Return the encodings that the request accepts, in the order of the client's
|
||||||
|
preference (most preferred first).
|
||||||
|
|
||||||
|
#### .language(languages)
|
||||||
|
|
||||||
|
Return the first accepted language. If nothing in `languages` is accepted,
|
||||||
|
then `false` is returned.
|
||||||
|
|
||||||
|
#### .languages()
|
||||||
|
|
||||||
|
Return the languages that the request accepts, in the order of the client's
|
||||||
|
preference (most preferred first).
|
||||||
|
|
||||||
|
#### .type(types)
|
||||||
|
|
||||||
|
Return the first accepted type (and it is returned as the same text as what
|
||||||
|
appears in the `types` array). If nothing in `types` is accepted, then `false`
|
||||||
|
is returned.
|
||||||
|
|
||||||
|
The `types` array can contain full MIME types or file extensions. Any value
|
||||||
|
that is not a full MIME types is passed to `require('mime-types').lookup`.
|
||||||
|
|
||||||
|
#### .types()
|
||||||
|
|
||||||
|
Return the types that the request accepts, in the order of the client's
|
||||||
|
preference (most preferred first).
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Simple type negotiation
|
||||||
|
|
||||||
|
This simple example shows how to use `accepts` to return a different typed
|
||||||
|
respond body based on what the client wants to accept. The server lists it's
|
||||||
|
preferences in order and will get back the best match between the client and
|
||||||
|
server.
|
||||||
|
|
||||||
|
```js
|
||||||
|
var accepts = require('accepts')
|
||||||
|
var http = require('http')
|
||||||
|
|
||||||
|
function app (req, res) {
|
||||||
|
var accept = accepts(req)
|
||||||
|
|
||||||
|
// the order of this list is significant; should be server preferred order
|
||||||
|
switch (accept.type(['json', 'html'])) {
|
||||||
|
case 'json':
|
||||||
|
res.setHeader('Content-Type', 'application/json')
|
||||||
|
res.write('{"hello":"world!"}')
|
||||||
|
break
|
||||||
|
case 'html':
|
||||||
|
res.setHeader('Content-Type', 'text/html')
|
||||||
|
res.write('<b>hello, world!</b>')
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
// the fallback is text/plain, so no need to specify it above
|
||||||
|
res.setHeader('Content-Type', 'text/plain')
|
||||||
|
res.write('hello, world!')
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
res.end()
|
||||||
|
}
|
||||||
|
|
||||||
|
http.createServer(app).listen(3000)
|
||||||
|
```
|
||||||
|
|
||||||
|
You can test this out with the cURL program:
|
||||||
|
```sh
|
||||||
|
curl -I -H'Accept: text/html' http://localhost:3000/
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
[MIT](LICENSE)
|
||||||
|
|
||||||
|
[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master
|
||||||
|
[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master
|
||||||
|
[github-actions-ci-image]: https://badgen.net/github/checks/jshttp/accepts/master?label=ci
|
||||||
|
[github-actions-ci-url]: https://github.com/jshttp/accepts/actions/workflows/ci.yml
|
||||||
|
[node-version-image]: https://badgen.net/npm/node/accepts
|
||||||
|
[node-version-url]: https://nodejs.org/en/download
|
||||||
|
[npm-downloads-image]: https://badgen.net/npm/dm/accepts
|
||||||
|
[npm-url]: https://npmjs.org/package/accepts
|
||||||
|
[npm-version-image]: https://badgen.net/npm/v/accepts
|
||||||
238
node_modules/accepts/index.js
generated
vendored
Normal file
238
node_modules/accepts/index.js
generated
vendored
Normal file
@@ -0,0 +1,238 @@
|
|||||||
|
/*!
|
||||||
|
* accepts
|
||||||
|
* Copyright(c) 2014 Jonathan Ong
|
||||||
|
* Copyright(c) 2015 Douglas Christopher Wilson
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module dependencies.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
var Negotiator = require('negotiator')
|
||||||
|
var mime = require('mime-types')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module exports.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = Accepts
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new Accepts object for the given req.
|
||||||
|
*
|
||||||
|
* @param {object} req
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
function Accepts (req) {
|
||||||
|
if (!(this instanceof Accepts)) {
|
||||||
|
return new Accepts(req)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.headers = req.headers
|
||||||
|
this.negotiator = new Negotiator(req)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the given `type(s)` is acceptable, returning
|
||||||
|
* the best match when true, otherwise `undefined`, in which
|
||||||
|
* case you should respond with 406 "Not Acceptable".
|
||||||
|
*
|
||||||
|
* The `type` value may be a single mime type string
|
||||||
|
* such as "application/json", the extension name
|
||||||
|
* such as "json" or an array `["json", "html", "text/plain"]`. When a list
|
||||||
|
* or array is given the _best_ match, if any is returned.
|
||||||
|
*
|
||||||
|
* Examples:
|
||||||
|
*
|
||||||
|
* // Accept: text/html
|
||||||
|
* this.types('html');
|
||||||
|
* // => "html"
|
||||||
|
*
|
||||||
|
* // Accept: text/*, application/json
|
||||||
|
* this.types('html');
|
||||||
|
* // => "html"
|
||||||
|
* this.types('text/html');
|
||||||
|
* // => "text/html"
|
||||||
|
* this.types('json', 'text');
|
||||||
|
* // => "json"
|
||||||
|
* this.types('application/json');
|
||||||
|
* // => "application/json"
|
||||||
|
*
|
||||||
|
* // Accept: text/*, application/json
|
||||||
|
* this.types('image/png');
|
||||||
|
* this.types('png');
|
||||||
|
* // => undefined
|
||||||
|
*
|
||||||
|
* // Accept: text/*;q=.5, application/json
|
||||||
|
* this.types(['html', 'json']);
|
||||||
|
* this.types('html', 'json');
|
||||||
|
* // => "json"
|
||||||
|
*
|
||||||
|
* @param {String|Array} types...
|
||||||
|
* @return {String|Array|Boolean}
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
Accepts.prototype.type =
|
||||||
|
Accepts.prototype.types = function (types_) {
|
||||||
|
var types = types_
|
||||||
|
|
||||||
|
// support flattened arguments
|
||||||
|
if (types && !Array.isArray(types)) {
|
||||||
|
types = new Array(arguments.length)
|
||||||
|
for (var i = 0; i < types.length; i++) {
|
||||||
|
types[i] = arguments[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// no types, return all requested types
|
||||||
|
if (!types || types.length === 0) {
|
||||||
|
return this.negotiator.mediaTypes()
|
||||||
|
}
|
||||||
|
|
||||||
|
// no accept header, return first given type
|
||||||
|
if (!this.headers.accept) {
|
||||||
|
return types[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
var mimes = types.map(extToMime)
|
||||||
|
var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))
|
||||||
|
var first = accepts[0]
|
||||||
|
|
||||||
|
return first
|
||||||
|
? types[mimes.indexOf(first)]
|
||||||
|
: false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return accepted encodings or best fit based on `encodings`.
|
||||||
|
*
|
||||||
|
* Given `Accept-Encoding: gzip, deflate`
|
||||||
|
* an array sorted by quality is returned:
|
||||||
|
*
|
||||||
|
* ['gzip', 'deflate']
|
||||||
|
*
|
||||||
|
* @param {String|Array} encodings...
|
||||||
|
* @return {String|Array}
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
Accepts.prototype.encoding =
|
||||||
|
Accepts.prototype.encodings = function (encodings_) {
|
||||||
|
var encodings = encodings_
|
||||||
|
|
||||||
|
// support flattened arguments
|
||||||
|
if (encodings && !Array.isArray(encodings)) {
|
||||||
|
encodings = new Array(arguments.length)
|
||||||
|
for (var i = 0; i < encodings.length; i++) {
|
||||||
|
encodings[i] = arguments[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// no encodings, return all requested encodings
|
||||||
|
if (!encodings || encodings.length === 0) {
|
||||||
|
return this.negotiator.encodings()
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.negotiator.encodings(encodings)[0] || false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return accepted charsets or best fit based on `charsets`.
|
||||||
|
*
|
||||||
|
* Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
|
||||||
|
* an array sorted by quality is returned:
|
||||||
|
*
|
||||||
|
* ['utf-8', 'utf-7', 'iso-8859-1']
|
||||||
|
*
|
||||||
|
* @param {String|Array} charsets...
|
||||||
|
* @return {String|Array}
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
Accepts.prototype.charset =
|
||||||
|
Accepts.prototype.charsets = function (charsets_) {
|
||||||
|
var charsets = charsets_
|
||||||
|
|
||||||
|
// support flattened arguments
|
||||||
|
if (charsets && !Array.isArray(charsets)) {
|
||||||
|
charsets = new Array(arguments.length)
|
||||||
|
for (var i = 0; i < charsets.length; i++) {
|
||||||
|
charsets[i] = arguments[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// no charsets, return all requested charsets
|
||||||
|
if (!charsets || charsets.length === 0) {
|
||||||
|
return this.negotiator.charsets()
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.negotiator.charsets(charsets)[0] || false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return accepted languages or best fit based on `langs`.
|
||||||
|
*
|
||||||
|
* Given `Accept-Language: en;q=0.8, es, pt`
|
||||||
|
* an array sorted by quality is returned:
|
||||||
|
*
|
||||||
|
* ['es', 'pt', 'en']
|
||||||
|
*
|
||||||
|
* @param {String|Array} langs...
|
||||||
|
* @return {Array|String}
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
Accepts.prototype.lang =
|
||||||
|
Accepts.prototype.langs =
|
||||||
|
Accepts.prototype.language =
|
||||||
|
Accepts.prototype.languages = function (languages_) {
|
||||||
|
var languages = languages_
|
||||||
|
|
||||||
|
// support flattened arguments
|
||||||
|
if (languages && !Array.isArray(languages)) {
|
||||||
|
languages = new Array(arguments.length)
|
||||||
|
for (var i = 0; i < languages.length; i++) {
|
||||||
|
languages[i] = arguments[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// no languages, return all requested languages
|
||||||
|
if (!languages || languages.length === 0) {
|
||||||
|
return this.negotiator.languages()
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.negotiator.languages(languages)[0] || false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert extnames to mime.
|
||||||
|
*
|
||||||
|
* @param {String} type
|
||||||
|
* @return {String}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function extToMime (type) {
|
||||||
|
return type.indexOf('/') === -1
|
||||||
|
? mime.lookup(type)
|
||||||
|
: type
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if mime is valid.
|
||||||
|
*
|
||||||
|
* @param {String} type
|
||||||
|
* @return {String}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function validMime (type) {
|
||||||
|
return typeof type === 'string'
|
||||||
|
}
|
||||||
47
node_modules/accepts/package.json
generated
vendored
Normal file
47
node_modules/accepts/package.json
generated
vendored
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
{
|
||||||
|
"name": "accepts",
|
||||||
|
"description": "Higher-level content negotiation",
|
||||||
|
"version": "1.3.8",
|
||||||
|
"contributors": [
|
||||||
|
"Douglas Christopher Wilson <doug@somethingdoug.com>",
|
||||||
|
"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"repository": "jshttp/accepts",
|
||||||
|
"dependencies": {
|
||||||
|
"mime-types": "~2.1.34",
|
||||||
|
"negotiator": "0.6.3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"deep-equal": "1.0.1",
|
||||||
|
"eslint": "7.32.0",
|
||||||
|
"eslint-config-standard": "14.1.1",
|
||||||
|
"eslint-plugin-import": "2.25.4",
|
||||||
|
"eslint-plugin-markdown": "2.2.1",
|
||||||
|
"eslint-plugin-node": "11.1.0",
|
||||||
|
"eslint-plugin-promise": "4.3.1",
|
||||||
|
"eslint-plugin-standard": "4.1.0",
|
||||||
|
"mocha": "9.2.0",
|
||||||
|
"nyc": "15.1.0"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"LICENSE",
|
||||||
|
"HISTORY.md",
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"lint": "eslint .",
|
||||||
|
"test": "mocha --reporter spec --check-leaks --bail test/",
|
||||||
|
"test-ci": "nyc --reporter=lcov --reporter=text npm test",
|
||||||
|
"test-cov": "nyc --reporter=html --reporter=text npm test"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"content",
|
||||||
|
"negotiation",
|
||||||
|
"accept",
|
||||||
|
"accepts"
|
||||||
|
]
|
||||||
|
}
|
||||||
21
node_modules/array-flatten/LICENSE
generated
vendored
Normal file
21
node_modules/array-flatten/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
43
node_modules/array-flatten/README.md
generated
vendored
Normal file
43
node_modules/array-flatten/README.md
generated
vendored
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# Array Flatten
|
||||||
|
|
||||||
|
[![NPM version][npm-image]][npm-url]
|
||||||
|
[![NPM downloads][downloads-image]][downloads-url]
|
||||||
|
[![Build status][travis-image]][travis-url]
|
||||||
|
[![Test coverage][coveralls-image]][coveralls-url]
|
||||||
|
|
||||||
|
> Flatten an array of nested arrays into a single flat array. Accepts an optional depth.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install array-flatten --save
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var flatten = require('array-flatten')
|
||||||
|
|
||||||
|
flatten([1, [2, [3, [4, [5], 6], 7], 8], 9])
|
||||||
|
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||||
|
|
||||||
|
flatten([1, [2, [3, [4, [5], 6], 7], 8], 9], 2)
|
||||||
|
//=> [1, 2, 3, [4, [5], 6], 7, 8, 9]
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
flatten(arguments) //=> [1, 2, 3]
|
||||||
|
})(1, [2, 3])
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT
|
||||||
|
|
||||||
|
[npm-image]: https://img.shields.io/npm/v/array-flatten.svg?style=flat
|
||||||
|
[npm-url]: https://npmjs.org/package/array-flatten
|
||||||
|
[downloads-image]: https://img.shields.io/npm/dm/array-flatten.svg?style=flat
|
||||||
|
[downloads-url]: https://npmjs.org/package/array-flatten
|
||||||
|
[travis-image]: https://img.shields.io/travis/blakeembrey/array-flatten.svg?style=flat
|
||||||
|
[travis-url]: https://travis-ci.org/blakeembrey/array-flatten
|
||||||
|
[coveralls-image]: https://img.shields.io/coveralls/blakeembrey/array-flatten.svg?style=flat
|
||||||
|
[coveralls-url]: https://coveralls.io/r/blakeembrey/array-flatten?branch=master
|
||||||
64
node_modules/array-flatten/array-flatten.js
generated
vendored
Normal file
64
node_modules/array-flatten/array-flatten.js
generated
vendored
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Expose `arrayFlatten`.
|
||||||
|
*/
|
||||||
|
module.exports = arrayFlatten
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursive flatten function with depth.
|
||||||
|
*
|
||||||
|
* @param {Array} array
|
||||||
|
* @param {Array} result
|
||||||
|
* @param {Number} depth
|
||||||
|
* @return {Array}
|
||||||
|
*/
|
||||||
|
function flattenWithDepth (array, result, depth) {
|
||||||
|
for (var i = 0; i < array.length; i++) {
|
||||||
|
var value = array[i]
|
||||||
|
|
||||||
|
if (depth > 0 && Array.isArray(value)) {
|
||||||
|
flattenWithDepth(value, result, depth - 1)
|
||||||
|
} else {
|
||||||
|
result.push(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursive flatten function. Omitting depth is slightly faster.
|
||||||
|
*
|
||||||
|
* @param {Array} array
|
||||||
|
* @param {Array} result
|
||||||
|
* @return {Array}
|
||||||
|
*/
|
||||||
|
function flattenForever (array, result) {
|
||||||
|
for (var i = 0; i < array.length; i++) {
|
||||||
|
var value = array[i]
|
||||||
|
|
||||||
|
if (Array.isArray(value)) {
|
||||||
|
flattenForever(value, result)
|
||||||
|
} else {
|
||||||
|
result.push(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flatten an array, with the ability to define a depth.
|
||||||
|
*
|
||||||
|
* @param {Array} array
|
||||||
|
* @param {Number} depth
|
||||||
|
* @return {Array}
|
||||||
|
*/
|
||||||
|
function arrayFlatten (array, depth) {
|
||||||
|
if (depth == null) {
|
||||||
|
return flattenForever(array, [])
|
||||||
|
}
|
||||||
|
|
||||||
|
return flattenWithDepth(array, [], depth)
|
||||||
|
}
|
||||||
39
node_modules/array-flatten/package.json
generated
vendored
Normal file
39
node_modules/array-flatten/package.json
generated
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "array-flatten",
|
||||||
|
"version": "1.1.1",
|
||||||
|
"description": "Flatten an array of nested arrays into a single flat array",
|
||||||
|
"main": "array-flatten.js",
|
||||||
|
"files": [
|
||||||
|
"array-flatten.js",
|
||||||
|
"LICENSE"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"test": "istanbul cover _mocha -- -R spec"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/blakeembrey/array-flatten.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"array",
|
||||||
|
"flatten",
|
||||||
|
"arguments",
|
||||||
|
"depth"
|
||||||
|
],
|
||||||
|
"author": {
|
||||||
|
"name": "Blake Embrey",
|
||||||
|
"email": "hello@blakeembrey.com",
|
||||||
|
"url": "http://blakeembrey.me"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/blakeembrey/array-flatten/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/blakeembrey/array-flatten",
|
||||||
|
"devDependencies": {
|
||||||
|
"istanbul": "^0.3.13",
|
||||||
|
"mocha": "^2.2.4",
|
||||||
|
"pre-commit": "^1.0.7",
|
||||||
|
"standard": "^3.7.3"
|
||||||
|
}
|
||||||
|
}
|
||||||
680
node_modules/body-parser/HISTORY.md
generated
vendored
Normal file
680
node_modules/body-parser/HISTORY.md
generated
vendored
Normal file
@@ -0,0 +1,680 @@
|
|||||||
|
1.20.4 / 2025-12-01
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: qs@~6.14.0
|
||||||
|
* deps: use tilde notation for dependencies
|
||||||
|
* deps: http-errors@~2.0.1
|
||||||
|
* deps: raw-body@~2.5.3
|
||||||
|
|
||||||
|
1.20.3 / 2024-09-10
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: qs@6.13.0
|
||||||
|
* add `depth` option to customize the depth level in the parser
|
||||||
|
* IMPORTANT: The default `depth` level for parsing URL-encoded data is now `32` (previously was `Infinity`)
|
||||||
|
|
||||||
|
1.20.2 / 2023-02-21
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Fix strict json error message on Node.js 19+
|
||||||
|
* deps: content-type@~1.0.5
|
||||||
|
- perf: skip value escaping when unnecessary
|
||||||
|
* deps: raw-body@2.5.2
|
||||||
|
|
||||||
|
1.20.1 / 2022-10-06
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: qs@6.11.0
|
||||||
|
* perf: remove unnecessary object clone
|
||||||
|
|
||||||
|
1.20.0 / 2022-04-02
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Fix error message for json parse whitespace in `strict`
|
||||||
|
* Fix internal error when inflated body exceeds limit
|
||||||
|
* Prevent loss of async hooks context
|
||||||
|
* Prevent hanging when request already read
|
||||||
|
* deps: depd@2.0.0
|
||||||
|
- Replace internal `eval` usage with `Function` constructor
|
||||||
|
- Use instance methods on `process` to check for listeners
|
||||||
|
* deps: http-errors@2.0.0
|
||||||
|
- deps: depd@2.0.0
|
||||||
|
- deps: statuses@2.0.1
|
||||||
|
* deps: on-finished@2.4.1
|
||||||
|
* deps: qs@6.10.3
|
||||||
|
* deps: raw-body@2.5.1
|
||||||
|
- deps: http-errors@2.0.0
|
||||||
|
|
||||||
|
1.19.2 / 2022-02-15
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: bytes@3.1.2
|
||||||
|
* deps: qs@6.9.7
|
||||||
|
* Fix handling of `__proto__` keys
|
||||||
|
* deps: raw-body@2.4.3
|
||||||
|
- deps: bytes@3.1.2
|
||||||
|
|
||||||
|
1.19.1 / 2021-12-10
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: bytes@3.1.1
|
||||||
|
* deps: http-errors@1.8.1
|
||||||
|
- deps: inherits@2.0.4
|
||||||
|
- deps: toidentifier@1.0.1
|
||||||
|
- deps: setprototypeof@1.2.0
|
||||||
|
* deps: qs@6.9.6
|
||||||
|
* deps: raw-body@2.4.2
|
||||||
|
- deps: bytes@3.1.1
|
||||||
|
- deps: http-errors@1.8.1
|
||||||
|
* deps: safe-buffer@5.2.1
|
||||||
|
* deps: type-is@~1.6.18
|
||||||
|
|
||||||
|
1.19.0 / 2019-04-25
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: bytes@3.1.0
|
||||||
|
- Add petabyte (`pb`) support
|
||||||
|
* deps: http-errors@1.7.2
|
||||||
|
- Set constructor name when possible
|
||||||
|
- deps: setprototypeof@1.1.1
|
||||||
|
- deps: statuses@'>= 1.5.0 < 2'
|
||||||
|
* deps: iconv-lite@0.4.24
|
||||||
|
- Added encoding MIK
|
||||||
|
* deps: qs@6.7.0
|
||||||
|
- Fix parsing array brackets after index
|
||||||
|
* deps: raw-body@2.4.0
|
||||||
|
- deps: bytes@3.1.0
|
||||||
|
- deps: http-errors@1.7.2
|
||||||
|
- deps: iconv-lite@0.4.24
|
||||||
|
* deps: type-is@~1.6.17
|
||||||
|
- deps: mime-types@~2.1.24
|
||||||
|
- perf: prevent internal `throw` on invalid type
|
||||||
|
|
||||||
|
1.18.3 / 2018-05-14
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Fix stack trace for strict json parse error
|
||||||
|
* deps: depd@~1.1.2
|
||||||
|
- perf: remove argument reassignment
|
||||||
|
* deps: http-errors@~1.6.3
|
||||||
|
- deps: depd@~1.1.2
|
||||||
|
- deps: setprototypeof@1.1.0
|
||||||
|
- deps: statuses@'>= 1.3.1 < 2'
|
||||||
|
* deps: iconv-lite@0.4.23
|
||||||
|
- Fix loading encoding with year appended
|
||||||
|
- Fix deprecation warnings on Node.js 10+
|
||||||
|
* deps: qs@6.5.2
|
||||||
|
* deps: raw-body@2.3.3
|
||||||
|
- deps: http-errors@1.6.3
|
||||||
|
- deps: iconv-lite@0.4.23
|
||||||
|
* deps: type-is@~1.6.16
|
||||||
|
- deps: mime-types@~2.1.18
|
||||||
|
|
||||||
|
1.18.2 / 2017-09-22
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: debug@2.6.9
|
||||||
|
* perf: remove argument reassignment
|
||||||
|
|
||||||
|
1.18.1 / 2017-09-12
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: content-type@~1.0.4
|
||||||
|
- perf: remove argument reassignment
|
||||||
|
- perf: skip parameter parsing when no parameters
|
||||||
|
* deps: iconv-lite@0.4.19
|
||||||
|
- Fix ISO-8859-1 regression
|
||||||
|
- Update Windows-1255
|
||||||
|
* deps: qs@6.5.1
|
||||||
|
- Fix parsing & compacting very deep objects
|
||||||
|
* deps: raw-body@2.3.2
|
||||||
|
- deps: iconv-lite@0.4.19
|
||||||
|
|
||||||
|
1.18.0 / 2017-09-08
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Fix JSON strict violation error to match native parse error
|
||||||
|
* Include the `body` property on verify errors
|
||||||
|
* Include the `type` property on all generated errors
|
||||||
|
* Use `http-errors` to set status code on errors
|
||||||
|
* deps: bytes@3.0.0
|
||||||
|
* deps: debug@2.6.8
|
||||||
|
* deps: depd@~1.1.1
|
||||||
|
- Remove unnecessary `Buffer` loading
|
||||||
|
* deps: http-errors@~1.6.2
|
||||||
|
- deps: depd@1.1.1
|
||||||
|
* deps: iconv-lite@0.4.18
|
||||||
|
- Add support for React Native
|
||||||
|
- Add a warning if not loaded as utf-8
|
||||||
|
- Fix CESU-8 decoding in Node.js 8
|
||||||
|
- Improve speed of ISO-8859-1 encoding
|
||||||
|
* deps: qs@6.5.0
|
||||||
|
* deps: raw-body@2.3.1
|
||||||
|
- Use `http-errors` for standard emitted errors
|
||||||
|
- deps: bytes@3.0.0
|
||||||
|
- deps: iconv-lite@0.4.18
|
||||||
|
- perf: skip buffer decoding on overage chunk
|
||||||
|
* perf: prevent internal `throw` when missing charset
|
||||||
|
|
||||||
|
1.17.2 / 2017-05-17
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: debug@2.6.7
|
||||||
|
- Fix `DEBUG_MAX_ARRAY_LENGTH`
|
||||||
|
- deps: ms@2.0.0
|
||||||
|
* deps: type-is@~1.6.15
|
||||||
|
- deps: mime-types@~2.1.15
|
||||||
|
|
||||||
|
1.17.1 / 2017-03-06
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: qs@6.4.0
|
||||||
|
- Fix regression parsing keys starting with `[`
|
||||||
|
|
||||||
|
1.17.0 / 2017-03-01
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: http-errors@~1.6.1
|
||||||
|
- Make `message` property enumerable for `HttpError`s
|
||||||
|
- deps: setprototypeof@1.0.3
|
||||||
|
* deps: qs@6.3.1
|
||||||
|
- Fix compacting nested arrays
|
||||||
|
|
||||||
|
1.16.1 / 2017-02-10
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: debug@2.6.1
|
||||||
|
- Fix deprecation messages in WebStorm and other editors
|
||||||
|
- Undeprecate `DEBUG_FD` set to `1` or `2`
|
||||||
|
|
||||||
|
1.16.0 / 2017-01-17
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: debug@2.6.0
|
||||||
|
- Allow colors in workers
|
||||||
|
- Deprecated `DEBUG_FD` environment variable
|
||||||
|
- Fix error when running under React Native
|
||||||
|
- Use same color for same namespace
|
||||||
|
- deps: ms@0.7.2
|
||||||
|
* deps: http-errors@~1.5.1
|
||||||
|
- deps: inherits@2.0.3
|
||||||
|
- deps: setprototypeof@1.0.2
|
||||||
|
- deps: statuses@'>= 1.3.1 < 2'
|
||||||
|
* deps: iconv-lite@0.4.15
|
||||||
|
- Added encoding MS-31J
|
||||||
|
- Added encoding MS-932
|
||||||
|
- Added encoding MS-936
|
||||||
|
- Added encoding MS-949
|
||||||
|
- Added encoding MS-950
|
||||||
|
- Fix GBK/GB18030 handling of Euro character
|
||||||
|
* deps: qs@6.2.1
|
||||||
|
- Fix array parsing from skipping empty values
|
||||||
|
* deps: raw-body@~2.2.0
|
||||||
|
- deps: iconv-lite@0.4.15
|
||||||
|
* deps: type-is@~1.6.14
|
||||||
|
- deps: mime-types@~2.1.13
|
||||||
|
|
||||||
|
1.15.2 / 2016-06-19
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: bytes@2.4.0
|
||||||
|
* deps: content-type@~1.0.2
|
||||||
|
- perf: enable strict mode
|
||||||
|
* deps: http-errors@~1.5.0
|
||||||
|
- Use `setprototypeof` module to replace `__proto__` setting
|
||||||
|
- deps: statuses@'>= 1.3.0 < 2'
|
||||||
|
- perf: enable strict mode
|
||||||
|
* deps: qs@6.2.0
|
||||||
|
* deps: raw-body@~2.1.7
|
||||||
|
- deps: bytes@2.4.0
|
||||||
|
- perf: remove double-cleanup on happy path
|
||||||
|
* deps: type-is@~1.6.13
|
||||||
|
- deps: mime-types@~2.1.11
|
||||||
|
|
||||||
|
1.15.1 / 2016-05-05
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: bytes@2.3.0
|
||||||
|
- Drop partial bytes on all parsed units
|
||||||
|
- Fix parsing byte string that looks like hex
|
||||||
|
* deps: raw-body@~2.1.6
|
||||||
|
- deps: bytes@2.3.0
|
||||||
|
* deps: type-is@~1.6.12
|
||||||
|
- deps: mime-types@~2.1.10
|
||||||
|
|
||||||
|
1.15.0 / 2016-02-10
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: http-errors@~1.4.0
|
||||||
|
- Add `HttpError` export, for `err instanceof createError.HttpError`
|
||||||
|
- deps: inherits@2.0.1
|
||||||
|
- deps: statuses@'>= 1.2.1 < 2'
|
||||||
|
* deps: qs@6.1.0
|
||||||
|
* deps: type-is@~1.6.11
|
||||||
|
- deps: mime-types@~2.1.9
|
||||||
|
|
||||||
|
1.14.2 / 2015-12-16
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: bytes@2.2.0
|
||||||
|
* deps: iconv-lite@0.4.13
|
||||||
|
* deps: qs@5.2.0
|
||||||
|
* deps: raw-body@~2.1.5
|
||||||
|
- deps: bytes@2.2.0
|
||||||
|
- deps: iconv-lite@0.4.13
|
||||||
|
* deps: type-is@~1.6.10
|
||||||
|
- deps: mime-types@~2.1.8
|
||||||
|
|
||||||
|
1.14.1 / 2015-09-27
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Fix issue where invalid charset results in 400 when `verify` used
|
||||||
|
* deps: iconv-lite@0.4.12
|
||||||
|
- Fix CESU-8 decoding in Node.js 4.x
|
||||||
|
* deps: raw-body@~2.1.4
|
||||||
|
- Fix masking critical errors from `iconv-lite`
|
||||||
|
- deps: iconv-lite@0.4.12
|
||||||
|
* deps: type-is@~1.6.9
|
||||||
|
- deps: mime-types@~2.1.7
|
||||||
|
|
||||||
|
1.14.0 / 2015-09-16
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Fix JSON strict parse error to match syntax errors
|
||||||
|
* Provide static `require` analysis in `urlencoded` parser
|
||||||
|
* deps: depd@~1.1.0
|
||||||
|
- Support web browser loading
|
||||||
|
* deps: qs@5.1.0
|
||||||
|
* deps: raw-body@~2.1.3
|
||||||
|
- Fix sync callback when attaching data listener causes sync read
|
||||||
|
* deps: type-is@~1.6.8
|
||||||
|
- Fix type error when given invalid type to match against
|
||||||
|
- deps: mime-types@~2.1.6
|
||||||
|
|
||||||
|
1.13.3 / 2015-07-31
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: type-is@~1.6.6
|
||||||
|
- deps: mime-types@~2.1.4
|
||||||
|
|
||||||
|
1.13.2 / 2015-07-05
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: iconv-lite@0.4.11
|
||||||
|
* deps: qs@4.0.0
|
||||||
|
- Fix dropping parameters like `hasOwnProperty`
|
||||||
|
- Fix user-visible incompatibilities from 3.1.0
|
||||||
|
- Fix various parsing edge cases
|
||||||
|
* deps: raw-body@~2.1.2
|
||||||
|
- Fix error stack traces to skip `makeError`
|
||||||
|
- deps: iconv-lite@0.4.11
|
||||||
|
* deps: type-is@~1.6.4
|
||||||
|
- deps: mime-types@~2.1.2
|
||||||
|
- perf: enable strict mode
|
||||||
|
- perf: remove argument reassignment
|
||||||
|
|
||||||
|
1.13.1 / 2015-06-16
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: qs@2.4.2
|
||||||
|
- Downgraded from 3.1.0 because of user-visible incompatibilities
|
||||||
|
|
||||||
|
1.13.0 / 2015-06-14
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Add `statusCode` property on `Error`s, in addition to `status`
|
||||||
|
* Change `type` default to `application/json` for JSON parser
|
||||||
|
* Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser
|
||||||
|
* Provide static `require` analysis
|
||||||
|
* Use the `http-errors` module to generate errors
|
||||||
|
* deps: bytes@2.1.0
|
||||||
|
- Slight optimizations
|
||||||
|
* deps: iconv-lite@0.4.10
|
||||||
|
- The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails
|
||||||
|
- Leading BOM is now removed when decoding
|
||||||
|
* deps: on-finished@~2.3.0
|
||||||
|
- Add defined behavior for HTTP `CONNECT` requests
|
||||||
|
- Add defined behavior for HTTP `Upgrade` requests
|
||||||
|
- deps: ee-first@1.1.1
|
||||||
|
* deps: qs@3.1.0
|
||||||
|
- Fix dropping parameters like `hasOwnProperty`
|
||||||
|
- Fix various parsing edge cases
|
||||||
|
- Parsed object now has `null` prototype
|
||||||
|
* deps: raw-body@~2.1.1
|
||||||
|
- Use `unpipe` module for unpiping requests
|
||||||
|
- deps: iconv-lite@0.4.10
|
||||||
|
* deps: type-is@~1.6.3
|
||||||
|
- deps: mime-types@~2.1.1
|
||||||
|
- perf: reduce try block size
|
||||||
|
- perf: remove bitwise operations
|
||||||
|
* perf: enable strict mode
|
||||||
|
* perf: remove argument reassignment
|
||||||
|
* perf: remove delete call
|
||||||
|
|
||||||
|
1.12.4 / 2015-05-10
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: debug@~2.2.0
|
||||||
|
* deps: qs@2.4.2
|
||||||
|
- Fix allowing parameters like `constructor`
|
||||||
|
* deps: on-finished@~2.2.1
|
||||||
|
* deps: raw-body@~2.0.1
|
||||||
|
- Fix a false-positive when unpiping in Node.js 0.8
|
||||||
|
- deps: bytes@2.0.1
|
||||||
|
* deps: type-is@~1.6.2
|
||||||
|
- deps: mime-types@~2.0.11
|
||||||
|
|
||||||
|
1.12.3 / 2015-04-15
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Slight efficiency improvement when not debugging
|
||||||
|
* deps: depd@~1.0.1
|
||||||
|
* deps: iconv-lite@0.4.8
|
||||||
|
- Add encoding alias UNICODE-1-1-UTF-7
|
||||||
|
* deps: raw-body@1.3.4
|
||||||
|
- Fix hanging callback if request aborts during read
|
||||||
|
- deps: iconv-lite@0.4.8
|
||||||
|
|
||||||
|
1.12.2 / 2015-03-16
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: qs@2.4.1
|
||||||
|
- Fix error when parameter `hasOwnProperty` is present
|
||||||
|
|
||||||
|
1.12.1 / 2015-03-15
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: debug@~2.1.3
|
||||||
|
- Fix high intensity foreground color for bold
|
||||||
|
- deps: ms@0.7.0
|
||||||
|
* deps: type-is@~1.6.1
|
||||||
|
- deps: mime-types@~2.0.10
|
||||||
|
|
||||||
|
1.12.0 / 2015-02-13
|
||||||
|
===================
|
||||||
|
|
||||||
|
* add `debug` messages
|
||||||
|
* accept a function for the `type` option
|
||||||
|
* use `content-type` to parse `Content-Type` headers
|
||||||
|
* deps: iconv-lite@0.4.7
|
||||||
|
- Gracefully support enumerables on `Object.prototype`
|
||||||
|
* deps: raw-body@1.3.3
|
||||||
|
- deps: iconv-lite@0.4.7
|
||||||
|
* deps: type-is@~1.6.0
|
||||||
|
- fix argument reassignment
|
||||||
|
- fix false-positives in `hasBody` `Transfer-Encoding` check
|
||||||
|
- support wildcard for both type and subtype (`*/*`)
|
||||||
|
- deps: mime-types@~2.0.9
|
||||||
|
|
||||||
|
1.11.0 / 2015-01-30
|
||||||
|
===================
|
||||||
|
|
||||||
|
* make internal `extended: true` depth limit infinity
|
||||||
|
* deps: type-is@~1.5.6
|
||||||
|
- deps: mime-types@~2.0.8
|
||||||
|
|
||||||
|
1.10.2 / 2015-01-20
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: iconv-lite@0.4.6
|
||||||
|
- Fix rare aliases of single-byte encodings
|
||||||
|
* deps: raw-body@1.3.2
|
||||||
|
- deps: iconv-lite@0.4.6
|
||||||
|
|
||||||
|
1.10.1 / 2015-01-01
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: on-finished@~2.2.0
|
||||||
|
* deps: type-is@~1.5.5
|
||||||
|
- deps: mime-types@~2.0.7
|
||||||
|
|
||||||
|
1.10.0 / 2014-12-02
|
||||||
|
===================
|
||||||
|
|
||||||
|
* make internal `extended: true` array limit dynamic
|
||||||
|
|
||||||
|
1.9.3 / 2014-11-21
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: iconv-lite@0.4.5
|
||||||
|
- Fix Windows-31J and X-SJIS encoding support
|
||||||
|
* deps: qs@2.3.3
|
||||||
|
- Fix `arrayLimit` behavior
|
||||||
|
* deps: raw-body@1.3.1
|
||||||
|
- deps: iconv-lite@0.4.5
|
||||||
|
* deps: type-is@~1.5.3
|
||||||
|
- deps: mime-types@~2.0.3
|
||||||
|
|
||||||
|
1.9.2 / 2014-10-27
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@2.3.2
|
||||||
|
- Fix parsing of mixed objects and values
|
||||||
|
|
||||||
|
1.9.1 / 2014-10-22
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: on-finished@~2.1.1
|
||||||
|
- Fix handling of pipelined requests
|
||||||
|
* deps: qs@2.3.0
|
||||||
|
- Fix parsing of mixed implicit and explicit arrays
|
||||||
|
* deps: type-is@~1.5.2
|
||||||
|
- deps: mime-types@~2.0.2
|
||||||
|
|
||||||
|
1.9.0 / 2014-09-24
|
||||||
|
==================
|
||||||
|
|
||||||
|
* include the charset in "unsupported charset" error message
|
||||||
|
* include the encoding in "unsupported content encoding" error message
|
||||||
|
* deps: depd@~1.0.0
|
||||||
|
|
||||||
|
1.8.4 / 2014-09-23
|
||||||
|
==================
|
||||||
|
|
||||||
|
* fix content encoding to be case-insensitive
|
||||||
|
|
||||||
|
1.8.3 / 2014-09-19
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@2.2.4
|
||||||
|
- Fix issue with object keys starting with numbers truncated
|
||||||
|
|
||||||
|
1.8.2 / 2014-09-15
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: depd@0.4.5
|
||||||
|
|
||||||
|
1.8.1 / 2014-09-07
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: media-typer@0.3.0
|
||||||
|
* deps: type-is@~1.5.1
|
||||||
|
|
||||||
|
1.8.0 / 2014-09-05
|
||||||
|
==================
|
||||||
|
|
||||||
|
* make empty-body-handling consistent between chunked requests
|
||||||
|
- empty `json` produces `{}`
|
||||||
|
- empty `raw` produces `new Buffer(0)`
|
||||||
|
- empty `text` produces `''`
|
||||||
|
- empty `urlencoded` produces `{}`
|
||||||
|
* deps: qs@2.2.3
|
||||||
|
- Fix issue where first empty value in array is discarded
|
||||||
|
* deps: type-is@~1.5.0
|
||||||
|
- fix `hasbody` to be true for `content-length: 0`
|
||||||
|
|
||||||
|
1.7.0 / 2014-09-01
|
||||||
|
==================
|
||||||
|
|
||||||
|
* add `parameterLimit` option to `urlencoded` parser
|
||||||
|
* change `urlencoded` extended array limit to 100
|
||||||
|
* respond with 413 when over `parameterLimit` in `urlencoded`
|
||||||
|
|
||||||
|
1.6.7 / 2014-08-29
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@2.2.2
|
||||||
|
- Remove unnecessary cloning
|
||||||
|
|
||||||
|
1.6.6 / 2014-08-27
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@2.2.0
|
||||||
|
- Array parsing fix
|
||||||
|
- Performance improvements
|
||||||
|
|
||||||
|
1.6.5 / 2014-08-16
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: on-finished@2.1.0
|
||||||
|
|
||||||
|
1.6.4 / 2014-08-14
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@1.2.2
|
||||||
|
|
||||||
|
1.6.3 / 2014-08-10
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@1.2.1
|
||||||
|
|
||||||
|
1.6.2 / 2014-08-07
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@1.2.0
|
||||||
|
- Fix parsing array of objects
|
||||||
|
|
||||||
|
1.6.1 / 2014-08-06
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@1.1.0
|
||||||
|
- Accept urlencoded square brackets
|
||||||
|
- Accept empty values in implicit array notation
|
||||||
|
|
||||||
|
1.6.0 / 2014-08-05
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@1.0.2
|
||||||
|
- Complete rewrite
|
||||||
|
- Limits array length to 20
|
||||||
|
- Limits object depth to 5
|
||||||
|
- Limits parameters to 1,000
|
||||||
|
|
||||||
|
1.5.2 / 2014-07-27
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: depd@0.4.4
|
||||||
|
- Work-around v8 generating empty stack traces
|
||||||
|
|
||||||
|
1.5.1 / 2014-07-26
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: depd@0.4.3
|
||||||
|
- Fix exception when global `Error.stackTraceLimit` is too low
|
||||||
|
|
||||||
|
1.5.0 / 2014-07-20
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: depd@0.4.2
|
||||||
|
- Add `TRACE_DEPRECATION` environment variable
|
||||||
|
- Remove non-standard grey color from color output
|
||||||
|
- Support `--no-deprecation` argument
|
||||||
|
- Support `--trace-deprecation` argument
|
||||||
|
* deps: iconv-lite@0.4.4
|
||||||
|
- Added encoding UTF-7
|
||||||
|
* deps: raw-body@1.3.0
|
||||||
|
- deps: iconv-lite@0.4.4
|
||||||
|
- Added encoding UTF-7
|
||||||
|
- Fix `Cannot switch to old mode now` error on Node.js 0.10+
|
||||||
|
* deps: type-is@~1.3.2
|
||||||
|
|
||||||
|
1.4.3 / 2014-06-19
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: type-is@1.3.1
|
||||||
|
- fix global variable leak
|
||||||
|
|
||||||
|
1.4.2 / 2014-06-19
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: type-is@1.3.0
|
||||||
|
- improve type parsing
|
||||||
|
|
||||||
|
1.4.1 / 2014-06-19
|
||||||
|
==================
|
||||||
|
|
||||||
|
* fix urlencoded extended deprecation message
|
||||||
|
|
||||||
|
1.4.0 / 2014-06-19
|
||||||
|
==================
|
||||||
|
|
||||||
|
* add `text` parser
|
||||||
|
* add `raw` parser
|
||||||
|
* check accepted charset in content-type (accepts utf-8)
|
||||||
|
* check accepted encoding in content-encoding (accepts identity)
|
||||||
|
* deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed
|
||||||
|
* deprecate `urlencoded()` without provided `extended` option
|
||||||
|
* lazy-load urlencoded parsers
|
||||||
|
* parsers split into files for reduced mem usage
|
||||||
|
* support gzip and deflate bodies
|
||||||
|
- set `inflate: false` to turn off
|
||||||
|
* deps: raw-body@1.2.2
|
||||||
|
- Support all encodings from `iconv-lite`
|
||||||
|
|
||||||
|
1.3.1 / 2014-06-11
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: type-is@1.2.1
|
||||||
|
- Switch dependency from mime to mime-types@1.0.0
|
||||||
|
|
||||||
|
1.3.0 / 2014-05-31
|
||||||
|
==================
|
||||||
|
|
||||||
|
* add `extended` option to urlencoded parser
|
||||||
|
|
||||||
|
1.2.2 / 2014-05-27
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: raw-body@1.1.6
|
||||||
|
- assert stream encoding on node.js 0.8
|
||||||
|
- assert stream encoding on node.js < 0.10.6
|
||||||
|
- deps: bytes@1
|
||||||
|
|
||||||
|
1.2.1 / 2014-05-26
|
||||||
|
==================
|
||||||
|
|
||||||
|
* invoke `next(err)` after request fully read
|
||||||
|
- prevents hung responses and socket hang ups
|
||||||
|
|
||||||
|
1.2.0 / 2014-05-11
|
||||||
|
==================
|
||||||
|
|
||||||
|
* add `verify` option
|
||||||
|
* deps: type-is@1.2.0
|
||||||
|
- support suffix matching
|
||||||
|
|
||||||
|
1.1.2 / 2014-05-11
|
||||||
|
==================
|
||||||
|
|
||||||
|
* improve json parser speed
|
||||||
|
|
||||||
|
1.1.1 / 2014-05-11
|
||||||
|
==================
|
||||||
|
|
||||||
|
* fix repeated limit parsing with every request
|
||||||
|
|
||||||
|
1.1.0 / 2014-05-10
|
||||||
|
==================
|
||||||
|
|
||||||
|
* add `type` option
|
||||||
|
* deps: pin for safety and consistency
|
||||||
|
|
||||||
|
1.0.2 / 2014-04-14
|
||||||
|
==================
|
||||||
|
|
||||||
|
* use `type-is` module
|
||||||
|
|
||||||
|
1.0.1 / 2014-03-20
|
||||||
|
==================
|
||||||
|
|
||||||
|
* lower default limits to 100kb
|
||||||
23
node_modules/body-parser/LICENSE
generated
vendored
Normal file
23
node_modules/body-parser/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
(The MIT License)
|
||||||
|
|
||||||
|
Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
|
||||||
|
Copyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
'Software'), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
476
node_modules/body-parser/README.md
generated
vendored
Normal file
476
node_modules/body-parser/README.md
generated
vendored
Normal file
@@ -0,0 +1,476 @@
|
|||||||
|
# body-parser
|
||||||
|
|
||||||
|
[![NPM Version][npm-version-image]][npm-url]
|
||||||
|
[![NPM Downloads][npm-downloads-image]][npm-url]
|
||||||
|
[![Build Status][ci-image]][ci-url]
|
||||||
|
[![Test Coverage][coveralls-image]][coveralls-url]
|
||||||
|
[![OpenSSF Scorecard Badge][ossf-scorecard-badge]][ossf-scorecard-visualizer]
|
||||||
|
|
||||||
|
Node.js body parsing middleware.
|
||||||
|
|
||||||
|
Parse incoming request bodies in a middleware before your handlers, available
|
||||||
|
under the `req.body` property.
|
||||||
|
|
||||||
|
**Note** As `req.body`'s shape is based on user-controlled input, all
|
||||||
|
properties and values in this object are untrusted and should be validated
|
||||||
|
before trusting. For example, `req.body.foo.toString()` may fail in multiple
|
||||||
|
ways, for example the `foo` property may not be there or may not be a string,
|
||||||
|
and `toString` may not be a function and instead a string or other user input.
|
||||||
|
|
||||||
|
[Learn about the anatomy of an HTTP transaction in Node.js](https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/).
|
||||||
|
|
||||||
|
_This does not handle multipart bodies_, due to their complex and typically
|
||||||
|
large nature. For multipart bodies, you may be interested in the following
|
||||||
|
modules:
|
||||||
|
|
||||||
|
* [busboy](https://www.npmjs.org/package/busboy#readme) and
|
||||||
|
[connect-busboy](https://www.npmjs.org/package/connect-busboy#readme)
|
||||||
|
* [multiparty](https://www.npmjs.org/package/multiparty#readme) and
|
||||||
|
[connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme)
|
||||||
|
* [formidable](https://www.npmjs.org/package/formidable#readme)
|
||||||
|
* [multer](https://www.npmjs.org/package/multer#readme)
|
||||||
|
|
||||||
|
This module provides the following parsers:
|
||||||
|
|
||||||
|
* [JSON body parser](#bodyparserjsonoptions)
|
||||||
|
* [Raw body parser](#bodyparserrawoptions)
|
||||||
|
* [Text body parser](#bodyparsertextoptions)
|
||||||
|
* [URL-encoded form body parser](#bodyparserurlencodedoptions)
|
||||||
|
|
||||||
|
Other body parsers you might be interested in:
|
||||||
|
|
||||||
|
- [body](https://www.npmjs.org/package/body#readme)
|
||||||
|
- [co-body](https://www.npmjs.org/package/co-body#readme)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm install body-parser
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
```js
|
||||||
|
var bodyParser = require('body-parser')
|
||||||
|
```
|
||||||
|
|
||||||
|
The `bodyParser` object exposes various factories to create middlewares. All
|
||||||
|
middlewares will populate the `req.body` property with the parsed body when
|
||||||
|
the `Content-Type` request header matches the `type` option, or an empty
|
||||||
|
object (`{}`) if there was no body to parse, the `Content-Type` was not matched,
|
||||||
|
or an error occurred.
|
||||||
|
|
||||||
|
The various errors returned by this module are described in the
|
||||||
|
[errors section](#errors).
|
||||||
|
|
||||||
|
### bodyParser.json([options])
|
||||||
|
|
||||||
|
Returns middleware that only parses `json` and only looks at requests where
|
||||||
|
the `Content-Type` header matches the `type` option. This parser accepts any
|
||||||
|
Unicode encoding of the body and supports automatic inflation of `gzip` and
|
||||||
|
`deflate` encodings.
|
||||||
|
|
||||||
|
A new `body` object containing the parsed data is populated on the `request`
|
||||||
|
object after the middleware (i.e. `req.body`).
|
||||||
|
|
||||||
|
#### Options
|
||||||
|
|
||||||
|
The `json` function takes an optional `options` object that may contain any of
|
||||||
|
the following keys:
|
||||||
|
|
||||||
|
##### inflate
|
||||||
|
|
||||||
|
When set to `true`, then deflated (compressed) bodies will be inflated; when
|
||||||
|
`false`, deflated bodies are rejected. Defaults to `true`.
|
||||||
|
|
||||||
|
##### limit
|
||||||
|
|
||||||
|
Controls the maximum request body size. If this is a number, then the value
|
||||||
|
specifies the number of bytes; if it is a string, the value is passed to the
|
||||||
|
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
|
||||||
|
to `'100kb'`.
|
||||||
|
|
||||||
|
##### reviver
|
||||||
|
|
||||||
|
The `reviver` option is passed directly to `JSON.parse` as the second
|
||||||
|
argument. You can find more information on this argument
|
||||||
|
[in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter).
|
||||||
|
|
||||||
|
##### strict
|
||||||
|
|
||||||
|
When set to `true`, will only accept arrays and objects; when `false` will
|
||||||
|
accept anything `JSON.parse` accepts. Defaults to `true`.
|
||||||
|
|
||||||
|
##### type
|
||||||
|
|
||||||
|
The `type` option is used to determine what media type the middleware will
|
||||||
|
parse. This option can be a string, array of strings, or a function. If not a
|
||||||
|
function, `type` option is passed directly to the
|
||||||
|
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
|
||||||
|
be an extension name (like `json`), a mime type (like `application/json`), or
|
||||||
|
a mime type with a wildcard (like `*/*` or `*/json`). If a function, the `type`
|
||||||
|
option is called as `fn(req)` and the request is parsed if it returns a truthy
|
||||||
|
value. Defaults to `application/json`.
|
||||||
|
|
||||||
|
##### verify
|
||||||
|
|
||||||
|
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
|
||||||
|
where `buf` is a `Buffer` of the raw request body and `encoding` is the
|
||||||
|
encoding of the request. The parsing can be aborted by throwing an error.
|
||||||
|
|
||||||
|
### bodyParser.raw([options])
|
||||||
|
|
||||||
|
Returns middleware that parses all bodies as a `Buffer` and only looks at
|
||||||
|
requests where the `Content-Type` header matches the `type` option. This
|
||||||
|
parser supports automatic inflation of `gzip` and `deflate` encodings.
|
||||||
|
|
||||||
|
A new `body` object containing the parsed data is populated on the `request`
|
||||||
|
object after the middleware (i.e. `req.body`). This will be a `Buffer` object
|
||||||
|
of the body.
|
||||||
|
|
||||||
|
#### Options
|
||||||
|
|
||||||
|
The `raw` function takes an optional `options` object that may contain any of
|
||||||
|
the following keys:
|
||||||
|
|
||||||
|
##### inflate
|
||||||
|
|
||||||
|
When set to `true`, then deflated (compressed) bodies will be inflated; when
|
||||||
|
`false`, deflated bodies are rejected. Defaults to `true`.
|
||||||
|
|
||||||
|
##### limit
|
||||||
|
|
||||||
|
Controls the maximum request body size. If this is a number, then the value
|
||||||
|
specifies the number of bytes; if it is a string, the value is passed to the
|
||||||
|
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
|
||||||
|
to `'100kb'`.
|
||||||
|
|
||||||
|
##### type
|
||||||
|
|
||||||
|
The `type` option is used to determine what media type the middleware will
|
||||||
|
parse. This option can be a string, array of strings, or a function.
|
||||||
|
If not a function, `type` option is passed directly to the
|
||||||
|
[type-is](https://www.npmjs.org/package/type-is#readme) library and this
|
||||||
|
can be an extension name (like `bin`), a mime type (like
|
||||||
|
`application/octet-stream`), or a mime type with a wildcard (like `*/*` or
|
||||||
|
`application/*`). If a function, the `type` option is called as `fn(req)`
|
||||||
|
and the request is parsed if it returns a truthy value. Defaults to
|
||||||
|
`application/octet-stream`.
|
||||||
|
|
||||||
|
##### verify
|
||||||
|
|
||||||
|
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
|
||||||
|
where `buf` is a `Buffer` of the raw request body and `encoding` is the
|
||||||
|
encoding of the request. The parsing can be aborted by throwing an error.
|
||||||
|
|
||||||
|
### bodyParser.text([options])
|
||||||
|
|
||||||
|
Returns middleware that parses all bodies as a string and only looks at
|
||||||
|
requests where the `Content-Type` header matches the `type` option. This
|
||||||
|
parser supports automatic inflation of `gzip` and `deflate` encodings.
|
||||||
|
|
||||||
|
A new `body` string containing the parsed data is populated on the `request`
|
||||||
|
object after the middleware (i.e. `req.body`). This will be a string of the
|
||||||
|
body.
|
||||||
|
|
||||||
|
#### Options
|
||||||
|
|
||||||
|
The `text` function takes an optional `options` object that may contain any of
|
||||||
|
the following keys:
|
||||||
|
|
||||||
|
##### defaultCharset
|
||||||
|
|
||||||
|
Specify the default character set for the text content if the charset is not
|
||||||
|
specified in the `Content-Type` header of the request. Defaults to `utf-8`.
|
||||||
|
|
||||||
|
##### inflate
|
||||||
|
|
||||||
|
When set to `true`, then deflated (compressed) bodies will be inflated; when
|
||||||
|
`false`, deflated bodies are rejected. Defaults to `true`.
|
||||||
|
|
||||||
|
##### limit
|
||||||
|
|
||||||
|
Controls the maximum request body size. If this is a number, then the value
|
||||||
|
specifies the number of bytes; if it is a string, the value is passed to the
|
||||||
|
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
|
||||||
|
to `'100kb'`.
|
||||||
|
|
||||||
|
##### type
|
||||||
|
|
||||||
|
The `type` option is used to determine what media type the middleware will
|
||||||
|
parse. This option can be a string, array of strings, or a function. If not
|
||||||
|
a function, `type` option is passed directly to the
|
||||||
|
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
|
||||||
|
be an extension name (like `txt`), a mime type (like `text/plain`), or a mime
|
||||||
|
type with a wildcard (like `*/*` or `text/*`). If a function, the `type`
|
||||||
|
option is called as `fn(req)` and the request is parsed if it returns a
|
||||||
|
truthy value. Defaults to `text/plain`.
|
||||||
|
|
||||||
|
##### verify
|
||||||
|
|
||||||
|
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
|
||||||
|
where `buf` is a `Buffer` of the raw request body and `encoding` is the
|
||||||
|
encoding of the request. The parsing can be aborted by throwing an error.
|
||||||
|
|
||||||
|
### bodyParser.urlencoded([options])
|
||||||
|
|
||||||
|
Returns middleware that only parses `urlencoded` bodies and only looks at
|
||||||
|
requests where the `Content-Type` header matches the `type` option. This
|
||||||
|
parser accepts only UTF-8 encoding of the body and supports automatic
|
||||||
|
inflation of `gzip` and `deflate` encodings.
|
||||||
|
|
||||||
|
A new `body` object containing the parsed data is populated on the `request`
|
||||||
|
object after the middleware (i.e. `req.body`). This object will contain
|
||||||
|
key-value pairs, where the value can be a string or array (when `extended` is
|
||||||
|
`false`), or any type (when `extended` is `true`).
|
||||||
|
|
||||||
|
#### Options
|
||||||
|
|
||||||
|
The `urlencoded` function takes an optional `options` object that may contain
|
||||||
|
any of the following keys:
|
||||||
|
|
||||||
|
##### extended
|
||||||
|
|
||||||
|
The `extended` option allows to choose between parsing the URL-encoded data
|
||||||
|
with the `querystring` library (when `false`) or the `qs` library (when
|
||||||
|
`true`). The "extended" syntax allows for rich objects and arrays to be
|
||||||
|
encoded into the URL-encoded format, allowing for a JSON-like experience
|
||||||
|
with URL-encoded. For more information, please
|
||||||
|
[see the qs library](https://www.npmjs.org/package/qs#readme).
|
||||||
|
|
||||||
|
Defaults to `true`, but using the default has been deprecated. Please
|
||||||
|
research into the difference between `qs` and `querystring` and choose the
|
||||||
|
appropriate setting.
|
||||||
|
|
||||||
|
##### inflate
|
||||||
|
|
||||||
|
When set to `true`, then deflated (compressed) bodies will be inflated; when
|
||||||
|
`false`, deflated bodies are rejected. Defaults to `true`.
|
||||||
|
|
||||||
|
##### limit
|
||||||
|
|
||||||
|
Controls the maximum request body size. If this is a number, then the value
|
||||||
|
specifies the number of bytes; if it is a string, the value is passed to the
|
||||||
|
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
|
||||||
|
to `'100kb'`.
|
||||||
|
|
||||||
|
##### parameterLimit
|
||||||
|
|
||||||
|
The `parameterLimit` option controls the maximum number of parameters that
|
||||||
|
are allowed in the URL-encoded data. If a request contains more parameters
|
||||||
|
than this value, a 413 will be returned to the client. Defaults to `1000`.
|
||||||
|
|
||||||
|
##### type
|
||||||
|
|
||||||
|
The `type` option is used to determine what media type the middleware will
|
||||||
|
parse. This option can be a string, array of strings, or a function. If not
|
||||||
|
a function, `type` option is passed directly to the
|
||||||
|
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
|
||||||
|
be an extension name (like `urlencoded`), a mime type (like
|
||||||
|
`application/x-www-form-urlencoded`), or a mime type with a wildcard (like
|
||||||
|
`*/x-www-form-urlencoded`). If a function, the `type` option is called as
|
||||||
|
`fn(req)` and the request is parsed if it returns a truthy value. Defaults
|
||||||
|
to `application/x-www-form-urlencoded`.
|
||||||
|
|
||||||
|
##### verify
|
||||||
|
|
||||||
|
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
|
||||||
|
where `buf` is a `Buffer` of the raw request body and `encoding` is the
|
||||||
|
encoding of the request. The parsing can be aborted by throwing an error.
|
||||||
|
|
||||||
|
#### depth
|
||||||
|
|
||||||
|
The `depth` option is used to configure the maximum depth of the `qs` library when `extended` is `true`. This allows you to limit the amount of keys that are parsed and can be useful to prevent certain types of abuse. Defaults to `32`. It is recommended to keep this value as low as possible.
|
||||||
|
|
||||||
|
## Errors
|
||||||
|
|
||||||
|
The middlewares provided by this module create errors using the
|
||||||
|
[`http-errors` module](https://www.npmjs.com/package/http-errors). The errors
|
||||||
|
will typically have a `status`/`statusCode` property that contains the suggested
|
||||||
|
HTTP response code, an `expose` property to determine if the `message` property
|
||||||
|
should be displayed to the client, a `type` property to determine the type of
|
||||||
|
error without matching against the `message`, and a `body` property containing
|
||||||
|
the read body, if available.
|
||||||
|
|
||||||
|
The following are the common errors created, though any error can come through
|
||||||
|
for various reasons.
|
||||||
|
|
||||||
|
### content encoding unsupported
|
||||||
|
|
||||||
|
This error will occur when the request had a `Content-Encoding` header that
|
||||||
|
contained an encoding but the "inflation" option was set to `false`. The
|
||||||
|
`status` property is set to `415`, the `type` property is set to
|
||||||
|
`'encoding.unsupported'`, and the `charset` property will be set to the
|
||||||
|
encoding that is unsupported.
|
||||||
|
|
||||||
|
### entity parse failed
|
||||||
|
|
||||||
|
This error will occur when the request contained an entity that could not be
|
||||||
|
parsed by the middleware. The `status` property is set to `400`, the `type`
|
||||||
|
property is set to `'entity.parse.failed'`, and the `body` property is set to
|
||||||
|
the entity value that failed parsing.
|
||||||
|
|
||||||
|
### entity verify failed
|
||||||
|
|
||||||
|
This error will occur when the request contained an entity that could not be
|
||||||
|
failed verification by the defined `verify` option. The `status` property is
|
||||||
|
set to `403`, the `type` property is set to `'entity.verify.failed'`, and the
|
||||||
|
`body` property is set to the entity value that failed verification.
|
||||||
|
|
||||||
|
### request aborted
|
||||||
|
|
||||||
|
This error will occur when the request is aborted by the client before reading
|
||||||
|
the body has finished. The `received` property will be set to the number of
|
||||||
|
bytes received before the request was aborted and the `expected` property is
|
||||||
|
set to the number of expected bytes. The `status` property is set to `400`
|
||||||
|
and `type` property is set to `'request.aborted'`.
|
||||||
|
|
||||||
|
### request entity too large
|
||||||
|
|
||||||
|
This error will occur when the request body's size is larger than the "limit"
|
||||||
|
option. The `limit` property will be set to the byte limit and the `length`
|
||||||
|
property will be set to the request body's length. The `status` property is
|
||||||
|
set to `413` and the `type` property is set to `'entity.too.large'`.
|
||||||
|
|
||||||
|
### request size did not match content length
|
||||||
|
|
||||||
|
This error will occur when the request's length did not match the length from
|
||||||
|
the `Content-Length` header. This typically occurs when the request is malformed,
|
||||||
|
typically when the `Content-Length` header was calculated based on characters
|
||||||
|
instead of bytes. The `status` property is set to `400` and the `type` property
|
||||||
|
is set to `'request.size.invalid'`.
|
||||||
|
|
||||||
|
### stream encoding should not be set
|
||||||
|
|
||||||
|
This error will occur when something called the `req.setEncoding` method prior
|
||||||
|
to this middleware. This module operates directly on bytes only and you cannot
|
||||||
|
call `req.setEncoding` when using this module. The `status` property is set to
|
||||||
|
`500` and the `type` property is set to `'stream.encoding.set'`.
|
||||||
|
|
||||||
|
### stream is not readable
|
||||||
|
|
||||||
|
This error will occur when the request is no longer readable when this middleware
|
||||||
|
attempts to read it. This typically means something other than a middleware from
|
||||||
|
this module read the request body already and the middleware was also configured to
|
||||||
|
read the same request. The `status` property is set to `500` and the `type`
|
||||||
|
property is set to `'stream.not.readable'`.
|
||||||
|
|
||||||
|
### too many parameters
|
||||||
|
|
||||||
|
This error will occur when the content of the request exceeds the configured
|
||||||
|
`parameterLimit` for the `urlencoded` parser. The `status` property is set to
|
||||||
|
`413` and the `type` property is set to `'parameters.too.many'`.
|
||||||
|
|
||||||
|
### unsupported charset "BOGUS"
|
||||||
|
|
||||||
|
This error will occur when the request had a charset parameter in the
|
||||||
|
`Content-Type` header, but the `iconv-lite` module does not support it OR the
|
||||||
|
parser does not support it. The charset is contained in the message as well
|
||||||
|
as in the `charset` property. The `status` property is set to `415`, the
|
||||||
|
`type` property is set to `'charset.unsupported'`, and the `charset` property
|
||||||
|
is set to the charset that is unsupported.
|
||||||
|
|
||||||
|
### unsupported content encoding "bogus"
|
||||||
|
|
||||||
|
This error will occur when the request had a `Content-Encoding` header that
|
||||||
|
contained an unsupported encoding. The encoding is contained in the message
|
||||||
|
as well as in the `encoding` property. The `status` property is set to `415`,
|
||||||
|
the `type` property is set to `'encoding.unsupported'`, and the `encoding`
|
||||||
|
property is set to the encoding that is unsupported.
|
||||||
|
|
||||||
|
### The input exceeded the depth
|
||||||
|
|
||||||
|
This error occurs when using `bodyParser.urlencoded` with the `extended` property set to `true` and the input exceeds the configured `depth` option. The `status` property is set to `400`. It is recommended to review the `depth` option and evaluate if it requires a higher value. When the `depth` option is set to `32` (default value), the error will not be thrown.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Express/Connect top-level generic
|
||||||
|
|
||||||
|
This example demonstrates adding a generic JSON and URL-encoded parser as a
|
||||||
|
top-level middleware, which will parse the bodies of all incoming requests.
|
||||||
|
This is the simplest setup.
|
||||||
|
|
||||||
|
```js
|
||||||
|
var express = require('express')
|
||||||
|
var bodyParser = require('body-parser')
|
||||||
|
|
||||||
|
var app = express()
|
||||||
|
|
||||||
|
// parse application/x-www-form-urlencoded
|
||||||
|
app.use(bodyParser.urlencoded({ extended: false }))
|
||||||
|
|
||||||
|
// parse application/json
|
||||||
|
app.use(bodyParser.json())
|
||||||
|
|
||||||
|
app.use(function (req, res) {
|
||||||
|
res.setHeader('Content-Type', 'text/plain')
|
||||||
|
res.write('you posted:\n')
|
||||||
|
res.end(JSON.stringify(req.body, null, 2))
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Express route-specific
|
||||||
|
|
||||||
|
This example demonstrates adding body parsers specifically to the routes that
|
||||||
|
need them. In general, this is the most recommended way to use body-parser with
|
||||||
|
Express.
|
||||||
|
|
||||||
|
```js
|
||||||
|
var express = require('express')
|
||||||
|
var bodyParser = require('body-parser')
|
||||||
|
|
||||||
|
var app = express()
|
||||||
|
|
||||||
|
// create application/json parser
|
||||||
|
var jsonParser = bodyParser.json()
|
||||||
|
|
||||||
|
// create application/x-www-form-urlencoded parser
|
||||||
|
var urlencodedParser = bodyParser.urlencoded({ extended: false })
|
||||||
|
|
||||||
|
// POST /login gets urlencoded bodies
|
||||||
|
app.post('/login', urlencodedParser, function (req, res) {
|
||||||
|
res.send('welcome, ' + req.body.username)
|
||||||
|
})
|
||||||
|
|
||||||
|
// POST /api/users gets JSON bodies
|
||||||
|
app.post('/api/users', jsonParser, function (req, res) {
|
||||||
|
// create user in req.body
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Change accepted type for parsers
|
||||||
|
|
||||||
|
All the parsers accept a `type` option which allows you to change the
|
||||||
|
`Content-Type` that the middleware will parse.
|
||||||
|
|
||||||
|
```js
|
||||||
|
var express = require('express')
|
||||||
|
var bodyParser = require('body-parser')
|
||||||
|
|
||||||
|
var app = express()
|
||||||
|
|
||||||
|
// parse various different custom JSON types as JSON
|
||||||
|
app.use(bodyParser.json({ type: 'application/*+json' }))
|
||||||
|
|
||||||
|
// parse some custom thing into a Buffer
|
||||||
|
app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))
|
||||||
|
|
||||||
|
// parse an HTML body into a string
|
||||||
|
app.use(bodyParser.text({ type: 'text/html' }))
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
[MIT](LICENSE)
|
||||||
|
|
||||||
|
[ci-image]: https://badgen.net/github/checks/expressjs/body-parser/master?label=ci
|
||||||
|
[ci-url]: https://github.com/expressjs/body-parser/actions/workflows/ci.yml
|
||||||
|
[coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/body-parser/master
|
||||||
|
[coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master
|
||||||
|
[node-version-image]: https://badgen.net/npm/node/body-parser
|
||||||
|
[node-version-url]: https://nodejs.org/en/download
|
||||||
|
[npm-downloads-image]: https://badgen.net/npm/dm/body-parser
|
||||||
|
[npm-url]: https://npmjs.org/package/body-parser
|
||||||
|
[npm-version-image]: https://badgen.net/npm/v/body-parser
|
||||||
|
[ossf-scorecard-badge]: https://api.scorecard.dev/projects/github.com/expressjs/body-parser/badge
|
||||||
|
[ossf-scorecard-visualizer]: https://ossf.github.io/scorecard-visualizer/#/projects/github.com/expressjs/body-parser
|
||||||
156
node_modules/body-parser/index.js
generated
vendored
Normal file
156
node_modules/body-parser/index.js
generated
vendored
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
/*!
|
||||||
|
* body-parser
|
||||||
|
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module dependencies.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
var deprecate = require('depd')('body-parser')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache of loaded parsers.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
var parsers = Object.create(null)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef Parsers
|
||||||
|
* @type {function}
|
||||||
|
* @property {function} json
|
||||||
|
* @property {function} raw
|
||||||
|
* @property {function} text
|
||||||
|
* @property {function} urlencoded
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module exports.
|
||||||
|
* @type {Parsers}
|
||||||
|
*/
|
||||||
|
|
||||||
|
exports = module.exports = deprecate.function(bodyParser,
|
||||||
|
'bodyParser: use individual json/urlencoded middlewares')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JSON parser.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
Object.defineProperty(exports, 'json', {
|
||||||
|
configurable: true,
|
||||||
|
enumerable: true,
|
||||||
|
get: createParserGetter('json')
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Raw parser.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
Object.defineProperty(exports, 'raw', {
|
||||||
|
configurable: true,
|
||||||
|
enumerable: true,
|
||||||
|
get: createParserGetter('raw')
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Text parser.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
Object.defineProperty(exports, 'text', {
|
||||||
|
configurable: true,
|
||||||
|
enumerable: true,
|
||||||
|
get: createParserGetter('text')
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL-encoded parser.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
Object.defineProperty(exports, 'urlencoded', {
|
||||||
|
configurable: true,
|
||||||
|
enumerable: true,
|
||||||
|
get: createParserGetter('urlencoded')
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a middleware to parse json and urlencoded bodies.
|
||||||
|
*
|
||||||
|
* @param {object} [options]
|
||||||
|
* @return {function}
|
||||||
|
* @deprecated
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
function bodyParser (options) {
|
||||||
|
// use default type for parsers
|
||||||
|
var opts = Object.create(options || null, {
|
||||||
|
type: {
|
||||||
|
configurable: true,
|
||||||
|
enumerable: true,
|
||||||
|
value: undefined,
|
||||||
|
writable: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
var _urlencoded = exports.urlencoded(opts)
|
||||||
|
var _json = exports.json(opts)
|
||||||
|
|
||||||
|
return function bodyParser (req, res, next) {
|
||||||
|
_json(req, res, function (err) {
|
||||||
|
if (err) return next(err)
|
||||||
|
_urlencoded(req, res, next)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a getter for loading a parser.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function createParserGetter (name) {
|
||||||
|
return function get () {
|
||||||
|
return loadParser(name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load a parser module.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function loadParser (parserName) {
|
||||||
|
var parser = parsers[parserName]
|
||||||
|
|
||||||
|
if (parser !== undefined) {
|
||||||
|
return parser
|
||||||
|
}
|
||||||
|
|
||||||
|
// this uses a switch for static require analysis
|
||||||
|
switch (parserName) {
|
||||||
|
case 'json':
|
||||||
|
parser = require('./lib/types/json')
|
||||||
|
break
|
||||||
|
case 'raw':
|
||||||
|
parser = require('./lib/types/raw')
|
||||||
|
break
|
||||||
|
case 'text':
|
||||||
|
parser = require('./lib/types/text')
|
||||||
|
break
|
||||||
|
case 'urlencoded':
|
||||||
|
parser = require('./lib/types/urlencoded')
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
// store to prevent invoking require()
|
||||||
|
return (parsers[parserName] = parser)
|
||||||
|
}
|
||||||
205
node_modules/body-parser/lib/read.js
generated
vendored
Normal file
205
node_modules/body-parser/lib/read.js
generated
vendored
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
/*!
|
||||||
|
* body-parser
|
||||||
|
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module dependencies.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
var createError = require('http-errors')
|
||||||
|
var destroy = require('destroy')
|
||||||
|
var getBody = require('raw-body')
|
||||||
|
var iconv = require('iconv-lite')
|
||||||
|
var onFinished = require('on-finished')
|
||||||
|
var unpipe = require('unpipe')
|
||||||
|
var zlib = require('zlib')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module exports.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = read
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read a request into a buffer and parse.
|
||||||
|
*
|
||||||
|
* @param {object} req
|
||||||
|
* @param {object} res
|
||||||
|
* @param {function} next
|
||||||
|
* @param {function} parse
|
||||||
|
* @param {function} debug
|
||||||
|
* @param {object} options
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function read (req, res, next, parse, debug, options) {
|
||||||
|
var length
|
||||||
|
var opts = options
|
||||||
|
var stream
|
||||||
|
|
||||||
|
// flag as parsed
|
||||||
|
req._body = true
|
||||||
|
|
||||||
|
// read options
|
||||||
|
var encoding = opts.encoding !== null
|
||||||
|
? opts.encoding
|
||||||
|
: null
|
||||||
|
var verify = opts.verify
|
||||||
|
|
||||||
|
try {
|
||||||
|
// get the content stream
|
||||||
|
stream = contentstream(req, debug, opts.inflate)
|
||||||
|
length = stream.length
|
||||||
|
stream.length = undefined
|
||||||
|
} catch (err) {
|
||||||
|
return next(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// set raw-body options
|
||||||
|
opts.length = length
|
||||||
|
opts.encoding = verify
|
||||||
|
? null
|
||||||
|
: encoding
|
||||||
|
|
||||||
|
// assert charset is supported
|
||||||
|
if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {
|
||||||
|
return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
|
||||||
|
charset: encoding.toLowerCase(),
|
||||||
|
type: 'charset.unsupported'
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
// read body
|
||||||
|
debug('read body')
|
||||||
|
getBody(stream, opts, function (error, body) {
|
||||||
|
if (error) {
|
||||||
|
var _error
|
||||||
|
|
||||||
|
if (error.type === 'encoding.unsupported') {
|
||||||
|
// echo back charset
|
||||||
|
_error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
|
||||||
|
charset: encoding.toLowerCase(),
|
||||||
|
type: 'charset.unsupported'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
// set status code on error
|
||||||
|
_error = createError(400, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// unpipe from stream and destroy
|
||||||
|
if (stream !== req) {
|
||||||
|
unpipe(req)
|
||||||
|
destroy(stream, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// read off entire request
|
||||||
|
dump(req, function onfinished () {
|
||||||
|
next(createError(400, _error))
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// verify
|
||||||
|
if (verify) {
|
||||||
|
try {
|
||||||
|
debug('verify body')
|
||||||
|
verify(req, res, body, encoding)
|
||||||
|
} catch (err) {
|
||||||
|
next(createError(403, err, {
|
||||||
|
body: body,
|
||||||
|
type: err.type || 'entity.verify.failed'
|
||||||
|
}))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// parse
|
||||||
|
var str = body
|
||||||
|
try {
|
||||||
|
debug('parse body')
|
||||||
|
str = typeof body !== 'string' && encoding !== null
|
||||||
|
? iconv.decode(body, encoding)
|
||||||
|
: body
|
||||||
|
req.body = parse(str)
|
||||||
|
} catch (err) {
|
||||||
|
next(createError(400, err, {
|
||||||
|
body: str,
|
||||||
|
type: err.type || 'entity.parse.failed'
|
||||||
|
}))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
next()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the content stream of the request.
|
||||||
|
*
|
||||||
|
* @param {object} req
|
||||||
|
* @param {function} debug
|
||||||
|
* @param {boolean} [inflate=true]
|
||||||
|
* @return {object}
|
||||||
|
* @api private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function contentstream (req, debug, inflate) {
|
||||||
|
var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase()
|
||||||
|
var length = req.headers['content-length']
|
||||||
|
var stream
|
||||||
|
|
||||||
|
debug('content-encoding "%s"', encoding)
|
||||||
|
|
||||||
|
if (inflate === false && encoding !== 'identity') {
|
||||||
|
throw createError(415, 'content encoding unsupported', {
|
||||||
|
encoding: encoding,
|
||||||
|
type: 'encoding.unsupported'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (encoding) {
|
||||||
|
case 'deflate':
|
||||||
|
stream = zlib.createInflate()
|
||||||
|
debug('inflate body')
|
||||||
|
req.pipe(stream)
|
||||||
|
break
|
||||||
|
case 'gzip':
|
||||||
|
stream = zlib.createGunzip()
|
||||||
|
debug('gunzip body')
|
||||||
|
req.pipe(stream)
|
||||||
|
break
|
||||||
|
case 'identity':
|
||||||
|
stream = req
|
||||||
|
stream.length = length
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
throw createError(415, 'unsupported content encoding "' + encoding + '"', {
|
||||||
|
encoding: encoding,
|
||||||
|
type: 'encoding.unsupported'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return stream
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dump the contents of a request.
|
||||||
|
*
|
||||||
|
* @param {object} req
|
||||||
|
* @param {function} callback
|
||||||
|
* @api private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function dump (req, callback) {
|
||||||
|
if (onFinished.isFinished(req)) {
|
||||||
|
callback(null)
|
||||||
|
} else {
|
||||||
|
onFinished(req, callback)
|
||||||
|
req.resume()
|
||||||
|
}
|
||||||
|
}
|
||||||
247
node_modules/body-parser/lib/types/json.js
generated
vendored
Normal file
247
node_modules/body-parser/lib/types/json.js
generated
vendored
Normal file
@@ -0,0 +1,247 @@
|
|||||||
|
/*!
|
||||||
|
* body-parser
|
||||||
|
* Copyright(c) 2014 Jonathan Ong
|
||||||
|
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module dependencies.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
var bytes = require('bytes')
|
||||||
|
var contentType = require('content-type')
|
||||||
|
var createError = require('http-errors')
|
||||||
|
var debug = require('debug')('body-parser:json')
|
||||||
|
var read = require('../read')
|
||||||
|
var typeis = require('type-is')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module exports.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = json
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RegExp to match the first non-space in a string.
|
||||||
|
*
|
||||||
|
* Allowed whitespace is defined in RFC 7159:
|
||||||
|
*
|
||||||
|
* ws = *(
|
||||||
|
* %x20 / ; Space
|
||||||
|
* %x09 / ; Horizontal tab
|
||||||
|
* %x0A / ; Line feed or New line
|
||||||
|
* %x0D ) ; Carriage return
|
||||||
|
*/
|
||||||
|
|
||||||
|
var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*([^\x20\x09\x0a\x0d])/ // eslint-disable-line no-control-regex
|
||||||
|
|
||||||
|
var JSON_SYNTAX_CHAR = '#'
|
||||||
|
var JSON_SYNTAX_REGEXP = /#+/g
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a middleware to parse JSON bodies.
|
||||||
|
*
|
||||||
|
* @param {object} [options]
|
||||||
|
* @return {function}
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
function json (options) {
|
||||||
|
var opts = options || {}
|
||||||
|
|
||||||
|
var limit = typeof opts.limit !== 'number'
|
||||||
|
? bytes.parse(opts.limit || '100kb')
|
||||||
|
: opts.limit
|
||||||
|
var inflate = opts.inflate !== false
|
||||||
|
var reviver = opts.reviver
|
||||||
|
var strict = opts.strict !== false
|
||||||
|
var type = opts.type || 'application/json'
|
||||||
|
var verify = opts.verify || false
|
||||||
|
|
||||||
|
if (verify !== false && typeof verify !== 'function') {
|
||||||
|
throw new TypeError('option verify must be function')
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the appropriate type checking function
|
||||||
|
var shouldParse = typeof type !== 'function'
|
||||||
|
? typeChecker(type)
|
||||||
|
: type
|
||||||
|
|
||||||
|
function parse (body) {
|
||||||
|
if (body.length === 0) {
|
||||||
|
// special-case empty json body, as it's a common client-side mistake
|
||||||
|
// TODO: maybe make this configurable or part of "strict" option
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strict) {
|
||||||
|
var first = firstchar(body)
|
||||||
|
|
||||||
|
if (first !== '{' && first !== '[') {
|
||||||
|
debug('strict violation')
|
||||||
|
throw createStrictSyntaxError(body, first)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
debug('parse json')
|
||||||
|
return JSON.parse(body, reviver)
|
||||||
|
} catch (e) {
|
||||||
|
throw normalizeJsonSyntaxError(e, {
|
||||||
|
message: e.message,
|
||||||
|
stack: e.stack
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return function jsonParser (req, res, next) {
|
||||||
|
if (req._body) {
|
||||||
|
debug('body already parsed')
|
||||||
|
next()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
req.body = req.body || {}
|
||||||
|
|
||||||
|
// skip requests without bodies
|
||||||
|
if (!typeis.hasBody(req)) {
|
||||||
|
debug('skip empty body')
|
||||||
|
next()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('content-type %j', req.headers['content-type'])
|
||||||
|
|
||||||
|
// determine if request should be parsed
|
||||||
|
if (!shouldParse(req)) {
|
||||||
|
debug('skip parsing')
|
||||||
|
next()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// assert charset per RFC 7159 sec 8.1
|
||||||
|
var charset = getCharset(req) || 'utf-8'
|
||||||
|
if (charset.slice(0, 4) !== 'utf-') {
|
||||||
|
debug('invalid charset')
|
||||||
|
next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', {
|
||||||
|
charset: charset,
|
||||||
|
type: 'charset.unsupported'
|
||||||
|
}))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// read
|
||||||
|
read(req, res, next, parse, debug, {
|
||||||
|
encoding: charset,
|
||||||
|
inflate: inflate,
|
||||||
|
limit: limit,
|
||||||
|
verify: verify
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create strict violation syntax error matching native error.
|
||||||
|
*
|
||||||
|
* @param {string} str
|
||||||
|
* @param {string} char
|
||||||
|
* @return {Error}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function createStrictSyntaxError (str, char) {
|
||||||
|
var index = str.indexOf(char)
|
||||||
|
var partial = ''
|
||||||
|
|
||||||
|
if (index !== -1) {
|
||||||
|
partial = str.substring(0, index) + JSON_SYNTAX_CHAR
|
||||||
|
|
||||||
|
for (var i = index + 1; i < str.length; i++) {
|
||||||
|
partial += JSON_SYNTAX_CHAR
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation')
|
||||||
|
} catch (e) {
|
||||||
|
return normalizeJsonSyntaxError(e, {
|
||||||
|
message: e.message.replace(JSON_SYNTAX_REGEXP, function (placeholder) {
|
||||||
|
return str.substring(index, index + placeholder.length)
|
||||||
|
}),
|
||||||
|
stack: e.stack
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the first non-whitespace character in a string.
|
||||||
|
*
|
||||||
|
* @param {string} str
|
||||||
|
* @return {function}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function firstchar (str) {
|
||||||
|
var match = FIRST_CHAR_REGEXP.exec(str)
|
||||||
|
|
||||||
|
return match
|
||||||
|
? match[1]
|
||||||
|
: undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the charset of a request.
|
||||||
|
*
|
||||||
|
* @param {object} req
|
||||||
|
* @api private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function getCharset (req) {
|
||||||
|
try {
|
||||||
|
return (contentType.parse(req).parameters.charset || '').toLowerCase()
|
||||||
|
} catch (e) {
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normalize a SyntaxError for JSON.parse.
|
||||||
|
*
|
||||||
|
* @param {SyntaxError} error
|
||||||
|
* @param {object} obj
|
||||||
|
* @return {SyntaxError}
|
||||||
|
*/
|
||||||
|
|
||||||
|
function normalizeJsonSyntaxError (error, obj) {
|
||||||
|
var keys = Object.getOwnPropertyNames(error)
|
||||||
|
|
||||||
|
for (var i = 0; i < keys.length; i++) {
|
||||||
|
var key = keys[i]
|
||||||
|
if (key !== 'stack' && key !== 'message') {
|
||||||
|
delete error[key]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// replace stack before message for Node.js 0.10 and below
|
||||||
|
error.stack = obj.stack.replace(error.message, obj.message)
|
||||||
|
error.message = obj.message
|
||||||
|
|
||||||
|
return error
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the simple type checker.
|
||||||
|
*
|
||||||
|
* @param {string} type
|
||||||
|
* @return {function}
|
||||||
|
*/
|
||||||
|
|
||||||
|
function typeChecker (type) {
|
||||||
|
return function checkType (req) {
|
||||||
|
return Boolean(typeis(req, type))
|
||||||
|
}
|
||||||
|
}
|
||||||
101
node_modules/body-parser/lib/types/raw.js
generated
vendored
Normal file
101
node_modules/body-parser/lib/types/raw.js
generated
vendored
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
/*!
|
||||||
|
* body-parser
|
||||||
|
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module dependencies.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var bytes = require('bytes')
|
||||||
|
var debug = require('debug')('body-parser:raw')
|
||||||
|
var read = require('../read')
|
||||||
|
var typeis = require('type-is')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module exports.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = raw
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a middleware to parse raw bodies.
|
||||||
|
*
|
||||||
|
* @param {object} [options]
|
||||||
|
* @return {function}
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
function raw (options) {
|
||||||
|
var opts = options || {}
|
||||||
|
|
||||||
|
var inflate = opts.inflate !== false
|
||||||
|
var limit = typeof opts.limit !== 'number'
|
||||||
|
? bytes.parse(opts.limit || '100kb')
|
||||||
|
: opts.limit
|
||||||
|
var type = opts.type || 'application/octet-stream'
|
||||||
|
var verify = opts.verify || false
|
||||||
|
|
||||||
|
if (verify !== false && typeof verify !== 'function') {
|
||||||
|
throw new TypeError('option verify must be function')
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the appropriate type checking function
|
||||||
|
var shouldParse = typeof type !== 'function'
|
||||||
|
? typeChecker(type)
|
||||||
|
: type
|
||||||
|
|
||||||
|
function parse (buf) {
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
return function rawParser (req, res, next) {
|
||||||
|
if (req._body) {
|
||||||
|
debug('body already parsed')
|
||||||
|
next()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
req.body = req.body || {}
|
||||||
|
|
||||||
|
// skip requests without bodies
|
||||||
|
if (!typeis.hasBody(req)) {
|
||||||
|
debug('skip empty body')
|
||||||
|
next()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('content-type %j', req.headers['content-type'])
|
||||||
|
|
||||||
|
// determine if request should be parsed
|
||||||
|
if (!shouldParse(req)) {
|
||||||
|
debug('skip parsing')
|
||||||
|
next()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// read
|
||||||
|
read(req, res, next, parse, debug, {
|
||||||
|
encoding: null,
|
||||||
|
inflate: inflate,
|
||||||
|
limit: limit,
|
||||||
|
verify: verify
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the simple type checker.
|
||||||
|
*
|
||||||
|
* @param {string} type
|
||||||
|
* @return {function}
|
||||||
|
*/
|
||||||
|
|
||||||
|
function typeChecker (type) {
|
||||||
|
return function checkType (req) {
|
||||||
|
return Boolean(typeis(req, type))
|
||||||
|
}
|
||||||
|
}
|
||||||
121
node_modules/body-parser/lib/types/text.js
generated
vendored
Normal file
121
node_modules/body-parser/lib/types/text.js
generated
vendored
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
/*!
|
||||||
|
* body-parser
|
||||||
|
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module dependencies.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var bytes = require('bytes')
|
||||||
|
var contentType = require('content-type')
|
||||||
|
var debug = require('debug')('body-parser:text')
|
||||||
|
var read = require('../read')
|
||||||
|
var typeis = require('type-is')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module exports.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = text
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a middleware to parse text bodies.
|
||||||
|
*
|
||||||
|
* @param {object} [options]
|
||||||
|
* @return {function}
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
function text (options) {
|
||||||
|
var opts = options || {}
|
||||||
|
|
||||||
|
var defaultCharset = opts.defaultCharset || 'utf-8'
|
||||||
|
var inflate = opts.inflate !== false
|
||||||
|
var limit = typeof opts.limit !== 'number'
|
||||||
|
? bytes.parse(opts.limit || '100kb')
|
||||||
|
: opts.limit
|
||||||
|
var type = opts.type || 'text/plain'
|
||||||
|
var verify = opts.verify || false
|
||||||
|
|
||||||
|
if (verify !== false && typeof verify !== 'function') {
|
||||||
|
throw new TypeError('option verify must be function')
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the appropriate type checking function
|
||||||
|
var shouldParse = typeof type !== 'function'
|
||||||
|
? typeChecker(type)
|
||||||
|
: type
|
||||||
|
|
||||||
|
function parse (buf) {
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
return function textParser (req, res, next) {
|
||||||
|
if (req._body) {
|
||||||
|
debug('body already parsed')
|
||||||
|
next()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
req.body = req.body || {}
|
||||||
|
|
||||||
|
// skip requests without bodies
|
||||||
|
if (!typeis.hasBody(req)) {
|
||||||
|
debug('skip empty body')
|
||||||
|
next()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('content-type %j', req.headers['content-type'])
|
||||||
|
|
||||||
|
// determine if request should be parsed
|
||||||
|
if (!shouldParse(req)) {
|
||||||
|
debug('skip parsing')
|
||||||
|
next()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// get charset
|
||||||
|
var charset = getCharset(req) || defaultCharset
|
||||||
|
|
||||||
|
// read
|
||||||
|
read(req, res, next, parse, debug, {
|
||||||
|
encoding: charset,
|
||||||
|
inflate: inflate,
|
||||||
|
limit: limit,
|
||||||
|
verify: verify
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the charset of a request.
|
||||||
|
*
|
||||||
|
* @param {object} req
|
||||||
|
* @api private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function getCharset (req) {
|
||||||
|
try {
|
||||||
|
return (contentType.parse(req).parameters.charset || '').toLowerCase()
|
||||||
|
} catch (e) {
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the simple type checker.
|
||||||
|
*
|
||||||
|
* @param {string} type
|
||||||
|
* @return {function}
|
||||||
|
*/
|
||||||
|
|
||||||
|
function typeChecker (type) {
|
||||||
|
return function checkType (req) {
|
||||||
|
return Boolean(typeis(req, type))
|
||||||
|
}
|
||||||
|
}
|
||||||
300
node_modules/body-parser/lib/types/urlencoded.js
generated
vendored
Normal file
300
node_modules/body-parser/lib/types/urlencoded.js
generated
vendored
Normal file
@@ -0,0 +1,300 @@
|
|||||||
|
/*!
|
||||||
|
* body-parser
|
||||||
|
* Copyright(c) 2014 Jonathan Ong
|
||||||
|
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module dependencies.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
var bytes = require('bytes')
|
||||||
|
var contentType = require('content-type')
|
||||||
|
var createError = require('http-errors')
|
||||||
|
var debug = require('debug')('body-parser:urlencoded')
|
||||||
|
var deprecate = require('depd')('body-parser')
|
||||||
|
var read = require('../read')
|
||||||
|
var typeis = require('type-is')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module exports.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = urlencoded
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache of parser modules.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var parsers = Object.create(null)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a middleware to parse urlencoded bodies.
|
||||||
|
*
|
||||||
|
* @param {object} [options]
|
||||||
|
* @return {function}
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
function urlencoded (options) {
|
||||||
|
var opts = options || {}
|
||||||
|
|
||||||
|
// notice because option default will flip in next major
|
||||||
|
if (opts.extended === undefined) {
|
||||||
|
deprecate('undefined extended: provide extended option')
|
||||||
|
}
|
||||||
|
|
||||||
|
var extended = opts.extended !== false
|
||||||
|
var inflate = opts.inflate !== false
|
||||||
|
var limit = typeof opts.limit !== 'number'
|
||||||
|
? bytes.parse(opts.limit || '100kb')
|
||||||
|
: opts.limit
|
||||||
|
var type = opts.type || 'application/x-www-form-urlencoded'
|
||||||
|
var verify = opts.verify || false
|
||||||
|
|
||||||
|
if (verify !== false && typeof verify !== 'function') {
|
||||||
|
throw new TypeError('option verify must be function')
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the appropriate query parser
|
||||||
|
var queryparse = extended
|
||||||
|
? extendedparser(opts)
|
||||||
|
: simpleparser(opts)
|
||||||
|
|
||||||
|
// create the appropriate type checking function
|
||||||
|
var shouldParse = typeof type !== 'function'
|
||||||
|
? typeChecker(type)
|
||||||
|
: type
|
||||||
|
|
||||||
|
function parse (body) {
|
||||||
|
return body.length
|
||||||
|
? queryparse(body)
|
||||||
|
: {}
|
||||||
|
}
|
||||||
|
|
||||||
|
return function urlencodedParser (req, res, next) {
|
||||||
|
if (req._body) {
|
||||||
|
debug('body already parsed')
|
||||||
|
next()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
req.body = req.body || {}
|
||||||
|
|
||||||
|
// skip requests without bodies
|
||||||
|
if (!typeis.hasBody(req)) {
|
||||||
|
debug('skip empty body')
|
||||||
|
next()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('content-type %j', req.headers['content-type'])
|
||||||
|
|
||||||
|
// determine if request should be parsed
|
||||||
|
if (!shouldParse(req)) {
|
||||||
|
debug('skip parsing')
|
||||||
|
next()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// assert charset
|
||||||
|
var charset = getCharset(req) || 'utf-8'
|
||||||
|
if (charset !== 'utf-8') {
|
||||||
|
debug('invalid charset')
|
||||||
|
next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', {
|
||||||
|
charset: charset,
|
||||||
|
type: 'charset.unsupported'
|
||||||
|
}))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// read
|
||||||
|
read(req, res, next, parse, debug, {
|
||||||
|
debug: debug,
|
||||||
|
encoding: charset,
|
||||||
|
inflate: inflate,
|
||||||
|
limit: limit,
|
||||||
|
verify: verify
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the extended query parser.
|
||||||
|
*
|
||||||
|
* @param {object} options
|
||||||
|
*/
|
||||||
|
|
||||||
|
function extendedparser (options) {
|
||||||
|
var parameterLimit = options.parameterLimit !== undefined
|
||||||
|
? options.parameterLimit
|
||||||
|
: 1000
|
||||||
|
var depth = options.depth !== undefined ? options.depth : 32
|
||||||
|
var parse = parser('qs')
|
||||||
|
|
||||||
|
if (isNaN(parameterLimit) || parameterLimit < 1) {
|
||||||
|
throw new TypeError('option parameterLimit must be a positive number')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isNaN(depth) || depth < 0) {
|
||||||
|
throw new TypeError('option depth must be a zero or a positive number')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isFinite(parameterLimit)) {
|
||||||
|
parameterLimit = parameterLimit | 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return function queryparse (body) {
|
||||||
|
var paramCount = parameterCount(body, parameterLimit)
|
||||||
|
|
||||||
|
if (paramCount === undefined) {
|
||||||
|
debug('too many parameters')
|
||||||
|
throw createError(413, 'too many parameters', {
|
||||||
|
type: 'parameters.too.many'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
var arrayLimit = Math.max(100, paramCount)
|
||||||
|
|
||||||
|
debug('parse extended urlencoding')
|
||||||
|
try {
|
||||||
|
return parse(body, {
|
||||||
|
allowPrototypes: true,
|
||||||
|
arrayLimit: arrayLimit,
|
||||||
|
depth: depth,
|
||||||
|
strictDepth: true,
|
||||||
|
parameterLimit: parameterLimit
|
||||||
|
})
|
||||||
|
} catch (err) {
|
||||||
|
if (err instanceof RangeError) {
|
||||||
|
throw createError(400, 'The input exceeded the depth', {
|
||||||
|
type: 'querystring.parse.rangeError'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
throw err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the charset of a request.
|
||||||
|
*
|
||||||
|
* @param {object} req
|
||||||
|
* @api private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function getCharset (req) {
|
||||||
|
try {
|
||||||
|
return (contentType.parse(req).parameters.charset || '').toLowerCase()
|
||||||
|
} catch (e) {
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Count the number of parameters, stopping once limit reached
|
||||||
|
*
|
||||||
|
* @param {string} body
|
||||||
|
* @param {number} limit
|
||||||
|
* @api private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function parameterCount (body, limit) {
|
||||||
|
var count = 0
|
||||||
|
var index = 0
|
||||||
|
|
||||||
|
while ((index = body.indexOf('&', index)) !== -1) {
|
||||||
|
count++
|
||||||
|
index++
|
||||||
|
|
||||||
|
if (count === limit) {
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return count
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get parser for module name dynamically.
|
||||||
|
*
|
||||||
|
* @param {string} name
|
||||||
|
* @return {function}
|
||||||
|
* @api private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function parser (name) {
|
||||||
|
var mod = parsers[name]
|
||||||
|
|
||||||
|
if (mod !== undefined) {
|
||||||
|
return mod.parse
|
||||||
|
}
|
||||||
|
|
||||||
|
// this uses a switch for static require analysis
|
||||||
|
switch (name) {
|
||||||
|
case 'qs':
|
||||||
|
mod = require('qs')
|
||||||
|
break
|
||||||
|
case 'querystring':
|
||||||
|
mod = require('querystring')
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
// store to prevent invoking require()
|
||||||
|
parsers[name] = mod
|
||||||
|
|
||||||
|
return mod.parse
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the simple query parser.
|
||||||
|
*
|
||||||
|
* @param {object} options
|
||||||
|
*/
|
||||||
|
|
||||||
|
function simpleparser (options) {
|
||||||
|
var parameterLimit = options.parameterLimit !== undefined
|
||||||
|
? options.parameterLimit
|
||||||
|
: 1000
|
||||||
|
var parse = parser('querystring')
|
||||||
|
|
||||||
|
if (isNaN(parameterLimit) || parameterLimit < 1) {
|
||||||
|
throw new TypeError('option parameterLimit must be a positive number')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isFinite(parameterLimit)) {
|
||||||
|
parameterLimit = parameterLimit | 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return function queryparse (body) {
|
||||||
|
var paramCount = parameterCount(body, parameterLimit)
|
||||||
|
|
||||||
|
if (paramCount === undefined) {
|
||||||
|
debug('too many parameters')
|
||||||
|
throw createError(413, 'too many parameters', {
|
||||||
|
type: 'parameters.too.many'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('parse urlencoding')
|
||||||
|
return parse(body, undefined, undefined, { maxKeys: parameterLimit })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the simple type checker.
|
||||||
|
*
|
||||||
|
* @param {string} type
|
||||||
|
* @return {function}
|
||||||
|
*/
|
||||||
|
|
||||||
|
function typeChecker (type) {
|
||||||
|
return function checkType (req) {
|
||||||
|
return Boolean(typeis(req, type))
|
||||||
|
}
|
||||||
|
}
|
||||||
55
node_modules/body-parser/package.json
generated
vendored
Normal file
55
node_modules/body-parser/package.json
generated
vendored
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"name": "body-parser",
|
||||||
|
"description": "Node.js body parsing middleware",
|
||||||
|
"version": "1.20.4",
|
||||||
|
"contributors": [
|
||||||
|
"Douglas Christopher Wilson <doug@somethingdoug.com>",
|
||||||
|
"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"repository": "expressjs/body-parser",
|
||||||
|
"dependencies": {
|
||||||
|
"bytes": "~3.1.2",
|
||||||
|
"content-type": "~1.0.5",
|
||||||
|
"debug": "2.6.9",
|
||||||
|
"depd": "2.0.0",
|
||||||
|
"destroy": "~1.2.0",
|
||||||
|
"http-errors": "~2.0.1",
|
||||||
|
"iconv-lite": "~0.4.24",
|
||||||
|
"on-finished": "~2.4.1",
|
||||||
|
"qs": "~6.14.0",
|
||||||
|
"raw-body": "~2.5.3",
|
||||||
|
"type-is": "~1.6.18",
|
||||||
|
"unpipe": "~1.0.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"eslint": "8.34.0",
|
||||||
|
"eslint-config-standard": "14.1.1",
|
||||||
|
"eslint-plugin-import": "2.27.5",
|
||||||
|
"eslint-plugin-markdown": "3.0.0",
|
||||||
|
"eslint-plugin-node": "11.1.0",
|
||||||
|
"eslint-plugin-promise": "6.1.1",
|
||||||
|
"eslint-plugin-standard": "4.1.0",
|
||||||
|
"methods": "1.1.2",
|
||||||
|
"mocha": "10.2.0",
|
||||||
|
"nyc": "15.1.0",
|
||||||
|
"safe-buffer": "5.2.1",
|
||||||
|
"supertest": "6.3.3"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"lib/",
|
||||||
|
"LICENSE",
|
||||||
|
"HISTORY.md",
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8",
|
||||||
|
"npm": "1.2.8000 || >= 1.4.16"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"lint": "eslint .",
|
||||||
|
"test": "mocha --require test/support/env --reporter spec --check-leaks --bail test/",
|
||||||
|
"test-ci": "nyc --reporter=lcov --reporter=text npm test",
|
||||||
|
"test-cov": "nyc --reporter=html --reporter=text npm test"
|
||||||
|
}
|
||||||
|
}
|
||||||
201
node_modules/bson/LICENSE.md
generated
vendored
Normal file
201
node_modules/bson/LICENSE.md
generated
vendored
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
280
node_modules/bson/README.md
generated
vendored
Normal file
280
node_modules/bson/README.md
generated
vendored
Normal file
@@ -0,0 +1,280 @@
|
|||||||
|
# BSON parser
|
||||||
|
|
||||||
|
BSON is short for "Binary JSON," and is the binary-encoded serialization of JSON-like documents.
|
||||||
|
You can learn more about it in [the specification](http://bsonspec.org).
|
||||||
|
|
||||||
|
### Table of Contents
|
||||||
|
|
||||||
|
- [Usage](#usage)
|
||||||
|
- [Bugs/Feature Requests](#bugs--feature-requests)
|
||||||
|
- [Installation](#installation)
|
||||||
|
- [Documentation](#documentation)
|
||||||
|
- [FAQ](#faq)
|
||||||
|
|
||||||
|
|
||||||
|
### Release Integrity
|
||||||
|
|
||||||
|
Releases are created automatically and signed using the [Node team's GPG key](https://pgp.mongodb.com/node-driver.asc). This applies to the git tag as well as all release packages provided as part of a GitHub release. To verify the provided packages, download the key and import it using gpg:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
gpg --import node-driver.asc
|
||||||
|
```
|
||||||
|
|
||||||
|
The GitHub release contains a detached signature file for the NPM package (named
|
||||||
|
`bson-X.Y.Z.tgz.sig`).
|
||||||
|
|
||||||
|
The following command returns the link npm package.
|
||||||
|
```shell
|
||||||
|
npm view bson@vX.Y.Z dist.tarball
|
||||||
|
```
|
||||||
|
|
||||||
|
Using the result of the above command, a `curl` command can return the official npm package for the release.
|
||||||
|
|
||||||
|
To verify the integrity of the downloaded package, run the following command:
|
||||||
|
```shell
|
||||||
|
gpg --verify bson-X.Y.Z.tgz.sig bson-X.Y.Z.tgz
|
||||||
|
```
|
||||||
|
|
||||||
|
>[!Note]
|
||||||
|
No verification is done when using npm to install the package. The contents of the Github tarball and npm's tarball are identical.
|
||||||
|
|
||||||
|
## Bugs / Feature Requests
|
||||||
|
|
||||||
|
Think you've found a bug? Want to see a new feature in `bson`? Please open a case in our issue management tool, JIRA:
|
||||||
|
|
||||||
|
1. Create an account and login: [jira.mongodb.org](https://jira.mongodb.org)
|
||||||
|
2. Navigate to the NODE project: [jira.mongodb.org/browse/NODE](https://jira.mongodb.org/browse/NODE)
|
||||||
|
3. Click **Create Issue** - Please provide as much information as possible about the issue and how to reproduce it.
|
||||||
|
|
||||||
|
Bug reports in JIRA for the NODE driver project are **public**.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
To build a new version perform the following operations:
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Node.js or Bundling Usage
|
||||||
|
|
||||||
|
When using a bundler or Node.js you can import bson using the package name:
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { BSON, EJSON, ObjectId } from 'bson';
|
||||||
|
// or:
|
||||||
|
// const { BSON, EJSON, ObjectId } = require('bson');
|
||||||
|
|
||||||
|
const bytes = BSON.serialize({ _id: new ObjectId() });
|
||||||
|
console.log(bytes);
|
||||||
|
const doc = BSON.deserialize(bytes);
|
||||||
|
console.log(EJSON.stringify(doc));
|
||||||
|
// {"_id":{"$oid":"..."}}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Browser Usage
|
||||||
|
|
||||||
|
If you are working directly in the browser without a bundler please use the `.mjs` bundle like so:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script type="module">
|
||||||
|
import { BSON, EJSON, ObjectId } from './lib/bson.mjs';
|
||||||
|
|
||||||
|
const bytes = BSON.serialize({ _id: new ObjectId() });
|
||||||
|
console.log(bytes);
|
||||||
|
const doc = BSON.deserialize(bytes);
|
||||||
|
console.log(EJSON.stringify(doc));
|
||||||
|
// {"_id":{"$oid":"..."}}
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install bson
|
||||||
|
```
|
||||||
|
|
||||||
|
### MongoDB Node.js Driver Version Compatibility
|
||||||
|
|
||||||
|
Only the following version combinations with the [MongoDB Node.js Driver](https://github.com/mongodb/node-mongodb-native) are considered stable.
|
||||||
|
|
||||||
|
| | `bson@1.x` | `bson@4.x` | `bson@5.x` | `bson@6.x` |
|
||||||
|
| ------------- | ---------- | ---------- | ---------- | ---------- |
|
||||||
|
| `mongodb@6.x` | N/A | N/A | N/A | ✓ |
|
||||||
|
| `mongodb@5.x` | N/A | N/A | ✓ | N/A |
|
||||||
|
| `mongodb@4.x` | N/A | ✓ | N/A | N/A |
|
||||||
|
| `mongodb@3.x` | ✓ | N/A | N/A | N/A |
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
### BSON
|
||||||
|
|
||||||
|
[API documentation](https://mongodb.github.io/node-mongodb-native/Next/modules/BSON.html)
|
||||||
|
|
||||||
|
<a name="EJSON"></a>
|
||||||
|
|
||||||
|
### EJSON
|
||||||
|
|
||||||
|
- [EJSON](#EJSON)
|
||||||
|
|
||||||
|
- [.parse(text, [options])](#EJSON.parse)
|
||||||
|
|
||||||
|
- [.stringify(value, [replacer], [space], [options])](#EJSON.stringify)
|
||||||
|
|
||||||
|
- [.serialize(bson, [options])](#EJSON.serialize)
|
||||||
|
|
||||||
|
- [.deserialize(ejson, [options])](#EJSON.deserialize)
|
||||||
|
|
||||||
|
<a name="EJSON.parse"></a>
|
||||||
|
|
||||||
|
#### _EJSON_.parse(text, [options])
|
||||||
|
|
||||||
|
| Param | Type | Default | Description |
|
||||||
|
| ----------------- | -------------------- | ----------------- | ---------------------------------------------------------------------------------- |
|
||||||
|
| text | <code>string</code> | | |
|
||||||
|
| [options] | <code>object</code> | | Optional settings |
|
||||||
|
| [options.relaxed] | <code>boolean</code> | <code>true</code> | Attempt to return native JS types where possible, rather than BSON types (if true) |
|
||||||
|
|
||||||
|
Parse an Extended JSON string, constructing the JavaScript value or object described by that
|
||||||
|
string.
|
||||||
|
|
||||||
|
**Example**
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { EJSON } = require('bson');
|
||||||
|
const text = '{ "int32": { "$numberInt": "10" } }';
|
||||||
|
|
||||||
|
// prints { int32: { [String: '10'] _bsontype: 'Int32', value: '10' } }
|
||||||
|
console.log(EJSON.parse(text, { relaxed: false }));
|
||||||
|
|
||||||
|
// prints { int32: 10 }
|
||||||
|
console.log(EJSON.parse(text));
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="EJSON.stringify"></a>
|
||||||
|
|
||||||
|
#### _EJSON_.stringify(value, [replacer], [space], [options])
|
||||||
|
|
||||||
|
| Param | Type | Default | Description |
|
||||||
|
| ----------------- | ------------------------------------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| value | <code>object</code> | | The value to convert to extended JSON |
|
||||||
|
| [replacer] | <code>function</code> \| <code>array</code> | | A function that alters the behavior of the stringification process, or an array of String and Number objects that serve as a whitelist for selecting/filtering the properties of the value object to be included in the JSON string. If this value is null or not provided, all properties of the object are included in the resulting JSON string |
|
||||||
|
| [space] | <code>string</code> \| <code>number</code> | | A String or Number object that's used to insert white space into the output JSON string for readability purposes. |
|
||||||
|
| [options] | <code>object</code> | | Optional settings |
|
||||||
|
| [options.relaxed] | <code>boolean</code> | <code>true</code> | Enabled Extended JSON's `relaxed` mode |
|
||||||
|
| [options.legacy] | <code>boolean</code> | <code>true</code> | Output in Extended JSON v1 |
|
||||||
|
|
||||||
|
Converts a BSON document to an Extended JSON string, optionally replacing values if a replacer
|
||||||
|
function is specified or optionally including only the specified properties if a replacer array
|
||||||
|
is specified.
|
||||||
|
|
||||||
|
**Example**
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { EJSON } = require('bson');
|
||||||
|
const Int32 = require('mongodb').Int32;
|
||||||
|
const doc = { int32: new Int32(10) };
|
||||||
|
|
||||||
|
// prints '{"int32":{"$numberInt":"10"}}'
|
||||||
|
console.log(EJSON.stringify(doc, { relaxed: false }));
|
||||||
|
|
||||||
|
// prints '{"int32":10}'
|
||||||
|
console.log(EJSON.stringify(doc));
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="EJSON.serialize"></a>
|
||||||
|
|
||||||
|
#### _EJSON_.serialize(bson, [options])
|
||||||
|
|
||||||
|
| Param | Type | Description |
|
||||||
|
| --------- | ------------------- | ---------------------------------------------------- |
|
||||||
|
| bson | <code>object</code> | The object to serialize |
|
||||||
|
| [options] | <code>object</code> | Optional settings passed to the `stringify` function |
|
||||||
|
|
||||||
|
Serializes an object to an Extended JSON string, and reparse it as a JavaScript object.
|
||||||
|
|
||||||
|
<a name="EJSON.deserialize"></a>
|
||||||
|
|
||||||
|
#### _EJSON_.deserialize(ejson, [options])
|
||||||
|
|
||||||
|
| Param | Type | Description |
|
||||||
|
| --------- | ------------------- | -------------------------------------------- |
|
||||||
|
| ejson | <code>object</code> | The Extended JSON object to deserialize |
|
||||||
|
| [options] | <code>object</code> | Optional settings passed to the parse method |
|
||||||
|
|
||||||
|
Deserializes an Extended JSON object into a plain JavaScript object with native/BSON types
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
It is our recommendation to use `BSONError.isBSONError()` checks on errors and to avoid relying on parsing `error.message` and `error.name` strings in your code. We guarantee `BSONError.isBSONError()` checks will pass according to semver guidelines, but errors may be sub-classed or their messages may change at any time, even patch releases, as we see fit to increase the helpfulness of the errors.
|
||||||
|
|
||||||
|
Any new errors we add to the driver will directly extend an existing error class and no existing error will be moved to a different parent class outside of a major release.
|
||||||
|
This means `BSONError.isBSONError()` will always be able to accurately capture the errors that our BSON library throws.
|
||||||
|
|
||||||
|
Hypothetical example: A collection in our Db has an issue with UTF-8 data:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
let documentCount = 0;
|
||||||
|
const cursor = collection.find({}, { utf8Validation: true });
|
||||||
|
try {
|
||||||
|
for await (const doc of cursor) documentCount += 1;
|
||||||
|
} catch (error) {
|
||||||
|
if (BSONError.isBSONError(error)) {
|
||||||
|
console.log(`Found the troublemaker UTF-8!: ${documentCount} ${error.message}`);
|
||||||
|
return documentCount;
|
||||||
|
}
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## React Native
|
||||||
|
|
||||||
|
BSON vendors the required polyfills for `TextEncoder`, `TextDecoder`, `atob`, `btoa` imported from React Native and therefore doesn't expect users to polyfill these. One additional polyfill, `crypto.getRandomValues` is recommended and can be installed with the following command:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install --save react-native-get-random-values
|
||||||
|
```
|
||||||
|
|
||||||
|
The following snippet should be placed at the top of the entrypoint (by default this is the root `index.js` file) for React Native projects using the BSON library. These lines must be placed for any code that imports `BSON`.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// Required Polyfills For ReactNative
|
||||||
|
import 'react-native-get-random-values';
|
||||||
|
```
|
||||||
|
|
||||||
|
Finally, import the `BSON` library like so:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
import { BSON, EJSON } from 'bson';
|
||||||
|
```
|
||||||
|
|
||||||
|
This will cause React Native to import the `node_modules/bson/lib/bson.rn.cjs` bundle (see the `"react-native"` setting we have in the `"exports"` section of our [package.json](./package.json).)
|
||||||
|
|
||||||
|
### Technical Note about React Native module import
|
||||||
|
|
||||||
|
The `"exports"` definition in our `package.json` will result in BSON's CommonJS bundle being imported in a React Native project instead of the ES module bundle. Importing the CommonJS bundle is necessary because BSON's ES module bundle of BSON uses top-level await, which is not supported syntax in [React Native's runtime hermes](https://hermesengine.dev/).
|
||||||
|
|
||||||
|
## FAQ
|
||||||
|
|
||||||
|
#### Why does `undefined` get converted to `null`?
|
||||||
|
|
||||||
|
The `undefined` BSON type has been [deprecated for many years](http://bsonspec.org/spec.html), so this library has dropped support for it. Use the `ignoreUndefined` option (for example, from the [driver](http://mongodb.github.io/node-mongodb-native/2.2/api/MongoClient.html#connect) ) to instead remove `undefined` keys.
|
||||||
|
|
||||||
|
#### How do I add custom serialization logic?
|
||||||
|
|
||||||
|
This library looks for `toBSON()` functions on every path, and calls the `toBSON()` function to get the value to serialize.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const BSON = require('bson');
|
||||||
|
|
||||||
|
class CustomSerialize {
|
||||||
|
toBSON() {
|
||||||
|
return 42;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const obj = { answer: new CustomSerialize() };
|
||||||
|
// "{ answer: 42 }"
|
||||||
|
console.log(BSON.deserialize(BSON.serialize(obj)));
|
||||||
|
```
|
||||||
1723
node_modules/bson/bson.d.ts
generated
vendored
Normal file
1723
node_modules/bson/bson.d.ts
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
19
node_modules/bson/etc/prepare.js
generated
vendored
Normal file
19
node_modules/bson/etc/prepare.js
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#! /usr/bin/env node
|
||||||
|
var cp = require('child_process');
|
||||||
|
var fs = require('fs');
|
||||||
|
|
||||||
|
var nodeMajorVersion = +process.version.match(/^v(\d+)\.\d+/)[1];
|
||||||
|
|
||||||
|
if (fs.existsSync('src') && nodeMajorVersion >= 10) {
|
||||||
|
cp.spawnSync('npm', ['run', 'build'], { stdio: 'inherit', shell: true });
|
||||||
|
} else {
|
||||||
|
if (!fs.existsSync('lib')) {
|
||||||
|
console.warn('BSON: No compiled javascript present, the library is not installed correctly.');
|
||||||
|
if (nodeMajorVersion < 10) {
|
||||||
|
console.warn(
|
||||||
|
'This library can only be compiled in nodejs version 10 or later, currently running: ' +
|
||||||
|
nodeMajorVersion
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
4641
node_modules/bson/lib/bson.bundle.js
generated
vendored
Normal file
4641
node_modules/bson/lib/bson.bundle.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
node_modules/bson/lib/bson.bundle.js.map
generated
vendored
Normal file
1
node_modules/bson/lib/bson.bundle.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
4636
node_modules/bson/lib/bson.cjs
generated
vendored
Normal file
4636
node_modules/bson/lib/bson.cjs
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
node_modules/bson/lib/bson.cjs.map
generated
vendored
Normal file
1
node_modules/bson/lib/bson.cjs.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
4599
node_modules/bson/lib/bson.mjs
generated
vendored
Normal file
4599
node_modules/bson/lib/bson.mjs
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
node_modules/bson/lib/bson.mjs.map
generated
vendored
Normal file
1
node_modules/bson/lib/bson.mjs.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
4597
node_modules/bson/lib/bson.node.mjs
generated
vendored
Normal file
4597
node_modules/bson/lib/bson.node.mjs
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
node_modules/bson/lib/bson.node.mjs.map
generated
vendored
Normal file
1
node_modules/bson/lib/bson.node.mjs.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
4649
node_modules/bson/lib/bson.rn.cjs
generated
vendored
Normal file
4649
node_modules/bson/lib/bson.rn.cjs
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
node_modules/bson/lib/bson.rn.cjs.map
generated
vendored
Normal file
1
node_modules/bson/lib/bson.rn.cjs.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
120
node_modules/bson/package.json
generated
vendored
Normal file
120
node_modules/bson/package.json
generated
vendored
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
{
|
||||||
|
"name": "bson",
|
||||||
|
"description": "A bson parser for node.js and the browser",
|
||||||
|
"keywords": [
|
||||||
|
"mongodb",
|
||||||
|
"bson",
|
||||||
|
"parser"
|
||||||
|
],
|
||||||
|
"files": [
|
||||||
|
"lib",
|
||||||
|
"src",
|
||||||
|
"bson.d.ts",
|
||||||
|
"etc/prepare.js",
|
||||||
|
"vendor"
|
||||||
|
],
|
||||||
|
"types": "bson.d.ts",
|
||||||
|
"version": "6.10.4",
|
||||||
|
"author": {
|
||||||
|
"name": "The MongoDB NodeJS Team",
|
||||||
|
"email": "dbx-node@mongodb.com"
|
||||||
|
},
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"contributors": [],
|
||||||
|
"repository": "mongodb/js-bson",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://jira.mongodb.org/projects/NODE/issues/"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@istanbuljs/nyc-config-typescript": "^1.0.2",
|
||||||
|
"@microsoft/api-extractor": "^7.52.5",
|
||||||
|
"@rollup/plugin-node-resolve": "^16.0.1",
|
||||||
|
"@rollup/plugin-typescript": "^12.1.2",
|
||||||
|
"@types/chai": "^4.3.17",
|
||||||
|
"@types/mocha": "^10.0.7",
|
||||||
|
"@types/node": "^22.15.3",
|
||||||
|
"@types/sinon": "^17.0.4",
|
||||||
|
"@types/sinon-chai": "^3.2.12",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^8.31.1",
|
||||||
|
"@typescript-eslint/parser": "^8.31.1",
|
||||||
|
"benchmark": "^2.1.4",
|
||||||
|
"chai": "^4.4.1",
|
||||||
|
"chalk": "^5.3.0",
|
||||||
|
"dbx-js-tools": "github:mongodb-js/dbx-js-tools#main",
|
||||||
|
"eslint": "^9.25.1",
|
||||||
|
"eslint-config-prettier": "^10.1.2",
|
||||||
|
"eslint-plugin-no-bigint-usage": "file:etc/eslint/no-bigint-usage",
|
||||||
|
"eslint-plugin-prettier": "^5.2.6",
|
||||||
|
"eslint-plugin-tsdoc": "^0.4.0",
|
||||||
|
"magic-string": "^0.30.11",
|
||||||
|
"mocha": "^10.7.0",
|
||||||
|
"node-fetch": "^3.3.2",
|
||||||
|
"nyc": "^15.1.0",
|
||||||
|
"prettier": "^3.5.3",
|
||||||
|
"rollup": "^4.40.1",
|
||||||
|
"sinon": "^18.0.0",
|
||||||
|
"sinon-chai": "^3.7.0",
|
||||||
|
"source-map-support": "^0.5.21",
|
||||||
|
"tar": "^7.4.3",
|
||||||
|
"ts-node": "^10.9.2",
|
||||||
|
"tsd": "^0.31.1",
|
||||||
|
"typescript": "^5.8.3",
|
||||||
|
"typescript-cached-transpile": "0.0.6",
|
||||||
|
"uuid": "^11.1.0"
|
||||||
|
},
|
||||||
|
"tsd": {
|
||||||
|
"directory": "test/types",
|
||||||
|
"compilerOptions": {
|
||||||
|
"strict": true,
|
||||||
|
"target": "esnext",
|
||||||
|
"module": "commonjs",
|
||||||
|
"moduleResolution": "node"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"native": false
|
||||||
|
},
|
||||||
|
"main": "./lib/bson.cjs",
|
||||||
|
"module": "./lib/bson.node.mjs",
|
||||||
|
"exports": {
|
||||||
|
"browser": {
|
||||||
|
"types": "./bson.d.ts",
|
||||||
|
"default": "./lib/bson.mjs"
|
||||||
|
},
|
||||||
|
"react-native": "./lib/bson.rn.cjs",
|
||||||
|
"default": {
|
||||||
|
"types": "./bson.d.ts",
|
||||||
|
"import": "./lib/bson.node.mjs",
|
||||||
|
"require": "./lib/bson.cjs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"compass:exports": {
|
||||||
|
"import": "./lib/bson.cjs",
|
||||||
|
"require": "./lib/bson.cjs"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16.20.1"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"pretest": "npm run build",
|
||||||
|
"test": "npm run check:node && npm run check:web && npm run check:web-no-bigint",
|
||||||
|
"check:node": "WEB=false mocha test/node",
|
||||||
|
"check:tsd": "npm run build:dts && tsd",
|
||||||
|
"check:web": "WEB=true mocha test/node",
|
||||||
|
"check:web-no-bigint": "WEB=true NO_BIGINT=true mocha test/node",
|
||||||
|
"check:granular-bench": "npm run build:bench && npm run check:baseline-bench && node ./test/bench/etc/run_granular_benchmarks.js",
|
||||||
|
"check:spec-bench": "npm run build:bench && npm run check:baseline-bench && node ./test/bench/lib/spec/bsonBench.js",
|
||||||
|
"check:custom-bench": "npm run build && npm run check:baseline-bench && node ./test/bench/custom/main.mjs",
|
||||||
|
"check:baseline-bench": "node ./test/bench/etc/cpuBaseline.js",
|
||||||
|
"build:bench": "cd test/bench && npx tsc",
|
||||||
|
"build:ts": "node ./node_modules/typescript/bin/tsc",
|
||||||
|
"build:dts": "npm run build:ts && api-extractor run --typescript-compiler-folder node_modules/typescript --local && node etc/clean_definition_files.cjs",
|
||||||
|
"build:bundle": "rollup -c rollup.config.mjs",
|
||||||
|
"build": "npm run build:dts && npm run build:bundle",
|
||||||
|
"check:lint": "ESLINT_USE_FLAT_CONFIG=false eslint -v && ESLINT_USE_FLAT_CONFIG=false eslint --ext '.js,.ts' --max-warnings=0 src test && npm run build:dts && npm run check:tsd",
|
||||||
|
"format": "ESLINT_USE_FLAT_CONFIG=false eslint --ext '.js,.ts' src test --fix",
|
||||||
|
"check:coverage": "nyc --check-coverage npm run check:node",
|
||||||
|
"prepare": "node etc/prepare.js",
|
||||||
|
"release": "standard-version -i HISTORY.md"
|
||||||
|
}
|
||||||
|
}
|
||||||
748
node_modules/bson/src/binary.ts
generated
vendored
Normal file
748
node_modules/bson/src/binary.ts
generated
vendored
Normal file
@@ -0,0 +1,748 @@
|
|||||||
|
import { type InspectFn, defaultInspect, isAnyArrayBuffer, isUint8Array } from './parser/utils';
|
||||||
|
import type { EJSONOptions } from './extended_json';
|
||||||
|
import { BSONError } from './error';
|
||||||
|
import { BSON_BINARY_SUBTYPE_UUID_NEW } from './constants';
|
||||||
|
import { ByteUtils } from './utils/byte_utils';
|
||||||
|
import { BSONValue } from './bson_value';
|
||||||
|
import { NumberUtils } from './utils/number_utils';
|
||||||
|
|
||||||
|
/** @public */
|
||||||
|
export type BinarySequence = Uint8Array | number[];
|
||||||
|
|
||||||
|
/** @public */
|
||||||
|
export interface BinaryExtendedLegacy {
|
||||||
|
$type: string;
|
||||||
|
$binary: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @public */
|
||||||
|
export interface BinaryExtended {
|
||||||
|
$binary: {
|
||||||
|
subType: string;
|
||||||
|
base64: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class representation of the BSON Binary type.
|
||||||
|
* @public
|
||||||
|
* @category BSONType
|
||||||
|
*/
|
||||||
|
export class Binary extends BSONValue {
|
||||||
|
get _bsontype(): 'Binary' {
|
||||||
|
return 'Binary';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Binary default subtype
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
private static readonly BSON_BINARY_SUBTYPE_DEFAULT = 0;
|
||||||
|
|
||||||
|
/** Initial buffer default size */
|
||||||
|
static readonly BUFFER_SIZE = 256;
|
||||||
|
/** Default BSON type */
|
||||||
|
static readonly SUBTYPE_DEFAULT = 0;
|
||||||
|
/** Function BSON type */
|
||||||
|
static readonly SUBTYPE_FUNCTION = 1;
|
||||||
|
/** Byte Array BSON type */
|
||||||
|
static readonly SUBTYPE_BYTE_ARRAY = 2;
|
||||||
|
/** Deprecated UUID BSON type @deprecated Please use SUBTYPE_UUID */
|
||||||
|
static readonly SUBTYPE_UUID_OLD = 3;
|
||||||
|
/** UUID BSON type */
|
||||||
|
static readonly SUBTYPE_UUID = 4;
|
||||||
|
/** MD5 BSON type */
|
||||||
|
static readonly SUBTYPE_MD5 = 5;
|
||||||
|
/** Encrypted BSON type */
|
||||||
|
static readonly SUBTYPE_ENCRYPTED = 6;
|
||||||
|
/** Column BSON type */
|
||||||
|
static readonly SUBTYPE_COLUMN = 7;
|
||||||
|
/** Sensitive BSON type */
|
||||||
|
static readonly SUBTYPE_SENSITIVE = 8;
|
||||||
|
/** Vector BSON type */
|
||||||
|
static readonly SUBTYPE_VECTOR = 9;
|
||||||
|
/** User BSON type */
|
||||||
|
static readonly SUBTYPE_USER_DEFINED = 128;
|
||||||
|
|
||||||
|
/** datatype of a Binary Vector (subtype: 9) */
|
||||||
|
static readonly VECTOR_TYPE = Object.freeze({
|
||||||
|
Int8: 0x03,
|
||||||
|
Float32: 0x27,
|
||||||
|
PackedBit: 0x10
|
||||||
|
} as const);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The bytes of the Binary value.
|
||||||
|
*
|
||||||
|
* The format of a Binary value in BSON is defined as:
|
||||||
|
* ```txt
|
||||||
|
* binary ::= int32 subtype (byte*)
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* This `buffer` is the "(byte*)" segment.
|
||||||
|
*
|
||||||
|
* Unless the value is subtype 2, then deserialize will read the first 4 bytes as an int32 and set this to the remaining bytes.
|
||||||
|
*
|
||||||
|
* ```txt
|
||||||
|
* binary ::= int32 unsigned_byte(2) int32 (byte*)
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @see https://bsonspec.org/spec.html
|
||||||
|
*/
|
||||||
|
public buffer: Uint8Array;
|
||||||
|
/**
|
||||||
|
* The binary subtype.
|
||||||
|
*
|
||||||
|
* Current defined values are:
|
||||||
|
*
|
||||||
|
* - `unsigned_byte(0)` Generic binary subtype
|
||||||
|
* - `unsigned_byte(1)` Function
|
||||||
|
* - `unsigned_byte(2)` Binary (Deprecated)
|
||||||
|
* - `unsigned_byte(3)` UUID (Deprecated)
|
||||||
|
* - `unsigned_byte(4)` UUID
|
||||||
|
* - `unsigned_byte(5)` MD5
|
||||||
|
* - `unsigned_byte(6)` Encrypted BSON value
|
||||||
|
* - `unsigned_byte(7)` Compressed BSON column
|
||||||
|
* - `unsigned_byte(8)` Sensitive
|
||||||
|
* - `unsigned_byte(9)` Vector
|
||||||
|
* - `unsigned_byte(128)` - `unsigned_byte(255)` User defined
|
||||||
|
*/
|
||||||
|
public sub_type: number;
|
||||||
|
/**
|
||||||
|
* The Binary's `buffer` can be larger than the Binary's content.
|
||||||
|
* This property is used to determine where the content ends in the buffer.
|
||||||
|
*/
|
||||||
|
public position: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new Binary instance.
|
||||||
|
* @param buffer - a buffer object containing the binary data.
|
||||||
|
* @param subType - the option binary type.
|
||||||
|
*/
|
||||||
|
constructor(buffer?: BinarySequence, subType?: number) {
|
||||||
|
super();
|
||||||
|
if (
|
||||||
|
!(buffer == null) &&
|
||||||
|
typeof buffer === 'string' &&
|
||||||
|
!ArrayBuffer.isView(buffer) &&
|
||||||
|
!isAnyArrayBuffer(buffer) &&
|
||||||
|
!Array.isArray(buffer)
|
||||||
|
) {
|
||||||
|
throw new BSONError('Binary can only be constructed from Uint8Array or number[]');
|
||||||
|
}
|
||||||
|
|
||||||
|
this.sub_type = subType ?? Binary.BSON_BINARY_SUBTYPE_DEFAULT;
|
||||||
|
|
||||||
|
if (buffer == null) {
|
||||||
|
// create an empty binary buffer
|
||||||
|
this.buffer = ByteUtils.allocate(Binary.BUFFER_SIZE);
|
||||||
|
this.position = 0;
|
||||||
|
} else {
|
||||||
|
this.buffer = Array.isArray(buffer)
|
||||||
|
? ByteUtils.fromNumberArray(buffer)
|
||||||
|
: ByteUtils.toLocalBufferType(buffer);
|
||||||
|
this.position = this.buffer.byteLength;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates this binary with byte_value.
|
||||||
|
*
|
||||||
|
* @param byteValue - a single byte we wish to write.
|
||||||
|
*/
|
||||||
|
put(byteValue: string | number | Uint8Array | number[]): void {
|
||||||
|
// If it's a string and a has more than one character throw an error
|
||||||
|
if (typeof byteValue === 'string' && byteValue.length !== 1) {
|
||||||
|
throw new BSONError('only accepts single character String');
|
||||||
|
} else if (typeof byteValue !== 'number' && byteValue.length !== 1)
|
||||||
|
throw new BSONError('only accepts single character Uint8Array or Array');
|
||||||
|
|
||||||
|
// Decode the byte value once
|
||||||
|
let decodedByte: number;
|
||||||
|
if (typeof byteValue === 'string') {
|
||||||
|
decodedByte = byteValue.charCodeAt(0);
|
||||||
|
} else if (typeof byteValue === 'number') {
|
||||||
|
decodedByte = byteValue;
|
||||||
|
} else {
|
||||||
|
decodedByte = byteValue[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (decodedByte < 0 || decodedByte > 255) {
|
||||||
|
throw new BSONError('only accepts number in a valid unsigned byte range 0-255');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.buffer.byteLength > this.position) {
|
||||||
|
this.buffer[this.position++] = decodedByte;
|
||||||
|
} else {
|
||||||
|
const newSpace = ByteUtils.allocate(Binary.BUFFER_SIZE + this.buffer.length);
|
||||||
|
newSpace.set(this.buffer, 0);
|
||||||
|
this.buffer = newSpace;
|
||||||
|
this.buffer[this.position++] = decodedByte;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes a buffer to the binary.
|
||||||
|
*
|
||||||
|
* @param sequence - a string or buffer to be written to the Binary BSON object.
|
||||||
|
* @param offset - specify the binary of where to write the content.
|
||||||
|
*/
|
||||||
|
write(sequence: BinarySequence, offset: number): void {
|
||||||
|
offset = typeof offset === 'number' ? offset : this.position;
|
||||||
|
|
||||||
|
// If the buffer is to small let's extend the buffer
|
||||||
|
if (this.buffer.byteLength < offset + sequence.length) {
|
||||||
|
const newSpace = ByteUtils.allocate(this.buffer.byteLength + sequence.length);
|
||||||
|
newSpace.set(this.buffer, 0);
|
||||||
|
|
||||||
|
// Assign the new buffer
|
||||||
|
this.buffer = newSpace;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ArrayBuffer.isView(sequence)) {
|
||||||
|
this.buffer.set(ByteUtils.toLocalBufferType(sequence), offset);
|
||||||
|
this.position =
|
||||||
|
offset + sequence.byteLength > this.position ? offset + sequence.length : this.position;
|
||||||
|
} else if (typeof sequence === 'string') {
|
||||||
|
throw new BSONError('input cannot be string');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a view of **length** bytes starting at **position**.
|
||||||
|
*
|
||||||
|
* @param position - read from the given position in the Binary.
|
||||||
|
* @param length - the number of bytes to read.
|
||||||
|
*/
|
||||||
|
read(position: number, length: number): Uint8Array {
|
||||||
|
length = length && length > 0 ? length : this.position;
|
||||||
|
const end = position + length;
|
||||||
|
return this.buffer.subarray(position, end > this.position ? this.position : end);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** returns a view of the binary value as a Uint8Array */
|
||||||
|
value(): Uint8Array {
|
||||||
|
// Optimize to serialize for the situation where the data == size of buffer
|
||||||
|
return this.buffer.length === this.position
|
||||||
|
? this.buffer
|
||||||
|
: this.buffer.subarray(0, this.position);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** the length of the binary sequence */
|
||||||
|
length(): number {
|
||||||
|
return this.position;
|
||||||
|
}
|
||||||
|
|
||||||
|
toJSON(): string {
|
||||||
|
return ByteUtils.toBase64(this.buffer.subarray(0, this.position));
|
||||||
|
}
|
||||||
|
|
||||||
|
toString(encoding?: 'hex' | 'base64' | 'utf8' | 'utf-8'): string {
|
||||||
|
if (encoding === 'hex') return ByteUtils.toHex(this.buffer.subarray(0, this.position));
|
||||||
|
if (encoding === 'base64') return ByteUtils.toBase64(this.buffer.subarray(0, this.position));
|
||||||
|
if (encoding === 'utf8' || encoding === 'utf-8')
|
||||||
|
return ByteUtils.toUTF8(this.buffer, 0, this.position, false);
|
||||||
|
return ByteUtils.toUTF8(this.buffer, 0, this.position, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @internal */
|
||||||
|
toExtendedJSON(options?: EJSONOptions): BinaryExtendedLegacy | BinaryExtended {
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
if (this.sub_type === Binary.SUBTYPE_VECTOR) {
|
||||||
|
validateBinaryVector(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
const base64String = ByteUtils.toBase64(this.buffer);
|
||||||
|
|
||||||
|
const subType = Number(this.sub_type).toString(16);
|
||||||
|
if (options.legacy) {
|
||||||
|
return {
|
||||||
|
$binary: base64String,
|
||||||
|
$type: subType.length === 1 ? '0' + subType : subType
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
$binary: {
|
||||||
|
base64: base64String,
|
||||||
|
subType: subType.length === 1 ? '0' + subType : subType
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
toUUID(): UUID {
|
||||||
|
if (this.sub_type === Binary.SUBTYPE_UUID) {
|
||||||
|
return new UUID(this.buffer.subarray(0, this.position));
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new BSONError(
|
||||||
|
`Binary sub_type "${this.sub_type}" is not supported for converting to UUID. Only "${Binary.SUBTYPE_UUID}" is currently supported.`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Creates an Binary instance from a hex digit string */
|
||||||
|
static createFromHexString(hex: string, subType?: number): Binary {
|
||||||
|
return new Binary(ByteUtils.fromHex(hex), subType);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Creates an Binary instance from a base64 string */
|
||||||
|
static createFromBase64(base64: string, subType?: number): Binary {
|
||||||
|
return new Binary(ByteUtils.fromBase64(base64), subType);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @internal */
|
||||||
|
static fromExtendedJSON(
|
||||||
|
doc: BinaryExtendedLegacy | BinaryExtended | UUIDExtended,
|
||||||
|
options?: EJSONOptions
|
||||||
|
): Binary {
|
||||||
|
options = options || {};
|
||||||
|
let data: Uint8Array | undefined;
|
||||||
|
let type;
|
||||||
|
if ('$binary' in doc) {
|
||||||
|
if (options.legacy && typeof doc.$binary === 'string' && '$type' in doc) {
|
||||||
|
type = doc.$type ? parseInt(doc.$type, 16) : 0;
|
||||||
|
data = ByteUtils.fromBase64(doc.$binary);
|
||||||
|
} else {
|
||||||
|
if (typeof doc.$binary !== 'string') {
|
||||||
|
type = doc.$binary.subType ? parseInt(doc.$binary.subType, 16) : 0;
|
||||||
|
data = ByteUtils.fromBase64(doc.$binary.base64);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if ('$uuid' in doc) {
|
||||||
|
type = 4;
|
||||||
|
data = UUID.bytesFromString(doc.$uuid);
|
||||||
|
}
|
||||||
|
if (!data) {
|
||||||
|
throw new BSONError(`Unexpected Binary Extended JSON format ${JSON.stringify(doc)}`);
|
||||||
|
}
|
||||||
|
return type === BSON_BINARY_SUBTYPE_UUID_NEW ? new UUID(data) : new Binary(data, type);
|
||||||
|
}
|
||||||
|
|
||||||
|
inspect(depth?: number, options?: unknown, inspect?: InspectFn): string {
|
||||||
|
inspect ??= defaultInspect;
|
||||||
|
const base64 = ByteUtils.toBase64(this.buffer.subarray(0, this.position));
|
||||||
|
const base64Arg = inspect(base64, options);
|
||||||
|
const subTypeArg = inspect(this.sub_type, options);
|
||||||
|
return `Binary.createFromBase64(${base64Arg}, ${subTypeArg})`;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If this Binary represents a Int8 Vector (`binary.buffer[0] === Binary.VECTOR_TYPE.Int8`),
|
||||||
|
* returns a copy of the bytes in a new Int8Array.
|
||||||
|
*
|
||||||
|
* If the Binary is not a Vector, or the datatype is not Int8, an error is thrown.
|
||||||
|
*/
|
||||||
|
public toInt8Array(): Int8Array {
|
||||||
|
if (this.sub_type !== Binary.SUBTYPE_VECTOR) {
|
||||||
|
throw new BSONError('Binary sub_type is not Vector');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.buffer[0] !== Binary.VECTOR_TYPE.Int8) {
|
||||||
|
throw new BSONError('Binary datatype field is not Int8');
|
||||||
|
}
|
||||||
|
|
||||||
|
validateBinaryVector(this);
|
||||||
|
|
||||||
|
return new Int8Array(
|
||||||
|
this.buffer.buffer.slice(this.buffer.byteOffset + 2, this.buffer.byteOffset + this.position)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If this Binary represents a Float32 Vector (`binary.buffer[0] === Binary.VECTOR_TYPE.Float32`),
|
||||||
|
* returns a copy of the bytes in a new Float32Array.
|
||||||
|
*
|
||||||
|
* If the Binary is not a Vector, or the datatype is not Float32, an error is thrown.
|
||||||
|
*/
|
||||||
|
public toFloat32Array(): Float32Array {
|
||||||
|
if (this.sub_type !== Binary.SUBTYPE_VECTOR) {
|
||||||
|
throw new BSONError('Binary sub_type is not Vector');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.buffer[0] !== Binary.VECTOR_TYPE.Float32) {
|
||||||
|
throw new BSONError('Binary datatype field is not Float32');
|
||||||
|
}
|
||||||
|
|
||||||
|
validateBinaryVector(this);
|
||||||
|
|
||||||
|
const floatBytes = new Uint8Array(
|
||||||
|
this.buffer.buffer.slice(this.buffer.byteOffset + 2, this.buffer.byteOffset + this.position)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (NumberUtils.isBigEndian) ByteUtils.swap32(floatBytes);
|
||||||
|
|
||||||
|
return new Float32Array(floatBytes.buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If this Binary represents packed bit Vector (`binary.buffer[0] === Binary.VECTOR_TYPE.PackedBit`),
|
||||||
|
* returns a copy of the bytes that are packed bits.
|
||||||
|
*
|
||||||
|
* Use `toBits` to get the unpacked bits.
|
||||||
|
*
|
||||||
|
* If the Binary is not a Vector, or the datatype is not PackedBit, an error is thrown.
|
||||||
|
*/
|
||||||
|
public toPackedBits(): Uint8Array {
|
||||||
|
if (this.sub_type !== Binary.SUBTYPE_VECTOR) {
|
||||||
|
throw new BSONError('Binary sub_type is not Vector');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.buffer[0] !== Binary.VECTOR_TYPE.PackedBit) {
|
||||||
|
throw new BSONError('Binary datatype field is not packed bit');
|
||||||
|
}
|
||||||
|
|
||||||
|
validateBinaryVector(this);
|
||||||
|
|
||||||
|
return new Uint8Array(
|
||||||
|
this.buffer.buffer.slice(this.buffer.byteOffset + 2, this.buffer.byteOffset + this.position)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If this Binary represents a Packed bit Vector (`binary.buffer[0] === Binary.VECTOR_TYPE.PackedBit`),
|
||||||
|
* returns a copy of the bit unpacked into a new Int8Array.
|
||||||
|
*
|
||||||
|
* Use `toPackedBits` to get the bits still in packed form.
|
||||||
|
*
|
||||||
|
* If the Binary is not a Vector, or the datatype is not PackedBit, an error is thrown.
|
||||||
|
*/
|
||||||
|
public toBits(): Int8Array {
|
||||||
|
if (this.sub_type !== Binary.SUBTYPE_VECTOR) {
|
||||||
|
throw new BSONError('Binary sub_type is not Vector');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.buffer[0] !== Binary.VECTOR_TYPE.PackedBit) {
|
||||||
|
throw new BSONError('Binary datatype field is not packed bit');
|
||||||
|
}
|
||||||
|
|
||||||
|
validateBinaryVector(this);
|
||||||
|
|
||||||
|
const byteCount = this.length() - 2;
|
||||||
|
const bitCount = byteCount * 8 - this.buffer[1];
|
||||||
|
const bits = new Int8Array(bitCount);
|
||||||
|
|
||||||
|
for (let bitOffset = 0; bitOffset < bits.length; bitOffset++) {
|
||||||
|
const byteOffset = (bitOffset / 8) | 0;
|
||||||
|
const byte = this.buffer[byteOffset + 2];
|
||||||
|
const shift = 7 - (bitOffset % 8);
|
||||||
|
const bit = (byte >> shift) & 1;
|
||||||
|
bits[bitOffset] = bit;
|
||||||
|
}
|
||||||
|
|
||||||
|
return bits;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a Binary representing an Int8 Vector.
|
||||||
|
* @param array - The array to store as a view on the Binary class
|
||||||
|
*/
|
||||||
|
public static fromInt8Array(array: Int8Array): Binary {
|
||||||
|
const buffer = ByteUtils.allocate(array.byteLength + 2);
|
||||||
|
buffer[0] = Binary.VECTOR_TYPE.Int8;
|
||||||
|
buffer[1] = 0;
|
||||||
|
const intBytes = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);
|
||||||
|
buffer.set(intBytes, 2);
|
||||||
|
const bin = new this(buffer, this.SUBTYPE_VECTOR);
|
||||||
|
validateBinaryVector(bin);
|
||||||
|
return bin;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Constructs a Binary representing an Float32 Vector. */
|
||||||
|
public static fromFloat32Array(array: Float32Array): Binary {
|
||||||
|
const binaryBytes = ByteUtils.allocate(array.byteLength + 2);
|
||||||
|
binaryBytes[0] = Binary.VECTOR_TYPE.Float32;
|
||||||
|
binaryBytes[1] = 0;
|
||||||
|
|
||||||
|
const floatBytes = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);
|
||||||
|
binaryBytes.set(floatBytes, 2);
|
||||||
|
|
||||||
|
if (NumberUtils.isBigEndian) ByteUtils.swap32(new Uint8Array(binaryBytes.buffer, 2));
|
||||||
|
|
||||||
|
const bin = new this(binaryBytes, this.SUBTYPE_VECTOR);
|
||||||
|
validateBinaryVector(bin);
|
||||||
|
return bin;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a Binary representing a packed bit Vector.
|
||||||
|
*
|
||||||
|
* Use `fromBits` to pack an array of 1s and 0s.
|
||||||
|
*/
|
||||||
|
public static fromPackedBits(array: Uint8Array, padding = 0): Binary {
|
||||||
|
const buffer = ByteUtils.allocate(array.byteLength + 2);
|
||||||
|
buffer[0] = Binary.VECTOR_TYPE.PackedBit;
|
||||||
|
buffer[1] = padding;
|
||||||
|
buffer.set(array, 2);
|
||||||
|
const bin = new this(buffer, this.SUBTYPE_VECTOR);
|
||||||
|
validateBinaryVector(bin);
|
||||||
|
return bin;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a Binary representing an Packed Bit Vector.
|
||||||
|
* @param array - The array of 1s and 0s to pack into the Binary instance
|
||||||
|
*/
|
||||||
|
public static fromBits(bits: ArrayLike<number>): Binary {
|
||||||
|
const byteLength = (bits.length + 7) >>> 3; // ceil(bits.length / 8)
|
||||||
|
const bytes = new Uint8Array(byteLength + 2);
|
||||||
|
bytes[0] = Binary.VECTOR_TYPE.PackedBit;
|
||||||
|
|
||||||
|
const remainder = bits.length % 8;
|
||||||
|
bytes[1] = remainder === 0 ? 0 : 8 - remainder;
|
||||||
|
|
||||||
|
for (let bitOffset = 0; bitOffset < bits.length; bitOffset++) {
|
||||||
|
const byteOffset = bitOffset >>> 3; // floor(bitOffset / 8)
|
||||||
|
const bit = bits[bitOffset];
|
||||||
|
|
||||||
|
if (bit !== 0 && bit !== 1) {
|
||||||
|
throw new BSONError(
|
||||||
|
`Invalid bit value at ${bitOffset}: must be 0 or 1, found ${bits[bitOffset]}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bit === 0) continue;
|
||||||
|
|
||||||
|
const shift = 7 - (bitOffset % 8);
|
||||||
|
bytes[byteOffset + 2] |= bit << shift;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new this(bytes, Binary.SUBTYPE_VECTOR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function validateBinaryVector(vector: Binary): void {
|
||||||
|
if (vector.sub_type !== Binary.SUBTYPE_VECTOR) return;
|
||||||
|
|
||||||
|
const size = vector.position;
|
||||||
|
|
||||||
|
// NOTE: Validation is only applied to **KNOWN** vector types
|
||||||
|
// If a new datatype is introduced, a future version of the library will need to add validation
|
||||||
|
const datatype = vector.buffer[0];
|
||||||
|
|
||||||
|
// NOTE: We do not enable noUncheckedIndexedAccess so TS believes this is always number
|
||||||
|
// a Binary vector may be empty, in which case the padding is undefined
|
||||||
|
// this possible value is tolerable for our validation checks
|
||||||
|
const padding: number | undefined = vector.buffer[1];
|
||||||
|
|
||||||
|
if (
|
||||||
|
(datatype === Binary.VECTOR_TYPE.Float32 || datatype === Binary.VECTOR_TYPE.Int8) &&
|
||||||
|
padding !== 0
|
||||||
|
) {
|
||||||
|
throw new BSONError('Invalid Vector: padding must be zero for int8 and float32 vectors');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (datatype === Binary.VECTOR_TYPE.Float32) {
|
||||||
|
if (size !== 0 && size - 2 !== 0 && (size - 2) % 4 !== 0) {
|
||||||
|
throw new BSONError('Invalid Vector: Float32 vector must contain a multiple of 4 bytes');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (datatype === Binary.VECTOR_TYPE.PackedBit && padding !== 0 && size === 2) {
|
||||||
|
throw new BSONError(
|
||||||
|
'Invalid Vector: padding must be zero for packed bit vectors that are empty'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (datatype === Binary.VECTOR_TYPE.PackedBit && padding > 7) {
|
||||||
|
throw new BSONError(
|
||||||
|
`Invalid Vector: padding must be a value between 0 and 7. found: ${padding}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @public */
|
||||||
|
export type UUIDExtended = {
|
||||||
|
$uuid: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
const UUID_BYTE_LENGTH = 16;
|
||||||
|
const UUID_WITHOUT_DASHES = /^[0-9A-F]{32}$/i;
|
||||||
|
const UUID_WITH_DASHES = /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class representation of the BSON UUID type.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
export class UUID extends Binary {
|
||||||
|
/**
|
||||||
|
* Create a UUID type
|
||||||
|
*
|
||||||
|
* When the argument to the constructor is omitted a random v4 UUID will be generated.
|
||||||
|
*
|
||||||
|
* @param input - Can be a 32 or 36 character hex string (dashes excluded/included) or a 16 byte binary Buffer.
|
||||||
|
*/
|
||||||
|
constructor(input?: string | Uint8Array | UUID) {
|
||||||
|
let bytes: Uint8Array;
|
||||||
|
if (input == null) {
|
||||||
|
bytes = UUID.generate();
|
||||||
|
} else if (input instanceof UUID) {
|
||||||
|
bytes = ByteUtils.toLocalBufferType(new Uint8Array(input.buffer));
|
||||||
|
} else if (ArrayBuffer.isView(input) && input.byteLength === UUID_BYTE_LENGTH) {
|
||||||
|
bytes = ByteUtils.toLocalBufferType(input);
|
||||||
|
} else if (typeof input === 'string') {
|
||||||
|
bytes = UUID.bytesFromString(input);
|
||||||
|
} else {
|
||||||
|
throw new BSONError(
|
||||||
|
'Argument passed in UUID constructor must be a UUID, a 16 byte Buffer or a 32/36 character hex string (dashes excluded/included, format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
super(bytes, BSON_BINARY_SUBTYPE_UUID_NEW);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The UUID bytes
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
get id(): Uint8Array {
|
||||||
|
return this.buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
set id(value: Uint8Array) {
|
||||||
|
this.buffer = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the UUID id as a 32 or 36 character hex string representation, excluding/including dashes (defaults to 36 character dash separated)
|
||||||
|
* @param includeDashes - should the string exclude dash-separators.
|
||||||
|
*/
|
||||||
|
toHexString(includeDashes = true): string {
|
||||||
|
if (includeDashes) {
|
||||||
|
return [
|
||||||
|
ByteUtils.toHex(this.buffer.subarray(0, 4)),
|
||||||
|
ByteUtils.toHex(this.buffer.subarray(4, 6)),
|
||||||
|
ByteUtils.toHex(this.buffer.subarray(6, 8)),
|
||||||
|
ByteUtils.toHex(this.buffer.subarray(8, 10)),
|
||||||
|
ByteUtils.toHex(this.buffer.subarray(10, 16))
|
||||||
|
].join('-');
|
||||||
|
}
|
||||||
|
return ByteUtils.toHex(this.buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts the id into a 36 character (dashes included) hex string, unless a encoding is specified.
|
||||||
|
*/
|
||||||
|
toString(encoding?: 'hex' | 'base64'): string {
|
||||||
|
if (encoding === 'hex') return ByteUtils.toHex(this.id);
|
||||||
|
if (encoding === 'base64') return ByteUtils.toBase64(this.id);
|
||||||
|
return this.toHexString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts the id into its JSON string representation.
|
||||||
|
* A 36 character (dashes included) hex string in the format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
||||||
|
*/
|
||||||
|
toJSON(): string {
|
||||||
|
return this.toHexString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compares the equality of this UUID with `otherID`.
|
||||||
|
*
|
||||||
|
* @param otherId - UUID instance to compare against.
|
||||||
|
*/
|
||||||
|
equals(otherId: string | Uint8Array | UUID): boolean {
|
||||||
|
if (!otherId) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (otherId instanceof UUID) {
|
||||||
|
return ByteUtils.equals(otherId.id, this.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return ByteUtils.equals(new UUID(otherId).id, this.id);
|
||||||
|
} catch {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a Binary instance from the current UUID.
|
||||||
|
*/
|
||||||
|
toBinary(): Binary {
|
||||||
|
return new Binary(this.id, Binary.SUBTYPE_UUID);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates a populated buffer containing a v4 uuid
|
||||||
|
*/
|
||||||
|
static generate(): Uint8Array {
|
||||||
|
const bytes = ByteUtils.randomBytes(UUID_BYTE_LENGTH);
|
||||||
|
|
||||||
|
// Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
|
||||||
|
// Kindly borrowed from https://github.com/uuidjs/uuid/blob/master/src/v4.js
|
||||||
|
bytes[6] = (bytes[6] & 0x0f) | 0x40;
|
||||||
|
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
||||||
|
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if a value is a valid bson UUID
|
||||||
|
* @param input - UUID, string or Buffer to validate.
|
||||||
|
*/
|
||||||
|
static isValid(input: string | Uint8Array | UUID | Binary): boolean {
|
||||||
|
if (!input) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof input === 'string') {
|
||||||
|
return UUID.isValidUUIDString(input);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isUint8Array(input)) {
|
||||||
|
return input.byteLength === UUID_BYTE_LENGTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
input._bsontype === 'Binary' &&
|
||||||
|
input.sub_type === this.SUBTYPE_UUID &&
|
||||||
|
input.buffer.byteLength === 16
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an UUID from a hex string representation of an UUID.
|
||||||
|
* @param hexString - 32 or 36 character hex string (dashes excluded/included).
|
||||||
|
*/
|
||||||
|
static override createFromHexString(hexString: string): UUID {
|
||||||
|
const buffer = UUID.bytesFromString(hexString);
|
||||||
|
return new UUID(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Creates an UUID from a base64 string representation of an UUID. */
|
||||||
|
static override createFromBase64(base64: string): UUID {
|
||||||
|
return new UUID(ByteUtils.fromBase64(base64));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @internal */
|
||||||
|
static bytesFromString(representation: string) {
|
||||||
|
if (!UUID.isValidUUIDString(representation)) {
|
||||||
|
throw new BSONError(
|
||||||
|
'UUID string representation must be 32 hex digits or canonical hyphenated representation'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return ByteUtils.fromHex(representation.replace(/-/g, ''));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*
|
||||||
|
* Validates a string to be a hex digit sequence with or without dashes.
|
||||||
|
* The canonical hyphenated representation of a uuid is hex in 8-4-4-4-12 groups.
|
||||||
|
*/
|
||||||
|
static isValidUUIDString(representation: string) {
|
||||||
|
return UUID_WITHOUT_DASHES.test(representation) || UUID_WITH_DASHES.test(representation);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts to a string representation of this Id.
|
||||||
|
*
|
||||||
|
* @returns return the 36 character hex string representation.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
inspect(depth?: number, options?: unknown, inspect?: InspectFn): string {
|
||||||
|
inspect ??= defaultInspect;
|
||||||
|
return `new UUID(${inspect(this.toHexString(), options)})`;
|
||||||
|
}
|
||||||
|
}
|
||||||
248
node_modules/bson/src/bson.ts
generated
vendored
Normal file
248
node_modules/bson/src/bson.ts
generated
vendored
Normal file
@@ -0,0 +1,248 @@
|
|||||||
|
import { Binary, UUID } from './binary';
|
||||||
|
import { Code } from './code';
|
||||||
|
import { DBRef } from './db_ref';
|
||||||
|
import { Decimal128 } from './decimal128';
|
||||||
|
import { Double } from './double';
|
||||||
|
import { Int32 } from './int_32';
|
||||||
|
import { Long } from './long';
|
||||||
|
import { MaxKey } from './max_key';
|
||||||
|
import { MinKey } from './min_key';
|
||||||
|
import { ObjectId } from './objectid';
|
||||||
|
import { internalCalculateObjectSize } from './parser/calculate_size';
|
||||||
|
// Parts of the parser
|
||||||
|
import { internalDeserialize, type DeserializeOptions } from './parser/deserializer';
|
||||||
|
import { serializeInto, type SerializeOptions } from './parser/serializer';
|
||||||
|
import { BSONRegExp } from './regexp';
|
||||||
|
import { BSONSymbol } from './symbol';
|
||||||
|
import { Timestamp } from './timestamp';
|
||||||
|
import { ByteUtils } from './utils/byte_utils';
|
||||||
|
import { NumberUtils } from './utils/number_utils';
|
||||||
|
export type { UUIDExtended, BinaryExtended, BinaryExtendedLegacy, BinarySequence } from './binary';
|
||||||
|
export type { CodeExtended } from './code';
|
||||||
|
export type { DBRefLike } from './db_ref';
|
||||||
|
export type { Decimal128Extended } from './decimal128';
|
||||||
|
export type { DoubleExtended } from './double';
|
||||||
|
export type { EJSONOptions } from './extended_json';
|
||||||
|
export type { Int32Extended } from './int_32';
|
||||||
|
export type { LongExtended } from './long';
|
||||||
|
export type { MaxKeyExtended } from './max_key';
|
||||||
|
export type { MinKeyExtended } from './min_key';
|
||||||
|
export type { ObjectIdExtended, ObjectIdLike } from './objectid';
|
||||||
|
export type { BSONRegExpExtended, BSONRegExpExtendedLegacy } from './regexp';
|
||||||
|
export type { BSONSymbolExtended } from './symbol';
|
||||||
|
export type { LongWithoutOverrides, TimestampExtended, TimestampOverrides } from './timestamp';
|
||||||
|
export type { LongWithoutOverridesClass } from './timestamp';
|
||||||
|
export type { SerializeOptions, DeserializeOptions };
|
||||||
|
|
||||||
|
export {
|
||||||
|
Code,
|
||||||
|
BSONSymbol,
|
||||||
|
DBRef,
|
||||||
|
Binary,
|
||||||
|
ObjectId,
|
||||||
|
UUID,
|
||||||
|
Long,
|
||||||
|
Timestamp,
|
||||||
|
Double,
|
||||||
|
Int32,
|
||||||
|
MinKey,
|
||||||
|
MaxKey,
|
||||||
|
BSONRegExp,
|
||||||
|
Decimal128
|
||||||
|
};
|
||||||
|
export { BSONValue } from './bson_value';
|
||||||
|
export { BSONError, BSONVersionError, BSONRuntimeError, BSONOffsetError } from './error';
|
||||||
|
export { BSONType } from './constants';
|
||||||
|
export { EJSON } from './extended_json';
|
||||||
|
export { onDemand, type OnDemand } from './parser/on_demand/index';
|
||||||
|
|
||||||
|
/** @public */
|
||||||
|
export interface Document {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
[key: string]: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @internal */
|
||||||
|
// Default Max Size
|
||||||
|
const MAXSIZE = 1024 * 1024 * 17;
|
||||||
|
|
||||||
|
// Current Internal Temporary Serialization Buffer
|
||||||
|
let buffer = ByteUtils.allocate(MAXSIZE);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the size of the internal serialization buffer.
|
||||||
|
*
|
||||||
|
* @param size - The desired size for the internal serialization buffer in bytes
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
export function setInternalBufferSize(size: number): void {
|
||||||
|
// Resize the internal serialization buffer if needed
|
||||||
|
if (buffer.length < size) {
|
||||||
|
buffer = ByteUtils.allocate(size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serialize a Javascript object.
|
||||||
|
*
|
||||||
|
* @param object - the Javascript object to serialize.
|
||||||
|
* @returns Buffer object containing the serialized object.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
export function serialize(object: Document, options: SerializeOptions = {}): Uint8Array {
|
||||||
|
// Unpack the options
|
||||||
|
const checkKeys = typeof options.checkKeys === 'boolean' ? options.checkKeys : false;
|
||||||
|
const serializeFunctions =
|
||||||
|
typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false;
|
||||||
|
const ignoreUndefined =
|
||||||
|
typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true;
|
||||||
|
const minInternalBufferSize =
|
||||||
|
typeof options.minInternalBufferSize === 'number' ? options.minInternalBufferSize : MAXSIZE;
|
||||||
|
|
||||||
|
// Resize the internal serialization buffer if needed
|
||||||
|
if (buffer.length < minInternalBufferSize) {
|
||||||
|
buffer = ByteUtils.allocate(minInternalBufferSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attempt to serialize
|
||||||
|
const serializationIndex = serializeInto(
|
||||||
|
buffer,
|
||||||
|
object,
|
||||||
|
checkKeys,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
serializeFunctions,
|
||||||
|
ignoreUndefined,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
// Create the final buffer
|
||||||
|
const finishedBuffer = ByteUtils.allocateUnsafe(serializationIndex);
|
||||||
|
|
||||||
|
// Copy into the finished buffer
|
||||||
|
finishedBuffer.set(buffer.subarray(0, serializationIndex), 0);
|
||||||
|
|
||||||
|
// Return the buffer
|
||||||
|
return finishedBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serialize a Javascript object using a predefined Buffer and index into the buffer,
|
||||||
|
* useful when pre-allocating the space for serialization.
|
||||||
|
*
|
||||||
|
* @param object - the Javascript object to serialize.
|
||||||
|
* @param finalBuffer - the Buffer you pre-allocated to store the serialized BSON object.
|
||||||
|
* @returns the index pointing to the last written byte in the buffer.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
export function serializeWithBufferAndIndex(
|
||||||
|
object: Document,
|
||||||
|
finalBuffer: Uint8Array,
|
||||||
|
options: SerializeOptions = {}
|
||||||
|
): number {
|
||||||
|
// Unpack the options
|
||||||
|
const checkKeys = typeof options.checkKeys === 'boolean' ? options.checkKeys : false;
|
||||||
|
const serializeFunctions =
|
||||||
|
typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false;
|
||||||
|
const ignoreUndefined =
|
||||||
|
typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true;
|
||||||
|
const startIndex = typeof options.index === 'number' ? options.index : 0;
|
||||||
|
|
||||||
|
// Attempt to serialize
|
||||||
|
const serializationIndex = serializeInto(
|
||||||
|
buffer,
|
||||||
|
object,
|
||||||
|
checkKeys,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
serializeFunctions,
|
||||||
|
ignoreUndefined,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
finalBuffer.set(buffer.subarray(0, serializationIndex), startIndex);
|
||||||
|
|
||||||
|
// Return the index
|
||||||
|
return startIndex + serializationIndex - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserialize data as BSON.
|
||||||
|
*
|
||||||
|
* @param buffer - the buffer containing the serialized set of BSON documents.
|
||||||
|
* @returns returns the deserialized Javascript Object.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
export function deserialize(buffer: Uint8Array, options: DeserializeOptions = {}): Document {
|
||||||
|
return internalDeserialize(ByteUtils.toLocalBufferType(buffer), options);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @public */
|
||||||
|
export type CalculateObjectSizeOptions = Pick<
|
||||||
|
SerializeOptions,
|
||||||
|
'serializeFunctions' | 'ignoreUndefined'
|
||||||
|
>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculate the bson size for a passed in Javascript object.
|
||||||
|
*
|
||||||
|
* @param object - the Javascript object to calculate the BSON byte size for
|
||||||
|
* @returns size of BSON object in bytes
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
export function calculateObjectSize(
|
||||||
|
object: Document,
|
||||||
|
options: CalculateObjectSizeOptions = {}
|
||||||
|
): number {
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
const serializeFunctions =
|
||||||
|
typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false;
|
||||||
|
const ignoreUndefined =
|
||||||
|
typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true;
|
||||||
|
|
||||||
|
return internalCalculateObjectSize(object, serializeFunctions, ignoreUndefined);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserialize stream data as BSON documents.
|
||||||
|
*
|
||||||
|
* @param data - the buffer containing the serialized set of BSON documents.
|
||||||
|
* @param startIndex - the start index in the data Buffer where the deserialization is to start.
|
||||||
|
* @param numberOfDocuments - number of documents to deserialize.
|
||||||
|
* @param documents - an array where to store the deserialized documents.
|
||||||
|
* @param docStartIndex - the index in the documents array from where to start inserting documents.
|
||||||
|
* @param options - additional options used for the deserialization.
|
||||||
|
* @returns next index in the buffer after deserialization **x** numbers of documents.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
export function deserializeStream(
|
||||||
|
data: Uint8Array | ArrayBuffer,
|
||||||
|
startIndex: number,
|
||||||
|
numberOfDocuments: number,
|
||||||
|
documents: Document[],
|
||||||
|
docStartIndex: number,
|
||||||
|
options: DeserializeOptions
|
||||||
|
): number {
|
||||||
|
const internalOptions = Object.assign(
|
||||||
|
{ allowObjectSmallerThanBufferSize: true, index: 0 },
|
||||||
|
options
|
||||||
|
);
|
||||||
|
const bufferData = ByteUtils.toLocalBufferType(data);
|
||||||
|
|
||||||
|
let index = startIndex;
|
||||||
|
// Loop over all documents
|
||||||
|
for (let i = 0; i < numberOfDocuments; i++) {
|
||||||
|
// Find size of the document
|
||||||
|
const size = NumberUtils.getInt32LE(bufferData, index);
|
||||||
|
// Update options with index
|
||||||
|
internalOptions.index = index;
|
||||||
|
// Parse the document at this point
|
||||||
|
documents[docStartIndex + i] = internalDeserialize(bufferData, internalOptions);
|
||||||
|
// Adjust index by the document size
|
||||||
|
index = index + size;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return object containing end index of parsing and list of documents
|
||||||
|
return index;
|
||||||
|
}
|
||||||
32
node_modules/bson/src/bson_value.ts
generated
vendored
Normal file
32
node_modules/bson/src/bson_value.ts
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import { BSON_MAJOR_VERSION } from './constants';
|
||||||
|
import { type InspectFn } from './parser/utils';
|
||||||
|
import { BSON_VERSION_SYMBOL } from './constants';
|
||||||
|
|
||||||
|
/** @public */
|
||||||
|
export abstract class BSONValue {
|
||||||
|
/** @public */
|
||||||
|
public abstract get _bsontype(): string;
|
||||||
|
|
||||||
|
/** @internal */
|
||||||
|
get [BSON_VERSION_SYMBOL](): typeof BSON_MAJOR_VERSION {
|
||||||
|
return BSON_MAJOR_VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Symbol.for('nodejs.util.inspect.custom')](
|
||||||
|
depth?: number,
|
||||||
|
options?: unknown,
|
||||||
|
inspect?: InspectFn
|
||||||
|
): string {
|
||||||
|
return this.inspect(depth, options, inspect);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @public
|
||||||
|
* Prints a human-readable string of BSON value information
|
||||||
|
* If invoked manually without node.js.inspect function, this will default to a modified JSON.stringify
|
||||||
|
*/
|
||||||
|
public abstract inspect(depth?: number, options?: unknown, inspect?: InspectFn): string;
|
||||||
|
|
||||||
|
/** @internal */
|
||||||
|
abstract toExtendedJSON(): unknown;
|
||||||
|
}
|
||||||
69
node_modules/bson/src/code.ts
generated
vendored
Normal file
69
node_modules/bson/src/code.ts
generated
vendored
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
import type { Document } from './bson';
|
||||||
|
import { BSONValue } from './bson_value';
|
||||||
|
import { type InspectFn, defaultInspect } from './parser/utils';
|
||||||
|
|
||||||
|
/** @public */
|
||||||
|
export interface CodeExtended {
|
||||||
|
$code: string;
|
||||||
|
$scope?: Document;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class representation of the BSON Code type.
|
||||||
|
* @public
|
||||||
|
* @category BSONType
|
||||||
|
*/
|
||||||
|
export class Code extends BSONValue {
|
||||||
|
get _bsontype(): 'Code' {
|
||||||
|
return 'Code';
|
||||||
|
}
|
||||||
|
|
||||||
|
code: string;
|
||||||
|
|
||||||
|
// a code instance having a null scope is what determines whether
|
||||||
|
// it is BSONType 0x0D (just code) / 0x0F (code with scope)
|
||||||
|
scope: Document | null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param code - a string or function.
|
||||||
|
* @param scope - an optional scope for the function.
|
||||||
|
*/
|
||||||
|
constructor(code: string | Function, scope?: Document | null) {
|
||||||
|
super();
|
||||||
|
this.code = code.toString();
|
||||||
|
this.scope = scope ?? null;
|
||||||
|
}
|
||||||
|
|
||||||
|
toJSON(): { code: string; scope?: Document } {
|
||||||
|
if (this.scope != null) {
|
||||||
|
return { code: this.code, scope: this.scope };
|
||||||
|
}
|
||||||
|
|
||||||
|
return { code: this.code };
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @internal */
|
||||||
|
toExtendedJSON(): CodeExtended {
|
||||||
|
if (this.scope) {
|
||||||
|
return { $code: this.code, $scope: this.scope };
|
||||||
|
}
|
||||||
|
|
||||||
|
return { $code: this.code };
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @internal */
|
||||||
|
static fromExtendedJSON(doc: CodeExtended): Code {
|
||||||
|
return new Code(doc.$code, doc.$scope);
|
||||||
|
}
|
||||||
|
|
||||||
|
inspect(depth?: number, options?: unknown, inspect?: InspectFn): string {
|
||||||
|
inspect ??= defaultInspect;
|
||||||
|
let parametersString = inspect(this.code, options);
|
||||||
|
const multiLineFn = parametersString.includes('\n');
|
||||||
|
if (this.scope != null) {
|
||||||
|
parametersString += `,${multiLineFn ? '\n' : ' '}${inspect(this.scope, options)}`;
|
||||||
|
}
|
||||||
|
const endingNewline = multiLineFn && this.scope === null;
|
||||||
|
return `new Code(${multiLineFn ? '\n' : ''}${parametersString}${endingNewline ? '\n' : ''})`;
|
||||||
|
}
|
||||||
|
}
|
||||||
147
node_modules/bson/src/constants.ts
generated
vendored
Normal file
147
node_modules/bson/src/constants.ts
generated
vendored
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
/** @internal */
|
||||||
|
export const BSON_MAJOR_VERSION = 6;
|
||||||
|
|
||||||
|
/** @internal */
|
||||||
|
export const BSON_VERSION_SYMBOL = Symbol.for('@@mdb.bson.version');
|
||||||
|
|
||||||
|
/** @internal */
|
||||||
|
export const BSON_INT32_MAX = 0x7fffffff;
|
||||||
|
/** @internal */
|
||||||
|
export const BSON_INT32_MIN = -0x80000000;
|
||||||
|
/** @internal */
|
||||||
|
export const BSON_INT64_MAX = Math.pow(2, 63) - 1;
|
||||||
|
/** @internal */
|
||||||
|
export const BSON_INT64_MIN = -Math.pow(2, 63);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Any integer up to 2^53 can be precisely represented by a double.
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export const JS_INT_MAX = Math.pow(2, 53);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Any integer down to -2^53 can be precisely represented by a double.
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export const JS_INT_MIN = -Math.pow(2, 53);
|
||||||
|
|
||||||
|
/** Number BSON Type @internal */
|
||||||
|
export const BSON_DATA_NUMBER = 1;
|
||||||
|
|
||||||
|
/** String BSON Type @internal */
|
||||||
|
export const BSON_DATA_STRING = 2;
|
||||||
|
|
||||||
|
/** Object BSON Type @internal */
|
||||||
|
export const BSON_DATA_OBJECT = 3;
|
||||||
|
|
||||||
|
/** Array BSON Type @internal */
|
||||||
|
export const BSON_DATA_ARRAY = 4;
|
||||||
|
|
||||||
|
/** Binary BSON Type @internal */
|
||||||
|
export const BSON_DATA_BINARY = 5;
|
||||||
|
|
||||||
|
/** Binary BSON Type @internal */
|
||||||
|
export const BSON_DATA_UNDEFINED = 6;
|
||||||
|
|
||||||
|
/** ObjectId BSON Type @internal */
|
||||||
|
export const BSON_DATA_OID = 7;
|
||||||
|
|
||||||
|
/** Boolean BSON Type @internal */
|
||||||
|
export const BSON_DATA_BOOLEAN = 8;
|
||||||
|
|
||||||
|
/** Date BSON Type @internal */
|
||||||
|
export const BSON_DATA_DATE = 9;
|
||||||
|
|
||||||
|
/** null BSON Type @internal */
|
||||||
|
export const BSON_DATA_NULL = 10;
|
||||||
|
|
||||||
|
/** RegExp BSON Type @internal */
|
||||||
|
export const BSON_DATA_REGEXP = 11;
|
||||||
|
|
||||||
|
/** Code BSON Type @internal */
|
||||||
|
export const BSON_DATA_DBPOINTER = 12;
|
||||||
|
|
||||||
|
/** Code BSON Type @internal */
|
||||||
|
export const BSON_DATA_CODE = 13;
|
||||||
|
|
||||||
|
/** Symbol BSON Type @internal */
|
||||||
|
export const BSON_DATA_SYMBOL = 14;
|
||||||
|
|
||||||
|
/** Code with Scope BSON Type @internal */
|
||||||
|
export const BSON_DATA_CODE_W_SCOPE = 15;
|
||||||
|
|
||||||
|
/** 32 bit Integer BSON Type @internal */
|
||||||
|
export const BSON_DATA_INT = 16;
|
||||||
|
|
||||||
|
/** Timestamp BSON Type @internal */
|
||||||
|
export const BSON_DATA_TIMESTAMP = 17;
|
||||||
|
|
||||||
|
/** Long BSON Type @internal */
|
||||||
|
export const BSON_DATA_LONG = 18;
|
||||||
|
|
||||||
|
/** Decimal128 BSON Type @internal */
|
||||||
|
export const BSON_DATA_DECIMAL128 = 19;
|
||||||
|
|
||||||
|
/** MinKey BSON Type @internal */
|
||||||
|
export const BSON_DATA_MIN_KEY = 0xff;
|
||||||
|
|
||||||
|
/** MaxKey BSON Type @internal */
|
||||||
|
export const BSON_DATA_MAX_KEY = 0x7f;
|
||||||
|
|
||||||
|
/** Binary Default Type @internal */
|
||||||
|
export const BSON_BINARY_SUBTYPE_DEFAULT = 0;
|
||||||
|
|
||||||
|
/** Binary Function Type @internal */
|
||||||
|
export const BSON_BINARY_SUBTYPE_FUNCTION = 1;
|
||||||
|
|
||||||
|
/** Binary Byte Array Type @internal */
|
||||||
|
export const BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2;
|
||||||
|
|
||||||
|
/** Binary Deprecated UUID Type @deprecated Please use BSON_BINARY_SUBTYPE_UUID_NEW @internal */
|
||||||
|
export const BSON_BINARY_SUBTYPE_UUID = 3;
|
||||||
|
|
||||||
|
/** Binary UUID Type @internal */
|
||||||
|
export const BSON_BINARY_SUBTYPE_UUID_NEW = 4;
|
||||||
|
|
||||||
|
/** Binary MD5 Type @internal */
|
||||||
|
export const BSON_BINARY_SUBTYPE_MD5 = 5;
|
||||||
|
|
||||||
|
/** Encrypted BSON type @internal */
|
||||||
|
export const BSON_BINARY_SUBTYPE_ENCRYPTED = 6;
|
||||||
|
|
||||||
|
/** Column BSON type @internal */
|
||||||
|
export const BSON_BINARY_SUBTYPE_COLUMN = 7;
|
||||||
|
|
||||||
|
/** Sensitive BSON type @internal */
|
||||||
|
export const BSON_BINARY_SUBTYPE_SENSITIVE = 8;
|
||||||
|
|
||||||
|
/** Binary User Defined Type @internal */
|
||||||
|
export const BSON_BINARY_SUBTYPE_USER_DEFINED = 128;
|
||||||
|
|
||||||
|
/** @public */
|
||||||
|
export const BSONType = Object.freeze({
|
||||||
|
double: 1,
|
||||||
|
string: 2,
|
||||||
|
object: 3,
|
||||||
|
array: 4,
|
||||||
|
binData: 5,
|
||||||
|
undefined: 6,
|
||||||
|
objectId: 7,
|
||||||
|
bool: 8,
|
||||||
|
date: 9,
|
||||||
|
null: 10,
|
||||||
|
regex: 11,
|
||||||
|
dbPointer: 12,
|
||||||
|
javascript: 13,
|
||||||
|
symbol: 14,
|
||||||
|
javascriptWithScope: 15,
|
||||||
|
int: 16,
|
||||||
|
timestamp: 17,
|
||||||
|
long: 18,
|
||||||
|
decimal: 19,
|
||||||
|
minKey: -1,
|
||||||
|
maxKey: 127
|
||||||
|
} as const);
|
||||||
|
|
||||||
|
/** @public */
|
||||||
|
export type BSONType = (typeof BSONType)[keyof typeof BSONType];
|
||||||
128
node_modules/bson/src/db_ref.ts
generated
vendored
Normal file
128
node_modules/bson/src/db_ref.ts
generated
vendored
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
import type { Document } from './bson';
|
||||||
|
import { BSONValue } from './bson_value';
|
||||||
|
import type { EJSONOptions } from './extended_json';
|
||||||
|
import type { ObjectId } from './objectid';
|
||||||
|
import { type InspectFn, defaultInspect } from './parser/utils';
|
||||||
|
|
||||||
|
/** @public */
|
||||||
|
export interface DBRefLike {
|
||||||
|
$ref: string;
|
||||||
|
$id: ObjectId;
|
||||||
|
$db?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @internal */
|
||||||
|
export function isDBRefLike(value: unknown): value is DBRefLike {
|
||||||
|
return (
|
||||||
|
value != null &&
|
||||||
|
typeof value === 'object' &&
|
||||||
|
'$id' in value &&
|
||||||
|
value.$id != null &&
|
||||||
|
'$ref' in value &&
|
||||||
|
typeof value.$ref === 'string' &&
|
||||||
|
// If '$db' is defined it MUST be a string, otherwise it should be absent
|
||||||
|
(!('$db' in value) || ('$db' in value && typeof value.$db === 'string'))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class representation of the BSON DBRef type.
|
||||||
|
* @public
|
||||||
|
* @category BSONType
|
||||||
|
*/
|
||||||
|
export class DBRef extends BSONValue {
|
||||||
|
get _bsontype(): 'DBRef' {
|
||||||
|
return 'DBRef';
|
||||||
|
}
|
||||||
|
|
||||||
|
collection!: string;
|
||||||
|
oid!: ObjectId;
|
||||||
|
db?: string;
|
||||||
|
fields!: Document;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param collection - the collection name.
|
||||||
|
* @param oid - the reference ObjectId.
|
||||||
|
* @param db - optional db name, if omitted the reference is local to the current db.
|
||||||
|
*/
|
||||||
|
constructor(collection: string, oid: ObjectId, db?: string, fields?: Document) {
|
||||||
|
super();
|
||||||
|
// check if namespace has been provided
|
||||||
|
const parts = collection.split('.');
|
||||||
|
if (parts.length === 2) {
|
||||||
|
db = parts.shift();
|
||||||
|
collection = parts.shift()!;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.collection = collection;
|
||||||
|
this.oid = oid;
|
||||||
|
this.db = db;
|
||||||
|
this.fields = fields || {};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Property provided for compatibility with the 1.x parser
|
||||||
|
// the 1.x parser used a "namespace" property, while 4.x uses "collection"
|
||||||
|
|
||||||
|
/** @internal */
|
||||||
|
get namespace(): string {
|
||||||
|
return this.collection;
|
||||||
|
}
|
||||||
|
|
||||||
|
set namespace(value: string) {
|
||||||
|
this.collection = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
toJSON(): DBRefLike & Document {
|
||||||
|
const o = Object.assign(
|
||||||
|
{
|
||||||
|
$ref: this.collection,
|
||||||
|
$id: this.oid
|
||||||
|
},
|
||||||
|
this.fields
|
||||||
|
);
|
||||||
|
|
||||||
|
if (this.db != null) o.$db = this.db;
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @internal */
|
||||||
|
toExtendedJSON(options?: EJSONOptions): DBRefLike {
|
||||||
|
options = options || {};
|
||||||
|
let o: DBRefLike = {
|
||||||
|
$ref: this.collection,
|
||||||
|
$id: this.oid
|
||||||
|
};
|
||||||
|
|
||||||
|
if (options.legacy) {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.db) o.$db = this.db;
|
||||||
|
o = Object.assign(o, this.fields);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @internal */
|
||||||
|
static fromExtendedJSON(doc: DBRefLike): DBRef {
|
||||||
|
const copy = Object.assign({}, doc) as Partial<DBRefLike>;
|
||||||
|
delete copy.$ref;
|
||||||
|
delete copy.$id;
|
||||||
|
delete copy.$db;
|
||||||
|
return new DBRef(doc.$ref, doc.$id, doc.$db, copy);
|
||||||
|
}
|
||||||
|
|
||||||
|
inspect(depth?: number, options?: unknown, inspect?: InspectFn): string {
|
||||||
|
inspect ??= defaultInspect;
|
||||||
|
|
||||||
|
const args = [
|
||||||
|
inspect(this.namespace, options),
|
||||||
|
inspect(this.oid, options),
|
||||||
|
...(this.db ? [inspect(this.db, options)] : []),
|
||||||
|
...(Object.keys(this.fields).length > 0 ? [inspect(this.fields, options)] : [])
|
||||||
|
];
|
||||||
|
|
||||||
|
args[1] = inspect === defaultInspect ? `new ObjectId(${args[1]})` : args[1];
|
||||||
|
|
||||||
|
return `new DBRef(${args.join(', ')})`;
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user