Update file with new features and improvements
BIN
miniprogram/images/tab-match-active.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
miniprogram/images/tab-match.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
miniprogram/images/tab-points-active.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
miniprogram/images/tab-points.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
miniprogram/images/tab-rank-active.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
miniprogram/images/tab-rank.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
miniprogram/images/tab-user-active.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
miniprogram/images/tab-user.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
16
miniprogram/node_modules/.bin/prebuild-install
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/../prebuild-install/bin.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../prebuild-install/bin.js" "$@"
|
||||||
|
fi
|
||||||
17
miniprogram/node_modules/.bin/prebuild-install.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%\..\prebuild-install\bin.js" %*
|
||||||
28
miniprogram/node_modules/.bin/prebuild-install.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/../prebuild-install/bin.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../prebuild-install/bin.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../prebuild-install/bin.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../prebuild-install/bin.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
16
miniprogram/node_modules/.bin/rc
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/../rc/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../rc/cli.js" "$@"
|
||||||
|
fi
|
||||||
17
miniprogram/node_modules/.bin/rc.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%\..\rc\cli.js" %*
|
||||||
28
miniprogram/node_modules/.bin/rc.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/../rc/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../rc/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../rc/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../rc/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
16
miniprogram/node_modules/.bin/semver
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/../semver/bin/semver.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../semver/bin/semver.js" "$@"
|
||||||
|
fi
|
||||||
17
miniprogram/node_modules/.bin/semver.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%\..\semver\bin\semver.js" %*
|
||||||
28
miniprogram/node_modules/.bin/semver.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/../semver/bin/semver.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../semver/bin/semver.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../semver/bin/semver.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
449
miniprogram/node_modules/.package-lock.json
generated
vendored
Normal file
@ -0,0 +1,449 @@
|
|||||||
|
{
|
||||||
|
"name": "miniprogram",
|
||||||
|
"lockfileVersion": 3,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"node_modules/base64-js": {
|
||||||
|
"version": "1.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
||||||
|
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/bl": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"buffer": "^5.5.0",
|
||||||
|
"inherits": "^2.0.4",
|
||||||
|
"readable-stream": "^3.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/buffer": {
|
||||||
|
"version": "5.7.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
||||||
|
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"base64-js": "^1.3.1",
|
||||||
|
"ieee754": "^1.1.13"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/canvas": {
|
||||||
|
"version": "3.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/canvas/-/canvas-3.2.1.tgz",
|
||||||
|
"integrity": "sha512-ej1sPFR5+0YWtaVp6S1N1FVz69TQCqmrkGeRvQxZeAB1nAIcjNTHVwrZtYtWFFBmQsF40/uDLehsW5KuYC99mg==",
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"node-addon-api": "^7.0.0",
|
||||||
|
"prebuild-install": "^7.1.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^18.12.0 || >= 20.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/chownr": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
|
||||||
|
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
|
||||||
|
"license": "ISC"
|
||||||
|
},
|
||||||
|
"node_modules/decompress-response": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"mimic-response": "^3.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/deep-extend": {
|
||||||
|
"version": "0.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
|
||||||
|
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/detect-libc": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/end-of-stream": {
|
||||||
|
"version": "1.4.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
|
||||||
|
"integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"once": "^1.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/expand-template": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
|
||||||
|
"integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
|
||||||
|
"license": "(MIT OR WTFPL)",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/fs-constants": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/github-from-package": {
|
||||||
|
"version": "0.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
|
||||||
|
"integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/ieee754": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
|
||||||
|
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "BSD-3-Clause"
|
||||||
|
},
|
||||||
|
"node_modules/inherits": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
||||||
|
"license": "ISC"
|
||||||
|
},
|
||||||
|
"node_modules/ini": {
|
||||||
|
"version": "1.3.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
|
||||||
|
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
|
||||||
|
"license": "ISC"
|
||||||
|
},
|
||||||
|
"node_modules/mimic-response": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/minimist": {
|
||||||
|
"version": "1.2.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
|
||||||
|
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mkdirp-classic": {
|
||||||
|
"version": "0.5.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
|
||||||
|
"integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/napi-build-utils": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/node-abi": {
|
||||||
|
"version": "3.86.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.86.0.tgz",
|
||||||
|
"integrity": "sha512-sn9Et4N3ynsetj3spsZR729DVlGH6iBG4RiDMV7HEp3guyOW6W3S0unGpLDxT50mXortGUMax/ykUNQXdqc/Xg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"semver": "^7.3.5"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/node-addon-api": {
|
||||||
|
"version": "7.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
|
||||||
|
"integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/once": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||||
|
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"wrappy": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/prebuild-install": {
|
||||||
|
"version": "7.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz",
|
||||||
|
"integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"detect-libc": "^2.0.0",
|
||||||
|
"expand-template": "^2.0.3",
|
||||||
|
"github-from-package": "0.0.0",
|
||||||
|
"minimist": "^1.2.3",
|
||||||
|
"mkdirp-classic": "^0.5.3",
|
||||||
|
"napi-build-utils": "^2.0.0",
|
||||||
|
"node-abi": "^3.3.0",
|
||||||
|
"pump": "^3.0.0",
|
||||||
|
"rc": "^1.2.7",
|
||||||
|
"simple-get": "^4.0.0",
|
||||||
|
"tar-fs": "^2.0.0",
|
||||||
|
"tunnel-agent": "^0.6.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"prebuild-install": "bin.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/pump": {
|
||||||
|
"version": "3.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
|
||||||
|
"integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"end-of-stream": "^1.1.0",
|
||||||
|
"once": "^1.3.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/rc": {
|
||||||
|
"version": "1.2.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
|
||||||
|
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
|
||||||
|
"license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
|
||||||
|
"dependencies": {
|
||||||
|
"deep-extend": "^0.6.0",
|
||||||
|
"ini": "~1.3.0",
|
||||||
|
"minimist": "^1.2.0",
|
||||||
|
"strip-json-comments": "~2.0.1"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"rc": "cli.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/readable-stream": {
|
||||||
|
"version": "3.6.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
|
||||||
|
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"inherits": "^2.0.3",
|
||||||
|
"string_decoder": "^1.1.1",
|
||||||
|
"util-deprecate": "^1.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/safe-buffer": {
|
||||||
|
"version": "5.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||||
|
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/semver": {
|
||||||
|
"version": "7.7.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
|
||||||
|
"integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
|
||||||
|
"license": "ISC",
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/simple-concat": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/simple-get": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
|
||||||
|
"integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"decompress-response": "^6.0.0",
|
||||||
|
"once": "^1.3.1",
|
||||||
|
"simple-concat": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/string_decoder": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"safe-buffer": "~5.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/strip-json-comments": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/tar-fs": {
|
||||||
|
"version": "2.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz",
|
||||||
|
"integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"chownr": "^1.1.1",
|
||||||
|
"mkdirp-classic": "^0.5.2",
|
||||||
|
"pump": "^3.0.0",
|
||||||
|
"tar-stream": "^2.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/tar-stream": {
|
||||||
|
"version": "2.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
|
||||||
|
"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"bl": "^4.0.3",
|
||||||
|
"end-of-stream": "^1.4.1",
|
||||||
|
"fs-constants": "^1.0.0",
|
||||||
|
"inherits": "^2.0.3",
|
||||||
|
"readable-stream": "^3.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/tunnel-agent": {
|
||||||
|
"version": "0.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
|
||||||
|
"integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"safe-buffer": "^5.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/util-deprecate": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/wrappy": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
|
||||||
|
"license": "ISC"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
21
miniprogram/node_modules/base64-js/LICENSE
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2014 Jameson Little
|
||||||
|
|
||||||
|
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.
|
||||||
34
miniprogram/node_modules/base64-js/README.md
generated
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
base64-js
|
||||||
|
=========
|
||||||
|
|
||||||
|
`base64-js` does basic base64 encoding/decoding in pure JS.
|
||||||
|
|
||||||
|
[](http://travis-ci.org/beatgammit/base64-js)
|
||||||
|
|
||||||
|
Many browsers already have base64 encoding/decoding functionality, but it is for text data, not all-purpose binary data.
|
||||||
|
|
||||||
|
Sometimes encoding/decoding binary data in the browser is useful, and that is what this module does.
|
||||||
|
|
||||||
|
## install
|
||||||
|
|
||||||
|
With [npm](https://npmjs.org) do:
|
||||||
|
|
||||||
|
`npm install base64-js` and `var base64js = require('base64-js')`
|
||||||
|
|
||||||
|
For use in web browsers do:
|
||||||
|
|
||||||
|
`<script src="base64js.min.js"></script>`
|
||||||
|
|
||||||
|
[Get supported base64-js with the Tidelift Subscription](https://tidelift.com/subscription/pkg/npm-base64-js?utm_source=npm-base64-js&utm_medium=referral&utm_campaign=readme)
|
||||||
|
|
||||||
|
## methods
|
||||||
|
|
||||||
|
`base64js` has three exposed functions, `byteLength`, `toByteArray` and `fromByteArray`, which both take a single argument.
|
||||||
|
|
||||||
|
* `byteLength` - Takes a base64 string and returns length of byte array
|
||||||
|
* `toByteArray` - Takes a base64 string and returns a byte array
|
||||||
|
* `fromByteArray` - Takes a byte array and returns a base64 string
|
||||||
|
|
||||||
|
## license
|
||||||
|
|
||||||
|
MIT
|
||||||
1
miniprogram/node_modules/base64-js/base64js.min.js
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
(function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"==typeof window?"undefined"==typeof global?"undefined"==typeof self?this:self:global:window,b.base64js=a()}})(function(){return function(){function b(d,e,g){function a(j,i){if(!e[j]){if(!d[j]){var f="function"==typeof require&&require;if(!i&&f)return f(j,!0);if(h)return h(j,!0);var c=new Error("Cannot find module '"+j+"'");throw c.code="MODULE_NOT_FOUND",c}var k=e[j]={exports:{}};d[j][0].call(k.exports,function(b){var c=d[j][1][b];return a(c||b)},k,k.exports,b,d,e,g)}return e[j].exports}for(var h="function"==typeof require&&require,c=0;c<g.length;c++)a(g[c]);return a}return b}()({"/":[function(a,b,c){'use strict';function d(a){var b=a.length;if(0<b%4)throw new Error("Invalid string. Length must be a multiple of 4");var c=a.indexOf("=");-1===c&&(c=b);var d=c===b?0:4-c%4;return[c,d]}function e(a,b,c){return 3*(b+c)/4-c}function f(a){var b,c,f=d(a),g=f[0],h=f[1],j=new m(e(a,g,h)),k=0,n=0<h?g-4:g;for(c=0;c<n;c+=4)b=l[a.charCodeAt(c)]<<18|l[a.charCodeAt(c+1)]<<12|l[a.charCodeAt(c+2)]<<6|l[a.charCodeAt(c+3)],j[k++]=255&b>>16,j[k++]=255&b>>8,j[k++]=255&b;return 2===h&&(b=l[a.charCodeAt(c)]<<2|l[a.charCodeAt(c+1)]>>4,j[k++]=255&b),1===h&&(b=l[a.charCodeAt(c)]<<10|l[a.charCodeAt(c+1)]<<4|l[a.charCodeAt(c+2)]>>2,j[k++]=255&b>>8,j[k++]=255&b),j}function g(a){return k[63&a>>18]+k[63&a>>12]+k[63&a>>6]+k[63&a]}function h(a,b,c){for(var d,e=[],f=b;f<c;f+=3)d=(16711680&a[f]<<16)+(65280&a[f+1]<<8)+(255&a[f+2]),e.push(g(d));return e.join("")}function j(a){for(var b,c=a.length,d=c%3,e=[],f=16383,g=0,j=c-d;g<j;g+=f)e.push(h(a,g,g+f>j?j:g+f));return 1===d?(b=a[c-1],e.push(k[b>>2]+k[63&b<<4]+"==")):2===d&&(b=(a[c-2]<<8)+a[c-1],e.push(k[b>>10]+k[63&b>>4]+k[63&b<<2]+"=")),e.join("")}c.byteLength=function(a){var b=d(a),c=b[0],e=b[1];return 3*(c+e)/4-e},c.toByteArray=f,c.fromByteArray=j;for(var k=[],l=[],m="undefined"==typeof Uint8Array?Array:Uint8Array,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,p=n.length;o<p;++o)k[o]=n[o],l[n.charCodeAt(o)]=o;l[45]=62,l[95]=63},{}]},{},[])("/")});
|
||||||
3
miniprogram/node_modules/base64-js/index.d.ts
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export function byteLength(b64: string): number;
|
||||||
|
export function toByteArray(b64: string): Uint8Array;
|
||||||
|
export function fromByteArray(uint8: Uint8Array): string;
|
||||||
150
miniprogram/node_modules/base64-js/index.js
generated
vendored
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
exports.byteLength = byteLength
|
||||||
|
exports.toByteArray = toByteArray
|
||||||
|
exports.fromByteArray = fromByteArray
|
||||||
|
|
||||||
|
var lookup = []
|
||||||
|
var revLookup = []
|
||||||
|
var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
|
||||||
|
|
||||||
|
var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
|
||||||
|
for (var i = 0, len = code.length; i < len; ++i) {
|
||||||
|
lookup[i] = code[i]
|
||||||
|
revLookup[code.charCodeAt(i)] = i
|
||||||
|
}
|
||||||
|
|
||||||
|
// Support decoding URL-safe base64 strings, as Node.js does.
|
||||||
|
// See: https://en.wikipedia.org/wiki/Base64#URL_applications
|
||||||
|
revLookup['-'.charCodeAt(0)] = 62
|
||||||
|
revLookup['_'.charCodeAt(0)] = 63
|
||||||
|
|
||||||
|
function getLens (b64) {
|
||||||
|
var len = b64.length
|
||||||
|
|
||||||
|
if (len % 4 > 0) {
|
||||||
|
throw new Error('Invalid string. Length must be a multiple of 4')
|
||||||
|
}
|
||||||
|
|
||||||
|
// Trim off extra bytes after placeholder bytes are found
|
||||||
|
// See: https://github.com/beatgammit/base64-js/issues/42
|
||||||
|
var validLen = b64.indexOf('=')
|
||||||
|
if (validLen === -1) validLen = len
|
||||||
|
|
||||||
|
var placeHoldersLen = validLen === len
|
||||||
|
? 0
|
||||||
|
: 4 - (validLen % 4)
|
||||||
|
|
||||||
|
return [validLen, placeHoldersLen]
|
||||||
|
}
|
||||||
|
|
||||||
|
// base64 is 4/3 + up to two characters of the original data
|
||||||
|
function byteLength (b64) {
|
||||||
|
var lens = getLens(b64)
|
||||||
|
var validLen = lens[0]
|
||||||
|
var placeHoldersLen = lens[1]
|
||||||
|
return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
|
||||||
|
}
|
||||||
|
|
||||||
|
function _byteLength (b64, validLen, placeHoldersLen) {
|
||||||
|
return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
|
||||||
|
}
|
||||||
|
|
||||||
|
function toByteArray (b64) {
|
||||||
|
var tmp
|
||||||
|
var lens = getLens(b64)
|
||||||
|
var validLen = lens[0]
|
||||||
|
var placeHoldersLen = lens[1]
|
||||||
|
|
||||||
|
var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))
|
||||||
|
|
||||||
|
var curByte = 0
|
||||||
|
|
||||||
|
// if there are placeholders, only get up to the last complete 4 chars
|
||||||
|
var len = placeHoldersLen > 0
|
||||||
|
? validLen - 4
|
||||||
|
: validLen
|
||||||
|
|
||||||
|
var i
|
||||||
|
for (i = 0; i < len; i += 4) {
|
||||||
|
tmp =
|
||||||
|
(revLookup[b64.charCodeAt(i)] << 18) |
|
||||||
|
(revLookup[b64.charCodeAt(i + 1)] << 12) |
|
||||||
|
(revLookup[b64.charCodeAt(i + 2)] << 6) |
|
||||||
|
revLookup[b64.charCodeAt(i + 3)]
|
||||||
|
arr[curByte++] = (tmp >> 16) & 0xFF
|
||||||
|
arr[curByte++] = (tmp >> 8) & 0xFF
|
||||||
|
arr[curByte++] = tmp & 0xFF
|
||||||
|
}
|
||||||
|
|
||||||
|
if (placeHoldersLen === 2) {
|
||||||
|
tmp =
|
||||||
|
(revLookup[b64.charCodeAt(i)] << 2) |
|
||||||
|
(revLookup[b64.charCodeAt(i + 1)] >> 4)
|
||||||
|
arr[curByte++] = tmp & 0xFF
|
||||||
|
}
|
||||||
|
|
||||||
|
if (placeHoldersLen === 1) {
|
||||||
|
tmp =
|
||||||
|
(revLookup[b64.charCodeAt(i)] << 10) |
|
||||||
|
(revLookup[b64.charCodeAt(i + 1)] << 4) |
|
||||||
|
(revLookup[b64.charCodeAt(i + 2)] >> 2)
|
||||||
|
arr[curByte++] = (tmp >> 8) & 0xFF
|
||||||
|
arr[curByte++] = tmp & 0xFF
|
||||||
|
}
|
||||||
|
|
||||||
|
return arr
|
||||||
|
}
|
||||||
|
|
||||||
|
function tripletToBase64 (num) {
|
||||||
|
return lookup[num >> 18 & 0x3F] +
|
||||||
|
lookup[num >> 12 & 0x3F] +
|
||||||
|
lookup[num >> 6 & 0x3F] +
|
||||||
|
lookup[num & 0x3F]
|
||||||
|
}
|
||||||
|
|
||||||
|
function encodeChunk (uint8, start, end) {
|
||||||
|
var tmp
|
||||||
|
var output = []
|
||||||
|
for (var i = start; i < end; i += 3) {
|
||||||
|
tmp =
|
||||||
|
((uint8[i] << 16) & 0xFF0000) +
|
||||||
|
((uint8[i + 1] << 8) & 0xFF00) +
|
||||||
|
(uint8[i + 2] & 0xFF)
|
||||||
|
output.push(tripletToBase64(tmp))
|
||||||
|
}
|
||||||
|
return output.join('')
|
||||||
|
}
|
||||||
|
|
||||||
|
function fromByteArray (uint8) {
|
||||||
|
var tmp
|
||||||
|
var len = uint8.length
|
||||||
|
var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
|
||||||
|
var parts = []
|
||||||
|
var maxChunkLength = 16383 // must be multiple of 3
|
||||||
|
|
||||||
|
// go through the array every three bytes, we'll deal with trailing stuff later
|
||||||
|
for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
|
||||||
|
parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
|
||||||
|
}
|
||||||
|
|
||||||
|
// pad the end with zeros, but make sure to not forget the extra bytes
|
||||||
|
if (extraBytes === 1) {
|
||||||
|
tmp = uint8[len - 1]
|
||||||
|
parts.push(
|
||||||
|
lookup[tmp >> 2] +
|
||||||
|
lookup[(tmp << 4) & 0x3F] +
|
||||||
|
'=='
|
||||||
|
)
|
||||||
|
} else if (extraBytes === 2) {
|
||||||
|
tmp = (uint8[len - 2] << 8) + uint8[len - 1]
|
||||||
|
parts.push(
|
||||||
|
lookup[tmp >> 10] +
|
||||||
|
lookup[(tmp >> 4) & 0x3F] +
|
||||||
|
lookup[(tmp << 2) & 0x3F] +
|
||||||
|
'='
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return parts.join('')
|
||||||
|
}
|
||||||
47
miniprogram/node_modules/base64-js/package.json
generated
vendored
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
{
|
||||||
|
"name": "base64-js",
|
||||||
|
"description": "Base64 encoding/decoding in pure JS",
|
||||||
|
"version": "1.5.1",
|
||||||
|
"author": "T. Jameson Little <t.jameson.little@gmail.com>",
|
||||||
|
"typings": "index.d.ts",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/beatgammit/base64-js/issues"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"babel-minify": "^0.5.1",
|
||||||
|
"benchmark": "^2.1.4",
|
||||||
|
"browserify": "^16.3.0",
|
||||||
|
"standard": "*",
|
||||||
|
"tape": "4.x"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/beatgammit/base64-js",
|
||||||
|
"keywords": [
|
||||||
|
"base64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "index.js",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/beatgammit/base64-js.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "browserify -s base64js -r ./ | minify > base64js.min.js",
|
||||||
|
"lint": "standard",
|
||||||
|
"test": "npm run lint && npm run unit",
|
||||||
|
"unit": "tape test/*.js"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
17
miniprogram/node_modules/bl/.travis.yml
generated
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
sudo: false
|
||||||
|
arch:
|
||||||
|
- amd64
|
||||||
|
- ppc64le
|
||||||
|
language: node_js
|
||||||
|
node_js:
|
||||||
|
- '6'
|
||||||
|
- '8'
|
||||||
|
- '10'
|
||||||
|
- '12'
|
||||||
|
- '14'
|
||||||
|
- '15'
|
||||||
|
- lts/*
|
||||||
|
notifications:
|
||||||
|
email:
|
||||||
|
- rod@vagg.org
|
||||||
|
- matteo.collina@gmail.com
|
||||||
396
miniprogram/node_modules/bl/BufferList.js
generated
vendored
Normal file
@ -0,0 +1,396 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
const { Buffer } = require('buffer')
|
||||||
|
const symbol = Symbol.for('BufferList')
|
||||||
|
|
||||||
|
function BufferList (buf) {
|
||||||
|
if (!(this instanceof BufferList)) {
|
||||||
|
return new BufferList(buf)
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList._init.call(this, buf)
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList._init = function _init (buf) {
|
||||||
|
Object.defineProperty(this, symbol, { value: true })
|
||||||
|
|
||||||
|
this._bufs = []
|
||||||
|
this.length = 0
|
||||||
|
|
||||||
|
if (buf) {
|
||||||
|
this.append(buf)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList.prototype._new = function _new (buf) {
|
||||||
|
return new BufferList(buf)
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList.prototype._offset = function _offset (offset) {
|
||||||
|
if (offset === 0) {
|
||||||
|
return [0, 0]
|
||||||
|
}
|
||||||
|
|
||||||
|
let tot = 0
|
||||||
|
|
||||||
|
for (let i = 0; i < this._bufs.length; i++) {
|
||||||
|
const _t = tot + this._bufs[i].length
|
||||||
|
if (offset < _t || i === this._bufs.length - 1) {
|
||||||
|
return [i, offset - tot]
|
||||||
|
}
|
||||||
|
tot = _t
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList.prototype._reverseOffset = function (blOffset) {
|
||||||
|
const bufferId = blOffset[0]
|
||||||
|
let offset = blOffset[1]
|
||||||
|
|
||||||
|
for (let i = 0; i < bufferId; i++) {
|
||||||
|
offset += this._bufs[i].length
|
||||||
|
}
|
||||||
|
|
||||||
|
return offset
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList.prototype.get = function get (index) {
|
||||||
|
if (index > this.length || index < 0) {
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
const offset = this._offset(index)
|
||||||
|
|
||||||
|
return this._bufs[offset[0]][offset[1]]
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList.prototype.slice = function slice (start, end) {
|
||||||
|
if (typeof start === 'number' && start < 0) {
|
||||||
|
start += this.length
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof end === 'number' && end < 0) {
|
||||||
|
end += this.length
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.copy(null, 0, start, end)
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList.prototype.copy = function copy (dst, dstStart, srcStart, srcEnd) {
|
||||||
|
if (typeof srcStart !== 'number' || srcStart < 0) {
|
||||||
|
srcStart = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof srcEnd !== 'number' || srcEnd > this.length) {
|
||||||
|
srcEnd = this.length
|
||||||
|
}
|
||||||
|
|
||||||
|
if (srcStart >= this.length) {
|
||||||
|
return dst || Buffer.alloc(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (srcEnd <= 0) {
|
||||||
|
return dst || Buffer.alloc(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
const copy = !!dst
|
||||||
|
const off = this._offset(srcStart)
|
||||||
|
const len = srcEnd - srcStart
|
||||||
|
let bytes = len
|
||||||
|
let bufoff = (copy && dstStart) || 0
|
||||||
|
let start = off[1]
|
||||||
|
|
||||||
|
// copy/slice everything
|
||||||
|
if (srcStart === 0 && srcEnd === this.length) {
|
||||||
|
if (!copy) {
|
||||||
|
// slice, but full concat if multiple buffers
|
||||||
|
return this._bufs.length === 1
|
||||||
|
? this._bufs[0]
|
||||||
|
: Buffer.concat(this._bufs, this.length)
|
||||||
|
}
|
||||||
|
|
||||||
|
// copy, need to copy individual buffers
|
||||||
|
for (let i = 0; i < this._bufs.length; i++) {
|
||||||
|
this._bufs[i].copy(dst, bufoff)
|
||||||
|
bufoff += this._bufs[i].length
|
||||||
|
}
|
||||||
|
|
||||||
|
return dst
|
||||||
|
}
|
||||||
|
|
||||||
|
// easy, cheap case where it's a subset of one of the buffers
|
||||||
|
if (bytes <= this._bufs[off[0]].length - start) {
|
||||||
|
return copy
|
||||||
|
? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes)
|
||||||
|
: this._bufs[off[0]].slice(start, start + bytes)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!copy) {
|
||||||
|
// a slice, we need something to copy in to
|
||||||
|
dst = Buffer.allocUnsafe(len)
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = off[0]; i < this._bufs.length; i++) {
|
||||||
|
const l = this._bufs[i].length - start
|
||||||
|
|
||||||
|
if (bytes > l) {
|
||||||
|
this._bufs[i].copy(dst, bufoff, start)
|
||||||
|
bufoff += l
|
||||||
|
} else {
|
||||||
|
this._bufs[i].copy(dst, bufoff, start, start + bytes)
|
||||||
|
bufoff += l
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
bytes -= l
|
||||||
|
|
||||||
|
if (start) {
|
||||||
|
start = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// safeguard so that we don't return uninitialized memory
|
||||||
|
if (dst.length > bufoff) return dst.slice(0, bufoff)
|
||||||
|
|
||||||
|
return dst
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList.prototype.shallowSlice = function shallowSlice (start, end) {
|
||||||
|
start = start || 0
|
||||||
|
end = typeof end !== 'number' ? this.length : end
|
||||||
|
|
||||||
|
if (start < 0) {
|
||||||
|
start += this.length
|
||||||
|
}
|
||||||
|
|
||||||
|
if (end < 0) {
|
||||||
|
end += this.length
|
||||||
|
}
|
||||||
|
|
||||||
|
if (start === end) {
|
||||||
|
return this._new()
|
||||||
|
}
|
||||||
|
|
||||||
|
const startOffset = this._offset(start)
|
||||||
|
const endOffset = this._offset(end)
|
||||||
|
const buffers = this._bufs.slice(startOffset[0], endOffset[0] + 1)
|
||||||
|
|
||||||
|
if (endOffset[1] === 0) {
|
||||||
|
buffers.pop()
|
||||||
|
} else {
|
||||||
|
buffers[buffers.length - 1] = buffers[buffers.length - 1].slice(0, endOffset[1])
|
||||||
|
}
|
||||||
|
|
||||||
|
if (startOffset[1] !== 0) {
|
||||||
|
buffers[0] = buffers[0].slice(startOffset[1])
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._new(buffers)
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList.prototype.toString = function toString (encoding, start, end) {
|
||||||
|
return this.slice(start, end).toString(encoding)
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList.prototype.consume = function consume (bytes) {
|
||||||
|
// first, normalize the argument, in accordance with how Buffer does it
|
||||||
|
bytes = Math.trunc(bytes)
|
||||||
|
// do nothing if not a positive number
|
||||||
|
if (Number.isNaN(bytes) || bytes <= 0) return this
|
||||||
|
|
||||||
|
while (this._bufs.length) {
|
||||||
|
if (bytes >= this._bufs[0].length) {
|
||||||
|
bytes -= this._bufs[0].length
|
||||||
|
this.length -= this._bufs[0].length
|
||||||
|
this._bufs.shift()
|
||||||
|
} else {
|
||||||
|
this._bufs[0] = this._bufs[0].slice(bytes)
|
||||||
|
this.length -= bytes
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList.prototype.duplicate = function duplicate () {
|
||||||
|
const copy = this._new()
|
||||||
|
|
||||||
|
for (let i = 0; i < this._bufs.length; i++) {
|
||||||
|
copy.append(this._bufs[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
return copy
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList.prototype.append = function append (buf) {
|
||||||
|
if (buf == null) {
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buf.buffer) {
|
||||||
|
// append a view of the underlying ArrayBuffer
|
||||||
|
this._appendBuffer(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength))
|
||||||
|
} else if (Array.isArray(buf)) {
|
||||||
|
for (let i = 0; i < buf.length; i++) {
|
||||||
|
this.append(buf[i])
|
||||||
|
}
|
||||||
|
} else if (this._isBufferList(buf)) {
|
||||||
|
// unwrap argument into individual BufferLists
|
||||||
|
for (let i = 0; i < buf._bufs.length; i++) {
|
||||||
|
this.append(buf._bufs[i])
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// coerce number arguments to strings, since Buffer(number) does
|
||||||
|
// uninitialized memory allocation
|
||||||
|
if (typeof buf === 'number') {
|
||||||
|
buf = buf.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
this._appendBuffer(Buffer.from(buf))
|
||||||
|
}
|
||||||
|
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList.prototype._appendBuffer = function appendBuffer (buf) {
|
||||||
|
this._bufs.push(buf)
|
||||||
|
this.length += buf.length
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList.prototype.indexOf = function (search, offset, encoding) {
|
||||||
|
if (encoding === undefined && typeof offset === 'string') {
|
||||||
|
encoding = offset
|
||||||
|
offset = undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof search === 'function' || Array.isArray(search)) {
|
||||||
|
throw new TypeError('The "value" argument must be one of type string, Buffer, BufferList, or Uint8Array.')
|
||||||
|
} else if (typeof search === 'number') {
|
||||||
|
search = Buffer.from([search])
|
||||||
|
} else if (typeof search === 'string') {
|
||||||
|
search = Buffer.from(search, encoding)
|
||||||
|
} else if (this._isBufferList(search)) {
|
||||||
|
search = search.slice()
|
||||||
|
} else if (Array.isArray(search.buffer)) {
|
||||||
|
search = Buffer.from(search.buffer, search.byteOffset, search.byteLength)
|
||||||
|
} else if (!Buffer.isBuffer(search)) {
|
||||||
|
search = Buffer.from(search)
|
||||||
|
}
|
||||||
|
|
||||||
|
offset = Number(offset || 0)
|
||||||
|
|
||||||
|
if (isNaN(offset)) {
|
||||||
|
offset = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if (offset < 0) {
|
||||||
|
offset = this.length + offset
|
||||||
|
}
|
||||||
|
|
||||||
|
if (offset < 0) {
|
||||||
|
offset = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if (search.length === 0) {
|
||||||
|
return offset > this.length ? this.length : offset
|
||||||
|
}
|
||||||
|
|
||||||
|
const blOffset = this._offset(offset)
|
||||||
|
let blIndex = blOffset[0] // index of which internal buffer we're working on
|
||||||
|
let buffOffset = blOffset[1] // offset of the internal buffer we're working on
|
||||||
|
|
||||||
|
// scan over each buffer
|
||||||
|
for (; blIndex < this._bufs.length; blIndex++) {
|
||||||
|
const buff = this._bufs[blIndex]
|
||||||
|
|
||||||
|
while (buffOffset < buff.length) {
|
||||||
|
const availableWindow = buff.length - buffOffset
|
||||||
|
|
||||||
|
if (availableWindow >= search.length) {
|
||||||
|
const nativeSearchResult = buff.indexOf(search, buffOffset)
|
||||||
|
|
||||||
|
if (nativeSearchResult !== -1) {
|
||||||
|
return this._reverseOffset([blIndex, nativeSearchResult])
|
||||||
|
}
|
||||||
|
|
||||||
|
buffOffset = buff.length - search.length + 1 // end of native search window
|
||||||
|
} else {
|
||||||
|
const revOffset = this._reverseOffset([blIndex, buffOffset])
|
||||||
|
|
||||||
|
if (this._match(revOffset, search)) {
|
||||||
|
return revOffset
|
||||||
|
}
|
||||||
|
|
||||||
|
buffOffset++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buffOffset = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList.prototype._match = function (offset, search) {
|
||||||
|
if (this.length - offset < search.length) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let searchOffset = 0; searchOffset < search.length; searchOffset++) {
|
||||||
|
if (this.get(offset + searchOffset) !== search[searchOffset]) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
;(function () {
|
||||||
|
const methods = {
|
||||||
|
readDoubleBE: 8,
|
||||||
|
readDoubleLE: 8,
|
||||||
|
readFloatBE: 4,
|
||||||
|
readFloatLE: 4,
|
||||||
|
readInt32BE: 4,
|
||||||
|
readInt32LE: 4,
|
||||||
|
readUInt32BE: 4,
|
||||||
|
readUInt32LE: 4,
|
||||||
|
readInt16BE: 2,
|
||||||
|
readInt16LE: 2,
|
||||||
|
readUInt16BE: 2,
|
||||||
|
readUInt16LE: 2,
|
||||||
|
readInt8: 1,
|
||||||
|
readUInt8: 1,
|
||||||
|
readIntBE: null,
|
||||||
|
readIntLE: null,
|
||||||
|
readUIntBE: null,
|
||||||
|
readUIntLE: null
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const m in methods) {
|
||||||
|
(function (m) {
|
||||||
|
if (methods[m] === null) {
|
||||||
|
BufferList.prototype[m] = function (offset, byteLength) {
|
||||||
|
return this.slice(offset, offset + byteLength)[m](0, byteLength)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
BufferList.prototype[m] = function (offset = 0) {
|
||||||
|
return this.slice(offset, offset + methods[m])[m](0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}(m))
|
||||||
|
}
|
||||||
|
}())
|
||||||
|
|
||||||
|
// Used internally by the class and also as an indicator of this object being
|
||||||
|
// a `BufferList`. It's not possible to use `instanceof BufferList` in a browser
|
||||||
|
// environment because there could be multiple different copies of the
|
||||||
|
// BufferList class and some `BufferList`s might be `BufferList`s.
|
||||||
|
BufferList.prototype._isBufferList = function _isBufferList (b) {
|
||||||
|
return b instanceof BufferList || BufferList.isBufferList(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList.isBufferList = function isBufferList (b) {
|
||||||
|
return b != null && b[symbol]
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = BufferList
|
||||||
13
miniprogram/node_modules/bl/LICENSE.md
generated
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Copyright (c) 2013-2019 bl contributors
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
*bl contributors listed at <https://github.com/rvagg/bl#contributors>*
|
||||||
|
|
||||||
|
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.
|
||||||
247
miniprogram/node_modules/bl/README.md
generated
vendored
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
# bl *(BufferList)*
|
||||||
|
|
||||||
|
[](https://travis-ci.com/rvagg/bl/)
|
||||||
|
|
||||||
|
**A Node.js Buffer list collector, reader and streamer thingy.**
|
||||||
|
|
||||||
|
[](https://nodei.co/npm/bl/)
|
||||||
|
|
||||||
|
**bl** is a storage object for collections of Node Buffers, exposing them with the main Buffer readable API. Also works as a duplex stream so you can collect buffers from a stream that emits them and emit buffers to a stream that consumes them!
|
||||||
|
|
||||||
|
The original buffers are kept intact and copies are only done as necessary. Any reads that require the use of a single original buffer will return a slice of that buffer only (which references the same memory as the original buffer). Reads that span buffers perform concatenation as required and return the results transparently.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { BufferList } = require('bl')
|
||||||
|
|
||||||
|
const bl = new BufferList()
|
||||||
|
bl.append(Buffer.from('abcd'))
|
||||||
|
bl.append(Buffer.from('efg'))
|
||||||
|
bl.append('hi') // bl will also accept & convert Strings
|
||||||
|
bl.append(Buffer.from('j'))
|
||||||
|
bl.append(Buffer.from([ 0x3, 0x4 ]))
|
||||||
|
|
||||||
|
console.log(bl.length) // 12
|
||||||
|
|
||||||
|
console.log(bl.slice(0, 10).toString('ascii')) // 'abcdefghij'
|
||||||
|
console.log(bl.slice(3, 10).toString('ascii')) // 'defghij'
|
||||||
|
console.log(bl.slice(3, 6).toString('ascii')) // 'def'
|
||||||
|
console.log(bl.slice(3, 8).toString('ascii')) // 'defgh'
|
||||||
|
console.log(bl.slice(5, 10).toString('ascii')) // 'fghij'
|
||||||
|
|
||||||
|
console.log(bl.indexOf('def')) // 3
|
||||||
|
console.log(bl.indexOf('asdf')) // -1
|
||||||
|
|
||||||
|
// or just use toString!
|
||||||
|
console.log(bl.toString()) // 'abcdefghij\u0003\u0004'
|
||||||
|
console.log(bl.toString('ascii', 3, 8)) // 'defgh'
|
||||||
|
console.log(bl.toString('ascii', 5, 10)) // 'fghij'
|
||||||
|
|
||||||
|
// other standard Buffer readables
|
||||||
|
console.log(bl.readUInt16BE(10)) // 0x0304
|
||||||
|
console.log(bl.readUInt16LE(10)) // 0x0403
|
||||||
|
```
|
||||||
|
|
||||||
|
Give it a callback in the constructor and use it just like **[concat-stream](https://github.com/maxogden/node-concat-stream)**:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { BufferListStream } = require('bl')
|
||||||
|
const fs = require('fs')
|
||||||
|
|
||||||
|
fs.createReadStream('README.md')
|
||||||
|
.pipe(BufferListStream((err, data) => { // note 'new' isn't strictly required
|
||||||
|
// `data` is a complete Buffer object containing the full data
|
||||||
|
console.log(data.toString())
|
||||||
|
}))
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that when you use the *callback* method like this, the resulting `data` parameter is a concatenation of all `Buffer` objects in the list. If you want to avoid the overhead of this concatenation (in cases of extreme performance consciousness), then avoid the *callback* method and just listen to `'end'` instead, like a standard Stream.
|
||||||
|
|
||||||
|
Or to fetch a URL using [hyperquest](https://github.com/substack/hyperquest) (should work with [request](http://github.com/mikeal/request) and even plain Node http too!):
|
||||||
|
|
||||||
|
```js
|
||||||
|
const hyperquest = require('hyperquest')
|
||||||
|
const { BufferListStream } = require('bl')
|
||||||
|
|
||||||
|
const url = 'https://raw.github.com/rvagg/bl/master/README.md'
|
||||||
|
|
||||||
|
hyperquest(url).pipe(BufferListStream((err, data) => {
|
||||||
|
console.log(data.toString())
|
||||||
|
}))
|
||||||
|
```
|
||||||
|
|
||||||
|
Or, use it as a readable stream to recompose a list of Buffers to an output source:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { BufferListStream } = require('bl')
|
||||||
|
const fs = require('fs')
|
||||||
|
|
||||||
|
var bl = new BufferListStream()
|
||||||
|
bl.append(Buffer.from('abcd'))
|
||||||
|
bl.append(Buffer.from('efg'))
|
||||||
|
bl.append(Buffer.from('hi'))
|
||||||
|
bl.append(Buffer.from('j'))
|
||||||
|
|
||||||
|
bl.pipe(fs.createWriteStream('gibberish.txt'))
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
* <a href="#ctor"><code><b>new BufferList([ buf ])</b></code></a>
|
||||||
|
* <a href="#isBufferList"><code><b>BufferList.isBufferList(obj)</b></code></a>
|
||||||
|
* <a href="#length"><code>bl.<b>length</b></code></a>
|
||||||
|
* <a href="#append"><code>bl.<b>append(buffer)</b></code></a>
|
||||||
|
* <a href="#get"><code>bl.<b>get(index)</b></code></a>
|
||||||
|
* <a href="#indexOf"><code>bl.<b>indexOf(value[, byteOffset][, encoding])</b></code></a>
|
||||||
|
* <a href="#slice"><code>bl.<b>slice([ start[, end ] ])</b></code></a>
|
||||||
|
* <a href="#shallowSlice"><code>bl.<b>shallowSlice([ start[, end ] ])</b></code></a>
|
||||||
|
* <a href="#copy"><code>bl.<b>copy(dest, [ destStart, [ srcStart [, srcEnd ] ] ])</b></code></a>
|
||||||
|
* <a href="#duplicate"><code>bl.<b>duplicate()</b></code></a>
|
||||||
|
* <a href="#consume"><code>bl.<b>consume(bytes)</b></code></a>
|
||||||
|
* <a href="#toString"><code>bl.<b>toString([encoding, [ start, [ end ]]])</b></code></a>
|
||||||
|
* <a href="#readXX"><code>bl.<b>readDoubleBE()</b></code>, <code>bl.<b>readDoubleLE()</b></code>, <code>bl.<b>readFloatBE()</b></code>, <code>bl.<b>readFloatLE()</b></code>, <code>bl.<b>readInt32BE()</b></code>, <code>bl.<b>readInt32LE()</b></code>, <code>bl.<b>readUInt32BE()</b></code>, <code>bl.<b>readUInt32LE()</b></code>, <code>bl.<b>readInt16BE()</b></code>, <code>bl.<b>readInt16LE()</b></code>, <code>bl.<b>readUInt16BE()</b></code>, <code>bl.<b>readUInt16LE()</b></code>, <code>bl.<b>readInt8()</b></code>, <code>bl.<b>readUInt8()</b></code></a>
|
||||||
|
* <a href="#ctorStream"><code><b>new BufferListStream([ callback ])</b></code></a>
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
<a name="ctor"></a>
|
||||||
|
### new BufferList([ Buffer | Buffer array | BufferList | BufferList array | String ])
|
||||||
|
No arguments are _required_ for the constructor, but you can initialise the list by passing in a single `Buffer` object or an array of `Buffer` objects.
|
||||||
|
|
||||||
|
`new` is not strictly required, if you don't instantiate a new object, it will be done automatically for you so you can create a new instance simply with:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { BufferList } = require('bl')
|
||||||
|
const bl = BufferList()
|
||||||
|
|
||||||
|
// equivalent to:
|
||||||
|
|
||||||
|
const { BufferList } = require('bl')
|
||||||
|
const bl = new BufferList()
|
||||||
|
```
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
<a name="isBufferList"></a>
|
||||||
|
### BufferList.isBufferList(obj)
|
||||||
|
Determines if the passed object is a `BufferList`. It will return `true` if the passed object is an instance of `BufferList` **or** `BufferListStream` and `false` otherwise.
|
||||||
|
|
||||||
|
N.B. this won't return `true` for `BufferList` or `BufferListStream` instances created by versions of this library before this static method was added.
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
<a name="length"></a>
|
||||||
|
### bl.length
|
||||||
|
Get the length of the list in bytes. This is the sum of the lengths of all of the buffers contained in the list, minus any initial offset for a semi-consumed buffer at the beginning. Should accurately represent the total number of bytes that can be read from the list.
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
<a name="append"></a>
|
||||||
|
### bl.append(Buffer | Buffer array | BufferList | BufferList array | String)
|
||||||
|
`append(buffer)` adds an additional buffer or BufferList to the internal list. `this` is returned so it can be chained.
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
<a name="get"></a>
|
||||||
|
### bl.get(index)
|
||||||
|
`get()` will return the byte at the specified index.
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
<a name="indexOf"></a>
|
||||||
|
### bl.indexOf(value[, byteOffset][, encoding])
|
||||||
|
`get()` will return the byte at the specified index.
|
||||||
|
`indexOf()` method returns the first index at which a given element can be found in the BufferList, or -1 if it is not present.
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
<a name="slice"></a>
|
||||||
|
### bl.slice([ start, [ end ] ])
|
||||||
|
`slice()` returns a new `Buffer` object containing the bytes within the range specified. Both `start` and `end` are optional and will default to the beginning and end of the list respectively.
|
||||||
|
|
||||||
|
If the requested range spans a single internal buffer then a slice of that buffer will be returned which shares the original memory range of that Buffer. If the range spans multiple buffers then copy operations will likely occur to give you a uniform Buffer.
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
<a name="shallowSlice"></a>
|
||||||
|
### bl.shallowSlice([ start, [ end ] ])
|
||||||
|
`shallowSlice()` returns a new `BufferList` object containing the bytes within the range specified. Both `start` and `end` are optional and will default to the beginning and end of the list respectively.
|
||||||
|
|
||||||
|
No copies will be performed. All buffers in the result share memory with the original list.
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
<a name="copy"></a>
|
||||||
|
### bl.copy(dest, [ destStart, [ srcStart [, srcEnd ] ] ])
|
||||||
|
`copy()` copies the content of the list in the `dest` buffer, starting from `destStart` and containing the bytes within the range specified with `srcStart` to `srcEnd`. `destStart`, `start` and `end` are optional and will default to the beginning of the `dest` buffer, and the beginning and end of the list respectively.
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
<a name="duplicate"></a>
|
||||||
|
### bl.duplicate()
|
||||||
|
`duplicate()` performs a **shallow-copy** of the list. The internal Buffers remains the same, so if you change the underlying Buffers, the change will be reflected in both the original and the duplicate. This method is needed if you want to call `consume()` or `pipe()` and still keep the original list.Example:
|
||||||
|
|
||||||
|
```js
|
||||||
|
var bl = new BufferListStream()
|
||||||
|
|
||||||
|
bl.append('hello')
|
||||||
|
bl.append(' world')
|
||||||
|
bl.append('\n')
|
||||||
|
|
||||||
|
bl.duplicate().pipe(process.stdout, { end: false })
|
||||||
|
|
||||||
|
console.log(bl.toString())
|
||||||
|
```
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
<a name="consume"></a>
|
||||||
|
### bl.consume(bytes)
|
||||||
|
`consume()` will shift bytes *off the start of the list*. The number of bytes consumed don't need to line up with the sizes of the internal Buffers—initial offsets will be calculated accordingly in order to give you a consistent view of the data.
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
<a name="toString"></a>
|
||||||
|
### bl.toString([encoding, [ start, [ end ]]])
|
||||||
|
`toString()` will return a string representation of the buffer. The optional `start` and `end` arguments are passed on to `slice()`, while the `encoding` is passed on to `toString()` of the resulting Buffer. See the [Buffer#toString()](http://nodejs.org/docs/latest/api/buffer.html#buffer_buf_tostring_encoding_start_end) documentation for more information.
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
<a name="readXX"></a>
|
||||||
|
### bl.readDoubleBE(), bl.readDoubleLE(), bl.readFloatBE(), bl.readFloatLE(), bl.readInt32BE(), bl.readInt32LE(), bl.readUInt32BE(), bl.readUInt32LE(), bl.readInt16BE(), bl.readInt16LE(), bl.readUInt16BE(), bl.readUInt16LE(), bl.readInt8(), bl.readUInt8()
|
||||||
|
|
||||||
|
All of the standard byte-reading methods of the `Buffer` interface are implemented and will operate across internal Buffer boundaries transparently.
|
||||||
|
|
||||||
|
See the <b><code>[Buffer](http://nodejs.org/docs/latest/api/buffer.html)</code></b> documentation for how these work.
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
<a name="ctorStream"></a>
|
||||||
|
### new BufferListStream([ callback | Buffer | Buffer array | BufferList | BufferList array | String ])
|
||||||
|
**BufferListStream** is a Node **[Duplex Stream](http://nodejs.org/docs/latest/api/stream.html#stream_class_stream_duplex)**, so it can be read from and written to like a standard Node stream. You can also `pipe()` to and from a **BufferListStream** instance.
|
||||||
|
|
||||||
|
The constructor takes an optional callback, if supplied, the callback will be called with an error argument followed by a reference to the **bl** instance, when `bl.end()` is called (i.e. from a piped stream). This is a convenient method of collecting the entire contents of a stream, particularly when the stream is *chunky*, such as a network stream.
|
||||||
|
|
||||||
|
Normally, no arguments are required for the constructor, but you can initialise the list by passing in a single `Buffer` object or an array of `Buffer` object.
|
||||||
|
|
||||||
|
`new` is not strictly required, if you don't instantiate a new object, it will be done automatically for you so you can create a new instance simply with:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { BufferListStream } = require('bl')
|
||||||
|
const bl = BufferListStream()
|
||||||
|
|
||||||
|
// equivalent to:
|
||||||
|
|
||||||
|
const { BufferListStream } = require('bl')
|
||||||
|
const bl = new BufferListStream()
|
||||||
|
```
|
||||||
|
|
||||||
|
N.B. For backwards compatibility reasons, `BufferListStream` is the **default** export when you `require('bl')`:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { BufferListStream } = require('bl')
|
||||||
|
// equivalent to:
|
||||||
|
const BufferListStream = require('bl')
|
||||||
|
```
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
**bl** is brought to you by the following hackers:
|
||||||
|
|
||||||
|
* [Rod Vagg](https://github.com/rvagg)
|
||||||
|
* [Matteo Collina](https://github.com/mcollina)
|
||||||
|
* [Jarett Cruger](https://github.com/jcrugzz)
|
||||||
|
|
||||||
|
<a name="license"></a>
|
||||||
|
## License & copyright
|
||||||
|
|
||||||
|
Copyright (c) 2013-2019 bl contributors (listed above).
|
||||||
|
|
||||||
|
bl is licensed under the MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details.
|
||||||
84
miniprogram/node_modules/bl/bl.js
generated
vendored
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
const DuplexStream = require('readable-stream').Duplex
|
||||||
|
const inherits = require('inherits')
|
||||||
|
const BufferList = require('./BufferList')
|
||||||
|
|
||||||
|
function BufferListStream (callback) {
|
||||||
|
if (!(this instanceof BufferListStream)) {
|
||||||
|
return new BufferListStream(callback)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof callback === 'function') {
|
||||||
|
this._callback = callback
|
||||||
|
|
||||||
|
const piper = function piper (err) {
|
||||||
|
if (this._callback) {
|
||||||
|
this._callback(err)
|
||||||
|
this._callback = null
|
||||||
|
}
|
||||||
|
}.bind(this)
|
||||||
|
|
||||||
|
this.on('pipe', function onPipe (src) {
|
||||||
|
src.on('error', piper)
|
||||||
|
})
|
||||||
|
this.on('unpipe', function onUnpipe (src) {
|
||||||
|
src.removeListener('error', piper)
|
||||||
|
})
|
||||||
|
|
||||||
|
callback = null
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferList._init.call(this, callback)
|
||||||
|
DuplexStream.call(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
inherits(BufferListStream, DuplexStream)
|
||||||
|
Object.assign(BufferListStream.prototype, BufferList.prototype)
|
||||||
|
|
||||||
|
BufferListStream.prototype._new = function _new (callback) {
|
||||||
|
return new BufferListStream(callback)
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferListStream.prototype._write = function _write (buf, encoding, callback) {
|
||||||
|
this._appendBuffer(buf)
|
||||||
|
|
||||||
|
if (typeof callback === 'function') {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferListStream.prototype._read = function _read (size) {
|
||||||
|
if (!this.length) {
|
||||||
|
return this.push(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
size = Math.min(size, this.length)
|
||||||
|
this.push(this.slice(0, size))
|
||||||
|
this.consume(size)
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferListStream.prototype.end = function end (chunk) {
|
||||||
|
DuplexStream.prototype.end.call(this, chunk)
|
||||||
|
|
||||||
|
if (this._callback) {
|
||||||
|
this._callback(null, this.slice())
|
||||||
|
this._callback = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferListStream.prototype._destroy = function _destroy (err, cb) {
|
||||||
|
this._bufs.length = 0
|
||||||
|
this.length = 0
|
||||||
|
cb(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferListStream.prototype._isBufferList = function _isBufferList (b) {
|
||||||
|
return b instanceof BufferListStream || b instanceof BufferList || BufferListStream.isBufferList(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferListStream.isBufferList = BufferList.isBufferList
|
||||||
|
|
||||||
|
module.exports = BufferListStream
|
||||||
|
module.exports.BufferListStream = BufferListStream
|
||||||
|
module.exports.BufferList = BufferList
|
||||||
37
miniprogram/node_modules/bl/package.json
generated
vendored
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"name": "bl",
|
||||||
|
"version": "4.1.0",
|
||||||
|
"description": "Buffer List: collect buffers and access with a standard readable Buffer interface, streamable too!",
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "bl.js",
|
||||||
|
"scripts": {
|
||||||
|
"lint": "standard *.js test/*.js",
|
||||||
|
"test": "npm run lint && node test/test.js | faucet"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/rvagg/bl.git"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/rvagg/bl",
|
||||||
|
"authors": [
|
||||||
|
"Rod Vagg <rod@vagg.org> (https://github.com/rvagg)",
|
||||||
|
"Matteo Collina <matteo.collina@gmail.com> (https://github.com/mcollina)",
|
||||||
|
"Jarett Cruger <jcrugzz@gmail.com> (https://github.com/jcrugzz)"
|
||||||
|
],
|
||||||
|
"keywords": [
|
||||||
|
"buffer",
|
||||||
|
"buffers",
|
||||||
|
"stream",
|
||||||
|
"awesomesauce"
|
||||||
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"buffer": "^5.5.0",
|
||||||
|
"inherits": "^2.0.4",
|
||||||
|
"readable-stream": "^3.4.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"faucet": "~0.0.1",
|
||||||
|
"standard": "^14.3.0",
|
||||||
|
"tape": "^4.11.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
21
miniprogram/node_modules/bl/test/convert.js
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
const tape = require('tape')
|
||||||
|
const { BufferList, BufferListStream } = require('../')
|
||||||
|
const { Buffer } = require('buffer')
|
||||||
|
|
||||||
|
tape('convert from BufferList to BufferListStream', (t) => {
|
||||||
|
const data = Buffer.from(`TEST-${Date.now()}`)
|
||||||
|
const bl = new BufferList(data)
|
||||||
|
const bls = new BufferListStream(bl)
|
||||||
|
t.ok(bl.slice().equals(bls.slice()))
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('convert from BufferListStream to BufferList', (t) => {
|
||||||
|
const data = Buffer.from(`TEST-${Date.now()}`)
|
||||||
|
const bls = new BufferListStream(data)
|
||||||
|
const bl = new BufferList(bls)
|
||||||
|
t.ok(bl.slice().equals(bls.slice()))
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
492
miniprogram/node_modules/bl/test/indexOf.js
generated
vendored
Normal file
@ -0,0 +1,492 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
const tape = require('tape')
|
||||||
|
const BufferList = require('../')
|
||||||
|
const { Buffer } = require('buffer')
|
||||||
|
|
||||||
|
tape('indexOf single byte needle', (t) => {
|
||||||
|
const bl = new BufferList(['abcdefg', 'abcdefg', '12345'])
|
||||||
|
|
||||||
|
t.equal(bl.indexOf('e'), 4)
|
||||||
|
t.equal(bl.indexOf('e', 5), 11)
|
||||||
|
t.equal(bl.indexOf('e', 12), -1)
|
||||||
|
t.equal(bl.indexOf('5'), 18)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('indexOf multiple byte needle', (t) => {
|
||||||
|
const bl = new BufferList(['abcdefg', 'abcdefg'])
|
||||||
|
|
||||||
|
t.equal(bl.indexOf('ef'), 4)
|
||||||
|
t.equal(bl.indexOf('ef', 5), 11)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('indexOf multiple byte needles across buffer boundaries', (t) => {
|
||||||
|
const bl = new BufferList(['abcdefg', 'abcdefg'])
|
||||||
|
|
||||||
|
t.equal(bl.indexOf('fgabc'), 5)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('indexOf takes a Uint8Array search', (t) => {
|
||||||
|
const bl = new BufferList(['abcdefg', 'abcdefg'])
|
||||||
|
const search = new Uint8Array([102, 103, 97, 98, 99]) // fgabc
|
||||||
|
|
||||||
|
t.equal(bl.indexOf(search), 5)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('indexOf takes a buffer list search', (t) => {
|
||||||
|
const bl = new BufferList(['abcdefg', 'abcdefg'])
|
||||||
|
const search = new BufferList('fgabc')
|
||||||
|
|
||||||
|
t.equal(bl.indexOf(search), 5)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('indexOf a zero byte needle', (t) => {
|
||||||
|
const b = new BufferList('abcdef')
|
||||||
|
const bufEmpty = Buffer.from('')
|
||||||
|
|
||||||
|
t.equal(b.indexOf(''), 0)
|
||||||
|
t.equal(b.indexOf('', 1), 1)
|
||||||
|
t.equal(b.indexOf('', b.length + 1), b.length)
|
||||||
|
t.equal(b.indexOf('', Infinity), b.length)
|
||||||
|
t.equal(b.indexOf(bufEmpty), 0)
|
||||||
|
t.equal(b.indexOf(bufEmpty, 1), 1)
|
||||||
|
t.equal(b.indexOf(bufEmpty, b.length + 1), b.length)
|
||||||
|
t.equal(b.indexOf(bufEmpty, Infinity), b.length)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('indexOf buffers smaller and larger than the needle', (t) => {
|
||||||
|
const bl = new BufferList(['abcdefg', 'a', 'bcdefg', 'a', 'bcfgab'])
|
||||||
|
|
||||||
|
t.equal(bl.indexOf('fgabc'), 5)
|
||||||
|
t.equal(bl.indexOf('fgabc', 6), 12)
|
||||||
|
t.equal(bl.indexOf('fgabc', 13), -1)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
// only present in node 6+
|
||||||
|
;(process.version.substr(1).split('.')[0] >= 6) && tape('indexOf latin1 and binary encoding', (t) => {
|
||||||
|
const b = new BufferList('abcdef')
|
||||||
|
|
||||||
|
// test latin1 encoding
|
||||||
|
t.equal(
|
||||||
|
new BufferList(Buffer.from(b.toString('latin1'), 'latin1'))
|
||||||
|
.indexOf('d', 0, 'latin1'),
|
||||||
|
3
|
||||||
|
)
|
||||||
|
t.equal(
|
||||||
|
new BufferList(Buffer.from(b.toString('latin1'), 'latin1'))
|
||||||
|
.indexOf(Buffer.from('d', 'latin1'), 0, 'latin1'),
|
||||||
|
3
|
||||||
|
)
|
||||||
|
t.equal(
|
||||||
|
new BufferList(Buffer.from('aa\u00e8aa', 'latin1'))
|
||||||
|
.indexOf('\u00e8', 'latin1'),
|
||||||
|
2
|
||||||
|
)
|
||||||
|
t.equal(
|
||||||
|
new BufferList(Buffer.from('\u00e8', 'latin1'))
|
||||||
|
.indexOf('\u00e8', 'latin1'),
|
||||||
|
0
|
||||||
|
)
|
||||||
|
t.equal(
|
||||||
|
new BufferList(Buffer.from('\u00e8', 'latin1'))
|
||||||
|
.indexOf(Buffer.from('\u00e8', 'latin1'), 'latin1'),
|
||||||
|
0
|
||||||
|
)
|
||||||
|
|
||||||
|
// test binary encoding
|
||||||
|
t.equal(
|
||||||
|
new BufferList(Buffer.from(b.toString('binary'), 'binary'))
|
||||||
|
.indexOf('d', 0, 'binary'),
|
||||||
|
3
|
||||||
|
)
|
||||||
|
t.equal(
|
||||||
|
new BufferList(Buffer.from(b.toString('binary'), 'binary'))
|
||||||
|
.indexOf(Buffer.from('d', 'binary'), 0, 'binary'),
|
||||||
|
3
|
||||||
|
)
|
||||||
|
t.equal(
|
||||||
|
new BufferList(Buffer.from('aa\u00e8aa', 'binary'))
|
||||||
|
.indexOf('\u00e8', 'binary'),
|
||||||
|
2
|
||||||
|
)
|
||||||
|
t.equal(
|
||||||
|
new BufferList(Buffer.from('\u00e8', 'binary'))
|
||||||
|
.indexOf('\u00e8', 'binary'),
|
||||||
|
0
|
||||||
|
)
|
||||||
|
t.equal(
|
||||||
|
new BufferList(Buffer.from('\u00e8', 'binary'))
|
||||||
|
.indexOf(Buffer.from('\u00e8', 'binary'), 'binary'),
|
||||||
|
0
|
||||||
|
)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('indexOf the entire nodejs10 buffer test suite', (t) => {
|
||||||
|
const b = new BufferList('abcdef')
|
||||||
|
const bufA = Buffer.from('a')
|
||||||
|
const bufBc = Buffer.from('bc')
|
||||||
|
const bufF = Buffer.from('f')
|
||||||
|
const bufZ = Buffer.from('z')
|
||||||
|
|
||||||
|
const stringComparison = 'abcdef'
|
||||||
|
|
||||||
|
t.equal(b.indexOf('a'), 0)
|
||||||
|
t.equal(b.indexOf('a', 1), -1)
|
||||||
|
t.equal(b.indexOf('a', -1), -1)
|
||||||
|
t.equal(b.indexOf('a', -4), -1)
|
||||||
|
t.equal(b.indexOf('a', -b.length), 0)
|
||||||
|
t.equal(b.indexOf('a', NaN), 0)
|
||||||
|
t.equal(b.indexOf('a', -Infinity), 0)
|
||||||
|
t.equal(b.indexOf('a', Infinity), -1)
|
||||||
|
t.equal(b.indexOf('bc'), 1)
|
||||||
|
t.equal(b.indexOf('bc', 2), -1)
|
||||||
|
t.equal(b.indexOf('bc', -1), -1)
|
||||||
|
t.equal(b.indexOf('bc', -3), -1)
|
||||||
|
t.equal(b.indexOf('bc', -5), 1)
|
||||||
|
t.equal(b.indexOf('bc', NaN), 1)
|
||||||
|
t.equal(b.indexOf('bc', -Infinity), 1)
|
||||||
|
t.equal(b.indexOf('bc', Infinity), -1)
|
||||||
|
t.equal(b.indexOf('f'), b.length - 1)
|
||||||
|
t.equal(b.indexOf('z'), -1)
|
||||||
|
|
||||||
|
// empty search tests
|
||||||
|
t.equal(b.indexOf(bufA), 0)
|
||||||
|
t.equal(b.indexOf(bufA, 1), -1)
|
||||||
|
t.equal(b.indexOf(bufA, -1), -1)
|
||||||
|
t.equal(b.indexOf(bufA, -4), -1)
|
||||||
|
t.equal(b.indexOf(bufA, -b.length), 0)
|
||||||
|
t.equal(b.indexOf(bufA, NaN), 0)
|
||||||
|
t.equal(b.indexOf(bufA, -Infinity), 0)
|
||||||
|
t.equal(b.indexOf(bufA, Infinity), -1)
|
||||||
|
t.equal(b.indexOf(bufBc), 1)
|
||||||
|
t.equal(b.indexOf(bufBc, 2), -1)
|
||||||
|
t.equal(b.indexOf(bufBc, -1), -1)
|
||||||
|
t.equal(b.indexOf(bufBc, -3), -1)
|
||||||
|
t.equal(b.indexOf(bufBc, -5), 1)
|
||||||
|
t.equal(b.indexOf(bufBc, NaN), 1)
|
||||||
|
t.equal(b.indexOf(bufBc, -Infinity), 1)
|
||||||
|
t.equal(b.indexOf(bufBc, Infinity), -1)
|
||||||
|
t.equal(b.indexOf(bufF), b.length - 1)
|
||||||
|
t.equal(b.indexOf(bufZ), -1)
|
||||||
|
t.equal(b.indexOf(0x61), 0)
|
||||||
|
t.equal(b.indexOf(0x61, 1), -1)
|
||||||
|
t.equal(b.indexOf(0x61, -1), -1)
|
||||||
|
t.equal(b.indexOf(0x61, -4), -1)
|
||||||
|
t.equal(b.indexOf(0x61, -b.length), 0)
|
||||||
|
t.equal(b.indexOf(0x61, NaN), 0)
|
||||||
|
t.equal(b.indexOf(0x61, -Infinity), 0)
|
||||||
|
t.equal(b.indexOf(0x61, Infinity), -1)
|
||||||
|
t.equal(b.indexOf(0x0), -1)
|
||||||
|
|
||||||
|
// test offsets
|
||||||
|
t.equal(b.indexOf('d', 2), 3)
|
||||||
|
t.equal(b.indexOf('f', 5), 5)
|
||||||
|
t.equal(b.indexOf('f', -1), 5)
|
||||||
|
t.equal(b.indexOf('f', 6), -1)
|
||||||
|
|
||||||
|
t.equal(b.indexOf(Buffer.from('d'), 2), 3)
|
||||||
|
t.equal(b.indexOf(Buffer.from('f'), 5), 5)
|
||||||
|
t.equal(b.indexOf(Buffer.from('f'), -1), 5)
|
||||||
|
t.equal(b.indexOf(Buffer.from('f'), 6), -1)
|
||||||
|
|
||||||
|
t.equal(Buffer.from('ff').indexOf(Buffer.from('f'), 1, 'ucs2'), -1)
|
||||||
|
|
||||||
|
// test invalid and uppercase encoding
|
||||||
|
t.equal(b.indexOf('b', 'utf8'), 1)
|
||||||
|
t.equal(b.indexOf('b', 'UTF8'), 1)
|
||||||
|
t.equal(b.indexOf('62', 'HEX'), 1)
|
||||||
|
t.throws(() => b.indexOf('bad', 'enc'), TypeError)
|
||||||
|
|
||||||
|
// test hex encoding
|
||||||
|
t.equal(
|
||||||
|
Buffer.from(b.toString('hex'), 'hex')
|
||||||
|
.indexOf('64', 0, 'hex'),
|
||||||
|
3
|
||||||
|
)
|
||||||
|
t.equal(
|
||||||
|
Buffer.from(b.toString('hex'), 'hex')
|
||||||
|
.indexOf(Buffer.from('64', 'hex'), 0, 'hex'),
|
||||||
|
3
|
||||||
|
)
|
||||||
|
|
||||||
|
// test base64 encoding
|
||||||
|
t.equal(
|
||||||
|
Buffer.from(b.toString('base64'), 'base64')
|
||||||
|
.indexOf('ZA==', 0, 'base64'),
|
||||||
|
3
|
||||||
|
)
|
||||||
|
t.equal(
|
||||||
|
Buffer.from(b.toString('base64'), 'base64')
|
||||||
|
.indexOf(Buffer.from('ZA==', 'base64'), 0, 'base64'),
|
||||||
|
3
|
||||||
|
)
|
||||||
|
|
||||||
|
// test ascii encoding
|
||||||
|
t.equal(
|
||||||
|
Buffer.from(b.toString('ascii'), 'ascii')
|
||||||
|
.indexOf('d', 0, 'ascii'),
|
||||||
|
3
|
||||||
|
)
|
||||||
|
t.equal(
|
||||||
|
Buffer.from(b.toString('ascii'), 'ascii')
|
||||||
|
.indexOf(Buffer.from('d', 'ascii'), 0, 'ascii'),
|
||||||
|
3
|
||||||
|
)
|
||||||
|
|
||||||
|
// test optional offset with passed encoding
|
||||||
|
t.equal(Buffer.from('aaaa0').indexOf('30', 'hex'), 4)
|
||||||
|
t.equal(Buffer.from('aaaa00a').indexOf('3030', 'hex'), 4)
|
||||||
|
|
||||||
|
{
|
||||||
|
// test usc2 encoding
|
||||||
|
const twoByteString = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'ucs2')
|
||||||
|
|
||||||
|
t.equal(8, twoByteString.indexOf('\u0395', 4, 'ucs2'))
|
||||||
|
t.equal(6, twoByteString.indexOf('\u03a3', -4, 'ucs2'))
|
||||||
|
t.equal(4, twoByteString.indexOf('\u03a3', -6, 'ucs2'))
|
||||||
|
t.equal(4, twoByteString.indexOf(
|
||||||
|
Buffer.from('\u03a3', 'ucs2'), -6, 'ucs2'))
|
||||||
|
t.equal(-1, twoByteString.indexOf('\u03a3', -2, 'ucs2'))
|
||||||
|
}
|
||||||
|
|
||||||
|
const mixedByteStringUcs2 =
|
||||||
|
Buffer.from('\u039a\u0391abc\u03a3\u03a3\u0395', 'ucs2')
|
||||||
|
|
||||||
|
t.equal(6, mixedByteStringUcs2.indexOf('bc', 0, 'ucs2'))
|
||||||
|
t.equal(10, mixedByteStringUcs2.indexOf('\u03a3', 0, 'ucs2'))
|
||||||
|
t.equal(-1, mixedByteStringUcs2.indexOf('\u0396', 0, 'ucs2'))
|
||||||
|
|
||||||
|
t.equal(
|
||||||
|
6, mixedByteStringUcs2.indexOf(Buffer.from('bc', 'ucs2'), 0, 'ucs2'))
|
||||||
|
t.equal(
|
||||||
|
10, mixedByteStringUcs2.indexOf(Buffer.from('\u03a3', 'ucs2'), 0, 'ucs2'))
|
||||||
|
t.equal(
|
||||||
|
-1, mixedByteStringUcs2.indexOf(Buffer.from('\u0396', 'ucs2'), 0, 'ucs2'))
|
||||||
|
|
||||||
|
{
|
||||||
|
const twoByteString = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'ucs2')
|
||||||
|
|
||||||
|
// Test single char pattern
|
||||||
|
t.equal(0, twoByteString.indexOf('\u039a', 0, 'ucs2'))
|
||||||
|
let index = twoByteString.indexOf('\u0391', 0, 'ucs2')
|
||||||
|
t.equal(2, index, `Alpha - at index ${index}`)
|
||||||
|
index = twoByteString.indexOf('\u03a3', 0, 'ucs2')
|
||||||
|
t.equal(4, index, `First Sigma - at index ${index}`)
|
||||||
|
index = twoByteString.indexOf('\u03a3', 6, 'ucs2')
|
||||||
|
t.equal(6, index, `Second Sigma - at index ${index}`)
|
||||||
|
index = twoByteString.indexOf('\u0395', 0, 'ucs2')
|
||||||
|
t.equal(8, index, `Epsilon - at index ${index}`)
|
||||||
|
index = twoByteString.indexOf('\u0392', 0, 'ucs2')
|
||||||
|
t.equal(-1, index, `Not beta - at index ${index}`)
|
||||||
|
|
||||||
|
// Test multi-char pattern
|
||||||
|
index = twoByteString.indexOf('\u039a\u0391', 0, 'ucs2')
|
||||||
|
t.equal(0, index, `Lambda Alpha - at index ${index}`)
|
||||||
|
index = twoByteString.indexOf('\u0391\u03a3', 0, 'ucs2')
|
||||||
|
t.equal(2, index, `Alpha Sigma - at index ${index}`)
|
||||||
|
index = twoByteString.indexOf('\u03a3\u03a3', 0, 'ucs2')
|
||||||
|
t.equal(4, index, `Sigma Sigma - at index ${index}`)
|
||||||
|
index = twoByteString.indexOf('\u03a3\u0395', 0, 'ucs2')
|
||||||
|
t.equal(6, index, `Sigma Epsilon - at index ${index}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
const mixedByteStringUtf8 = Buffer.from('\u039a\u0391abc\u03a3\u03a3\u0395')
|
||||||
|
|
||||||
|
t.equal(5, mixedByteStringUtf8.indexOf('bc'))
|
||||||
|
t.equal(5, mixedByteStringUtf8.indexOf('bc', 5))
|
||||||
|
t.equal(5, mixedByteStringUtf8.indexOf('bc', -8))
|
||||||
|
t.equal(7, mixedByteStringUtf8.indexOf('\u03a3'))
|
||||||
|
t.equal(-1, mixedByteStringUtf8.indexOf('\u0396'))
|
||||||
|
|
||||||
|
// Test complex string indexOf algorithms. Only trigger for long strings.
|
||||||
|
// Long string that isn't a simple repeat of a shorter string.
|
||||||
|
let longString = 'A'
|
||||||
|
for (let i = 66; i < 76; i++) { // from 'B' to 'K'
|
||||||
|
longString = longString + String.fromCharCode(i) + longString
|
||||||
|
}
|
||||||
|
|
||||||
|
const longBufferString = Buffer.from(longString)
|
||||||
|
|
||||||
|
// pattern of 15 chars, repeated every 16 chars in long
|
||||||
|
let pattern = 'ABACABADABACABA'
|
||||||
|
for (let i = 0; i < longBufferString.length - pattern.length; i += 7) {
|
||||||
|
const index = longBufferString.indexOf(pattern, i)
|
||||||
|
t.equal((i + 15) & ~0xf, index,
|
||||||
|
`Long ABACABA...-string at index ${i}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
let index = longBufferString.indexOf('AJABACA')
|
||||||
|
t.equal(510, index, `Long AJABACA, First J - at index ${index}`)
|
||||||
|
index = longBufferString.indexOf('AJABACA', 511)
|
||||||
|
t.equal(1534, index, `Long AJABACA, Second J - at index ${index}`)
|
||||||
|
|
||||||
|
pattern = 'JABACABADABACABA'
|
||||||
|
index = longBufferString.indexOf(pattern)
|
||||||
|
t.equal(511, index, `Long JABACABA..., First J - at index ${index}`)
|
||||||
|
index = longBufferString.indexOf(pattern, 512)
|
||||||
|
t.equal(
|
||||||
|
1535, index, `Long JABACABA..., Second J - at index ${index}`)
|
||||||
|
|
||||||
|
// Search for a non-ASCII string in a pure ASCII string.
|
||||||
|
const asciiString = Buffer.from(
|
||||||
|
'somethingnotatallsinisterwhichalsoworks')
|
||||||
|
t.equal(-1, asciiString.indexOf('\x2061'))
|
||||||
|
t.equal(3, asciiString.indexOf('eth', 0))
|
||||||
|
|
||||||
|
// Search in string containing many non-ASCII chars.
|
||||||
|
const allCodePoints = []
|
||||||
|
for (let i = 0; i < 65536; i++) {
|
||||||
|
allCodePoints[i] = i
|
||||||
|
}
|
||||||
|
|
||||||
|
const allCharsString = String.fromCharCode.apply(String, allCodePoints)
|
||||||
|
const allCharsBufferUtf8 = Buffer.from(allCharsString)
|
||||||
|
const allCharsBufferUcs2 = Buffer.from(allCharsString, 'ucs2')
|
||||||
|
|
||||||
|
// Search for string long enough to trigger complex search with ASCII pattern
|
||||||
|
// and UC16 subject.
|
||||||
|
t.equal(-1, allCharsBufferUtf8.indexOf('notfound'))
|
||||||
|
t.equal(-1, allCharsBufferUcs2.indexOf('notfound'))
|
||||||
|
|
||||||
|
// Needle is longer than haystack, but only because it's encoded as UTF-16
|
||||||
|
t.equal(Buffer.from('aaaa').indexOf('a'.repeat(4), 'ucs2'), -1)
|
||||||
|
|
||||||
|
t.equal(Buffer.from('aaaa').indexOf('a'.repeat(4), 'utf8'), 0)
|
||||||
|
t.equal(Buffer.from('aaaa').indexOf('你好', 'ucs2'), -1)
|
||||||
|
|
||||||
|
// Haystack has odd length, but the needle is UCS2.
|
||||||
|
t.equal(Buffer.from('aaaaa').indexOf('b', 'ucs2'), -1)
|
||||||
|
|
||||||
|
{
|
||||||
|
// Find substrings in Utf8.
|
||||||
|
const lengths = [1, 3, 15] // Single char, simple and complex.
|
||||||
|
const indices = [0x5, 0x60, 0x400, 0x680, 0x7ee, 0xFF02, 0x16610, 0x2f77b]
|
||||||
|
for (let lengthIndex = 0; lengthIndex < lengths.length; lengthIndex++) {
|
||||||
|
for (let i = 0; i < indices.length; i++) {
|
||||||
|
const index = indices[i]
|
||||||
|
let length = lengths[lengthIndex]
|
||||||
|
|
||||||
|
if (index + length > 0x7F) {
|
||||||
|
length = 2 * length
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index + length > 0x7FF) {
|
||||||
|
length = 3 * length
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index + length > 0xFFFF) {
|
||||||
|
length = 4 * length
|
||||||
|
}
|
||||||
|
|
||||||
|
const patternBufferUtf8 = allCharsBufferUtf8.slice(index, index + length)
|
||||||
|
t.equal(index, allCharsBufferUtf8.indexOf(patternBufferUtf8))
|
||||||
|
|
||||||
|
const patternStringUtf8 = patternBufferUtf8.toString()
|
||||||
|
t.equal(index, allCharsBufferUtf8.indexOf(patternStringUtf8))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Find substrings in Usc2.
|
||||||
|
const lengths = [2, 4, 16] // Single char, simple and complex.
|
||||||
|
const indices = [0x5, 0x65, 0x105, 0x205, 0x285, 0x2005, 0x2085, 0xfff0]
|
||||||
|
|
||||||
|
for (let lengthIndex = 0; lengthIndex < lengths.length; lengthIndex++) {
|
||||||
|
for (let i = 0; i < indices.length; i++) {
|
||||||
|
const index = indices[i] * 2
|
||||||
|
const length = lengths[lengthIndex]
|
||||||
|
|
||||||
|
const patternBufferUcs2 =
|
||||||
|
allCharsBufferUcs2.slice(index, index + length)
|
||||||
|
t.equal(
|
||||||
|
index, allCharsBufferUcs2.indexOf(patternBufferUcs2, 0, 'ucs2'))
|
||||||
|
|
||||||
|
const patternStringUcs2 = patternBufferUcs2.toString('ucs2')
|
||||||
|
t.equal(
|
||||||
|
index, allCharsBufferUcs2.indexOf(patternStringUcs2, 0, 'ucs2'))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[
|
||||||
|
() => {},
|
||||||
|
{},
|
||||||
|
[]
|
||||||
|
].forEach((val) => {
|
||||||
|
t.throws(() => b.indexOf(val), TypeError, `"${JSON.stringify(val)}" should throw`)
|
||||||
|
})
|
||||||
|
|
||||||
|
// Test weird offset arguments.
|
||||||
|
// The following offsets coerce to NaN or 0, searching the whole Buffer
|
||||||
|
t.equal(b.indexOf('b', undefined), 1)
|
||||||
|
t.equal(b.indexOf('b', {}), 1)
|
||||||
|
t.equal(b.indexOf('b', 0), 1)
|
||||||
|
t.equal(b.indexOf('b', null), 1)
|
||||||
|
t.equal(b.indexOf('b', []), 1)
|
||||||
|
|
||||||
|
// The following offset coerces to 2, in other words +[2] === 2
|
||||||
|
t.equal(b.indexOf('b', [2]), -1)
|
||||||
|
|
||||||
|
// Behavior should match String.indexOf()
|
||||||
|
t.equal(
|
||||||
|
b.indexOf('b', undefined),
|
||||||
|
stringComparison.indexOf('b', undefined))
|
||||||
|
t.equal(
|
||||||
|
b.indexOf('b', {}),
|
||||||
|
stringComparison.indexOf('b', {}))
|
||||||
|
t.equal(
|
||||||
|
b.indexOf('b', 0),
|
||||||
|
stringComparison.indexOf('b', 0))
|
||||||
|
t.equal(
|
||||||
|
b.indexOf('b', null),
|
||||||
|
stringComparison.indexOf('b', null))
|
||||||
|
t.equal(
|
||||||
|
b.indexOf('b', []),
|
||||||
|
stringComparison.indexOf('b', []))
|
||||||
|
t.equal(
|
||||||
|
b.indexOf('b', [2]),
|
||||||
|
stringComparison.indexOf('b', [2]))
|
||||||
|
|
||||||
|
// test truncation of Number arguments to uint8
|
||||||
|
{
|
||||||
|
const buf = Buffer.from('this is a test')
|
||||||
|
|
||||||
|
t.equal(buf.indexOf(0x6973), 3)
|
||||||
|
t.equal(buf.indexOf(0x697320), 4)
|
||||||
|
t.equal(buf.indexOf(0x69732069), 2)
|
||||||
|
t.equal(buf.indexOf(0x697374657374), 0)
|
||||||
|
t.equal(buf.indexOf(0x69737374), 0)
|
||||||
|
t.equal(buf.indexOf(0x69737465), 11)
|
||||||
|
t.equal(buf.indexOf(0x69737465), 11)
|
||||||
|
t.equal(buf.indexOf(-140), 0)
|
||||||
|
t.equal(buf.indexOf(-152), 1)
|
||||||
|
t.equal(buf.indexOf(0xff), -1)
|
||||||
|
t.equal(buf.indexOf(0xffff), -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test that Uint8Array arguments are okay.
|
||||||
|
{
|
||||||
|
const needle = new Uint8Array([0x66, 0x6f, 0x6f])
|
||||||
|
const haystack = new BufferList(Buffer.from('a foo b foo'))
|
||||||
|
t.equal(haystack.indexOf(needle), 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
32
miniprogram/node_modules/bl/test/isBufferList.js
generated
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
const tape = require('tape')
|
||||||
|
const { BufferList, BufferListStream } = require('../')
|
||||||
|
const { Buffer } = require('buffer')
|
||||||
|
|
||||||
|
tape('isBufferList positives', (t) => {
|
||||||
|
t.ok(BufferList.isBufferList(new BufferList()))
|
||||||
|
t.ok(BufferList.isBufferList(new BufferListStream()))
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('isBufferList negatives', (t) => {
|
||||||
|
const types = [
|
||||||
|
null,
|
||||||
|
undefined,
|
||||||
|
NaN,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
{},
|
||||||
|
[],
|
||||||
|
Buffer.alloc(0),
|
||||||
|
[Buffer.alloc(0)]
|
||||||
|
]
|
||||||
|
|
||||||
|
for (const obj of types) {
|
||||||
|
t.notOk(BufferList.isBufferList(obj))
|
||||||
|
}
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
869
miniprogram/node_modules/bl/test/test.js
generated
vendored
Normal file
@ -0,0 +1,869 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
const tape = require('tape')
|
||||||
|
const crypto = require('crypto')
|
||||||
|
const fs = require('fs')
|
||||||
|
const path = require('path')
|
||||||
|
const BufferList = require('../')
|
||||||
|
const { Buffer } = require('buffer')
|
||||||
|
|
||||||
|
const encodings =
|
||||||
|
('hex utf8 utf-8 ascii binary base64' +
|
||||||
|
(process.browser ? '' : ' ucs2 ucs-2 utf16le utf-16le')).split(' ')
|
||||||
|
|
||||||
|
require('./indexOf')
|
||||||
|
require('./isBufferList')
|
||||||
|
require('./convert')
|
||||||
|
|
||||||
|
tape('single bytes from single buffer', function (t) {
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
bl.append(Buffer.from('abcd'))
|
||||||
|
|
||||||
|
t.equal(bl.length, 4)
|
||||||
|
t.equal(bl.get(-1), undefined)
|
||||||
|
t.equal(bl.get(0), 97)
|
||||||
|
t.equal(bl.get(1), 98)
|
||||||
|
t.equal(bl.get(2), 99)
|
||||||
|
t.equal(bl.get(3), 100)
|
||||||
|
t.equal(bl.get(4), undefined)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('single bytes from multiple buffers', function (t) {
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
bl.append(Buffer.from('abcd'))
|
||||||
|
bl.append(Buffer.from('efg'))
|
||||||
|
bl.append(Buffer.from('hi'))
|
||||||
|
bl.append(Buffer.from('j'))
|
||||||
|
|
||||||
|
t.equal(bl.length, 10)
|
||||||
|
|
||||||
|
t.equal(bl.get(0), 97)
|
||||||
|
t.equal(bl.get(1), 98)
|
||||||
|
t.equal(bl.get(2), 99)
|
||||||
|
t.equal(bl.get(3), 100)
|
||||||
|
t.equal(bl.get(4), 101)
|
||||||
|
t.equal(bl.get(5), 102)
|
||||||
|
t.equal(bl.get(6), 103)
|
||||||
|
t.equal(bl.get(7), 104)
|
||||||
|
t.equal(bl.get(8), 105)
|
||||||
|
t.equal(bl.get(9), 106)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('multi bytes from single buffer', function (t) {
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
bl.append(Buffer.from('abcd'))
|
||||||
|
|
||||||
|
t.equal(bl.length, 4)
|
||||||
|
|
||||||
|
t.equal(bl.slice(0, 4).toString('ascii'), 'abcd')
|
||||||
|
t.equal(bl.slice(0, 3).toString('ascii'), 'abc')
|
||||||
|
t.equal(bl.slice(1, 4).toString('ascii'), 'bcd')
|
||||||
|
t.equal(bl.slice(-4, -1).toString('ascii'), 'abc')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('multi bytes from single buffer (negative indexes)', function (t) {
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
bl.append(Buffer.from('buffer'))
|
||||||
|
|
||||||
|
t.equal(bl.length, 6)
|
||||||
|
|
||||||
|
t.equal(bl.slice(-6, -1).toString('ascii'), 'buffe')
|
||||||
|
t.equal(bl.slice(-6, -2).toString('ascii'), 'buff')
|
||||||
|
t.equal(bl.slice(-5, -2).toString('ascii'), 'uff')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('multiple bytes from multiple buffers', function (t) {
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
bl.append(Buffer.from('abcd'))
|
||||||
|
bl.append(Buffer.from('efg'))
|
||||||
|
bl.append(Buffer.from('hi'))
|
||||||
|
bl.append(Buffer.from('j'))
|
||||||
|
|
||||||
|
t.equal(bl.length, 10)
|
||||||
|
|
||||||
|
t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij')
|
||||||
|
t.equal(bl.slice(3, 10).toString('ascii'), 'defghij')
|
||||||
|
t.equal(bl.slice(3, 6).toString('ascii'), 'def')
|
||||||
|
t.equal(bl.slice(3, 8).toString('ascii'), 'defgh')
|
||||||
|
t.equal(bl.slice(5, 10).toString('ascii'), 'fghij')
|
||||||
|
t.equal(bl.slice(-7, -4).toString('ascii'), 'def')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('multiple bytes from multiple buffer lists', function (t) {
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
bl.append(new BufferList([Buffer.from('abcd'), Buffer.from('efg')]))
|
||||||
|
bl.append(new BufferList([Buffer.from('hi'), Buffer.from('j')]))
|
||||||
|
|
||||||
|
t.equal(bl.length, 10)
|
||||||
|
|
||||||
|
t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij')
|
||||||
|
|
||||||
|
t.equal(bl.slice(3, 10).toString('ascii'), 'defghij')
|
||||||
|
t.equal(bl.slice(3, 6).toString('ascii'), 'def')
|
||||||
|
t.equal(bl.slice(3, 8).toString('ascii'), 'defgh')
|
||||||
|
t.equal(bl.slice(5, 10).toString('ascii'), 'fghij')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
// same data as previous test, just using nested constructors
|
||||||
|
tape('multiple bytes from crazy nested buffer lists', function (t) {
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
bl.append(new BufferList([
|
||||||
|
new BufferList([
|
||||||
|
new BufferList(Buffer.from('abc')),
|
||||||
|
Buffer.from('d'),
|
||||||
|
new BufferList(Buffer.from('efg'))
|
||||||
|
]),
|
||||||
|
new BufferList([Buffer.from('hi')]),
|
||||||
|
new BufferList(Buffer.from('j'))
|
||||||
|
]))
|
||||||
|
|
||||||
|
t.equal(bl.length, 10)
|
||||||
|
|
||||||
|
t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij')
|
||||||
|
|
||||||
|
t.equal(bl.slice(3, 10).toString('ascii'), 'defghij')
|
||||||
|
t.equal(bl.slice(3, 6).toString('ascii'), 'def')
|
||||||
|
t.equal(bl.slice(3, 8).toString('ascii'), 'defgh')
|
||||||
|
t.equal(bl.slice(5, 10).toString('ascii'), 'fghij')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('append accepts arrays of Buffers', function (t) {
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
bl.append(Buffer.from('abc'))
|
||||||
|
bl.append([Buffer.from('def')])
|
||||||
|
bl.append([Buffer.from('ghi'), Buffer.from('jkl')])
|
||||||
|
bl.append([Buffer.from('mnop'), Buffer.from('qrstu'), Buffer.from('vwxyz')])
|
||||||
|
t.equal(bl.length, 26)
|
||||||
|
t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('append accepts arrays of Uint8Arrays', function (t) {
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
bl.append(new Uint8Array([97, 98, 99]))
|
||||||
|
bl.append([Uint8Array.from([100, 101, 102])])
|
||||||
|
bl.append([new Uint8Array([103, 104, 105]), new Uint8Array([106, 107, 108])])
|
||||||
|
bl.append([new Uint8Array([109, 110, 111, 112]), new Uint8Array([113, 114, 115, 116, 117]), new Uint8Array([118, 119, 120, 121, 122])])
|
||||||
|
t.equal(bl.length, 26)
|
||||||
|
t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('append accepts arrays of BufferLists', function (t) {
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
bl.append(Buffer.from('abc'))
|
||||||
|
bl.append([new BufferList('def')])
|
||||||
|
bl.append(new BufferList([Buffer.from('ghi'), new BufferList('jkl')]))
|
||||||
|
bl.append([Buffer.from('mnop'), new BufferList([Buffer.from('qrstu'), Buffer.from('vwxyz')])])
|
||||||
|
t.equal(bl.length, 26)
|
||||||
|
t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('append chainable', function (t) {
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
t.ok(bl.append(Buffer.from('abcd')) === bl)
|
||||||
|
t.ok(bl.append([Buffer.from('abcd')]) === bl)
|
||||||
|
t.ok(bl.append(new BufferList(Buffer.from('abcd'))) === bl)
|
||||||
|
t.ok(bl.append([new BufferList(Buffer.from('abcd'))]) === bl)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('append chainable (test results)', function (t) {
|
||||||
|
const bl = new BufferList('abc')
|
||||||
|
.append([new BufferList('def')])
|
||||||
|
.append(new BufferList([Buffer.from('ghi'), new BufferList('jkl')]))
|
||||||
|
.append([Buffer.from('mnop'), new BufferList([Buffer.from('qrstu'), Buffer.from('vwxyz')])])
|
||||||
|
|
||||||
|
t.equal(bl.length, 26)
|
||||||
|
t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('consuming from multiple buffers', function (t) {
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
bl.append(Buffer.from('abcd'))
|
||||||
|
bl.append(Buffer.from('efg'))
|
||||||
|
bl.append(Buffer.from('hi'))
|
||||||
|
bl.append(Buffer.from('j'))
|
||||||
|
|
||||||
|
t.equal(bl.length, 10)
|
||||||
|
|
||||||
|
t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij')
|
||||||
|
|
||||||
|
bl.consume(3)
|
||||||
|
t.equal(bl.length, 7)
|
||||||
|
t.equal(bl.slice(0, 7).toString('ascii'), 'defghij')
|
||||||
|
|
||||||
|
bl.consume(2)
|
||||||
|
t.equal(bl.length, 5)
|
||||||
|
t.equal(bl.slice(0, 5).toString('ascii'), 'fghij')
|
||||||
|
|
||||||
|
bl.consume(1)
|
||||||
|
t.equal(bl.length, 4)
|
||||||
|
t.equal(bl.slice(0, 4).toString('ascii'), 'ghij')
|
||||||
|
|
||||||
|
bl.consume(1)
|
||||||
|
t.equal(bl.length, 3)
|
||||||
|
t.equal(bl.slice(0, 3).toString('ascii'), 'hij')
|
||||||
|
|
||||||
|
bl.consume(2)
|
||||||
|
t.equal(bl.length, 1)
|
||||||
|
t.equal(bl.slice(0, 1).toString('ascii'), 'j')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('complete consumption', function (t) {
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
bl.append(Buffer.from('a'))
|
||||||
|
bl.append(Buffer.from('b'))
|
||||||
|
|
||||||
|
bl.consume(2)
|
||||||
|
|
||||||
|
t.equal(bl.length, 0)
|
||||||
|
t.equal(bl._bufs.length, 0)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('test readUInt8 / readInt8', function (t) {
|
||||||
|
const buf1 = Buffer.alloc(1)
|
||||||
|
const buf2 = Buffer.alloc(3)
|
||||||
|
const buf3 = Buffer.alloc(3)
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
buf1[0] = 0x1
|
||||||
|
buf2[1] = 0x3
|
||||||
|
buf2[2] = 0x4
|
||||||
|
buf3[0] = 0x23
|
||||||
|
buf3[1] = 0x42
|
||||||
|
|
||||||
|
bl.append(buf1)
|
||||||
|
bl.append(buf2)
|
||||||
|
bl.append(buf3)
|
||||||
|
|
||||||
|
t.equal(bl.readUInt8(), 0x1)
|
||||||
|
t.equal(bl.readUInt8(2), 0x3)
|
||||||
|
t.equal(bl.readInt8(2), 0x3)
|
||||||
|
t.equal(bl.readUInt8(3), 0x4)
|
||||||
|
t.equal(bl.readInt8(3), 0x4)
|
||||||
|
t.equal(bl.readUInt8(4), 0x23)
|
||||||
|
t.equal(bl.readInt8(4), 0x23)
|
||||||
|
t.equal(bl.readUInt8(5), 0x42)
|
||||||
|
t.equal(bl.readInt8(5), 0x42)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('test readUInt16LE / readUInt16BE / readInt16LE / readInt16BE', function (t) {
|
||||||
|
const buf1 = Buffer.alloc(1)
|
||||||
|
const buf2 = Buffer.alloc(3)
|
||||||
|
const buf3 = Buffer.alloc(3)
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
buf1[0] = 0x1
|
||||||
|
buf2[1] = 0x3
|
||||||
|
buf2[2] = 0x4
|
||||||
|
buf3[0] = 0x23
|
||||||
|
buf3[1] = 0x42
|
||||||
|
|
||||||
|
bl.append(buf1)
|
||||||
|
bl.append(buf2)
|
||||||
|
bl.append(buf3)
|
||||||
|
|
||||||
|
t.equal(bl.readUInt16BE(), 0x0100)
|
||||||
|
t.equal(bl.readUInt16LE(), 0x0001)
|
||||||
|
t.equal(bl.readUInt16BE(2), 0x0304)
|
||||||
|
t.equal(bl.readUInt16LE(2), 0x0403)
|
||||||
|
t.equal(bl.readInt16BE(2), 0x0304)
|
||||||
|
t.equal(bl.readInt16LE(2), 0x0403)
|
||||||
|
t.equal(bl.readUInt16BE(3), 0x0423)
|
||||||
|
t.equal(bl.readUInt16LE(3), 0x2304)
|
||||||
|
t.equal(bl.readInt16BE(3), 0x0423)
|
||||||
|
t.equal(bl.readInt16LE(3), 0x2304)
|
||||||
|
t.equal(bl.readUInt16BE(4), 0x2342)
|
||||||
|
t.equal(bl.readUInt16LE(4), 0x4223)
|
||||||
|
t.equal(bl.readInt16BE(4), 0x2342)
|
||||||
|
t.equal(bl.readInt16LE(4), 0x4223)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('test readUInt32LE / readUInt32BE / readInt32LE / readInt32BE', function (t) {
|
||||||
|
const buf1 = Buffer.alloc(1)
|
||||||
|
const buf2 = Buffer.alloc(3)
|
||||||
|
const buf3 = Buffer.alloc(3)
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
buf1[0] = 0x1
|
||||||
|
buf2[1] = 0x3
|
||||||
|
buf2[2] = 0x4
|
||||||
|
buf3[0] = 0x23
|
||||||
|
buf3[1] = 0x42
|
||||||
|
|
||||||
|
bl.append(buf1)
|
||||||
|
bl.append(buf2)
|
||||||
|
bl.append(buf3)
|
||||||
|
|
||||||
|
t.equal(bl.readUInt32BE(), 0x01000304)
|
||||||
|
t.equal(bl.readUInt32LE(), 0x04030001)
|
||||||
|
t.equal(bl.readUInt32BE(2), 0x03042342)
|
||||||
|
t.equal(bl.readUInt32LE(2), 0x42230403)
|
||||||
|
t.equal(bl.readInt32BE(2), 0x03042342)
|
||||||
|
t.equal(bl.readInt32LE(2), 0x42230403)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('test readUIntLE / readUIntBE / readIntLE / readIntBE', function (t) {
|
||||||
|
const buf1 = Buffer.alloc(1)
|
||||||
|
const buf2 = Buffer.alloc(3)
|
||||||
|
const buf3 = Buffer.alloc(3)
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
buf2[0] = 0x2
|
||||||
|
buf2[1] = 0x3
|
||||||
|
buf2[2] = 0x4
|
||||||
|
buf3[0] = 0x23
|
||||||
|
buf3[1] = 0x42
|
||||||
|
buf3[2] = 0x61
|
||||||
|
|
||||||
|
bl.append(buf1)
|
||||||
|
bl.append(buf2)
|
||||||
|
bl.append(buf3)
|
||||||
|
|
||||||
|
t.equal(bl.readUIntBE(1, 1), 0x02)
|
||||||
|
t.equal(bl.readUIntBE(1, 2), 0x0203)
|
||||||
|
t.equal(bl.readUIntBE(1, 3), 0x020304)
|
||||||
|
t.equal(bl.readUIntBE(1, 4), 0x02030423)
|
||||||
|
t.equal(bl.readUIntBE(1, 5), 0x0203042342)
|
||||||
|
t.equal(bl.readUIntBE(1, 6), 0x020304234261)
|
||||||
|
t.equal(bl.readUIntLE(1, 1), 0x02)
|
||||||
|
t.equal(bl.readUIntLE(1, 2), 0x0302)
|
||||||
|
t.equal(bl.readUIntLE(1, 3), 0x040302)
|
||||||
|
t.equal(bl.readUIntLE(1, 4), 0x23040302)
|
||||||
|
t.equal(bl.readUIntLE(1, 5), 0x4223040302)
|
||||||
|
t.equal(bl.readUIntLE(1, 6), 0x614223040302)
|
||||||
|
t.equal(bl.readIntBE(1, 1), 0x02)
|
||||||
|
t.equal(bl.readIntBE(1, 2), 0x0203)
|
||||||
|
t.equal(bl.readIntBE(1, 3), 0x020304)
|
||||||
|
t.equal(bl.readIntBE(1, 4), 0x02030423)
|
||||||
|
t.equal(bl.readIntBE(1, 5), 0x0203042342)
|
||||||
|
t.equal(bl.readIntBE(1, 6), 0x020304234261)
|
||||||
|
t.equal(bl.readIntLE(1, 1), 0x02)
|
||||||
|
t.equal(bl.readIntLE(1, 2), 0x0302)
|
||||||
|
t.equal(bl.readIntLE(1, 3), 0x040302)
|
||||||
|
t.equal(bl.readIntLE(1, 4), 0x23040302)
|
||||||
|
t.equal(bl.readIntLE(1, 5), 0x4223040302)
|
||||||
|
t.equal(bl.readIntLE(1, 6), 0x614223040302)
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('test readFloatLE / readFloatBE', function (t) {
|
||||||
|
const buf1 = Buffer.alloc(1)
|
||||||
|
const buf2 = Buffer.alloc(3)
|
||||||
|
const buf3 = Buffer.alloc(3)
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
buf1[0] = 0x01
|
||||||
|
buf2[1] = 0x00
|
||||||
|
buf2[2] = 0x00
|
||||||
|
buf3[0] = 0x80
|
||||||
|
buf3[1] = 0x3f
|
||||||
|
|
||||||
|
bl.append(buf1)
|
||||||
|
bl.append(buf2)
|
||||||
|
bl.append(buf3)
|
||||||
|
|
||||||
|
const canonical = Buffer.concat([buf1, buf2, buf3])
|
||||||
|
t.equal(bl.readFloatLE(), canonical.readFloatLE())
|
||||||
|
t.equal(bl.readFloatBE(), canonical.readFloatBE())
|
||||||
|
t.equal(bl.readFloatLE(2), canonical.readFloatLE(2))
|
||||||
|
t.equal(bl.readFloatBE(2), canonical.readFloatBE(2))
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('test readDoubleLE / readDoubleBE', function (t) {
|
||||||
|
const buf1 = Buffer.alloc(1)
|
||||||
|
const buf2 = Buffer.alloc(3)
|
||||||
|
const buf3 = Buffer.alloc(10)
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
buf1[0] = 0x01
|
||||||
|
buf2[1] = 0x55
|
||||||
|
buf2[2] = 0x55
|
||||||
|
buf3[0] = 0x55
|
||||||
|
buf3[1] = 0x55
|
||||||
|
buf3[2] = 0x55
|
||||||
|
buf3[3] = 0x55
|
||||||
|
buf3[4] = 0xd5
|
||||||
|
buf3[5] = 0x3f
|
||||||
|
|
||||||
|
bl.append(buf1)
|
||||||
|
bl.append(buf2)
|
||||||
|
bl.append(buf3)
|
||||||
|
|
||||||
|
const canonical = Buffer.concat([buf1, buf2, buf3])
|
||||||
|
t.equal(bl.readDoubleBE(), canonical.readDoubleBE())
|
||||||
|
t.equal(bl.readDoubleLE(), canonical.readDoubleLE())
|
||||||
|
t.equal(bl.readDoubleBE(2), canonical.readDoubleBE(2))
|
||||||
|
t.equal(bl.readDoubleLE(2), canonical.readDoubleLE(2))
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('test toString', function (t) {
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
bl.append(Buffer.from('abcd'))
|
||||||
|
bl.append(Buffer.from('efg'))
|
||||||
|
bl.append(Buffer.from('hi'))
|
||||||
|
bl.append(Buffer.from('j'))
|
||||||
|
|
||||||
|
t.equal(bl.toString('ascii', 0, 10), 'abcdefghij')
|
||||||
|
t.equal(bl.toString('ascii', 3, 10), 'defghij')
|
||||||
|
t.equal(bl.toString('ascii', 3, 6), 'def')
|
||||||
|
t.equal(bl.toString('ascii', 3, 8), 'defgh')
|
||||||
|
t.equal(bl.toString('ascii', 5, 10), 'fghij')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('test toString encoding', function (t) {
|
||||||
|
const bl = new BufferList()
|
||||||
|
const b = Buffer.from('abcdefghij\xff\x00')
|
||||||
|
|
||||||
|
bl.append(Buffer.from('abcd'))
|
||||||
|
bl.append(Buffer.from('efg'))
|
||||||
|
bl.append(Buffer.from('hi'))
|
||||||
|
bl.append(Buffer.from('j'))
|
||||||
|
bl.append(Buffer.from('\xff\x00'))
|
||||||
|
|
||||||
|
encodings.forEach(function (enc) {
|
||||||
|
t.equal(bl.toString(enc), b.toString(enc), enc)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('uninitialized memory', function (t) {
|
||||||
|
const secret = crypto.randomBytes(256)
|
||||||
|
for (let i = 0; i < 1e6; i++) {
|
||||||
|
const clone = Buffer.from(secret)
|
||||||
|
const bl = new BufferList()
|
||||||
|
bl.append(Buffer.from('a'))
|
||||||
|
bl.consume(-1024)
|
||||||
|
const buf = bl.slice(1)
|
||||||
|
if (buf.indexOf(clone) !== -1) {
|
||||||
|
t.fail(`Match (at ${i})`)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
!process.browser && tape('test stream', function (t) {
|
||||||
|
const random = crypto.randomBytes(65534)
|
||||||
|
|
||||||
|
const bl = new BufferList((err, buf) => {
|
||||||
|
t.ok(Buffer.isBuffer(buf))
|
||||||
|
t.ok(err === null)
|
||||||
|
t.ok(random.equals(bl.slice()))
|
||||||
|
t.ok(random.equals(buf.slice()))
|
||||||
|
|
||||||
|
bl.pipe(fs.createWriteStream('/tmp/bl_test_rnd_out.dat'))
|
||||||
|
.on('close', function () {
|
||||||
|
const rndhash = crypto.createHash('md5').update(random).digest('hex')
|
||||||
|
const md5sum = crypto.createHash('md5')
|
||||||
|
const s = fs.createReadStream('/tmp/bl_test_rnd_out.dat')
|
||||||
|
|
||||||
|
s.on('data', md5sum.update.bind(md5sum))
|
||||||
|
s.on('end', function () {
|
||||||
|
t.equal(rndhash, md5sum.digest('hex'), 'woohoo! correct hash!')
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
fs.writeFileSync('/tmp/bl_test_rnd.dat', random)
|
||||||
|
fs.createReadStream('/tmp/bl_test_rnd.dat').pipe(bl)
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('instantiation with Buffer', function (t) {
|
||||||
|
const buf = crypto.randomBytes(1024)
|
||||||
|
const buf2 = crypto.randomBytes(1024)
|
||||||
|
let b = BufferList(buf)
|
||||||
|
|
||||||
|
t.equal(buf.toString('hex'), b.slice().toString('hex'), 'same buffer')
|
||||||
|
b = BufferList([buf, buf2])
|
||||||
|
t.equal(b.slice().toString('hex'), Buffer.concat([buf, buf2]).toString('hex'), 'same buffer')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('test String appendage', function (t) {
|
||||||
|
const bl = new BufferList()
|
||||||
|
const b = Buffer.from('abcdefghij\xff\x00')
|
||||||
|
|
||||||
|
bl.append('abcd')
|
||||||
|
bl.append('efg')
|
||||||
|
bl.append('hi')
|
||||||
|
bl.append('j')
|
||||||
|
bl.append('\xff\x00')
|
||||||
|
|
||||||
|
encodings.forEach(function (enc) {
|
||||||
|
t.equal(bl.toString(enc), b.toString(enc))
|
||||||
|
})
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('test Number appendage', function (t) {
|
||||||
|
const bl = new BufferList()
|
||||||
|
const b = Buffer.from('1234567890')
|
||||||
|
|
||||||
|
bl.append(1234)
|
||||||
|
bl.append(567)
|
||||||
|
bl.append(89)
|
||||||
|
bl.append(0)
|
||||||
|
|
||||||
|
encodings.forEach(function (enc) {
|
||||||
|
t.equal(bl.toString(enc), b.toString(enc))
|
||||||
|
})
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('write nothing, should get empty buffer', function (t) {
|
||||||
|
t.plan(3)
|
||||||
|
BufferList(function (err, data) {
|
||||||
|
t.notOk(err, 'no error')
|
||||||
|
t.ok(Buffer.isBuffer(data), 'got a buffer')
|
||||||
|
t.equal(0, data.length, 'got a zero-length buffer')
|
||||||
|
t.end()
|
||||||
|
}).end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('unicode string', function (t) {
|
||||||
|
t.plan(2)
|
||||||
|
|
||||||
|
const inp1 = '\u2600'
|
||||||
|
const inp2 = '\u2603'
|
||||||
|
const exp = inp1 + ' and ' + inp2
|
||||||
|
const bl = BufferList()
|
||||||
|
|
||||||
|
bl.write(inp1)
|
||||||
|
bl.write(' and ')
|
||||||
|
bl.write(inp2)
|
||||||
|
t.equal(exp, bl.toString())
|
||||||
|
t.equal(Buffer.from(exp).toString('hex'), bl.toString('hex'))
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('should emit finish', function (t) {
|
||||||
|
const source = BufferList()
|
||||||
|
const dest = BufferList()
|
||||||
|
|
||||||
|
source.write('hello')
|
||||||
|
source.pipe(dest)
|
||||||
|
|
||||||
|
dest.on('finish', function () {
|
||||||
|
t.equal(dest.toString('utf8'), 'hello')
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('basic copy', function (t) {
|
||||||
|
const buf = crypto.randomBytes(1024)
|
||||||
|
const buf2 = Buffer.alloc(1024)
|
||||||
|
const b = BufferList(buf)
|
||||||
|
|
||||||
|
b.copy(buf2)
|
||||||
|
t.equal(b.slice().toString('hex'), buf2.toString('hex'), 'same buffer')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('copy after many appends', function (t) {
|
||||||
|
const buf = crypto.randomBytes(512)
|
||||||
|
const buf2 = Buffer.alloc(1024)
|
||||||
|
const b = BufferList(buf)
|
||||||
|
|
||||||
|
b.append(buf)
|
||||||
|
b.copy(buf2)
|
||||||
|
t.equal(b.slice().toString('hex'), buf2.toString('hex'), 'same buffer')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('copy at a precise position', function (t) {
|
||||||
|
const buf = crypto.randomBytes(1004)
|
||||||
|
const buf2 = Buffer.alloc(1024)
|
||||||
|
const b = BufferList(buf)
|
||||||
|
|
||||||
|
b.copy(buf2, 20)
|
||||||
|
t.equal(b.slice().toString('hex'), buf2.slice(20).toString('hex'), 'same buffer')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('copy starting from a precise location', function (t) {
|
||||||
|
const buf = crypto.randomBytes(10)
|
||||||
|
const buf2 = Buffer.alloc(5)
|
||||||
|
const b = BufferList(buf)
|
||||||
|
|
||||||
|
b.copy(buf2, 0, 5)
|
||||||
|
t.equal(b.slice(5).toString('hex'), buf2.toString('hex'), 'same buffer')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('copy in an interval', function (t) {
|
||||||
|
const rnd = crypto.randomBytes(10)
|
||||||
|
const b = BufferList(rnd) // put the random bytes there
|
||||||
|
const actual = Buffer.alloc(3)
|
||||||
|
const expected = Buffer.alloc(3)
|
||||||
|
|
||||||
|
rnd.copy(expected, 0, 5, 8)
|
||||||
|
b.copy(actual, 0, 5, 8)
|
||||||
|
|
||||||
|
t.equal(actual.toString('hex'), expected.toString('hex'), 'same buffer')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('copy an interval between two buffers', function (t) {
|
||||||
|
const buf = crypto.randomBytes(10)
|
||||||
|
const buf2 = Buffer.alloc(10)
|
||||||
|
const b = BufferList(buf)
|
||||||
|
|
||||||
|
b.append(buf)
|
||||||
|
b.copy(buf2, 0, 5, 15)
|
||||||
|
|
||||||
|
t.equal(b.slice(5, 15).toString('hex'), buf2.toString('hex'), 'same buffer')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('shallow slice across buffer boundaries', function (t) {
|
||||||
|
const bl = new BufferList(['First', 'Second', 'Third'])
|
||||||
|
|
||||||
|
t.equal(bl.shallowSlice(3, 13).toString(), 'stSecondTh')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('shallow slice within single buffer', function (t) {
|
||||||
|
t.plan(2)
|
||||||
|
|
||||||
|
const bl = new BufferList(['First', 'Second', 'Third'])
|
||||||
|
|
||||||
|
t.equal(bl.shallowSlice(5, 10).toString(), 'Secon')
|
||||||
|
t.equal(bl.shallowSlice(7, 10).toString(), 'con')
|
||||||
|
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('shallow slice single buffer', function (t) {
|
||||||
|
t.plan(3)
|
||||||
|
|
||||||
|
const bl = new BufferList(['First', 'Second', 'Third'])
|
||||||
|
|
||||||
|
t.equal(bl.shallowSlice(0, 5).toString(), 'First')
|
||||||
|
t.equal(bl.shallowSlice(5, 11).toString(), 'Second')
|
||||||
|
t.equal(bl.shallowSlice(11, 16).toString(), 'Third')
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('shallow slice with negative or omitted indices', function (t) {
|
||||||
|
t.plan(4)
|
||||||
|
|
||||||
|
const bl = new BufferList(['First', 'Second', 'Third'])
|
||||||
|
|
||||||
|
t.equal(bl.shallowSlice().toString(), 'FirstSecondThird')
|
||||||
|
t.equal(bl.shallowSlice(5).toString(), 'SecondThird')
|
||||||
|
t.equal(bl.shallowSlice(5, -3).toString(), 'SecondTh')
|
||||||
|
t.equal(bl.shallowSlice(-8).toString(), 'ondThird')
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('shallow slice does not make a copy', function (t) {
|
||||||
|
t.plan(1)
|
||||||
|
|
||||||
|
const buffers = [Buffer.from('First'), Buffer.from('Second'), Buffer.from('Third')]
|
||||||
|
const bl = (new BufferList(buffers)).shallowSlice(5, -3)
|
||||||
|
|
||||||
|
buffers[1].fill('h')
|
||||||
|
buffers[2].fill('h')
|
||||||
|
|
||||||
|
t.equal(bl.toString(), 'hhhhhhhh')
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('shallow slice with 0 length', function (t) {
|
||||||
|
t.plan(1)
|
||||||
|
|
||||||
|
const buffers = [Buffer.from('First'), Buffer.from('Second'), Buffer.from('Third')]
|
||||||
|
const bl = (new BufferList(buffers)).shallowSlice(0, 0)
|
||||||
|
|
||||||
|
t.equal(bl.length, 0)
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('shallow slice with 0 length from middle', function (t) {
|
||||||
|
t.plan(1)
|
||||||
|
|
||||||
|
const buffers = [Buffer.from('First'), Buffer.from('Second'), Buffer.from('Third')]
|
||||||
|
const bl = (new BufferList(buffers)).shallowSlice(10, 10)
|
||||||
|
|
||||||
|
t.equal(bl.length, 0)
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('duplicate', function (t) {
|
||||||
|
t.plan(2)
|
||||||
|
|
||||||
|
const bl = new BufferList('abcdefghij\xff\x00')
|
||||||
|
const dup = bl.duplicate()
|
||||||
|
|
||||||
|
t.equal(bl.prototype, dup.prototype)
|
||||||
|
t.equal(bl.toString('hex'), dup.toString('hex'))
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('destroy no pipe', function (t) {
|
||||||
|
t.plan(2)
|
||||||
|
|
||||||
|
const bl = new BufferList('alsdkfja;lsdkfja;lsdk')
|
||||||
|
|
||||||
|
bl.destroy()
|
||||||
|
|
||||||
|
t.equal(bl._bufs.length, 0)
|
||||||
|
t.equal(bl.length, 0)
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('destroy with error', function (t) {
|
||||||
|
t.plan(3)
|
||||||
|
|
||||||
|
const bl = new BufferList('alsdkfja;lsdkfja;lsdk')
|
||||||
|
const err = new Error('kaboom')
|
||||||
|
|
||||||
|
bl.destroy(err)
|
||||||
|
bl.on('error', function (_err) {
|
||||||
|
t.equal(_err, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.equal(bl._bufs.length, 0)
|
||||||
|
t.equal(bl.length, 0)
|
||||||
|
})
|
||||||
|
|
||||||
|
!process.browser && tape('destroy with pipe before read end', function (t) {
|
||||||
|
t.plan(2)
|
||||||
|
|
||||||
|
const bl = new BufferList()
|
||||||
|
fs.createReadStream(path.join(__dirname, '/test.js'))
|
||||||
|
.pipe(bl)
|
||||||
|
|
||||||
|
bl.destroy()
|
||||||
|
|
||||||
|
t.equal(bl._bufs.length, 0)
|
||||||
|
t.equal(bl.length, 0)
|
||||||
|
})
|
||||||
|
|
||||||
|
!process.browser && tape('destroy with pipe before read end with race', function (t) {
|
||||||
|
t.plan(2)
|
||||||
|
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
fs.createReadStream(path.join(__dirname, '/test.js'))
|
||||||
|
.pipe(bl)
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
bl.destroy()
|
||||||
|
setTimeout(function () {
|
||||||
|
t.equal(bl._bufs.length, 0)
|
||||||
|
t.equal(bl.length, 0)
|
||||||
|
}, 500)
|
||||||
|
}, 500)
|
||||||
|
})
|
||||||
|
|
||||||
|
!process.browser && tape('destroy with pipe after read end', function (t) {
|
||||||
|
t.plan(2)
|
||||||
|
|
||||||
|
const bl = new BufferList()
|
||||||
|
|
||||||
|
fs.createReadStream(path.join(__dirname, '/test.js'))
|
||||||
|
.on('end', onEnd)
|
||||||
|
.pipe(bl)
|
||||||
|
|
||||||
|
function onEnd () {
|
||||||
|
bl.destroy()
|
||||||
|
|
||||||
|
t.equal(bl._bufs.length, 0)
|
||||||
|
t.equal(bl.length, 0)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
!process.browser && tape('destroy with pipe while writing to a destination', function (t) {
|
||||||
|
t.plan(4)
|
||||||
|
|
||||||
|
const bl = new BufferList()
|
||||||
|
const ds = new BufferList()
|
||||||
|
|
||||||
|
fs.createReadStream(path.join(__dirname, '/test.js'))
|
||||||
|
.on('end', onEnd)
|
||||||
|
.pipe(bl)
|
||||||
|
|
||||||
|
function onEnd () {
|
||||||
|
bl.pipe(ds)
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
bl.destroy()
|
||||||
|
|
||||||
|
t.equals(bl._bufs.length, 0)
|
||||||
|
t.equals(bl.length, 0)
|
||||||
|
|
||||||
|
ds.destroy()
|
||||||
|
|
||||||
|
t.equals(bl._bufs.length, 0)
|
||||||
|
t.equals(bl.length, 0)
|
||||||
|
}, 100)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
!process.browser && tape('handle error', function (t) {
|
||||||
|
t.plan(2)
|
||||||
|
|
||||||
|
fs.createReadStream('/does/not/exist').pipe(BufferList(function (err, data) {
|
||||||
|
t.ok(err instanceof Error, 'has error')
|
||||||
|
t.notOk(data, 'no data')
|
||||||
|
}))
|
||||||
|
})
|
||||||
70
miniprogram/node_modules/buffer/AUTHORS.md
generated
vendored
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
# Authors
|
||||||
|
|
||||||
|
#### Ordered by first contribution.
|
||||||
|
|
||||||
|
- Romain Beauxis (toots@rastageeks.org)
|
||||||
|
- Tobias Koppers (tobias.koppers@googlemail.com)
|
||||||
|
- Janus (ysangkok@gmail.com)
|
||||||
|
- Rainer Dreyer (rdrey1@gmail.com)
|
||||||
|
- Tõnis Tiigi (tonistiigi@gmail.com)
|
||||||
|
- James Halliday (mail@substack.net)
|
||||||
|
- Michael Williamson (mike@zwobble.org)
|
||||||
|
- elliottcable (github@elliottcable.name)
|
||||||
|
- rafael (rvalle@livelens.net)
|
||||||
|
- Andrew Kelley (superjoe30@gmail.com)
|
||||||
|
- Andreas Madsen (amwebdk@gmail.com)
|
||||||
|
- Mike Brevoort (mike.brevoort@pearson.com)
|
||||||
|
- Brian White (mscdex@mscdex.net)
|
||||||
|
- Feross Aboukhadijeh (feross@feross.org)
|
||||||
|
- Ruben Verborgh (ruben@verborgh.org)
|
||||||
|
- eliang (eliang.cs@gmail.com)
|
||||||
|
- Jesse Tane (jesse.tane@gmail.com)
|
||||||
|
- Alfonso Boza (alfonso@cloud.com)
|
||||||
|
- Mathias Buus (mathiasbuus@gmail.com)
|
||||||
|
- Devon Govett (devongovett@gmail.com)
|
||||||
|
- Daniel Cousens (github@dcousens.com)
|
||||||
|
- Joseph Dykstra (josephdykstra@gmail.com)
|
||||||
|
- Parsha Pourkhomami (parshap+git@gmail.com)
|
||||||
|
- Damjan Košir (damjan.kosir@gmail.com)
|
||||||
|
- daverayment (dave.rayment@gmail.com)
|
||||||
|
- kawanet (u-suke@kawa.net)
|
||||||
|
- Linus Unnebäck (linus@folkdatorn.se)
|
||||||
|
- Nolan Lawson (nolan.lawson@gmail.com)
|
||||||
|
- Calvin Metcalf (calvin.metcalf@gmail.com)
|
||||||
|
- Koki Takahashi (hakatasiloving@gmail.com)
|
||||||
|
- Guy Bedford (guybedford@gmail.com)
|
||||||
|
- Jan Schär (jscissr@gmail.com)
|
||||||
|
- RaulTsc (tomescu.raul@gmail.com)
|
||||||
|
- Matthieu Monsch (monsch@alum.mit.edu)
|
||||||
|
- Dan Ehrenberg (littledan@chromium.org)
|
||||||
|
- Kirill Fomichev (fanatid@ya.ru)
|
||||||
|
- Yusuke Kawasaki (u-suke@kawa.net)
|
||||||
|
- DC (dcposch@dcpos.ch)
|
||||||
|
- John-David Dalton (john.david.dalton@gmail.com)
|
||||||
|
- adventure-yunfei (adventure030@gmail.com)
|
||||||
|
- Emil Bay (github@tixz.dk)
|
||||||
|
- Sam Sudar (sudar.sam@gmail.com)
|
||||||
|
- Volker Mische (volker.mische@gmail.com)
|
||||||
|
- David Walton (support@geekstocks.com)
|
||||||
|
- Сковорода Никита Андреевич (chalkerx@gmail.com)
|
||||||
|
- greenkeeper[bot] (greenkeeper[bot]@users.noreply.github.com)
|
||||||
|
- ukstv (sergey.ukustov@machinomy.com)
|
||||||
|
- Renée Kooi (renee@kooi.me)
|
||||||
|
- ranbochen (ranbochen@qq.com)
|
||||||
|
- Vladimir Borovik (bobahbdb@gmail.com)
|
||||||
|
- greenkeeper[bot] (23040076+greenkeeper[bot]@users.noreply.github.com)
|
||||||
|
- kumavis (aaron@kumavis.me)
|
||||||
|
- Sergey Ukustov (sergey.ukustov@machinomy.com)
|
||||||
|
- Fei Liu (liu.feiwood@gmail.com)
|
||||||
|
- Blaine Bublitz (blaine.bublitz@gmail.com)
|
||||||
|
- clement (clement@seald.io)
|
||||||
|
- Koushik Dutta (koushd@gmail.com)
|
||||||
|
- Jordan Harband (ljharb@gmail.com)
|
||||||
|
- Niklas Mischkulnig (mischnic@users.noreply.github.com)
|
||||||
|
- Nikolai Vavilov (vvnicholas@gmail.com)
|
||||||
|
- Fedor Nezhivoi (gyzerok@users.noreply.github.com)
|
||||||
|
- Peter Newman (peternewman@users.noreply.github.com)
|
||||||
|
- mathmakgakpak (44949126+mathmakgakpak@users.noreply.github.com)
|
||||||
|
- jkkang (jkkang@smartauth.kr)
|
||||||
|
|
||||||
|
#### Generated by bin/update-authors.sh.
|
||||||
21
miniprogram/node_modules/buffer/LICENSE
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) Feross Aboukhadijeh, and other contributors.
|
||||||
|
|
||||||
|
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.
|
||||||
410
miniprogram/node_modules/buffer/README.md
generated
vendored
Normal file
@ -0,0 +1,410 @@
|
|||||||
|
# buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url]
|
||||||
|
|
||||||
|
[travis-image]: https://img.shields.io/travis/feross/buffer/master.svg
|
||||||
|
[travis-url]: https://travis-ci.org/feross/buffer
|
||||||
|
[npm-image]: https://img.shields.io/npm/v/buffer.svg
|
||||||
|
[npm-url]: https://npmjs.org/package/buffer
|
||||||
|
[downloads-image]: https://img.shields.io/npm/dm/buffer.svg
|
||||||
|
[downloads-url]: https://npmjs.org/package/buffer
|
||||||
|
[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg
|
||||||
|
[standard-url]: https://standardjs.com
|
||||||
|
|
||||||
|
#### The buffer module from [node.js](https://nodejs.org/), for the browser.
|
||||||
|
|
||||||
|
[![saucelabs][saucelabs-image]][saucelabs-url]
|
||||||
|
|
||||||
|
[saucelabs-image]: https://saucelabs.com/browser-matrix/buffer.svg
|
||||||
|
[saucelabs-url]: https://saucelabs.com/u/buffer
|
||||||
|
|
||||||
|
With [browserify](http://browserify.org), simply `require('buffer')` or use the `Buffer` global and you will get this module.
|
||||||
|
|
||||||
|
The goal is to provide an API that is 100% identical to
|
||||||
|
[node's Buffer API](https://nodejs.org/api/buffer.html). Read the
|
||||||
|
[official docs](https://nodejs.org/api/buffer.html) for the full list of properties,
|
||||||
|
instance methods, and class methods that are supported.
|
||||||
|
|
||||||
|
## features
|
||||||
|
|
||||||
|
- Manipulate binary data like a boss, in all browsers!
|
||||||
|
- Super fast. Backed by Typed Arrays (`Uint8Array`/`ArrayBuffer`, not `Object`)
|
||||||
|
- Extremely small bundle size (**6.75KB minified + gzipped**, 51.9KB with comments)
|
||||||
|
- Excellent browser support (Chrome, Firefox, Edge, Safari 9+, IE 11, iOS 9+, Android, etc.)
|
||||||
|
- Preserves Node API exactly, with one minor difference (see below)
|
||||||
|
- Square-bracket `buf[4]` notation works!
|
||||||
|
- Does not modify any browser prototypes or put anything on `window`
|
||||||
|
- Comprehensive test suite (including all buffer tests from node.js core)
|
||||||
|
|
||||||
|
## install
|
||||||
|
|
||||||
|
To use this module directly (without browserify), install it:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install buffer
|
||||||
|
```
|
||||||
|
|
||||||
|
This module was previously called **native-buffer-browserify**, but please use **buffer**
|
||||||
|
from now on.
|
||||||
|
|
||||||
|
If you do not use a bundler, you can use the [standalone script](https://bundle.run/buffer).
|
||||||
|
|
||||||
|
## usage
|
||||||
|
|
||||||
|
The module's API is identical to node's `Buffer` API. Read the
|
||||||
|
[official docs](https://nodejs.org/api/buffer.html) for the full list of properties,
|
||||||
|
instance methods, and class methods that are supported.
|
||||||
|
|
||||||
|
As mentioned above, `require('buffer')` or use the `Buffer` global with
|
||||||
|
[browserify](http://browserify.org) and this module will automatically be included
|
||||||
|
in your bundle. Almost any npm module will work in the browser, even if it assumes that
|
||||||
|
the node `Buffer` API will be available.
|
||||||
|
|
||||||
|
To depend on this module explicitly (without browserify), require it like this:
|
||||||
|
|
||||||
|
```js
|
||||||
|
var Buffer = require('buffer/').Buffer // note: the trailing slash is important!
|
||||||
|
```
|
||||||
|
|
||||||
|
To require this module explicitly, use `require('buffer/')` which tells the node.js module
|
||||||
|
lookup algorithm (also used by browserify) to use the **npm module** named `buffer`
|
||||||
|
instead of the **node.js core** module named `buffer`!
|
||||||
|
|
||||||
|
|
||||||
|
## how does it work?
|
||||||
|
|
||||||
|
The Buffer constructor returns instances of `Uint8Array` that have their prototype
|
||||||
|
changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of `Uint8Array`,
|
||||||
|
so the returned instances will have all the node `Buffer` methods and the
|
||||||
|
`Uint8Array` methods. Square bracket notation works as expected -- it returns a
|
||||||
|
single octet.
|
||||||
|
|
||||||
|
The `Uint8Array` prototype remains unmodified.
|
||||||
|
|
||||||
|
|
||||||
|
## tracking the latest node api
|
||||||
|
|
||||||
|
This module tracks the Buffer API in the latest (unstable) version of node.js. The Buffer
|
||||||
|
API is considered **stable** in the
|
||||||
|
[node stability index](https://nodejs.org/docs/latest/api/documentation.html#documentation_stability_index),
|
||||||
|
so it is unlikely that there will ever be breaking changes.
|
||||||
|
Nonetheless, when/if the Buffer API changes in node, this module's API will change
|
||||||
|
accordingly.
|
||||||
|
|
||||||
|
## related packages
|
||||||
|
|
||||||
|
- [`buffer-reverse`](https://www.npmjs.com/package/buffer-reverse) - Reverse a buffer
|
||||||
|
- [`buffer-xor`](https://www.npmjs.com/package/buffer-xor) - Bitwise xor a buffer
|
||||||
|
- [`is-buffer`](https://www.npmjs.com/package/is-buffer) - Determine if an object is a Buffer without including the whole `Buffer` package
|
||||||
|
|
||||||
|
## conversion packages
|
||||||
|
|
||||||
|
### convert typed array to buffer
|
||||||
|
|
||||||
|
Use [`typedarray-to-buffer`](https://www.npmjs.com/package/typedarray-to-buffer) to convert any kind of typed array to a `Buffer`. Does not perform a copy, so it's super fast.
|
||||||
|
|
||||||
|
### convert buffer to typed array
|
||||||
|
|
||||||
|
`Buffer` is a subclass of `Uint8Array` (which is a typed array). So there is no need to explicitly convert to typed array. Just use the buffer as a `Uint8Array`.
|
||||||
|
|
||||||
|
### convert blob to buffer
|
||||||
|
|
||||||
|
Use [`blob-to-buffer`](https://www.npmjs.com/package/blob-to-buffer) to convert a `Blob` to a `Buffer`.
|
||||||
|
|
||||||
|
### convert buffer to blob
|
||||||
|
|
||||||
|
To convert a `Buffer` to a `Blob`, use the `Blob` constructor:
|
||||||
|
|
||||||
|
```js
|
||||||
|
var blob = new Blob([ buffer ])
|
||||||
|
```
|
||||||
|
|
||||||
|
Optionally, specify a mimetype:
|
||||||
|
|
||||||
|
```js
|
||||||
|
var blob = new Blob([ buffer ], { type: 'text/html' })
|
||||||
|
```
|
||||||
|
|
||||||
|
### convert arraybuffer to buffer
|
||||||
|
|
||||||
|
To convert an `ArrayBuffer` to a `Buffer`, use the `Buffer.from` function. Does not perform a copy, so it's super fast.
|
||||||
|
|
||||||
|
```js
|
||||||
|
var buffer = Buffer.from(arrayBuffer)
|
||||||
|
```
|
||||||
|
|
||||||
|
### convert buffer to arraybuffer
|
||||||
|
|
||||||
|
To convert a `Buffer` to an `ArrayBuffer`, use the `.buffer` property (which is present on all `Uint8Array` objects):
|
||||||
|
|
||||||
|
```js
|
||||||
|
var arrayBuffer = buffer.buffer.slice(
|
||||||
|
buffer.byteOffset, buffer.byteOffset + buffer.byteLength
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternatively, use the [`to-arraybuffer`](https://www.npmjs.com/package/to-arraybuffer) module.
|
||||||
|
|
||||||
|
## performance
|
||||||
|
|
||||||
|
See perf tests in `/perf`.
|
||||||
|
|
||||||
|
`BrowserBuffer` is the browser `buffer` module (this repo). `Uint8Array` is included as a
|
||||||
|
sanity check (since `BrowserBuffer` uses `Uint8Array` under the hood, `Uint8Array` will
|
||||||
|
always be at least a bit faster). Finally, `NodeBuffer` is the node.js buffer module,
|
||||||
|
which is included to compare against.
|
||||||
|
|
||||||
|
NOTE: Performance has improved since these benchmarks were taken. PR welcome to update the README.
|
||||||
|
|
||||||
|
### Chrome 38
|
||||||
|
|
||||||
|
| Method | Operations | Accuracy | Sampled | Fastest |
|
||||||
|
|:-------|:-----------|:---------|:--------|:-------:|
|
||||||
|
| BrowserBuffer#bracket-notation | 11,457,464 ops/sec | ±0.86% | 66 | ✓ |
|
||||||
|
| Uint8Array#bracket-notation | 10,824,332 ops/sec | ±0.74% | 65 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#concat | 450,532 ops/sec | ±0.76% | 68 | |
|
||||||
|
| Uint8Array#concat | 1,368,911 ops/sec | ±1.50% | 62 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#copy(16000) | 903,001 ops/sec | ±0.96% | 67 | |
|
||||||
|
| Uint8Array#copy(16000) | 1,422,441 ops/sec | ±1.04% | 66 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#copy(16) | 11,431,358 ops/sec | ±0.46% | 69 | |
|
||||||
|
| Uint8Array#copy(16) | 13,944,163 ops/sec | ±1.12% | 68 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#new(16000) | 106,329 ops/sec | ±6.70% | 44 | |
|
||||||
|
| Uint8Array#new(16000) | 131,001 ops/sec | ±2.85% | 31 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#new(16) | 1,554,491 ops/sec | ±1.60% | 65 | |
|
||||||
|
| Uint8Array#new(16) | 6,623,930 ops/sec | ±1.66% | 65 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#readDoubleBE | 112,830 ops/sec | ±0.51% | 69 | ✓ |
|
||||||
|
| DataView#getFloat64 | 93,500 ops/sec | ±0.57% | 68 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#readFloatBE | 146,678 ops/sec | ±0.95% | 68 | ✓ |
|
||||||
|
| DataView#getFloat32 | 99,311 ops/sec | ±0.41% | 67 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#readUInt32LE | 843,214 ops/sec | ±0.70% | 69 | ✓ |
|
||||||
|
| DataView#getUint32 | 103,024 ops/sec | ±0.64% | 67 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#slice | 1,013,941 ops/sec | ±0.75% | 67 | |
|
||||||
|
| Uint8Array#subarray | 1,903,928 ops/sec | ±0.53% | 67 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#writeFloatBE | 61,387 ops/sec | ±0.90% | 67 | |
|
||||||
|
| DataView#setFloat32 | 141,249 ops/sec | ±0.40% | 66 | ✓ |
|
||||||
|
|
||||||
|
|
||||||
|
### Firefox 33
|
||||||
|
|
||||||
|
| Method | Operations | Accuracy | Sampled | Fastest |
|
||||||
|
|:-------|:-----------|:---------|:--------|:-------:|
|
||||||
|
| BrowserBuffer#bracket-notation | 20,800,421 ops/sec | ±1.84% | 60 | |
|
||||||
|
| Uint8Array#bracket-notation | 20,826,235 ops/sec | ±2.02% | 61 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#concat | 153,076 ops/sec | ±2.32% | 61 | |
|
||||||
|
| Uint8Array#concat | 1,255,674 ops/sec | ±8.65% | 52 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#copy(16000) | 1,105,312 ops/sec | ±1.16% | 63 | |
|
||||||
|
| Uint8Array#copy(16000) | 1,615,911 ops/sec | ±0.55% | 66 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#copy(16) | 16,357,599 ops/sec | ±0.73% | 68 | |
|
||||||
|
| Uint8Array#copy(16) | 31,436,281 ops/sec | ±1.05% | 68 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#new(16000) | 52,995 ops/sec | ±6.01% | 35 | |
|
||||||
|
| Uint8Array#new(16000) | 87,686 ops/sec | ±5.68% | 45 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#new(16) | 252,031 ops/sec | ±1.61% | 66 | |
|
||||||
|
| Uint8Array#new(16) | 8,477,026 ops/sec | ±0.49% | 68 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#readDoubleBE | 99,871 ops/sec | ±0.41% | 69 | |
|
||||||
|
| DataView#getFloat64 | 285,663 ops/sec | ±0.70% | 68 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#readFloatBE | 115,540 ops/sec | ±0.42% | 69 | |
|
||||||
|
| DataView#getFloat32 | 288,722 ops/sec | ±0.82% | 68 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#readUInt32LE | 633,926 ops/sec | ±1.08% | 67 | ✓ |
|
||||||
|
| DataView#getUint32 | 294,808 ops/sec | ±0.79% | 64 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#slice | 349,425 ops/sec | ±0.46% | 69 | |
|
||||||
|
| Uint8Array#subarray | 5,965,819 ops/sec | ±0.60% | 65 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#writeFloatBE | 59,980 ops/sec | ±0.41% | 67 | |
|
||||||
|
| DataView#setFloat32 | 317,634 ops/sec | ±0.63% | 68 | ✓ |
|
||||||
|
|
||||||
|
### Safari 8
|
||||||
|
|
||||||
|
| Method | Operations | Accuracy | Sampled | Fastest |
|
||||||
|
|:-------|:-----------|:---------|:--------|:-------:|
|
||||||
|
| BrowserBuffer#bracket-notation | 10,279,729 ops/sec | ±2.25% | 56 | ✓ |
|
||||||
|
| Uint8Array#bracket-notation | 10,030,767 ops/sec | ±2.23% | 59 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#concat | 144,138 ops/sec | ±1.38% | 65 | |
|
||||||
|
| Uint8Array#concat | 4,950,764 ops/sec | ±1.70% | 63 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#copy(16000) | 1,058,548 ops/sec | ±1.51% | 64 | |
|
||||||
|
| Uint8Array#copy(16000) | 1,409,666 ops/sec | ±1.17% | 65 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#copy(16) | 6,282,529 ops/sec | ±1.88% | 58 | |
|
||||||
|
| Uint8Array#copy(16) | 11,907,128 ops/sec | ±2.87% | 58 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#new(16000) | 101,663 ops/sec | ±3.89% | 57 | |
|
||||||
|
| Uint8Array#new(16000) | 22,050,818 ops/sec | ±6.51% | 46 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#new(16) | 176,072 ops/sec | ±2.13% | 64 | |
|
||||||
|
| Uint8Array#new(16) | 24,385,731 ops/sec | ±5.01% | 51 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#readDoubleBE | 41,341 ops/sec | ±1.06% | 67 | |
|
||||||
|
| DataView#getFloat64 | 322,280 ops/sec | ±0.84% | 68 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#readFloatBE | 46,141 ops/sec | ±1.06% | 65 | |
|
||||||
|
| DataView#getFloat32 | 337,025 ops/sec | ±0.43% | 69 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#readUInt32LE | 151,551 ops/sec | ±1.02% | 66 | |
|
||||||
|
| DataView#getUint32 | 308,278 ops/sec | ±0.94% | 67 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#slice | 197,365 ops/sec | ±0.95% | 66 | |
|
||||||
|
| Uint8Array#subarray | 9,558,024 ops/sec | ±3.08% | 58 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#writeFloatBE | 17,518 ops/sec | ±1.03% | 63 | |
|
||||||
|
| DataView#setFloat32 | 319,751 ops/sec | ±0.48% | 68 | ✓ |
|
||||||
|
|
||||||
|
|
||||||
|
### Node 0.11.14
|
||||||
|
|
||||||
|
| Method | Operations | Accuracy | Sampled | Fastest |
|
||||||
|
|:-------|:-----------|:---------|:--------|:-------:|
|
||||||
|
| BrowserBuffer#bracket-notation | 10,489,828 ops/sec | ±3.25% | 90 | |
|
||||||
|
| Uint8Array#bracket-notation | 10,534,884 ops/sec | ±0.81% | 92 | ✓ |
|
||||||
|
| NodeBuffer#bracket-notation | 10,389,910 ops/sec | ±0.97% | 87 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#concat | 487,830 ops/sec | ±2.58% | 88 | |
|
||||||
|
| Uint8Array#concat | 1,814,327 ops/sec | ±1.28% | 88 | ✓ |
|
||||||
|
| NodeBuffer#concat | 1,636,523 ops/sec | ±1.88% | 73 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#copy(16000) | 1,073,665 ops/sec | ±0.77% | 90 | |
|
||||||
|
| Uint8Array#copy(16000) | 1,348,517 ops/sec | ±0.84% | 89 | ✓ |
|
||||||
|
| NodeBuffer#copy(16000) | 1,289,533 ops/sec | ±0.82% | 93 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#copy(16) | 12,782,706 ops/sec | ±0.74% | 85 | |
|
||||||
|
| Uint8Array#copy(16) | 14,180,427 ops/sec | ±0.93% | 92 | ✓ |
|
||||||
|
| NodeBuffer#copy(16) | 11,083,134 ops/sec | ±1.06% | 89 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#new(16000) | 141,678 ops/sec | ±3.30% | 67 | |
|
||||||
|
| Uint8Array#new(16000) | 161,491 ops/sec | ±2.96% | 60 | |
|
||||||
|
| NodeBuffer#new(16000) | 292,699 ops/sec | ±3.20% | 55 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#new(16) | 1,655,466 ops/sec | ±2.41% | 82 | |
|
||||||
|
| Uint8Array#new(16) | 14,399,926 ops/sec | ±0.91% | 94 | ✓ |
|
||||||
|
| NodeBuffer#new(16) | 3,894,696 ops/sec | ±0.88% | 92 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#readDoubleBE | 109,582 ops/sec | ±0.75% | 93 | ✓ |
|
||||||
|
| DataView#getFloat64 | 91,235 ops/sec | ±0.81% | 90 | |
|
||||||
|
| NodeBuffer#readDoubleBE | 88,593 ops/sec | ±0.96% | 81 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#readFloatBE | 139,854 ops/sec | ±1.03% | 85 | ✓ |
|
||||||
|
| DataView#getFloat32 | 98,744 ops/sec | ±0.80% | 89 | |
|
||||||
|
| NodeBuffer#readFloatBE | 92,769 ops/sec | ±0.94% | 93 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#readUInt32LE | 710,861 ops/sec | ±0.82% | 92 | |
|
||||||
|
| DataView#getUint32 | 117,893 ops/sec | ±0.84% | 91 | |
|
||||||
|
| NodeBuffer#readUInt32LE | 851,412 ops/sec | ±0.72% | 93 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#slice | 1,673,877 ops/sec | ±0.73% | 94 | |
|
||||||
|
| Uint8Array#subarray | 6,919,243 ops/sec | ±0.67% | 90 | ✓ |
|
||||||
|
| NodeBuffer#slice | 4,617,604 ops/sec | ±0.79% | 93 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#writeFloatBE | 66,011 ops/sec | ±0.75% | 93 | |
|
||||||
|
| DataView#setFloat32 | 127,760 ops/sec | ±0.72% | 93 | ✓ |
|
||||||
|
| NodeBuffer#writeFloatBE | 103,352 ops/sec | ±0.83% | 93 | |
|
||||||
|
|
||||||
|
### iojs 1.8.1
|
||||||
|
|
||||||
|
| Method | Operations | Accuracy | Sampled | Fastest |
|
||||||
|
|:-------|:-----------|:---------|:--------|:-------:|
|
||||||
|
| BrowserBuffer#bracket-notation | 10,990,488 ops/sec | ±1.11% | 91 | |
|
||||||
|
| Uint8Array#bracket-notation | 11,268,757 ops/sec | ±0.65% | 97 | |
|
||||||
|
| NodeBuffer#bracket-notation | 11,353,260 ops/sec | ±0.83% | 94 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#concat | 378,954 ops/sec | ±0.74% | 94 | |
|
||||||
|
| Uint8Array#concat | 1,358,288 ops/sec | ±0.97% | 87 | |
|
||||||
|
| NodeBuffer#concat | 1,934,050 ops/sec | ±1.11% | 78 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#copy(16000) | 894,538 ops/sec | ±0.56% | 84 | |
|
||||||
|
| Uint8Array#copy(16000) | 1,442,656 ops/sec | ±0.71% | 96 | |
|
||||||
|
| NodeBuffer#copy(16000) | 1,457,898 ops/sec | ±0.53% | 92 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#copy(16) | 12,870,457 ops/sec | ±0.67% | 95 | |
|
||||||
|
| Uint8Array#copy(16) | 16,643,989 ops/sec | ±0.61% | 93 | ✓ |
|
||||||
|
| NodeBuffer#copy(16) | 14,885,848 ops/sec | ±0.74% | 94 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#new(16000) | 109,264 ops/sec | ±4.21% | 63 | |
|
||||||
|
| Uint8Array#new(16000) | 138,916 ops/sec | ±1.87% | 61 | |
|
||||||
|
| NodeBuffer#new(16000) | 281,449 ops/sec | ±3.58% | 51 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#new(16) | 1,362,935 ops/sec | ±0.56% | 99 | |
|
||||||
|
| Uint8Array#new(16) | 6,193,090 ops/sec | ±0.64% | 95 | ✓ |
|
||||||
|
| NodeBuffer#new(16) | 4,745,425 ops/sec | ±1.56% | 90 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#readDoubleBE | 118,127 ops/sec | ±0.59% | 93 | ✓ |
|
||||||
|
| DataView#getFloat64 | 107,332 ops/sec | ±0.65% | 91 | |
|
||||||
|
| NodeBuffer#readDoubleBE | 116,274 ops/sec | ±0.94% | 95 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#readFloatBE | 150,326 ops/sec | ±0.58% | 95 | ✓ |
|
||||||
|
| DataView#getFloat32 | 110,541 ops/sec | ±0.57% | 98 | |
|
||||||
|
| NodeBuffer#readFloatBE | 121,599 ops/sec | ±0.60% | 87 | |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#readUInt32LE | 814,147 ops/sec | ±0.62% | 93 | |
|
||||||
|
| DataView#getUint32 | 137,592 ops/sec | ±0.64% | 90 | |
|
||||||
|
| NodeBuffer#readUInt32LE | 931,650 ops/sec | ±0.71% | 96 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#slice | 878,590 ops/sec | ±0.68% | 93 | |
|
||||||
|
| Uint8Array#subarray | 2,843,308 ops/sec | ±1.02% | 90 | |
|
||||||
|
| NodeBuffer#slice | 4,998,316 ops/sec | ±0.68% | 90 | ✓ |
|
||||||
|
| | | | |
|
||||||
|
| BrowserBuffer#writeFloatBE | 65,927 ops/sec | ±0.74% | 93 | |
|
||||||
|
| DataView#setFloat32 | 139,823 ops/sec | ±0.97% | 89 | ✓ |
|
||||||
|
| NodeBuffer#writeFloatBE | 135,763 ops/sec | ±0.65% | 96 | |
|
||||||
|
| | | | |
|
||||||
|
|
||||||
|
## Testing the project
|
||||||
|
|
||||||
|
First, install the project:
|
||||||
|
|
||||||
|
npm install
|
||||||
|
|
||||||
|
Then, to run tests in Node.js, run:
|
||||||
|
|
||||||
|
npm run test-node
|
||||||
|
|
||||||
|
To test locally in a browser, you can run:
|
||||||
|
|
||||||
|
npm run test-browser-es5-local # For ES5 browsers that don't support ES6
|
||||||
|
npm run test-browser-es6-local # For ES6 compliant browsers
|
||||||
|
|
||||||
|
This will print out a URL that you can then open in a browser to run the tests, using [airtap](https://www.npmjs.com/package/airtap).
|
||||||
|
|
||||||
|
To run automated browser tests using Saucelabs, ensure that your `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variables are set, then run:
|
||||||
|
|
||||||
|
npm test
|
||||||
|
|
||||||
|
This is what's run in Travis, to check against various browsers. The list of browsers is kept in the `bin/airtap-es5.yml` and `bin/airtap-es6.yml` files.
|
||||||
|
|
||||||
|
## JavaScript Standard Style
|
||||||
|
|
||||||
|
This module uses [JavaScript Standard Style](https://github.com/feross/standard).
|
||||||
|
|
||||||
|
[](https://github.com/feross/standard)
|
||||||
|
|
||||||
|
To test that the code conforms to the style, `npm install` and run:
|
||||||
|
|
||||||
|
./node_modules/.bin/standard
|
||||||
|
|
||||||
|
## credit
|
||||||
|
|
||||||
|
This was originally forked from [buffer-browserify](https://github.com/toots/buffer-browserify).
|
||||||
|
|
||||||
|
## Security Policies and Procedures
|
||||||
|
|
||||||
|
The `buffer` team and community take all security bugs in `buffer` seriously. Please see our [security policies and procedures](https://github.com/feross/security) document to learn how to report issues.
|
||||||
|
|
||||||
|
## license
|
||||||
|
|
||||||
|
MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org), and other contributors. Originally forked from an MIT-licensed module by Romain Beauxis.
|
||||||
186
miniprogram/node_modules/buffer/index.d.ts
generated
vendored
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
export class Buffer extends Uint8Array {
|
||||||
|
length: number
|
||||||
|
write(string: string, offset?: number, length?: number, encoding?: string): number;
|
||||||
|
toString(encoding?: string, start?: number, end?: number): string;
|
||||||
|
toJSON(): { type: 'Buffer', data: any[] };
|
||||||
|
equals(otherBuffer: Buffer): boolean;
|
||||||
|
compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number;
|
||||||
|
copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number;
|
||||||
|
slice(start?: number, end?: number): Buffer;
|
||||||
|
writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number;
|
||||||
|
writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number;
|
||||||
|
writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number;
|
||||||
|
writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number;
|
||||||
|
readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number;
|
||||||
|
readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number;
|
||||||
|
readIntLE(offset: number, byteLength: number, noAssert?: boolean): number;
|
||||||
|
readIntBE(offset: number, byteLength: number, noAssert?: boolean): number;
|
||||||
|
readUInt8(offset: number, noAssert?: boolean): number;
|
||||||
|
readUInt16LE(offset: number, noAssert?: boolean): number;
|
||||||
|
readUInt16BE(offset: number, noAssert?: boolean): number;
|
||||||
|
readUInt32LE(offset: number, noAssert?: boolean): number;
|
||||||
|
readUInt32BE(offset: number, noAssert?: boolean): number;
|
||||||
|
readInt8(offset: number, noAssert?: boolean): number;
|
||||||
|
readInt16LE(offset: number, noAssert?: boolean): number;
|
||||||
|
readInt16BE(offset: number, noAssert?: boolean): number;
|
||||||
|
readInt32LE(offset: number, noAssert?: boolean): number;
|
||||||
|
readInt32BE(offset: number, noAssert?: boolean): number;
|
||||||
|
readFloatLE(offset: number, noAssert?: boolean): number;
|
||||||
|
readFloatBE(offset: number, noAssert?: boolean): number;
|
||||||
|
readDoubleLE(offset: number, noAssert?: boolean): number;
|
||||||
|
readDoubleBE(offset: number, noAssert?: boolean): number;
|
||||||
|
reverse(): this;
|
||||||
|
swap16(): Buffer;
|
||||||
|
swap32(): Buffer;
|
||||||
|
swap64(): Buffer;
|
||||||
|
writeUInt8(value: number, offset: number, noAssert?: boolean): number;
|
||||||
|
writeUInt16LE(value: number, offset: number, noAssert?: boolean): number;
|
||||||
|
writeUInt16BE(value: number, offset: number, noAssert?: boolean): number;
|
||||||
|
writeUInt32LE(value: number, offset: number, noAssert?: boolean): number;
|
||||||
|
writeUInt32BE(value: number, offset: number, noAssert?: boolean): number;
|
||||||
|
writeInt8(value: number, offset: number, noAssert?: boolean): number;
|
||||||
|
writeInt16LE(value: number, offset: number, noAssert?: boolean): number;
|
||||||
|
writeInt16BE(value: number, offset: number, noAssert?: boolean): number;
|
||||||
|
writeInt32LE(value: number, offset: number, noAssert?: boolean): number;
|
||||||
|
writeInt32BE(value: number, offset: number, noAssert?: boolean): number;
|
||||||
|
writeFloatLE(value: number, offset: number, noAssert?: boolean): number;
|
||||||
|
writeFloatBE(value: number, offset: number, noAssert?: boolean): number;
|
||||||
|
writeDoubleLE(value: number, offset: number, noAssert?: boolean): number;
|
||||||
|
writeDoubleBE(value: number, offset: number, noAssert?: boolean): number;
|
||||||
|
fill(value: any, offset?: number, end?: number): this;
|
||||||
|
indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number;
|
||||||
|
lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number;
|
||||||
|
includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocates a new buffer containing the given {str}.
|
||||||
|
*
|
||||||
|
* @param str String to store in buffer.
|
||||||
|
* @param encoding encoding to use, optional. Default is 'utf8'
|
||||||
|
*/
|
||||||
|
constructor (str: string, encoding?: string);
|
||||||
|
/**
|
||||||
|
* Allocates a new buffer of {size} octets.
|
||||||
|
*
|
||||||
|
* @param size count of octets to allocate.
|
||||||
|
*/
|
||||||
|
constructor (size: number);
|
||||||
|
/**
|
||||||
|
* Allocates a new buffer containing the given {array} of octets.
|
||||||
|
*
|
||||||
|
* @param array The octets to store.
|
||||||
|
*/
|
||||||
|
constructor (array: Uint8Array);
|
||||||
|
/**
|
||||||
|
* Produces a Buffer backed by the same allocated memory as
|
||||||
|
* the given {ArrayBuffer}.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param arrayBuffer The ArrayBuffer with which to share memory.
|
||||||
|
*/
|
||||||
|
constructor (arrayBuffer: ArrayBuffer);
|
||||||
|
/**
|
||||||
|
* Allocates a new buffer containing the given {array} of octets.
|
||||||
|
*
|
||||||
|
* @param array The octets to store.
|
||||||
|
*/
|
||||||
|
constructor (array: any[]);
|
||||||
|
/**
|
||||||
|
* Copies the passed {buffer} data onto a new {Buffer} instance.
|
||||||
|
*
|
||||||
|
* @param buffer The buffer to copy.
|
||||||
|
*/
|
||||||
|
constructor (buffer: Buffer);
|
||||||
|
prototype: Buffer;
|
||||||
|
/**
|
||||||
|
* Allocates a new Buffer using an {array} of octets.
|
||||||
|
*
|
||||||
|
* @param array
|
||||||
|
*/
|
||||||
|
static from(array: any[]): Buffer;
|
||||||
|
/**
|
||||||
|
* When passed a reference to the .buffer property of a TypedArray instance,
|
||||||
|
* the newly created Buffer will share the same allocated memory as the TypedArray.
|
||||||
|
* The optional {byteOffset} and {length} arguments specify a memory range
|
||||||
|
* within the {arrayBuffer} that will be shared by the Buffer.
|
||||||
|
*
|
||||||
|
* @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer()
|
||||||
|
* @param byteOffset
|
||||||
|
* @param length
|
||||||
|
*/
|
||||||
|
static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer;
|
||||||
|
/**
|
||||||
|
* Copies the passed {buffer} data onto a new Buffer instance.
|
||||||
|
*
|
||||||
|
* @param buffer
|
||||||
|
*/
|
||||||
|
static from(buffer: Buffer | Uint8Array): Buffer;
|
||||||
|
/**
|
||||||
|
* Creates a new Buffer containing the given JavaScript string {str}.
|
||||||
|
* If provided, the {encoding} parameter identifies the character encoding.
|
||||||
|
* If not provided, {encoding} defaults to 'utf8'.
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
*/
|
||||||
|
static from(str: string, encoding?: string): Buffer;
|
||||||
|
/**
|
||||||
|
* Returns true if {obj} is a Buffer
|
||||||
|
*
|
||||||
|
* @param obj object to test.
|
||||||
|
*/
|
||||||
|
static isBuffer(obj: any): obj is Buffer;
|
||||||
|
/**
|
||||||
|
* Returns true if {encoding} is a valid encoding argument.
|
||||||
|
* Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex'
|
||||||
|
*
|
||||||
|
* @param encoding string to test.
|
||||||
|
*/
|
||||||
|
static isEncoding(encoding: string): boolean;
|
||||||
|
/**
|
||||||
|
* Gives the actual byte length of a string. encoding defaults to 'utf8'.
|
||||||
|
* This is not the same as String.prototype.length since that returns the number of characters in a string.
|
||||||
|
*
|
||||||
|
* @param string string to test.
|
||||||
|
* @param encoding encoding used to evaluate (defaults to 'utf8')
|
||||||
|
*/
|
||||||
|
static byteLength(string: string, encoding?: string): number;
|
||||||
|
/**
|
||||||
|
* Returns a buffer which is the result of concatenating all the buffers in the list together.
|
||||||
|
*
|
||||||
|
* If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer.
|
||||||
|
* If the list has exactly one item, then the first item of the list is returned.
|
||||||
|
* If the list has more than one item, then a new Buffer is created.
|
||||||
|
*
|
||||||
|
* @param list An array of Buffer objects to concatenate
|
||||||
|
* @param totalLength Total length of the buffers when concatenated.
|
||||||
|
* If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly.
|
||||||
|
*/
|
||||||
|
static concat(list: Buffer[], totalLength?: number): Buffer;
|
||||||
|
/**
|
||||||
|
* The same as buf1.compare(buf2).
|
||||||
|
*/
|
||||||
|
static compare(buf1: Buffer, buf2: Buffer): number;
|
||||||
|
/**
|
||||||
|
* Allocates a new buffer of {size} octets.
|
||||||
|
*
|
||||||
|
* @param size count of octets to allocate.
|
||||||
|
* @param fill if specified, buffer will be initialized by calling buf.fill(fill).
|
||||||
|
* If parameter is omitted, buffer will be filled with zeros.
|
||||||
|
* @param encoding encoding used for call to buf.fill while initializing
|
||||||
|
*/
|
||||||
|
static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer;
|
||||||
|
/**
|
||||||
|
* Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents
|
||||||
|
* of the newly created Buffer are unknown and may contain sensitive data.
|
||||||
|
*
|
||||||
|
* @param size count of octets to allocate
|
||||||
|
*/
|
||||||
|
static allocUnsafe(size: number): Buffer;
|
||||||
|
/**
|
||||||
|
* Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents
|
||||||
|
* of the newly created Buffer are unknown and may contain sensitive data.
|
||||||
|
*
|
||||||
|
* @param size count of octets to allocate
|
||||||
|
*/
|
||||||
|
static allocUnsafeSlow(size: number): Buffer;
|
||||||
|
}
|
||||||
1817
miniprogram/node_modules/buffer/index.js
generated
vendored
Normal file
96
miniprogram/node_modules/buffer/package.json
generated
vendored
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
{
|
||||||
|
"name": "buffer",
|
||||||
|
"description": "Node.js Buffer API, for the browser",
|
||||||
|
"version": "5.7.1",
|
||||||
|
"author": {
|
||||||
|
"name": "Feross Aboukhadijeh",
|
||||||
|
"email": "feross@feross.org",
|
||||||
|
"url": "https://feross.org"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/feross/buffer/issues"
|
||||||
|
},
|
||||||
|
"contributors": [
|
||||||
|
"Romain Beauxis <toots@rastageeks.org>",
|
||||||
|
"James Halliday <mail@substack.net>"
|
||||||
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"base64-js": "^1.3.1",
|
||||||
|
"ieee754": "^1.1.13"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"airtap": "^3.0.0",
|
||||||
|
"benchmark": "^2.1.4",
|
||||||
|
"browserify": "^17.0.0",
|
||||||
|
"concat-stream": "^2.0.0",
|
||||||
|
"hyperquest": "^2.1.3",
|
||||||
|
"is-buffer": "^2.0.4",
|
||||||
|
"is-nan": "^1.3.0",
|
||||||
|
"split": "^1.0.1",
|
||||||
|
"standard": "*",
|
||||||
|
"tape": "^5.0.1",
|
||||||
|
"through2": "^4.0.2",
|
||||||
|
"uglify-js": "^3.11.3"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/feross/buffer",
|
||||||
|
"jspm": {
|
||||||
|
"map": {
|
||||||
|
"./index.js": {
|
||||||
|
"node": "@node/buffer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"arraybuffer",
|
||||||
|
"browser",
|
||||||
|
"browserify",
|
||||||
|
"buffer",
|
||||||
|
"compatible",
|
||||||
|
"dataview",
|
||||||
|
"uint8array"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "index.js",
|
||||||
|
"types": "index.d.ts",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/feross/buffer.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"perf": "browserify --debug perf/bracket-notation.js > perf/bundle.js && open perf/index.html",
|
||||||
|
"perf-node": "node perf/bracket-notation.js && node perf/concat.js && node perf/copy-big.js && node perf/copy.js && node perf/new-big.js && node perf/new.js && node perf/readDoubleBE.js && node perf/readFloatBE.js && node perf/readUInt32LE.js && node perf/slice.js && node perf/writeFloatBE.js",
|
||||||
|
"size": "browserify -r ./ | uglifyjs -c -m | gzip | wc -c",
|
||||||
|
"test": "standard && node ./bin/test.js",
|
||||||
|
"test-browser-es5": "airtap -- test/*.js",
|
||||||
|
"test-browser-es5-local": "airtap --local -- test/*.js",
|
||||||
|
"test-browser-es6": "airtap -- test/*.js test/node/*.js",
|
||||||
|
"test-browser-es6-local": "airtap --local -- test/*.js test/node/*.js",
|
||||||
|
"test-node": "tape test/*.js test/node/*.js",
|
||||||
|
"update-authors": "./bin/update-authors.sh"
|
||||||
|
},
|
||||||
|
"standard": {
|
||||||
|
"ignore": [
|
||||||
|
"test/node/**/*.js",
|
||||||
|
"test/common.js",
|
||||||
|
"test/_polyfill.js",
|
||||||
|
"perf/**/*.js"
|
||||||
|
],
|
||||||
|
"globals": [
|
||||||
|
"SharedArrayBuffer"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
657
miniprogram/node_modules/canvas/Readme.md
generated
vendored
Normal file
@ -0,0 +1,657 @@
|
|||||||
|
# node-canvas
|
||||||
|
|
||||||
|

|
||||||
|
[](http://badge.fury.io/js/canvas)
|
||||||
|
|
||||||
|
node-canvas is a [Cairo](http://cairographics.org/)-backed Canvas implementation for [Node.js](http://nodejs.org).
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install canvas
|
||||||
|
```
|
||||||
|
|
||||||
|
By default, pre-built binaries will be downloaded if you're on one of the following platforms:
|
||||||
|
- macOS x86/64
|
||||||
|
- macOS aarch64 (aka Apple silicon)
|
||||||
|
- Linux x86/64 (glibc only)
|
||||||
|
- Windows x86/64
|
||||||
|
|
||||||
|
If you want to build from source, use `npm install --build-from-source` and see the **Compiling** section below.
|
||||||
|
|
||||||
|
The minimum version of Node.js required is **18.12.0**.
|
||||||
|
|
||||||
|
### Compiling
|
||||||
|
|
||||||
|
If you don't have a supported OS or processor architecture, or you use `--build-from-source`, the module will be compiled on your system. This requires several dependencies, including Cairo and Pango.
|
||||||
|
|
||||||
|
For detailed installation information, see the [wiki](https://github.com/Automattic/node-canvas/wiki/_pages). One-line installation instructions for common OSes are below. Note that libgif/giflib, librsvg and libjpeg are optional and only required if you need GIF, SVG and JPEG support, respectively. Cairo v1.10.0 or later is required.
|
||||||
|
|
||||||
|
OS | Command
|
||||||
|
----- | -----
|
||||||
|
macOS | Using [Homebrew](https://brew.sh/):<br/>`brew install pkg-config cairo pango libpng jpeg giflib librsvg pixman python-setuptools`
|
||||||
|
Ubuntu | `sudo apt-get install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev`
|
||||||
|
Fedora | `sudo yum install gcc-c++ cairo-devel pango-devel libjpeg-turbo-devel giflib-devel`
|
||||||
|
Solaris | `pkgin install cairo pango pkg-config xproto renderproto kbproto xextproto`
|
||||||
|
OpenBSD | `doas pkg_add cairo pango png jpeg giflib`
|
||||||
|
Windows | See the [wiki](https://github.com/Automattic/node-canvas/wiki/Installation:-Windows)
|
||||||
|
Others | See the [wiki](https://github.com/Automattic/node-canvas/wiki)
|
||||||
|
|
||||||
|
**Mac OS X v10.11+:** If you have recently updated to Mac OS X v10.11+ and are experiencing trouble when compiling, run the following command: `xcode-select --install`. Read more about the problem [on Stack Overflow](http://stackoverflow.com/a/32929012/148072).
|
||||||
|
If you have xcode 10.0 or higher installed, in order to build from source you need NPM 6.4.1 or higher.
|
||||||
|
|
||||||
|
## Quick Example
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const { createCanvas, loadImage } = require('canvas')
|
||||||
|
const canvas = createCanvas(200, 200)
|
||||||
|
const ctx = canvas.getContext('2d')
|
||||||
|
|
||||||
|
// Write "Awesome!"
|
||||||
|
ctx.font = '30px Impact'
|
||||||
|
ctx.rotate(0.1)
|
||||||
|
ctx.fillText('Awesome!', 50, 100)
|
||||||
|
|
||||||
|
// Draw line under text
|
||||||
|
var text = ctx.measureText('Awesome!')
|
||||||
|
ctx.strokeStyle = 'rgba(0,0,0,0.5)'
|
||||||
|
ctx.beginPath()
|
||||||
|
ctx.lineTo(50, 102)
|
||||||
|
ctx.lineTo(50 + text.width, 102)
|
||||||
|
ctx.stroke()
|
||||||
|
|
||||||
|
// Draw cat with lime helmet
|
||||||
|
loadImage('examples/images/lime-cat.jpg').then((image) => {
|
||||||
|
ctx.drawImage(image, 50, 0, 70, 70)
|
||||||
|
|
||||||
|
console.log('<img src="' + canvas.toDataURL() + '" />')
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
## Upgrading from 1.x to 2.x
|
||||||
|
|
||||||
|
See the [changelog](https://github.com/Automattic/node-canvas/blob/master/CHANGELOG.md) for a guide to upgrading from 1.x to 2.x.
|
||||||
|
|
||||||
|
For version 1.x documentation, see [the v1.x branch](https://github.com/Automattic/node-canvas/tree/v1.x).
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
This project is an implementation of the Web Canvas API and implements that API as closely as possible. For API documentation, please visit [Mozilla Web Canvas API](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API). (See [Compatibility Status](https://github.com/Automattic/node-canvas/wiki/Compatibility-Status) for the current API compliance.) All utility methods and non-standard APIs are documented below.
|
||||||
|
|
||||||
|
### Utility methods
|
||||||
|
|
||||||
|
* [createCanvas()](#createcanvas)
|
||||||
|
* [createImageData()](#createimagedata)
|
||||||
|
* [loadImage()](#loadimage)
|
||||||
|
* [registerFont()](#registerfont)
|
||||||
|
* [deregisterAllFonts()](#deregisterAllFonts)
|
||||||
|
|
||||||
|
|
||||||
|
### Non-standard APIs
|
||||||
|
|
||||||
|
* [Image#src](#imagesrc)
|
||||||
|
* [Image#dataMode](#imagedatamode)
|
||||||
|
* [Canvas#toBuffer()](#canvastobuffer)
|
||||||
|
* [Canvas#createPNGStream()](#canvascreatepngstream)
|
||||||
|
* [Canvas#createJPEGStream()](#canvascreatejpegstream)
|
||||||
|
* [Canvas#createPDFStream()](#canvascreatepdfstream)
|
||||||
|
* [Canvas#toDataURL()](#canvastodataurl)
|
||||||
|
* [CanvasRenderingContext2D#patternQuality](#canvasrenderingcontext2dpatternquality)
|
||||||
|
* [CanvasRenderingContext2D#quality](#canvasrenderingcontext2dquality)
|
||||||
|
* [CanvasRenderingContext2D#textDrawingMode](#canvasrenderingcontext2dtextdrawingmode)
|
||||||
|
* [CanvasRenderingContext2D#globalCompositeOperation = 'saturate'](#canvasrenderingcontext2dglobalcompositeoperation--saturate)
|
||||||
|
* [CanvasRenderingContext2D#antialias](#canvasrenderingcontext2dantialias)
|
||||||
|
|
||||||
|
### createCanvas()
|
||||||
|
|
||||||
|
> ```ts
|
||||||
|
> createCanvas(width: number, height: number, type?: 'PDF'|'SVG') => Canvas
|
||||||
|
> ```
|
||||||
|
|
||||||
|
Creates a Canvas instance. This method works in both Node.js and Web browsers, where there is no Canvas constructor. (See `browser.js` for the implementation that runs in browsers.)
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { createCanvas } = require('canvas')
|
||||||
|
const mycanvas = createCanvas(200, 200)
|
||||||
|
const myPDFcanvas = createCanvas(600, 800, 'pdf') // see "PDF Support" section
|
||||||
|
```
|
||||||
|
|
||||||
|
### createImageData()
|
||||||
|
|
||||||
|
> ```ts
|
||||||
|
> createImageData(width: number, height: number) => ImageData
|
||||||
|
> createImageData(data: Uint8ClampedArray, width: number, height?: number) => ImageData
|
||||||
|
> // for alternative pixel formats:
|
||||||
|
> createImageData(data: Uint16Array, width: number, height?: number) => ImageData
|
||||||
|
> ```
|
||||||
|
|
||||||
|
Creates an ImageData instance. This method works in both Node.js and Web browsers.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { createImageData } = require('canvas')
|
||||||
|
const width = 20, height = 20
|
||||||
|
const arraySize = width * height * 4
|
||||||
|
const mydata = createImageData(new Uint8ClampedArray(arraySize), width)
|
||||||
|
```
|
||||||
|
|
||||||
|
### loadImage()
|
||||||
|
|
||||||
|
> ```ts
|
||||||
|
> loadImage() => Promise<Image>
|
||||||
|
> ```
|
||||||
|
|
||||||
|
Convenience method for loading images. This method works in both Node.js and Web browsers.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { loadImage } = require('canvas')
|
||||||
|
const myimg = loadImage('http://server.com/image.png')
|
||||||
|
|
||||||
|
myimg.then(() => {
|
||||||
|
// do something with image
|
||||||
|
}).catch(err => {
|
||||||
|
console.log('oh no!', err)
|
||||||
|
})
|
||||||
|
|
||||||
|
// or with async/await:
|
||||||
|
const myimg = await loadImage('http://server.com/image.png')
|
||||||
|
// do something with image
|
||||||
|
```
|
||||||
|
|
||||||
|
### registerFont()
|
||||||
|
|
||||||
|
> ```ts
|
||||||
|
> registerFont(path: string, { family: string, weight?: string, style?: string }) => void
|
||||||
|
> ```
|
||||||
|
|
||||||
|
To use a font file that is not installed as a system font, use `registerFont()` to register the font with Canvas.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { registerFont, createCanvas } = require('canvas')
|
||||||
|
registerFont('comicsans.ttf', { family: 'Comic Sans' })
|
||||||
|
|
||||||
|
const canvas = createCanvas(500, 500)
|
||||||
|
const ctx = canvas.getContext('2d')
|
||||||
|
|
||||||
|
ctx.font = '12px "Comic Sans"'
|
||||||
|
ctx.fillText('Everyone hates this font :(', 250, 10)
|
||||||
|
```
|
||||||
|
|
||||||
|
The second argument is an object with properties that resemble the CSS properties that are specified in `@font-face` rules. You must specify at least `family`. `weight`, and `style` are optional and default to `'normal'`.
|
||||||
|
|
||||||
|
### deregisterAllFonts()
|
||||||
|
|
||||||
|
> ```ts
|
||||||
|
> deregisterAllFonts() => void
|
||||||
|
> ```
|
||||||
|
|
||||||
|
Use `deregisterAllFonts` to unregister all fonts that have been previously registered. This method is useful when you want to remove all registered fonts, such as when using the canvas in tests
|
||||||
|
|
||||||
|
```ts
|
||||||
|
const { registerFont, createCanvas, deregisterAllFonts } = require('canvas')
|
||||||
|
|
||||||
|
describe('text rendering', () => {
|
||||||
|
afterEach(() => {
|
||||||
|
deregisterAllFonts();
|
||||||
|
})
|
||||||
|
it('should render text with Comic Sans', () => {
|
||||||
|
registerFont('comicsans.ttf', { family: 'Comic Sans' })
|
||||||
|
|
||||||
|
const canvas = createCanvas(500, 500)
|
||||||
|
const ctx = canvas.getContext('2d')
|
||||||
|
|
||||||
|
ctx.font = '12px "Comic Sans"'
|
||||||
|
ctx.fillText('Everyone loves this font :)', 250, 10)
|
||||||
|
|
||||||
|
// assertScreenshot()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Image#src
|
||||||
|
|
||||||
|
> ```ts
|
||||||
|
> img.src: string|Buffer
|
||||||
|
> ```
|
||||||
|
|
||||||
|
As in browsers, `img.src` can be set to a `data:` URI or a remote URL. In addition, node-canvas allows setting `src` to a local file path or `Buffer` instance.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const { Image } = require('canvas')
|
||||||
|
|
||||||
|
// From a buffer:
|
||||||
|
fs.readFile('images/squid.png', (err, squid) => {
|
||||||
|
if (err) throw err
|
||||||
|
const img = new Image()
|
||||||
|
img.onload = () => ctx.drawImage(img, 0, 0)
|
||||||
|
img.onerror = err => { throw err }
|
||||||
|
img.src = squid
|
||||||
|
})
|
||||||
|
|
||||||
|
// From a local file path:
|
||||||
|
const img = new Image()
|
||||||
|
img.onload = () => ctx.drawImage(img, 0, 0)
|
||||||
|
img.onerror = err => { throw err }
|
||||||
|
img.src = 'images/squid.png'
|
||||||
|
|
||||||
|
// From a remote URL:
|
||||||
|
img.src = 'http://picsum.photos/200/300'
|
||||||
|
// ... as above
|
||||||
|
|
||||||
|
// From a `data:` URI:
|
||||||
|
img.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='
|
||||||
|
// ... as above
|
||||||
|
```
|
||||||
|
|
||||||
|
*Note: In some cases, `img.src=` is currently synchronous. However, you should always use `img.onload` and `img.onerror`, as we intend to make `img.src=` always asynchronous as it is in browsers. See https://github.com/Automattic/node-canvas/issues/1007.*
|
||||||
|
|
||||||
|
### Image#dataMode
|
||||||
|
|
||||||
|
> ```ts
|
||||||
|
> img.dataMode: number
|
||||||
|
> ```
|
||||||
|
|
||||||
|
Applies to JPEG images drawn to PDF canvases only.
|
||||||
|
|
||||||
|
Setting `img.dataMode = Image.MODE_MIME` or `Image.MODE_MIME|Image.MODE_IMAGE` enables MIME data tracking of images. When MIME data is tracked, PDF canvases can embed JPEGs directly into the output, rather than re-encoding into PNG. This can drastically reduce filesize and speed up rendering.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const { Image, createCanvas } = require('canvas')
|
||||||
|
const canvas = createCanvas(w, h, 'pdf')
|
||||||
|
const img = new Image()
|
||||||
|
img.dataMode = Image.MODE_IMAGE // Only image data tracked
|
||||||
|
img.dataMode = Image.MODE_MIME // Only mime data tracked
|
||||||
|
img.dataMode = Image.MODE_MIME | Image.MODE_IMAGE // Both are tracked
|
||||||
|
```
|
||||||
|
|
||||||
|
If working with a non-PDF canvas, image data *must* be tracked; otherwise the output will be junk.
|
||||||
|
|
||||||
|
Enabling mime data tracking has no benefits (only a slow down) unless you are generating a PDF.
|
||||||
|
|
||||||
|
### Canvas#toBuffer()
|
||||||
|
|
||||||
|
> ```ts
|
||||||
|
> canvas.toBuffer((err: Error|null, result: Buffer) => void, mimeType?: string, config?: any) => void
|
||||||
|
> canvas.toBuffer(mimeType?: string, config?: any) => Buffer
|
||||||
|
> ```
|
||||||
|
|
||||||
|
Creates a [`Buffer`](https://nodejs.org/api/buffer.html) object representing the image contained in the canvas.
|
||||||
|
|
||||||
|
* **callback** If provided, the buffer will be provided in the callback instead of being returned by the function. Invoked with an error as the first argument if encoding failed, or the resulting buffer as the second argument if it succeeded. Not supported for mimeType `raw` or for PDF or SVG canvases.
|
||||||
|
* **mimeType** A string indicating the image format. Valid options are `image/png`, `image/jpeg` (if node-canvas was built with JPEG support), `raw` (unencoded data in BGRA order on little-endian (most) systems, ARGB on big-endian systems; top-to-bottom), `application/pdf` (for PDF canvases) and `image/svg+xml` (for SVG canvases). Defaults to `image/png` for image canvases, or the corresponding type for PDF or SVG canvas.
|
||||||
|
* **config**
|
||||||
|
* For `image/jpeg`, an object specifying the quality (0 to 1), if progressive compression should be used and/or if chroma subsampling should be used: `{quality: 0.75, progressive: false, chromaSubsampling: true}`. All properties are optional.
|
||||||
|
|
||||||
|
* For `image/png`, an object specifying the ZLIB compression level (between 0 and 9), the compression filter(s), the palette (indexed PNGs only), the the background palette index (indexed PNGs only) and/or the resolution (ppi): `{compressionLevel: 6, filters: canvas.PNG_ALL_FILTERS, palette: undefined, backgroundIndex: 0, resolution: undefined}`. All properties are optional.
|
||||||
|
|
||||||
|
Note that the PNG format encodes the resolution in pixels per meter, so if you specify `96`, the file will encode 3780 ppm (~96.01 ppi). The resolution is undefined by default to match common browser behavior.
|
||||||
|
|
||||||
|
* For `application/pdf`, an object specifying optional document metadata: `{title: string, author: string, subject: string, keywords: string, creator: string, creationDate: Date, modDate: Date}`. All properties are optional and default to `undefined`, except for `creationDate`, which defaults to the current date. *Adding metadata requires Cairo 1.16.0 or later.*
|
||||||
|
|
||||||
|
For a description of these properties, see page 550 of [PDF 32000-1:2008](https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf).
|
||||||
|
|
||||||
|
Note that there is no standard separator for `keywords`. A space is recommended because it is in common use by other applications, and Cairo will enclose the list of keywords in quotes if a comma or semicolon is used.
|
||||||
|
|
||||||
|
**Return value**
|
||||||
|
|
||||||
|
If no callback is provided, a [`Buffer`](https://nodejs.org/api/buffer.html). If a callback is provided, none.
|
||||||
|
|
||||||
|
#### Examples
|
||||||
|
|
||||||
|
```js
|
||||||
|
// Default: buf contains a PNG-encoded image
|
||||||
|
const buf = canvas.toBuffer()
|
||||||
|
|
||||||
|
// PNG-encoded, zlib compression level 3 for faster compression but bigger files, no filtering
|
||||||
|
const buf2 = canvas.toBuffer('image/png', { compressionLevel: 3, filters: canvas.PNG_FILTER_NONE })
|
||||||
|
|
||||||
|
// JPEG-encoded, 50% quality
|
||||||
|
const buf3 = canvas.toBuffer('image/jpeg', { quality: 0.5 })
|
||||||
|
|
||||||
|
// Asynchronous PNG
|
||||||
|
canvas.toBuffer((err, buf) => {
|
||||||
|
if (err) throw err // encoding failed
|
||||||
|
// buf is PNG-encoded image
|
||||||
|
})
|
||||||
|
|
||||||
|
canvas.toBuffer((err, buf) => {
|
||||||
|
if (err) throw err // encoding failed
|
||||||
|
// buf is JPEG-encoded image at 95% quality
|
||||||
|
}, 'image/jpeg', { quality: 0.95 })
|
||||||
|
|
||||||
|
// BGRA pixel values, native-endian
|
||||||
|
const buf4 = canvas.toBuffer('raw')
|
||||||
|
const { stride, width } = canvas
|
||||||
|
// In memory, this is `canvas.height * canvas.stride` bytes long.
|
||||||
|
// The top row of pixels, in BGRA order on little-endian hardware,
|
||||||
|
// left-to-right, is:
|
||||||
|
const topPixelsBGRALeftToRight = buf4.slice(0, width * 4)
|
||||||
|
// And the third row is:
|
||||||
|
const row3 = buf4.slice(2 * stride, 2 * stride + width * 4)
|
||||||
|
|
||||||
|
// SVG and PDF canvases
|
||||||
|
const myCanvas = createCanvas(w, h, 'pdf')
|
||||||
|
myCanvas.toBuffer() // returns a buffer containing a PDF-encoded canvas
|
||||||
|
// With optional metadata:
|
||||||
|
myCanvas.toBuffer('application/pdf', {
|
||||||
|
title: 'my picture',
|
||||||
|
keywords: 'node.js demo cairo',
|
||||||
|
creationDate: new Date()
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Canvas#createPNGStream()
|
||||||
|
|
||||||
|
> ```ts
|
||||||
|
> canvas.createPNGStream(config?: any) => ReadableStream
|
||||||
|
> ```
|
||||||
|
|
||||||
|
Creates a [`ReadableStream`](https://nodejs.org/api/stream.html#stream_class_stream_readable) that emits PNG-encoded data.
|
||||||
|
|
||||||
|
* `config` An object specifying the ZLIB compression level (between 0 and 9), the compression filter(s), the palette (indexed PNGs only) and/or the background palette index (indexed PNGs only): `{compressionLevel: 6, filters: canvas.PNG_ALL_FILTERS, palette: undefined, backgroundIndex: 0, resolution: undefined}`. All properties are optional.
|
||||||
|
|
||||||
|
#### Examples
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const fs = require('fs')
|
||||||
|
const out = fs.createWriteStream(__dirname + '/test.png')
|
||||||
|
const stream = canvas.createPNGStream()
|
||||||
|
stream.pipe(out)
|
||||||
|
out.on('finish', () => console.log('The PNG file was created.'))
|
||||||
|
```
|
||||||
|
|
||||||
|
To encode indexed PNGs from canvases with `pixelFormat: 'A8'` or `'A1'`, provide an options object:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const palette = new Uint8ClampedArray([
|
||||||
|
//r g b a
|
||||||
|
0, 50, 50, 255, // index 1
|
||||||
|
10, 90, 90, 255, // index 2
|
||||||
|
127, 127, 255, 255
|
||||||
|
// ...
|
||||||
|
])
|
||||||
|
canvas.createPNGStream({
|
||||||
|
palette: palette,
|
||||||
|
backgroundIndex: 0 // optional, defaults to 0
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Canvas#createJPEGStream()
|
||||||
|
|
||||||
|
> ```ts
|
||||||
|
> canvas.createJPEGStream(config?: any) => ReadableStream
|
||||||
|
> ```
|
||||||
|
|
||||||
|
Creates a [`ReadableStream`](https://nodejs.org/api/stream.html#stream_class_stream_readable) that emits JPEG-encoded data.
|
||||||
|
|
||||||
|
*Note: At the moment, `createJPEGStream()` is synchronous under the hood. That is, it runs in the main thread, not in the libuv threadpool.*
|
||||||
|
|
||||||
|
* `config` an object specifying the quality (0 to 1), if progressive compression should be used and/or if chroma subsampling should be used: `{quality: 0.75, progressive: false, chromaSubsampling: true}`. All properties are optional.
|
||||||
|
|
||||||
|
#### Examples
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const fs = require('fs')
|
||||||
|
const out = fs.createWriteStream(__dirname + '/test.jpeg')
|
||||||
|
const stream = canvas.createJPEGStream()
|
||||||
|
stream.pipe(out)
|
||||||
|
out.on('finish', () => console.log('The JPEG file was created.'))
|
||||||
|
|
||||||
|
// Disable 2x2 chromaSubsampling for deeper colors and use a higher quality
|
||||||
|
const stream = canvas.createJPEGStream({
|
||||||
|
quality: 0.95,
|
||||||
|
chromaSubsampling: false
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Canvas#createPDFStream()
|
||||||
|
|
||||||
|
> ```ts
|
||||||
|
> canvas.createPDFStream(config?: any) => ReadableStream
|
||||||
|
> ```
|
||||||
|
|
||||||
|
* `config` an object specifying optional document metadata: `{title: string, author: string, subject: string, keywords: string, creator: string, creationDate: Date, modDate: Date}`. See `toBuffer()` for more information. *Adding metadata requires Cairo 1.16.0 or later.*
|
||||||
|
|
||||||
|
Applies to PDF canvases only. Creates a [`ReadableStream`](https://nodejs.org/api/stream.html#stream_class_stream_readable) that emits the encoded PDF. `canvas.toBuffer()` also produces an encoded PDF, but `createPDFStream()` can be used to reduce memory usage.
|
||||||
|
|
||||||
|
### Canvas#toDataURL()
|
||||||
|
|
||||||
|
This is a standard API, but several non-standard calls are supported. The full list of supported calls is:
|
||||||
|
|
||||||
|
```js
|
||||||
|
dataUrl = canvas.toDataURL() // defaults to PNG
|
||||||
|
dataUrl = canvas.toDataURL('image/png')
|
||||||
|
dataUrl = canvas.toDataURL('image/jpeg')
|
||||||
|
dataUrl = canvas.toDataURL('image/jpeg', quality) // quality from 0 to 1
|
||||||
|
canvas.toDataURL((err, png) => { }) // defaults to PNG
|
||||||
|
canvas.toDataURL('image/png', (err, png) => { })
|
||||||
|
canvas.toDataURL('image/jpeg', (err, jpeg) => { }) // sync JPEG is not supported
|
||||||
|
canvas.toDataURL('image/jpeg', {...opts}, (err, jpeg) => { }) // see Canvas#createJPEGStream for valid options
|
||||||
|
canvas.toDataURL('image/jpeg', quality, (err, jpeg) => { }) // spec-following; quality from 0 to 1
|
||||||
|
```
|
||||||
|
|
||||||
|
### CanvasRenderingContext2D#patternQuality
|
||||||
|
|
||||||
|
> ```ts
|
||||||
|
> context.patternQuality: 'fast'|'good'|'best'|'nearest'|'bilinear'
|
||||||
|
> ```
|
||||||
|
|
||||||
|
Defaults to `'good'`. Affects pattern (gradient, image, etc.) rendering quality.
|
||||||
|
|
||||||
|
### CanvasRenderingContext2D#quality
|
||||||
|
|
||||||
|
> ```ts
|
||||||
|
> context.quality: 'fast'|'good'|'best'|'nearest'|'bilinear'
|
||||||
|
> ```
|
||||||
|
|
||||||
|
Defaults to `'good'`. Like `patternQuality`, but applies to transformations affecting more than just patterns.
|
||||||
|
|
||||||
|
### CanvasRenderingContext2D#textDrawingMode
|
||||||
|
|
||||||
|
> ```ts
|
||||||
|
> context.textDrawingMode: 'path'|'glyph'
|
||||||
|
> ```
|
||||||
|
|
||||||
|
Defaults to `'path'`. The effect depends on the canvas type:
|
||||||
|
|
||||||
|
* **Standard (image)** `glyph` and `path` both result in rasterized text. Glyph mode is faster than `path`, but may result in lower-quality text, especially when rotated or translated.
|
||||||
|
|
||||||
|
* **PDF** `glyph` will embed text instead of paths into the PDF. This is faster to encode, faster to open with PDF viewers, yields a smaller file size and makes the text selectable. The subset of the font needed to render the glyphs will be embedded in the PDF. This is usually the mode you want to use with PDF canvases.
|
||||||
|
|
||||||
|
* **SVG** `glyph` does *not* cause `<text>` elements to be produced as one might expect ([cairo bug](https://gitlab.freedesktop.org/cairo/cairo/issues/253)). Rather, `glyph` will create a `<defs>` section with a `<symbol>` for each glyph, then those glyphs be reused via `<use>` elements. `path` mode creates a `<path>` element for each text string. `glyph` mode is faster and yields a smaller file size.
|
||||||
|
|
||||||
|
In `glyph` mode, `ctx.strokeText()` and `ctx.fillText()` behave the same (aside from using the stroke and fill style, respectively).
|
||||||
|
|
||||||
|
This property is tracked as part of the canvas state in save/restore.
|
||||||
|
|
||||||
|
### CanvasRenderingContext2D#globalCompositeOperation = 'saturate'
|
||||||
|
|
||||||
|
In addition to all of the standard global composite operations defined by the Canvas specification, the ['saturate'](https://www.cairographics.org/operators/#saturate) operation is also available.
|
||||||
|
|
||||||
|
### CanvasRenderingContext2D#antialias
|
||||||
|
|
||||||
|
> ```ts
|
||||||
|
> context.antialias: 'default'|'none'|'gray'|'subpixel'
|
||||||
|
> ```
|
||||||
|
|
||||||
|
Sets the anti-aliasing mode.
|
||||||
|
|
||||||
|
## PDF Output Support
|
||||||
|
|
||||||
|
node-canvas can create PDF documents instead of images. The canvas type must be set when creating the canvas as follows:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const canvas = createCanvas(200, 500, 'pdf')
|
||||||
|
```
|
||||||
|
|
||||||
|
An additional method `.addPage()` is then available to create multiple page PDFs:
|
||||||
|
|
||||||
|
```js
|
||||||
|
// On first page
|
||||||
|
ctx.font = '22px Helvetica'
|
||||||
|
ctx.fillText('Hello World', 50, 80)
|
||||||
|
|
||||||
|
ctx.addPage()
|
||||||
|
// Now on second page
|
||||||
|
ctx.font = '22px Helvetica'
|
||||||
|
ctx.fillText('Hello World 2', 50, 80)
|
||||||
|
|
||||||
|
canvas.toBuffer() // returns a PDF file
|
||||||
|
canvas.createPDFStream() // returns a ReadableStream that emits a PDF
|
||||||
|
// With optional document metadata (requires Cairo 1.16.0):
|
||||||
|
canvas.toBuffer('application/pdf', {
|
||||||
|
title: 'my picture',
|
||||||
|
keywords: 'node.js demo cairo',
|
||||||
|
creationDate: new Date()
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
It is also possible to create pages with different sizes by passing `width` and `height` to the `.addPage()` method:
|
||||||
|
|
||||||
|
```js
|
||||||
|
ctx.font = '22px Helvetica'
|
||||||
|
ctx.fillText('Hello World', 50, 80)
|
||||||
|
ctx.addPage(400, 800)
|
||||||
|
|
||||||
|
ctx.fillText('Hello World 2', 50, 80)
|
||||||
|
```
|
||||||
|
|
||||||
|
It is possible to add hyperlinks using `.beginTag()` and `.endTag()`:
|
||||||
|
|
||||||
|
```js
|
||||||
|
ctx.beginTag('Link', "uri='https://google.com'")
|
||||||
|
ctx.font = '22px Helvetica'
|
||||||
|
ctx.fillText('Hello World', 50, 80)
|
||||||
|
ctx.endTag('Link')
|
||||||
|
```
|
||||||
|
|
||||||
|
Or with a defined rectangle:
|
||||||
|
|
||||||
|
```js
|
||||||
|
ctx.beginTag('Link', "uri='https://google.com' rect=[50 80 100 20]")
|
||||||
|
ctx.endTag('Link')
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that the syntax for attributes is unique to Cairo. See [cairo_tag_begin](https://www.cairographics.org/manual/cairo-Tags-and-Links.html#cairo-tag-begin) for the full documentation.
|
||||||
|
|
||||||
|
You can create areas on the canvas using the "cairo.dest" tag, and then link to them using the "Link" tag with the `dest=` attribute. You can also define PDF structure for accessibility by using tag names like "P", "H1", and "TABLE". The standard tags are defined in §14.8.4 of the [PDF 1.7](https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/PDF32000_2008.pdf) specification.
|
||||||
|
|
||||||
|
See also:
|
||||||
|
|
||||||
|
* [Image#dataMode](#imagedatamode) for embedding JPEGs in PDFs
|
||||||
|
* [Canvas#createPDFStream()](#canvascreatepdfstream) for creating PDF streams
|
||||||
|
* [CanvasRenderingContext2D#textDrawingMode](#canvasrenderingcontext2dtextdrawingmode)
|
||||||
|
for embedding text instead of paths
|
||||||
|
|
||||||
|
## SVG Output Support
|
||||||
|
|
||||||
|
node-canvas can create SVG documents instead of images. The canvas type must be set when creating the canvas as follows:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const canvas = createCanvas(200, 500, 'svg')
|
||||||
|
// Use the normal primitives.
|
||||||
|
fs.writeFileSync('out.svg', canvas.toBuffer())
|
||||||
|
```
|
||||||
|
|
||||||
|
## SVG Image Support
|
||||||
|
|
||||||
|
If librsvg is available when node-canvas is installed, node-canvas can render SVG images to your canvas context. This currently works by rasterizing the SVG image (i.e. drawing an SVG image to an SVG canvas will not preserve the SVG data).
|
||||||
|
|
||||||
|
```js
|
||||||
|
const img = new Image()
|
||||||
|
img.onload = () => ctx.drawImage(img, 0, 0)
|
||||||
|
img.onerror = err => { throw err }
|
||||||
|
img.src = './example.svg'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Image pixel formats (experimental)
|
||||||
|
|
||||||
|
node-canvas has experimental support for additional pixel formats, roughly following the [Canvas color space proposal](https://github.com/WICG/canvas-color-space/blob/master/CanvasColorSpaceProposal.md).
|
||||||
|
|
||||||
|
```js
|
||||||
|
const canvas = createCanvas(200, 200)
|
||||||
|
const ctx = canvas.getContext('2d', { pixelFormat: 'A8' })
|
||||||
|
```
|
||||||
|
|
||||||
|
By default, canvases are created in the `RGBA32` format, which corresponds to the native HTML Canvas behavior. Each pixel is 32 bits. The JavaScript APIs that involve pixel data (`getImageData`, `putImageData`) store the colors in the order {red, green, blue, alpha} without alpha pre-multiplication. (The C++ API stores the colors in the order {alpha, red, green, blue} in native-[endian](https://en.wikipedia.org/wiki/Endianness) ordering, with alpha pre-multiplication.)
|
||||||
|
|
||||||
|
These additional pixel formats have experimental support:
|
||||||
|
|
||||||
|
* `RGB24` Like `RGBA32`, but the 8 alpha bits are always opaque. This format is always used if the `alpha` context attribute is set to false (i.e. `canvas.getContext('2d', {alpha: false})`). This format can be faster than `RGBA32` because transparency does not need to be calculated.
|
||||||
|
* `A8` Each pixel is 8 bits. This format can either be used for creating grayscale images (treating each byte as an alpha value), or for creating indexed PNGs (treating each byte as a palette index) (see [the example using alpha values with `fillStyle`](examples/indexed-png-alpha.js) and [the example using `imageData`](examples/indexed-png-image-data.js)).
|
||||||
|
* `RGB16_565` Each pixel is 16 bits, with red in the upper 5 bits, green in the middle 6 bits, and blue in the lower 5 bits, in native platform endianness. Some hardware devices and frame buffers use this format. Note that PNG does not support this format; when creating a PNG, the image will be converted to 24-bit RGB. This format is thus suboptimal for generating PNGs. `ImageData` instances for this mode use a `Uint16Array` instead of a `Uint8ClampedArray`.
|
||||||
|
* `A1` Each pixel is 1 bit, and pixels are packed together into 32-bit quantities. The ordering of the bits matches the endianness of the
|
||||||
|
platform: on a little-endian machine, the first pixel is the least-significant bit. This format can be used for creating single-color images. *Support for this format is incomplete, see note below.*
|
||||||
|
* `RGB30` Each pixel is 30 bits, with red in the upper 10, green in the middle 10, and blue in the lower 10. (Requires Cairo 1.12 or later.) *Support for this format is incomplete, see note below.*
|
||||||
|
|
||||||
|
Notes and caveats:
|
||||||
|
|
||||||
|
* Using a non-default format can affect the behavior of APIs that involve pixel data:
|
||||||
|
|
||||||
|
* `context2d.createImageData` The size of the array returned depends on the number of bit per pixel for the underlying image data format, per the above descriptions.
|
||||||
|
* `context2d.getImageData` The format of the array returned depends on the underlying image mode, per the above descriptions. Be aware of platform endianness, which can be determined using node.js's [`os.endianness()`](https://nodejs.org/api/os.html#os_os_endianness)
|
||||||
|
function.
|
||||||
|
* `context2d.putImageData` As above.
|
||||||
|
|
||||||
|
* `A1` and `RGB30` do not yet support `getImageData` or `putImageData`. Have a use case and/or opinion on working with these formats? Open an issue and let us know! (See #935.)
|
||||||
|
|
||||||
|
* `A1`, `A8`, `RGB30` and `RGB16_565` with shadow blurs may crash or not render properly.
|
||||||
|
|
||||||
|
* The `ImageData(width, height)` and `ImageData(Uint8ClampedArray, width)` constructors assume 4 bytes per pixel. To create an `ImageData` instance with a different number of bytes per pixel, use `new ImageData(new Uint8ClampedArray(size), width, height)` or `new ImageData(new Uint16ClampedArray(size), width, height)`.
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
First make sure you've built the latest version. Get all the deps you need (see [compiling](#compiling) above), and run:
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install --build-from-source
|
||||||
|
```
|
||||||
|
|
||||||
|
For visual tests: `npm run test-server` and point your browser to http://localhost:4000.
|
||||||
|
|
||||||
|
For unit tests: `npm run test`.
|
||||||
|
|
||||||
|
## Benchmarks
|
||||||
|
|
||||||
|
Benchmarks live in the `benchmarks` directory.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
Examples line in the `examples` directory. Most produce a png image of the same name, and others such as *live-clock.js* launch an HTTP server to be viewed in the browser.
|
||||||
|
|
||||||
|
## Original Authors
|
||||||
|
|
||||||
|
- TJ Holowaychuk ([tj](http://github.com/tj))
|
||||||
|
- Nathan Rajlich ([TooTallNate](http://github.com/TooTallNate))
|
||||||
|
- Rod Vagg ([rvagg](http://github.com/rvagg))
|
||||||
|
- Juriy Zaytsev ([kangax](http://github.com/kangax))
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
### node-canvas
|
||||||
|
|
||||||
|
(The MIT License)
|
||||||
|
|
||||||
|
Copyright (c) 2010 LearnBoost, and contributors <dev@learnboost.com>
|
||||||
|
|
||||||
|
Copyright (c) 2014 Automattic, Inc and contributors <dev@automattic.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.
|
||||||
|
|
||||||
|
### BMP parser
|
||||||
|
|
||||||
|
See [license](src/bmp/LICENSE.md)
|
||||||
234
miniprogram/node_modules/canvas/binding.gyp
generated
vendored
Normal file
@ -0,0 +1,234 @@
|
|||||||
|
{
|
||||||
|
'conditions': [
|
||||||
|
['OS=="win"', {
|
||||||
|
'variables': {
|
||||||
|
'GTK_Root%': 'C:/GTK', # Set the location of GTK all-in-one bundle
|
||||||
|
'with_jpeg%': 'false',
|
||||||
|
'with_gif%': 'false',
|
||||||
|
'with_rsvg%': 'false',
|
||||||
|
'variables': { # Nest jpeg_root to evaluate it before with_jpeg
|
||||||
|
'jpeg_root%': '<!(node ./util/win_jpeg_lookup)'
|
||||||
|
},
|
||||||
|
'jpeg_root%': '<(jpeg_root)', # Take value of nested variable
|
||||||
|
'conditions': [
|
||||||
|
['jpeg_root==""', {
|
||||||
|
'with_jpeg%': 'false'
|
||||||
|
}, {
|
||||||
|
'with_jpeg%': 'true'
|
||||||
|
}]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}, { # 'OS!="win"'
|
||||||
|
'variables': {
|
||||||
|
'with_jpeg%': '<!(node ./util/has_lib.js jpeg)',
|
||||||
|
'with_gif%': '<!(node ./util/has_lib.js gif)',
|
||||||
|
'with_rsvg%': '<!(node ./util/has_lib.js rsvg)'
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
],
|
||||||
|
'targets': [
|
||||||
|
{
|
||||||
|
'target_name': 'canvas-postbuild',
|
||||||
|
'dependencies': ['canvas'],
|
||||||
|
'conditions': [
|
||||||
|
['OS=="win"', {
|
||||||
|
'copies': [{
|
||||||
|
'destination': '<(PRODUCT_DIR)',
|
||||||
|
'files': [
|
||||||
|
'<(GTK_Root)/bin/zlib1.dll',
|
||||||
|
'<(GTK_Root)/bin/libintl-8.dll',
|
||||||
|
'<(GTK_Root)/bin/libpng14-14.dll',
|
||||||
|
'<(GTK_Root)/bin/libpangocairo-1.0-0.dll',
|
||||||
|
'<(GTK_Root)/bin/libpango-1.0-0.dll',
|
||||||
|
'<(GTK_Root)/bin/libpangoft2-1.0-0.dll',
|
||||||
|
'<(GTK_Root)/bin/libpangowin32-1.0-0.dll',
|
||||||
|
'<(GTK_Root)/bin/libcairo-2.dll',
|
||||||
|
'<(GTK_Root)/bin/libfontconfig-1.dll',
|
||||||
|
'<(GTK_Root)/bin/libfreetype-6.dll',
|
||||||
|
'<(GTK_Root)/bin/libglib-2.0-0.dll',
|
||||||
|
'<(GTK_Root)/bin/libgobject-2.0-0.dll',
|
||||||
|
'<(GTK_Root)/bin/libgmodule-2.0-0.dll',
|
||||||
|
'<(GTK_Root)/bin/libgthread-2.0-0.dll',
|
||||||
|
'<(GTK_Root)/bin/libexpat-1.dll'
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'target_name': 'canvas',
|
||||||
|
'include_dirs': ["<!(node -p \"require('node-addon-api').include_dir\")"],
|
||||||
|
'defines': [ 'NAPI_DISABLE_CPP_EXCEPTIONS', 'NODE_ADDON_API_ENABLE_MAYBE' ],
|
||||||
|
'sources': [
|
||||||
|
'src/backend/Backend.cc',
|
||||||
|
'src/backend/ImageBackend.cc',
|
||||||
|
'src/backend/PdfBackend.cc',
|
||||||
|
'src/backend/SvgBackend.cc',
|
||||||
|
'src/bmp/BMPParser.cc',
|
||||||
|
'src/Backends.cc',
|
||||||
|
'src/Canvas.cc',
|
||||||
|
'src/CanvasGradient.cc',
|
||||||
|
'src/CanvasPattern.cc',
|
||||||
|
'src/CanvasRenderingContext2d.cc',
|
||||||
|
'src/closure.cc',
|
||||||
|
'src/color.cc',
|
||||||
|
'src/Image.cc',
|
||||||
|
'src/ImageData.cc',
|
||||||
|
'src/init.cc',
|
||||||
|
'src/register_font.cc',
|
||||||
|
'src/FontParser.cc'
|
||||||
|
],
|
||||||
|
'conditions': [
|
||||||
|
['OS=="win"', {
|
||||||
|
'libraries': [
|
||||||
|
'-l<(GTK_Root)/lib/cairo.lib',
|
||||||
|
'-l<(GTK_Root)/lib/libpng.lib',
|
||||||
|
'-l<(GTK_Root)/lib/pangocairo-1.0.lib',
|
||||||
|
'-l<(GTK_Root)/lib/pango-1.0.lib',
|
||||||
|
'-l<(GTK_Root)/lib/freetype.lib',
|
||||||
|
'-l<(GTK_Root)/lib/glib-2.0.lib',
|
||||||
|
'-l<(GTK_Root)/lib/gobject-2.0.lib'
|
||||||
|
],
|
||||||
|
'include_dirs': [
|
||||||
|
'<(GTK_Root)/include',
|
||||||
|
'<(GTK_Root)/include/cairo',
|
||||||
|
'<(GTK_Root)/include/pango-1.0',
|
||||||
|
'<(GTK_Root)/include/glib-2.0',
|
||||||
|
'<(GTK_Root)/include/freetype2',
|
||||||
|
'<(GTK_Root)/lib/glib-2.0/include'
|
||||||
|
],
|
||||||
|
'defines': [
|
||||||
|
'_USE_MATH_DEFINES', # for M_PI
|
||||||
|
'NOMINMAX' # allow std::min/max to work
|
||||||
|
],
|
||||||
|
'configurations': {
|
||||||
|
'Debug': {
|
||||||
|
'msvs_settings': {
|
||||||
|
'VCCLCompilerTool': {
|
||||||
|
'WarningLevel': 4,
|
||||||
|
'ExceptionHandling': 1,
|
||||||
|
'DisableSpecificWarnings': [
|
||||||
|
4100, 4611
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'Release': {
|
||||||
|
'msvs_settings': {
|
||||||
|
'VCCLCompilerTool': {
|
||||||
|
'WarningLevel': 4,
|
||||||
|
'ExceptionHandling': 1,
|
||||||
|
'DisableSpecificWarnings': [
|
||||||
|
4100, 4611
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, { # 'OS!="win"'
|
||||||
|
'libraries': [
|
||||||
|
'<!@(pkg-config pixman-1 --libs)',
|
||||||
|
'<!@(pkg-config cairo --libs)',
|
||||||
|
'<!@(pkg-config libpng --libs)',
|
||||||
|
'<!@(pkg-config pangocairo --libs)',
|
||||||
|
'<!@(pkg-config freetype2 --libs)'
|
||||||
|
],
|
||||||
|
'include_dirs': [
|
||||||
|
'<!@(pkg-config cairo --cflags-only-I | sed s/-I//g)',
|
||||||
|
'<!@(pkg-config libpng --cflags-only-I | sed s/-I//g)',
|
||||||
|
'<!@(pkg-config pangocairo --cflags-only-I | sed s/-I//g)',
|
||||||
|
'<!@(pkg-config freetype2 --cflags-only-I | sed s/-I//g)'
|
||||||
|
],
|
||||||
|
'cflags': ['-Wno-cast-function-type'],
|
||||||
|
'cflags!': ['-fno-exceptions'],
|
||||||
|
'cflags_cc!': ['-fno-exceptions']
|
||||||
|
}],
|
||||||
|
['OS=="mac"', {
|
||||||
|
'cflags+': ['-fvisibility=hidden'],
|
||||||
|
'xcode_settings': {
|
||||||
|
'GCC_SYMBOLS_PRIVATE_EXTERN': 'YES', # -fvisibility=hidden
|
||||||
|
'GCC_ENABLE_CPP_EXCEPTIONS': 'YES'
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
['with_jpeg=="true"', {
|
||||||
|
'defines': [
|
||||||
|
'HAVE_JPEG'
|
||||||
|
],
|
||||||
|
'conditions': [
|
||||||
|
['OS=="win"', {
|
||||||
|
'copies': [{
|
||||||
|
'destination': '<(PRODUCT_DIR)',
|
||||||
|
'files': [
|
||||||
|
'<(jpeg_root)/bin/jpeg62.dll',
|
||||||
|
]
|
||||||
|
}],
|
||||||
|
'include_dirs': [
|
||||||
|
'<(jpeg_root)/include'
|
||||||
|
],
|
||||||
|
'libraries': [
|
||||||
|
'-l<(jpeg_root)/lib/jpeg.lib',
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
'include_dirs': [
|
||||||
|
'<!@(pkg-config libjpeg --cflags-only-I | sed s/-I//g)'
|
||||||
|
],
|
||||||
|
'libraries': [
|
||||||
|
'<!@(pkg-config libjpeg --libs)'
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
]
|
||||||
|
}],
|
||||||
|
['with_gif=="true"', {
|
||||||
|
'defines': [
|
||||||
|
'HAVE_GIF'
|
||||||
|
],
|
||||||
|
'conditions': [
|
||||||
|
['OS=="win"', {
|
||||||
|
'libraries': [
|
||||||
|
'-l<(GTK_Root)/lib/gif.lib'
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
'include_dirs': [
|
||||||
|
'/opt/homebrew/include'
|
||||||
|
],
|
||||||
|
'libraries': [
|
||||||
|
'-L/opt/homebrew/lib',
|
||||||
|
'-lgif'
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
]
|
||||||
|
}],
|
||||||
|
['with_rsvg=="true"', {
|
||||||
|
'defines': [
|
||||||
|
'HAVE_RSVG'
|
||||||
|
],
|
||||||
|
'conditions': [
|
||||||
|
['OS=="win"', {
|
||||||
|
'copies': [{
|
||||||
|
'destination': '<(PRODUCT_DIR)',
|
||||||
|
'files': [
|
||||||
|
'<(GTK_Root)/bin/librsvg-2-2.dll',
|
||||||
|
'<(GTK_Root)/bin/libgdk_pixbuf-2.0-0.dll',
|
||||||
|
'<(GTK_Root)/bin/libgio-2.0-0.dll',
|
||||||
|
'<(GTK_Root)/bin/libcroco-0.6-3.dll',
|
||||||
|
'<(GTK_Root)/bin/libgsf-1-114.dll',
|
||||||
|
'<(GTK_Root)/bin/libxml2-2.dll'
|
||||||
|
]
|
||||||
|
}],
|
||||||
|
'libraries': [
|
||||||
|
'-l<(GTK_Root)/lib/librsvg-2-2.lib'
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
'include_dirs': [
|
||||||
|
'<!@(pkg-config librsvg-2.0 --cflags-only-I | sed s/-I//g)'
|
||||||
|
],
|
||||||
|
'libraries': [
|
||||||
|
'<!@(pkg-config librsvg-2.0 --libs)'
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
31
miniprogram/node_modules/canvas/browser.js
generated
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/* globals document, ImageData */
|
||||||
|
|
||||||
|
exports.createCanvas = function (width, height) {
|
||||||
|
return Object.assign(document.createElement('canvas'), { width: width, height: height })
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.createImageData = function (array, width, height) {
|
||||||
|
// Browser implementation of ImageData looks at the number of arguments passed
|
||||||
|
switch (arguments.length) {
|
||||||
|
case 0: return new ImageData()
|
||||||
|
case 1: return new ImageData(array)
|
||||||
|
case 2: return new ImageData(array, width)
|
||||||
|
default: return new ImageData(array, width, height)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.loadImage = function (src, options) {
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
const image = Object.assign(document.createElement('img'), options)
|
||||||
|
|
||||||
|
function cleanup () {
|
||||||
|
image.onload = null
|
||||||
|
image.onerror = null
|
||||||
|
}
|
||||||
|
|
||||||
|
image.onload = function () { cleanup(); resolve(image) }
|
||||||
|
image.onerror = function () { cleanup(); reject(new Error('Failed to load the image "' + src + '"')) }
|
||||||
|
|
||||||
|
image.src = src
|
||||||
|
})
|
||||||
|
}
|
||||||
BIN
miniprogram/node_modules/canvas/build/Release/canvas.node
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libbrotlicommon.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libbrotlidec.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libbz2-1.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libcairo-2.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libcairo-gobject-2.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libdatrie-1.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libdeflate.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libexpat-1.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libffi-8.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libfontconfig-1.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libfreetype-6.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libfribidi-0.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libgcc_s_seh-1.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libgdk_pixbuf-2.0-0.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libgif-7.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libgio-2.0-0.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libglib-2.0-0.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libgmodule-2.0-0.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libgobject-2.0-0.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libgraphite2.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libharfbuzz-0.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libiconv-2.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libintl-8.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libjbig-0.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libjpeg-8.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/liblerc.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/liblzma-5.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libpango-1.0-0.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libpangocairo-1.0-0.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libpangoft2-1.0-0.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libpangowin32-1.0-0.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libpcre2-8-0.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libpixman-1-0.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libpng16-16.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/librsvg-2-2.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libsharpyuv-0.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libstdc++-6.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libthai-0.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libtiff-6.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libwebp-7.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libwinpthread-1.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libxml2-16.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/libzstd.dll
generated
vendored
Normal file
BIN
miniprogram/node_modules/canvas/build/Release/zlib1.dll
generated
vendored
Normal file
19
miniprogram/node_modules/canvas/build/binding.sln
generated
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 2015
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "canvas", "canvas.vcxproj", "{90D75E7A-41A0-8814-61A2-B5859FC0E033}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{90D75E7A-41A0-8814-61A2-B5859FC0E033}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{90D75E7A-41A0-8814-61A2-B5859FC0E033}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{90D75E7A-41A0-8814-61A2-B5859FC0E033}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{90D75E7A-41A0-8814-61A2-B5859FC0E033}.Release|x64.Build.0 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
196
miniprogram/node_modules/canvas/build/canvas.vcxproj
generated
vendored
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{90D75E7A-41A0-8814-61A2-B5859FC0E033}</ProjectGuid>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<RootNamespace>canvas</RootNamespace>
|
||||||
|
<IgnoreWarnCompileDuplicatedFilename>true</IgnoreWarnCompileDuplicatedFilename>
|
||||||
|
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
|
||||||
|
<WindowsTargetPlatformVersion>10.0.26100.0</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props"/>
|
||||||
|
<PropertyGroup Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Locals">
|
||||||
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props"/>
|
||||||
|
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props"/>
|
||||||
|
<ImportGroup Label="ExtensionSettings"/>
|
||||||
|
<ImportGroup Label="PropertySheets">
|
||||||
|
<Import Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"/>
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros"/>
|
||||||
|
<PropertyGroup>
|
||||||
|
<ExecutablePath>$(ExecutablePath);$(MSBuildProjectDirectory)\..\bin\;$(MSBuildProjectDirectory)\..\bin\</ExecutablePath>
|
||||||
|
<IgnoreImportLibrary>true</IgnoreImportLibrary>
|
||||||
|
<IntDir>$(Configuration)\obj\$(ProjectName)\</IntDir>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
|
||||||
|
<OutDir>$(SolutionDir)$(Configuration)\</OutDir>
|
||||||
|
<TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.node</TargetExt>
|
||||||
|
<TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.node</TargetExt>
|
||||||
|
<TargetExt Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.node</TargetExt>
|
||||||
|
<TargetExt Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.node</TargetExt>
|
||||||
|
<TargetName>$(ProjectName)</TargetName>
|
||||||
|
<TargetPath>$(OutDir)\$(ProjectName).node</TargetPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\include\node;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\src;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\openssl\config;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\openssl\openssl\include;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\uv\include;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\zlib;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\v8\include;..\node_modules\node-addon-api;D:\a\_temp\msys64\ucrt64\include;D:\a\_temp\msys64\ucrt64\include\harfbuzz;D:\a\_temp\msys64\ucrt64\include\pango-1.0;D:\a\_temp\msys64\ucrt64\include\cairo;D:\a\_temp\msys64\ucrt64\include\libpng16;D:\a\_temp\msys64\ucrt64\include\glib-2.0;D:\a\_temp\msys64\ucrt64\lib\glib-2.0\include;D:\a\_temp\msys64\ucrt64\include\pixman-1;D:\a\_temp\msys64\ucrt64\include\freetype2;D:\a\_temp\msys64\ucrt64\include\fontconfig;D:\a\_temp\msys64\ucrt64\include\librsvg-2.0;D:\a\_temp\msys64\ucrt64\include\gdk-pixbuf-2.0;D:\a\_temp\msys64\ucrt64\include\libgsf-1;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<AdditionalOptions>/Zc:__cplusplus -std:c++17 %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
|
<BufferSecurityCheck>true</BufferSecurityCheck>
|
||||||
|
<DebugInformationFormat>OldStyle</DebugInformationFormat>
|
||||||
|
<DisableSpecificWarnings>4100;4127;4201;4244;4267;4506;4611;4714;4512;4351;4355;4800;4251;4275;4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
|
<ExceptionHandling>Sync</ExceptionHandling>
|
||||||
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
<OmitFramePointers>false</OmitFramePointers>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<PreprocessorDefinitions>NODE_GYP_MODULE_NAME=canvas;USING_UV_SHARED=1;USING_V8_SHARED=1;V8_DEPRECATION_WARNINGS=1;_GLIBCXX_USE_CXX11_ABI=1;WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_HAS_EXCEPTIONS=0;OPENSSL_NO_PINSHARED;OPENSSL_THREADS;HAVE_GIF;HAVE_JPEG;HAVE_RSVG;HAVE_BOOLEAN;_USE_MATH_DEFINES;NOMINMAX;NAPI_DISABLE_CPP_EXCEPTIONS;NODE_ADDON_API_ENABLE_MAYBE;BUILDING_NODE_EXTENSION;HOST_BINARY="node.exe";DEBUG;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<StringPooling>true</StringPooling>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<TreatWarningAsError>false</TreatWarningAsError>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<AdditionalOptions>/LTCG:INCREMENTAL %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
</Lib>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;"C:\\Users\\runneradmin\\AppData\\Local\\node-gyp\\Cache\\21.7.3\\x64\\node.lib";D:\a\_temp\msys64\ucrt64\lib\libcairo-2.lib;D:\a\_temp\msys64\ucrt64\lib\libpng16-16.lib;D:\a\_temp\msys64\ucrt64\lib\libjpeg-8.lib;D:\a\_temp\msys64\ucrt64\lib\libpango-1.0-0.lib;D:\a\_temp\msys64\ucrt64\lib\libpangocairo-1.0-0.lib;D:\a\_temp\msys64\ucrt64\lib\libgobject-2.0-0.lib;D:\a\_temp\msys64\ucrt64\lib\libglib-2.0-0.lib;D:\a\_temp\msys64\ucrt64\lib\libturbojpeg.lib;D:\a\_temp\msys64\ucrt64\lib\libgif-7.lib;D:\a\_temp\msys64\ucrt64\lib\libfreetype-6.lib;D:\a\_temp\msys64\ucrt64\lib\librsvg-2-2.lib</AdditionalDependencies>
|
||||||
|
<AdditionalOptions>/LTCG:INCREMENTAL /ignore:4199 %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<DelayLoadDLLs>node.exe;%(DelayLoadDLLs)</DelayLoadDLLs>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<OutputFile>$(OutDir)$(ProjectName).node</OutputFile>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<TargetExt>.node</TargetExt>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
<ResourceCompile>
|
||||||
|
<AdditionalIncludeDirectories>C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\include\node;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\src;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\openssl\config;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\openssl\openssl\include;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\uv\include;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\zlib;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\v8\include;..\node_modules\node-addon-api;D:\a\_temp\msys64\ucrt64\include;D:\a\_temp\msys64\ucrt64\include\harfbuzz;D:\a\_temp\msys64\ucrt64\include\pango-1.0;D:\a\_temp\msys64\ucrt64\include\cairo;D:\a\_temp\msys64\ucrt64\include\libpng16;D:\a\_temp\msys64\ucrt64\include\glib-2.0;D:\a\_temp\msys64\ucrt64\lib\glib-2.0\include;D:\a\_temp\msys64\ucrt64\include\pixman-1;D:\a\_temp\msys64\ucrt64\include\freetype2;D:\a\_temp\msys64\ucrt64\include\fontconfig;D:\a\_temp\msys64\ucrt64\include\librsvg-2.0;D:\a\_temp\msys64\ucrt64\include\gdk-pixbuf-2.0;D:\a\_temp\msys64\ucrt64\include\libgsf-1;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>NODE_GYP_MODULE_NAME=canvas;USING_UV_SHARED=1;USING_V8_SHARED=1;V8_DEPRECATION_WARNINGS=1;_GLIBCXX_USE_CXX11_ABI=1;WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_HAS_EXCEPTIONS=0;OPENSSL_NO_PINSHARED;OPENSSL_THREADS;HAVE_GIF;HAVE_JPEG;HAVE_RSVG;HAVE_BOOLEAN;_USE_MATH_DEFINES;NOMINMAX;NAPI_DISABLE_CPP_EXCEPTIONS;NODE_ADDON_API_ENABLE_MAYBE;BUILDING_NODE_EXTENSION;HOST_BINARY="node.exe";DEBUG;_DEBUG;%(PreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\include\node;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\src;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\openssl\config;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\openssl\openssl\include;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\uv\include;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\zlib;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\v8\include;..\node_modules\node-addon-api;D:\a\_temp\msys64\ucrt64\include;D:\a\_temp\msys64\ucrt64\include\harfbuzz;D:\a\_temp\msys64\ucrt64\include\pango-1.0;D:\a\_temp\msys64\ucrt64\include\cairo;D:\a\_temp\msys64\ucrt64\include\libpng16;D:\a\_temp\msys64\ucrt64\include\glib-2.0;D:\a\_temp\msys64\ucrt64\lib\glib-2.0\include;D:\a\_temp\msys64\ucrt64\include\pixman-1;D:\a\_temp\msys64\ucrt64\include\freetype2;D:\a\_temp\msys64\ucrt64\include\fontconfig;D:\a\_temp\msys64\ucrt64\include\librsvg-2.0;D:\a\_temp\msys64\ucrt64\include\gdk-pixbuf-2.0;D:\a\_temp\msys64\ucrt64\include\libgsf-1;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<AdditionalOptions>/Zc:__cplusplus -std:c++17 %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<BufferSecurityCheck>true</BufferSecurityCheck>
|
||||||
|
<DebugInformationFormat>OldStyle</DebugInformationFormat>
|
||||||
|
<DisableSpecificWarnings>4100;4127;4201;4244;4267;4506;4611;4714;4512;4351;4355;4800;4251;4275;4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
|
<ExceptionHandling>Sync</ExceptionHandling>
|
||||||
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
<OmitFramePointers>true</OmitFramePointers>
|
||||||
|
<Optimization>Full</Optimization>
|
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<PreprocessorDefinitions>NODE_GYP_MODULE_NAME=canvas;USING_UV_SHARED=1;USING_V8_SHARED=1;V8_DEPRECATION_WARNINGS=1;_GLIBCXX_USE_CXX11_ABI=1;WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_HAS_EXCEPTIONS=0;OPENSSL_NO_PINSHARED;OPENSSL_THREADS;HAVE_GIF;HAVE_JPEG;HAVE_RSVG;HAVE_BOOLEAN;_USE_MATH_DEFINES;NOMINMAX;NAPI_DISABLE_CPP_EXCEPTIONS;NODE_ADDON_API_ENABLE_MAYBE;BUILDING_NODE_EXTENSION;HOST_BINARY="node.exe";%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
||||||
|
<StringPooling>true</StringPooling>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<TreatWarningAsError>false</TreatWarningAsError>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<AdditionalOptions>/LTCG:INCREMENTAL %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
</Lib>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;"C:\\Users\\runneradmin\\AppData\\Local\\node-gyp\\Cache\\21.7.3\\x64\\node.lib";D:\a\_temp\msys64\ucrt64\lib\libcairo-2.lib;D:\a\_temp\msys64\ucrt64\lib\libpng16-16.lib;D:\a\_temp\msys64\ucrt64\lib\libjpeg-8.lib;D:\a\_temp\msys64\ucrt64\lib\libpango-1.0-0.lib;D:\a\_temp\msys64\ucrt64\lib\libpangocairo-1.0-0.lib;D:\a\_temp\msys64\ucrt64\lib\libgobject-2.0-0.lib;D:\a\_temp\msys64\ucrt64\lib\libglib-2.0-0.lib;D:\a\_temp\msys64\ucrt64\lib\libturbojpeg.lib;D:\a\_temp\msys64\ucrt64\lib\libgif-7.lib;D:\a\_temp\msys64\ucrt64\lib\libfreetype-6.lib;D:\a\_temp\msys64\ucrt64\lib\librsvg-2-2.lib</AdditionalDependencies>
|
||||||
|
<AdditionalOptions>/LTCG:INCREMENTAL /ignore:4199 %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<DelayLoadDLLs>node.exe;%(DelayLoadDLLs)</DelayLoadDLLs>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<OutputFile>$(OutDir)$(ProjectName).node</OutputFile>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<TargetExt>.node</TargetExt>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
<ResourceCompile>
|
||||||
|
<AdditionalIncludeDirectories>C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\include\node;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\src;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\openssl\config;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\openssl\openssl\include;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\uv\include;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\zlib;C:\Users\runneradmin\AppData\Local\node-gyp\Cache\21.7.3\deps\v8\include;..\node_modules\node-addon-api;D:\a\_temp\msys64\ucrt64\include;D:\a\_temp\msys64\ucrt64\include\harfbuzz;D:\a\_temp\msys64\ucrt64\include\pango-1.0;D:\a\_temp\msys64\ucrt64\include\cairo;D:\a\_temp\msys64\ucrt64\include\libpng16;D:\a\_temp\msys64\ucrt64\include\glib-2.0;D:\a\_temp\msys64\ucrt64\lib\glib-2.0\include;D:\a\_temp\msys64\ucrt64\include\pixman-1;D:\a\_temp\msys64\ucrt64\include\freetype2;D:\a\_temp\msys64\ucrt64\include\fontconfig;D:\a\_temp\msys64\ucrt64\include\librsvg-2.0;D:\a\_temp\msys64\ucrt64\include\gdk-pixbuf-2.0;D:\a\_temp\msys64\ucrt64\include\libgsf-1;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>NODE_GYP_MODULE_NAME=canvas;USING_UV_SHARED=1;USING_V8_SHARED=1;V8_DEPRECATION_WARNINGS=1;_GLIBCXX_USE_CXX11_ABI=1;WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_HAS_EXCEPTIONS=0;OPENSSL_NO_PINSHARED;OPENSSL_THREADS;HAVE_GIF;HAVE_JPEG;HAVE_RSVG;HAVE_BOOLEAN;_USE_MATH_DEFINES;NOMINMAX;NAPI_DISABLE_CPP_EXCEPTIONS;NODE_ADDON_API_ENABLE_MAYBE;BUILDING_NODE_EXTENSION;HOST_BINARY="node.exe";%(PreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\binding.gyp"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\src\backend\Backend.cc">
|
||||||
|
<ObjectFileName>$(IntDir)\src\backend\Backend.obj</ObjectFileName>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\backend\ImageBackend.cc">
|
||||||
|
<ObjectFileName>$(IntDir)\src\backend\ImageBackend.obj</ObjectFileName>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\backend\PdfBackend.cc">
|
||||||
|
<ObjectFileName>$(IntDir)\src\backend\PdfBackend.obj</ObjectFileName>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\backend\SvgBackend.cc">
|
||||||
|
<ObjectFileName>$(IntDir)\src\backend\SvgBackend.obj</ObjectFileName>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\bmp\BMPParser.cc">
|
||||||
|
<ObjectFileName>$(IntDir)\src\bmp\BMPParser.obj</ObjectFileName>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\Backends.cc">
|
||||||
|
<ObjectFileName>$(IntDir)\src\Backends.obj</ObjectFileName>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\Canvas.cc">
|
||||||
|
<ObjectFileName>$(IntDir)\src\Canvas.obj</ObjectFileName>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\CanvasGradient.cc">
|
||||||
|
<ObjectFileName>$(IntDir)\src\CanvasGradient.obj</ObjectFileName>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\CanvasPattern.cc">
|
||||||
|
<ObjectFileName>$(IntDir)\src\CanvasPattern.obj</ObjectFileName>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\CanvasRenderingContext2d.cc">
|
||||||
|
<ObjectFileName>$(IntDir)\src\CanvasRenderingContext2d.obj</ObjectFileName>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\closure.cc">
|
||||||
|
<ObjectFileName>$(IntDir)\src\closure.obj</ObjectFileName>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\color.cc">
|
||||||
|
<ObjectFileName>$(IntDir)\src\color.obj</ObjectFileName>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\Image.cc">
|
||||||
|
<ObjectFileName>$(IntDir)\src\Image.obj</ObjectFileName>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\ImageData.cc">
|
||||||
|
<ObjectFileName>$(IntDir)\src\ImageData.obj</ObjectFileName>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\init.cc">
|
||||||
|
<ObjectFileName>$(IntDir)\src\init.obj</ObjectFileName>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\register_font.cc">
|
||||||
|
<ObjectFileName>$(IntDir)\src\register_font.obj</ObjectFileName>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\FontParser.cc">
|
||||||
|
<ObjectFileName>$(IntDir)\src\FontParser.obj</ObjectFileName>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="C:\hostedtoolcache\windows\node\21.7.3\x64\node_modules\npm\node_modules\node-gyp\src\win_delay_load_hook.cc"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets"/>
|
||||||
|
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets"/>
|
||||||
|
<ImportGroup Label="ExtensionTargets"/>
|
||||||
|
</Project>
|
||||||
217
miniprogram/node_modules/canvas/build/canvas.vcxproj.filters
generated
vendored
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src\backend">
|
||||||
|
<UniqueIdentifier>{0601BD18-2FE3-2D4A-0C05-611A0F36D709}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src\backend">
|
||||||
|
<UniqueIdentifier>{0601BD18-2FE3-2D4A-0C05-611A0F36D709}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src\backend">
|
||||||
|
<UniqueIdentifier>{0601BD18-2FE3-2D4A-0C05-611A0F36D709}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src\backend">
|
||||||
|
<UniqueIdentifier>{0601BD18-2FE3-2D4A-0C05-611A0F36D709}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src\bmp">
|
||||||
|
<UniqueIdentifier>{C08C95BF-9646-DB44-5C81-9CB5B5F652A5}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="C:">
|
||||||
|
<UniqueIdentifier>{7B735499-E5DD-1C2B-6C26-70023832A1CF}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="C:\hostedtoolcache">
|
||||||
|
<UniqueIdentifier>{296B63E6-8BC4-B79B-77CC-9C615B0D2B0F}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="C:\hostedtoolcache\windows">
|
||||||
|
<UniqueIdentifier>{C1450D01-C033-76F3-3763-6DE88AF48A77}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="C:\hostedtoolcache\windows\node">
|
||||||
|
<UniqueIdentifier>{A49AD564-6B22-6A46-08E5-B5A7F4427839}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="C:\hostedtoolcache\windows\node\21.7.3">
|
||||||
|
<UniqueIdentifier>{1C63F1C8-0353-A369-E968-394FCDA23886}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="C:\hostedtoolcache\windows\node\21.7.3\x64">
|
||||||
|
<UniqueIdentifier>{E075064C-529C-A4E7-0810-FB88D599C3BE}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="C:\hostedtoolcache\windows\node\21.7.3\x64\node_modules">
|
||||||
|
<UniqueIdentifier>{56DF7A98-063D-FB9D-485C-089023B4C16A}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="C:\hostedtoolcache\windows\node\21.7.3\x64\node_modules\npm">
|
||||||
|
<UniqueIdentifier>{741E0E76-39B2-B1AB-9FA1-F1A20B16F295}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="C:\hostedtoolcache\windows\node\21.7.3\x64\node_modules\npm\node_modules">
|
||||||
|
<UniqueIdentifier>{56DF7A98-063D-FB9D-485C-089023B4C16A}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="C:\hostedtoolcache\windows\node\21.7.3\x64\node_modules\npm\node_modules\node-gyp">
|
||||||
|
<UniqueIdentifier>{77348C0E-2034-7791-74D5-63C077DF5A3B}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="C:\hostedtoolcache\windows\node\21.7.3\x64\node_modules\npm\node_modules\node-gyp\src">
|
||||||
|
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="..">
|
||||||
|
<UniqueIdentifier>{739DB09A-CC57-A953-A6CF-F64FA08E4FA7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\src\backend\Backend.cc">
|
||||||
|
<Filter>..\src\backend</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\backend\ImageBackend.cc">
|
||||||
|
<Filter>..\src\backend</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\backend\PdfBackend.cc">
|
||||||
|
<Filter>..\src\backend</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\backend\SvgBackend.cc">
|
||||||
|
<Filter>..\src\backend</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\bmp\BMPParser.cc">
|
||||||
|
<Filter>..\src\bmp</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\Backends.cc">
|
||||||
|
<Filter>..\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\Canvas.cc">
|
||||||
|
<Filter>..\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\CanvasGradient.cc">
|
||||||
|
<Filter>..\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\CanvasPattern.cc">
|
||||||
|
<Filter>..\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\CanvasRenderingContext2d.cc">
|
||||||
|
<Filter>..\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\closure.cc">
|
||||||
|
<Filter>..\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\color.cc">
|
||||||
|
<Filter>..\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\Image.cc">
|
||||||
|
<Filter>..\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\ImageData.cc">
|
||||||
|
<Filter>..\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\init.cc">
|
||||||
|
<Filter>..\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\register_font.cc">
|
||||||
|
<Filter>..\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\FontParser.cc">
|
||||||
|
<Filter>..\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="C:\hostedtoolcache\windows\node\21.7.3\x64\node_modules\npm\node_modules\node-gyp\src\win_delay_load_hook.cc">
|
||||||
|
<Filter>C:\hostedtoolcache\windows\node\21.7.3\x64\node_modules\npm\node_modules\node-gyp\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<None Include="..\binding.gyp">
|
||||||
|
<Filter>..</Filter>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
433
miniprogram/node_modules/canvas/build/config.gypi
generated
vendored
Normal file
@ -0,0 +1,433 @@
|
|||||||
|
# Do not edit. File was generated by node-gyp's "configure" step
|
||||||
|
{
|
||||||
|
"target_defaults": {
|
||||||
|
"cflags": [],
|
||||||
|
"default_configuration": "Release",
|
||||||
|
"defines": [],
|
||||||
|
"include_dirs": [],
|
||||||
|
"libraries": [],
|
||||||
|
"msbuild_toolset": "v143",
|
||||||
|
"msvs_windows_target_platform_version": "10.0.26100.0"
|
||||||
|
},
|
||||||
|
"variables": {
|
||||||
|
"asan": 0,
|
||||||
|
"coverage": "false",
|
||||||
|
"dcheck_always_on": 0,
|
||||||
|
"debug_nghttp2": "false",
|
||||||
|
"debug_node": "false",
|
||||||
|
"enable_lto": "false",
|
||||||
|
"enable_pgo_generate": "false",
|
||||||
|
"enable_pgo_use": "false",
|
||||||
|
"error_on_warn": "false",
|
||||||
|
"force_dynamic_crt": 0,
|
||||||
|
"host_arch": "x64",
|
||||||
|
"icu_data_in": "..\\..\\deps\\icu-tmp\\icudt74l.dat",
|
||||||
|
"icu_endianness": "l",
|
||||||
|
"icu_gyp_path": "tools/icu/icu-generic.gyp",
|
||||||
|
"icu_path": "deps/icu-small",
|
||||||
|
"icu_small": "false",
|
||||||
|
"icu_ver_major": "74",
|
||||||
|
"is_debug": 0,
|
||||||
|
"libdir": "lib",
|
||||||
|
"llvm_version": "0.0",
|
||||||
|
"napi_build_version": "9",
|
||||||
|
"nasm_version": "2.16",
|
||||||
|
"node_builtin_shareable_builtins": [
|
||||||
|
"deps/cjs-module-lexer/lexer.js",
|
||||||
|
"deps/cjs-module-lexer/dist/lexer.js",
|
||||||
|
"deps/undici/undici.js"
|
||||||
|
],
|
||||||
|
"node_byteorder": "little",
|
||||||
|
"node_debug_lib": "false",
|
||||||
|
"node_enable_d8": "false",
|
||||||
|
"node_enable_v8_vtunejit": "false",
|
||||||
|
"node_fipsinstall": "false",
|
||||||
|
"node_install_corepack": "true",
|
||||||
|
"node_install_npm": "true",
|
||||||
|
"node_library_files": [
|
||||||
|
"lib/_http_agent.js",
|
||||||
|
"lib/_http_client.js",
|
||||||
|
"lib/_http_common.js",
|
||||||
|
"lib/_http_incoming.js",
|
||||||
|
"lib/_http_outgoing.js",
|
||||||
|
"lib/_http_server.js",
|
||||||
|
"lib/_stream_duplex.js",
|
||||||
|
"lib/_stream_passthrough.js",
|
||||||
|
"lib/_stream_readable.js",
|
||||||
|
"lib/_stream_transform.js",
|
||||||
|
"lib/_stream_wrap.js",
|
||||||
|
"lib/_stream_writable.js",
|
||||||
|
"lib/_tls_common.js",
|
||||||
|
"lib/_tls_wrap.js",
|
||||||
|
"lib/assert.js",
|
||||||
|
"lib/assert/strict.js",
|
||||||
|
"lib/async_hooks.js",
|
||||||
|
"lib/buffer.js",
|
||||||
|
"lib/child_process.js",
|
||||||
|
"lib/cluster.js",
|
||||||
|
"lib/console.js",
|
||||||
|
"lib/constants.js",
|
||||||
|
"lib/crypto.js",
|
||||||
|
"lib/dgram.js",
|
||||||
|
"lib/diagnostics_channel.js",
|
||||||
|
"lib/dns.js",
|
||||||
|
"lib/dns/promises.js",
|
||||||
|
"lib/domain.js",
|
||||||
|
"lib/events.js",
|
||||||
|
"lib/fs.js",
|
||||||
|
"lib/fs/promises.js",
|
||||||
|
"lib/http.js",
|
||||||
|
"lib/http2.js",
|
||||||
|
"lib/https.js",
|
||||||
|
"lib/inspector.js",
|
||||||
|
"lib/inspector/promises.js",
|
||||||
|
"lib/internal/abort_controller.js",
|
||||||
|
"lib/internal/assert.js",
|
||||||
|
"lib/internal/assert/assertion_error.js",
|
||||||
|
"lib/internal/assert/calltracker.js",
|
||||||
|
"lib/internal/async_hooks.js",
|
||||||
|
"lib/internal/blob.js",
|
||||||
|
"lib/internal/blocklist.js",
|
||||||
|
"lib/internal/bootstrap/node.js",
|
||||||
|
"lib/internal/bootstrap/realm.js",
|
||||||
|
"lib/internal/bootstrap/shadow_realm.js",
|
||||||
|
"lib/internal/bootstrap/switches/does_not_own_process_state.js",
|
||||||
|
"lib/internal/bootstrap/switches/does_own_process_state.js",
|
||||||
|
"lib/internal/bootstrap/switches/is_main_thread.js",
|
||||||
|
"lib/internal/bootstrap/switches/is_not_main_thread.js",
|
||||||
|
"lib/internal/bootstrap/web/exposed-wildcard.js",
|
||||||
|
"lib/internal/bootstrap/web/exposed-window-or-worker.js",
|
||||||
|
"lib/internal/buffer.js",
|
||||||
|
"lib/internal/child_process.js",
|
||||||
|
"lib/internal/child_process/serialization.js",
|
||||||
|
"lib/internal/cli_table.js",
|
||||||
|
"lib/internal/cluster/child.js",
|
||||||
|
"lib/internal/cluster/primary.js",
|
||||||
|
"lib/internal/cluster/round_robin_handle.js",
|
||||||
|
"lib/internal/cluster/shared_handle.js",
|
||||||
|
"lib/internal/cluster/utils.js",
|
||||||
|
"lib/internal/cluster/worker.js",
|
||||||
|
"lib/internal/console/constructor.js",
|
||||||
|
"lib/internal/console/global.js",
|
||||||
|
"lib/internal/constants.js",
|
||||||
|
"lib/internal/crypto/aes.js",
|
||||||
|
"lib/internal/crypto/certificate.js",
|
||||||
|
"lib/internal/crypto/cfrg.js",
|
||||||
|
"lib/internal/crypto/cipher.js",
|
||||||
|
"lib/internal/crypto/diffiehellman.js",
|
||||||
|
"lib/internal/crypto/ec.js",
|
||||||
|
"lib/internal/crypto/hash.js",
|
||||||
|
"lib/internal/crypto/hashnames.js",
|
||||||
|
"lib/internal/crypto/hkdf.js",
|
||||||
|
"lib/internal/crypto/keygen.js",
|
||||||
|
"lib/internal/crypto/keys.js",
|
||||||
|
"lib/internal/crypto/mac.js",
|
||||||
|
"lib/internal/crypto/pbkdf2.js",
|
||||||
|
"lib/internal/crypto/random.js",
|
||||||
|
"lib/internal/crypto/rsa.js",
|
||||||
|
"lib/internal/crypto/scrypt.js",
|
||||||
|
"lib/internal/crypto/sig.js",
|
||||||
|
"lib/internal/crypto/util.js",
|
||||||
|
"lib/internal/crypto/webcrypto.js",
|
||||||
|
"lib/internal/crypto/webidl.js",
|
||||||
|
"lib/internal/crypto/x509.js",
|
||||||
|
"lib/internal/debugger/inspect.js",
|
||||||
|
"lib/internal/debugger/inspect_client.js",
|
||||||
|
"lib/internal/debugger/inspect_repl.js",
|
||||||
|
"lib/internal/dgram.js",
|
||||||
|
"lib/internal/dns/callback_resolver.js",
|
||||||
|
"lib/internal/dns/promises.js",
|
||||||
|
"lib/internal/dns/utils.js",
|
||||||
|
"lib/internal/encoding.js",
|
||||||
|
"lib/internal/error_serdes.js",
|
||||||
|
"lib/internal/errors.js",
|
||||||
|
"lib/internal/event_target.js",
|
||||||
|
"lib/internal/events/symbols.js",
|
||||||
|
"lib/internal/file.js",
|
||||||
|
"lib/internal/fixed_queue.js",
|
||||||
|
"lib/internal/freelist.js",
|
||||||
|
"lib/internal/freeze_intrinsics.js",
|
||||||
|
"lib/internal/fs/cp/cp-sync.js",
|
||||||
|
"lib/internal/fs/cp/cp.js",
|
||||||
|
"lib/internal/fs/dir.js",
|
||||||
|
"lib/internal/fs/glob.js",
|
||||||
|
"lib/internal/fs/promises.js",
|
||||||
|
"lib/internal/fs/read/context.js",
|
||||||
|
"lib/internal/fs/recursive_watch.js",
|
||||||
|
"lib/internal/fs/rimraf.js",
|
||||||
|
"lib/internal/fs/streams.js",
|
||||||
|
"lib/internal/fs/sync_write_stream.js",
|
||||||
|
"lib/internal/fs/utils.js",
|
||||||
|
"lib/internal/fs/watchers.js",
|
||||||
|
"lib/internal/heap_utils.js",
|
||||||
|
"lib/internal/histogram.js",
|
||||||
|
"lib/internal/http.js",
|
||||||
|
"lib/internal/http2/compat.js",
|
||||||
|
"lib/internal/http2/core.js",
|
||||||
|
"lib/internal/http2/util.js",
|
||||||
|
"lib/internal/idna.js",
|
||||||
|
"lib/internal/inspector_async_hook.js",
|
||||||
|
"lib/internal/js_stream_socket.js",
|
||||||
|
"lib/internal/legacy/processbinding.js",
|
||||||
|
"lib/internal/linkedlist.js",
|
||||||
|
"lib/internal/main/check_syntax.js",
|
||||||
|
"lib/internal/main/embedding.js",
|
||||||
|
"lib/internal/main/eval_stdin.js",
|
||||||
|
"lib/internal/main/eval_string.js",
|
||||||
|
"lib/internal/main/inspect.js",
|
||||||
|
"lib/internal/main/mksnapshot.js",
|
||||||
|
"lib/internal/main/print_help.js",
|
||||||
|
"lib/internal/main/prof_process.js",
|
||||||
|
"lib/internal/main/repl.js",
|
||||||
|
"lib/internal/main/run_main_module.js",
|
||||||
|
"lib/internal/main/test_runner.js",
|
||||||
|
"lib/internal/main/watch_mode.js",
|
||||||
|
"lib/internal/main/worker_thread.js",
|
||||||
|
"lib/internal/mime.js",
|
||||||
|
"lib/internal/modules/cjs/loader.js",
|
||||||
|
"lib/internal/modules/esm/assert.js",
|
||||||
|
"lib/internal/modules/esm/create_dynamic_module.js",
|
||||||
|
"lib/internal/modules/esm/fetch_module.js",
|
||||||
|
"lib/internal/modules/esm/formats.js",
|
||||||
|
"lib/internal/modules/esm/get_format.js",
|
||||||
|
"lib/internal/modules/esm/handle_process_exit.js",
|
||||||
|
"lib/internal/modules/esm/hooks.js",
|
||||||
|
"lib/internal/modules/esm/initialize_import_meta.js",
|
||||||
|
"lib/internal/modules/esm/load.js",
|
||||||
|
"lib/internal/modules/esm/loader.js",
|
||||||
|
"lib/internal/modules/esm/module_job.js",
|
||||||
|
"lib/internal/modules/esm/module_map.js",
|
||||||
|
"lib/internal/modules/esm/resolve.js",
|
||||||
|
"lib/internal/modules/esm/shared_constants.js",
|
||||||
|
"lib/internal/modules/esm/translators.js",
|
||||||
|
"lib/internal/modules/esm/utils.js",
|
||||||
|
"lib/internal/modules/esm/worker.js",
|
||||||
|
"lib/internal/modules/helpers.js",
|
||||||
|
"lib/internal/modules/package_json_reader.js",
|
||||||
|
"lib/internal/modules/run_main.js",
|
||||||
|
"lib/internal/navigator.js",
|
||||||
|
"lib/internal/net.js",
|
||||||
|
"lib/internal/options.js",
|
||||||
|
"lib/internal/per_context/domexception.js",
|
||||||
|
"lib/internal/per_context/messageport.js",
|
||||||
|
"lib/internal/per_context/primordials.js",
|
||||||
|
"lib/internal/perf/event_loop_delay.js",
|
||||||
|
"lib/internal/perf/event_loop_utilization.js",
|
||||||
|
"lib/internal/perf/nodetiming.js",
|
||||||
|
"lib/internal/perf/observe.js",
|
||||||
|
"lib/internal/perf/performance.js",
|
||||||
|
"lib/internal/perf/performance_entry.js",
|
||||||
|
"lib/internal/perf/resource_timing.js",
|
||||||
|
"lib/internal/perf/timerify.js",
|
||||||
|
"lib/internal/perf/usertiming.js",
|
||||||
|
"lib/internal/perf/utils.js",
|
||||||
|
"lib/internal/policy/manifest.js",
|
||||||
|
"lib/internal/policy/sri.js",
|
||||||
|
"lib/internal/priority_queue.js",
|
||||||
|
"lib/internal/process/esm_loader.js",
|
||||||
|
"lib/internal/process/execution.js",
|
||||||
|
"lib/internal/process/per_thread.js",
|
||||||
|
"lib/internal/process/permission.js",
|
||||||
|
"lib/internal/process/policy.js",
|
||||||
|
"lib/internal/process/pre_execution.js",
|
||||||
|
"lib/internal/process/promises.js",
|
||||||
|
"lib/internal/process/report.js",
|
||||||
|
"lib/internal/process/signal.js",
|
||||||
|
"lib/internal/process/task_queues.js",
|
||||||
|
"lib/internal/process/warning.js",
|
||||||
|
"lib/internal/process/worker_thread_only.js",
|
||||||
|
"lib/internal/promise_hooks.js",
|
||||||
|
"lib/internal/querystring.js",
|
||||||
|
"lib/internal/readline/callbacks.js",
|
||||||
|
"lib/internal/readline/emitKeypressEvents.js",
|
||||||
|
"lib/internal/readline/interface.js",
|
||||||
|
"lib/internal/readline/promises.js",
|
||||||
|
"lib/internal/readline/utils.js",
|
||||||
|
"lib/internal/repl.js",
|
||||||
|
"lib/internal/repl/await.js",
|
||||||
|
"lib/internal/repl/history.js",
|
||||||
|
"lib/internal/repl/utils.js",
|
||||||
|
"lib/internal/socket_list.js",
|
||||||
|
"lib/internal/socketaddress.js",
|
||||||
|
"lib/internal/source_map/prepare_stack_trace.js",
|
||||||
|
"lib/internal/source_map/source_map.js",
|
||||||
|
"lib/internal/source_map/source_map_cache.js",
|
||||||
|
"lib/internal/stream_base_commons.js",
|
||||||
|
"lib/internal/streams/add-abort-signal.js",
|
||||||
|
"lib/internal/streams/compose.js",
|
||||||
|
"lib/internal/streams/destroy.js",
|
||||||
|
"lib/internal/streams/duplex.js",
|
||||||
|
"lib/internal/streams/duplexify.js",
|
||||||
|
"lib/internal/streams/end-of-stream.js",
|
||||||
|
"lib/internal/streams/from.js",
|
||||||
|
"lib/internal/streams/lazy_transform.js",
|
||||||
|
"lib/internal/streams/legacy.js",
|
||||||
|
"lib/internal/streams/operators.js",
|
||||||
|
"lib/internal/streams/passthrough.js",
|
||||||
|
"lib/internal/streams/pipeline.js",
|
||||||
|
"lib/internal/streams/readable.js",
|
||||||
|
"lib/internal/streams/state.js",
|
||||||
|
"lib/internal/streams/transform.js",
|
||||||
|
"lib/internal/streams/utils.js",
|
||||||
|
"lib/internal/streams/writable.js",
|
||||||
|
"lib/internal/test/binding.js",
|
||||||
|
"lib/internal/test/transfer.js",
|
||||||
|
"lib/internal/test_runner/coverage.js",
|
||||||
|
"lib/internal/test_runner/harness.js",
|
||||||
|
"lib/internal/test_runner/mock/mock.js",
|
||||||
|
"lib/internal/test_runner/mock/mock_timers.js",
|
||||||
|
"lib/internal/test_runner/reporter/dot.js",
|
||||||
|
"lib/internal/test_runner/reporter/junit.js",
|
||||||
|
"lib/internal/test_runner/reporter/lcov.js",
|
||||||
|
"lib/internal/test_runner/reporter/spec.js",
|
||||||
|
"lib/internal/test_runner/reporter/tap.js",
|
||||||
|
"lib/internal/test_runner/reporter/v8-serializer.js",
|
||||||
|
"lib/internal/test_runner/runner.js",
|
||||||
|
"lib/internal/test_runner/test.js",
|
||||||
|
"lib/internal/test_runner/tests_stream.js",
|
||||||
|
"lib/internal/test_runner/utils.js",
|
||||||
|
"lib/internal/timers.js",
|
||||||
|
"lib/internal/tls/secure-context.js",
|
||||||
|
"lib/internal/tls/secure-pair.js",
|
||||||
|
"lib/internal/trace_events_async_hooks.js",
|
||||||
|
"lib/internal/tty.js",
|
||||||
|
"lib/internal/url.js",
|
||||||
|
"lib/internal/util.js",
|
||||||
|
"lib/internal/util/colors.js",
|
||||||
|
"lib/internal/util/comparisons.js",
|
||||||
|
"lib/internal/util/debuglog.js",
|
||||||
|
"lib/internal/util/embedding.js",
|
||||||
|
"lib/internal/util/inspect.js",
|
||||||
|
"lib/internal/util/inspector.js",
|
||||||
|
"lib/internal/util/iterable_weak_map.js",
|
||||||
|
"lib/internal/util/parse_args/parse_args.js",
|
||||||
|
"lib/internal/util/parse_args/utils.js",
|
||||||
|
"lib/internal/util/types.js",
|
||||||
|
"lib/internal/v8/startup_snapshot.js",
|
||||||
|
"lib/internal/v8_prof_polyfill.js",
|
||||||
|
"lib/internal/v8_prof_processor.js",
|
||||||
|
"lib/internal/validators.js",
|
||||||
|
"lib/internal/vm.js",
|
||||||
|
"lib/internal/vm/module.js",
|
||||||
|
"lib/internal/wasm_web_api.js",
|
||||||
|
"lib/internal/watch_mode/files_watcher.js",
|
||||||
|
"lib/internal/watchdog.js",
|
||||||
|
"lib/internal/webidl.js",
|
||||||
|
"lib/internal/webstreams/adapters.js",
|
||||||
|
"lib/internal/webstreams/compression.js",
|
||||||
|
"lib/internal/webstreams/encoding.js",
|
||||||
|
"lib/internal/webstreams/queuingstrategies.js",
|
||||||
|
"lib/internal/webstreams/readablestream.js",
|
||||||
|
"lib/internal/webstreams/transfer.js",
|
||||||
|
"lib/internal/webstreams/transformstream.js",
|
||||||
|
"lib/internal/webstreams/util.js",
|
||||||
|
"lib/internal/webstreams/writablestream.js",
|
||||||
|
"lib/internal/worker.js",
|
||||||
|
"lib/internal/worker/io.js",
|
||||||
|
"lib/internal/worker/js_transferable.js",
|
||||||
|
"lib/module.js",
|
||||||
|
"lib/net.js",
|
||||||
|
"lib/os.js",
|
||||||
|
"lib/path.js",
|
||||||
|
"lib/path/posix.js",
|
||||||
|
"lib/path/win32.js",
|
||||||
|
"lib/perf_hooks.js",
|
||||||
|
"lib/process.js",
|
||||||
|
"lib/punycode.js",
|
||||||
|
"lib/querystring.js",
|
||||||
|
"lib/readline.js",
|
||||||
|
"lib/readline/promises.js",
|
||||||
|
"lib/repl.js",
|
||||||
|
"lib/sea.js",
|
||||||
|
"lib/stream.js",
|
||||||
|
"lib/stream/consumers.js",
|
||||||
|
"lib/stream/promises.js",
|
||||||
|
"lib/stream/web.js",
|
||||||
|
"lib/string_decoder.js",
|
||||||
|
"lib/sys.js",
|
||||||
|
"lib/test.js",
|
||||||
|
"lib/test/reporters.js",
|
||||||
|
"lib/timers.js",
|
||||||
|
"lib/timers/promises.js",
|
||||||
|
"lib/tls.js",
|
||||||
|
"lib/trace_events.js",
|
||||||
|
"lib/tty.js",
|
||||||
|
"lib/url.js",
|
||||||
|
"lib/util.js",
|
||||||
|
"lib/util/types.js",
|
||||||
|
"lib/v8.js",
|
||||||
|
"lib/vm.js",
|
||||||
|
"lib/wasi.js",
|
||||||
|
"lib/worker_threads.js",
|
||||||
|
"lib/zlib.js"
|
||||||
|
],
|
||||||
|
"node_module_version": 120,
|
||||||
|
"node_no_browser_globals": "false",
|
||||||
|
"node_prefix": "\\usr\\local",
|
||||||
|
"node_release_urlbase": "https://nodejs.org/download/release/",
|
||||||
|
"node_shared": "false",
|
||||||
|
"node_shared_brotli": "false",
|
||||||
|
"node_shared_cares": "false",
|
||||||
|
"node_shared_http_parser": "false",
|
||||||
|
"node_shared_libuv": "false",
|
||||||
|
"node_shared_nghttp2": "false",
|
||||||
|
"node_shared_nghttp3": "false",
|
||||||
|
"node_shared_ngtcp2": "false",
|
||||||
|
"node_shared_openssl": "false",
|
||||||
|
"node_shared_zlib": "false",
|
||||||
|
"node_tag": "",
|
||||||
|
"node_target_type": "executable",
|
||||||
|
"node_use_bundled_v8": "true",
|
||||||
|
"node_use_node_code_cache": "true",
|
||||||
|
"node_use_node_snapshot": "true",
|
||||||
|
"node_use_openssl": "true",
|
||||||
|
"node_use_v8_platform": "true",
|
||||||
|
"node_with_ltcg": "true",
|
||||||
|
"node_without_node_options": "false",
|
||||||
|
"node_write_snapshot_as_array_literals": "true",
|
||||||
|
"openssl_is_fips": "false",
|
||||||
|
"openssl_quic": "true",
|
||||||
|
"ossfuzz": "false",
|
||||||
|
"shlib_suffix": "so.120",
|
||||||
|
"single_executable_application": "true",
|
||||||
|
"target_arch": "x64",
|
||||||
|
"use_prefix_to_find_headers": "false",
|
||||||
|
"v8_enable_31bit_smis_on_64bit_arch": 0,
|
||||||
|
"v8_enable_extensible_ro_snapshot": 0,
|
||||||
|
"v8_enable_gdbjit": 0,
|
||||||
|
"v8_enable_hugepage": 0,
|
||||||
|
"v8_enable_i18n_support": 1,
|
||||||
|
"v8_enable_inspector": 1,
|
||||||
|
"v8_enable_javascript_promise_hooks": 1,
|
||||||
|
"v8_enable_lite_mode": 0,
|
||||||
|
"v8_enable_maglev": 0,
|
||||||
|
"v8_enable_object_print": 1,
|
||||||
|
"v8_enable_pointer_compression": 0,
|
||||||
|
"v8_enable_shared_ro_heap": 1,
|
||||||
|
"v8_enable_short_builtin_calls": 1,
|
||||||
|
"v8_enable_v8_checks": 0,
|
||||||
|
"v8_enable_webassembly": 1,
|
||||||
|
"v8_no_strict_aliasing": 1,
|
||||||
|
"v8_optimized_debug": 1,
|
||||||
|
"v8_promise_internal_field_count": 1,
|
||||||
|
"v8_random_seed": 0,
|
||||||
|
"v8_trace_maps": 0,
|
||||||
|
"v8_use_siphash": 1,
|
||||||
|
"want_separate_host_toolset": 0,
|
||||||
|
"nodedir": "C:\\Users\\runneradmin\\AppData\\Local\\node-gyp\\Cache\\21.7.3",
|
||||||
|
"python": "C:\\hostedtoolcache\\windows\\Python\\3.14.2\\x64\\python.exe",
|
||||||
|
"standalone_static_library": 1,
|
||||||
|
"msbuild_path": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\MSBuild\\Current\\Bin\\MSBuild.exe",
|
||||||
|
"build_from_source": "true",
|
||||||
|
"cache": "C:\\npm\\cache",
|
||||||
|
"globalconfig": "C:\\npm\\prefix\\etc\\npmrc",
|
||||||
|
"global_prefix": "C:\\npm\\prefix",
|
||||||
|
"init_module": "C:\\Users\\runneradmin\\.npm-init.js",
|
||||||
|
"local_prefix": "D:\\a\\node-canvas\\node-canvas",
|
||||||
|
"node_gyp": "C:\\hostedtoolcache\\windows\\node\\21.7.3\\x64\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js",
|
||||||
|
"npm_version": "10.5.0",
|
||||||
|
"prefix": "C:\\npm\\prefix",
|
||||||
|
"userconfig": "C:\\Users\\runneradmin\\.npmrc",
|
||||||
|
"user_agent": "npm/10.5.0 node/v21.7.3 win32 x64 workspaces/false ci/github-actions"
|
||||||
|
}
|
||||||
|
}
|
||||||
507
miniprogram/node_modules/canvas/index.d.ts
generated
vendored
Normal file
@ -0,0 +1,507 @@
|
|||||||
|
// TypeScript Version: 3.0
|
||||||
|
|
||||||
|
import { Readable } from 'stream'
|
||||||
|
|
||||||
|
export interface PngConfig {
|
||||||
|
/** Specifies the ZLIB compression level. Defaults to 6. */
|
||||||
|
compressionLevel?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
|
||||||
|
/**
|
||||||
|
* Any bitwise combination of `PNG_FILTER_NONE`, `PNG_FILTER_SUB`,
|
||||||
|
* `PNG_FILTER_UP`, `PNG_FILTER_AVG` and `PNG_FILTER_PATETH`; or one of
|
||||||
|
* `PNG_ALL_FILTERS` or `PNG_NO_FILTERS` (all are properties of the canvas
|
||||||
|
* instance). These specify which filters *may* be used by libpng. During
|
||||||
|
* encoding, libpng will select the best filter from this list of allowed
|
||||||
|
* filters. Defaults to `canvas.PNG_ALL_FILTERS`.
|
||||||
|
*/
|
||||||
|
filters?: number
|
||||||
|
/**
|
||||||
|
* _For creating indexed PNGs._ The palette of colors. Entries should be in
|
||||||
|
* RGBA order.
|
||||||
|
*/
|
||||||
|
palette?: Uint8ClampedArray
|
||||||
|
/**
|
||||||
|
* _For creating indexed PNGs._ The index of the background color. Defaults
|
||||||
|
* to 0.
|
||||||
|
*/
|
||||||
|
backgroundIndex?: number
|
||||||
|
/** pixels per inch */
|
||||||
|
resolution?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface JpegConfig {
|
||||||
|
/** Specifies the quality, between 0 and 1. Defaults to 0.75. */
|
||||||
|
quality?: number
|
||||||
|
/** Enables progressive encoding. Defaults to `false`. */
|
||||||
|
progressive?: boolean
|
||||||
|
/** Enables 2x2 chroma subsampling. Defaults to `true`. */
|
||||||
|
chromaSubsampling?: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PdfConfig {
|
||||||
|
title?: string
|
||||||
|
author?: string
|
||||||
|
subject?: string
|
||||||
|
keywords?: string
|
||||||
|
creator?: string
|
||||||
|
creationDate?: Date
|
||||||
|
modDate?: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface NodeCanvasRenderingContext2DSettings {
|
||||||
|
alpha?: boolean
|
||||||
|
pixelFormat?: 'RGBA32' | 'RGB24' | 'A8' | 'RGB16_565' | 'A1' | 'RGB30'
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Canvas {
|
||||||
|
width: number
|
||||||
|
height: number
|
||||||
|
|
||||||
|
/** _Non standard._ The type of the canvas. */
|
||||||
|
readonly type: 'image'|'pdf'|'svg'
|
||||||
|
|
||||||
|
/** _Non standard._ Getter. The stride used by the canvas. */
|
||||||
|
readonly stride: number;
|
||||||
|
|
||||||
|
/** Constant used in PNG encoding methods. */
|
||||||
|
static readonly PNG_NO_FILTERS: number
|
||||||
|
/** Constant used in PNG encoding methods. */
|
||||||
|
static readonly PNG_ALL_FILTERS: number
|
||||||
|
/** Constant used in PNG encoding methods. */
|
||||||
|
static readonly PNG_FILTER_NONE: number
|
||||||
|
/** Constant used in PNG encoding methods. */
|
||||||
|
static readonly PNG_FILTER_SUB: number
|
||||||
|
/** Constant used in PNG encoding methods. */
|
||||||
|
static readonly PNG_FILTER_UP: number
|
||||||
|
/** Constant used in PNG encoding methods. */
|
||||||
|
static readonly PNG_FILTER_AVG: number
|
||||||
|
/** Constant used in PNG encoding methods. */
|
||||||
|
static readonly PNG_FILTER_PAETH: number
|
||||||
|
|
||||||
|
constructor(width: number, height: number, type?: 'image'|'pdf'|'svg')
|
||||||
|
|
||||||
|
getContext(contextId: '2d', contextAttributes?: NodeCanvasRenderingContext2DSettings): CanvasRenderingContext2D
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For image canvases, encodes the canvas as a PNG. For PDF canvases,
|
||||||
|
* encodes the canvas as a PDF. For SVG canvases, encodes the canvas as an
|
||||||
|
* SVG.
|
||||||
|
*/
|
||||||
|
toBuffer(cb: (err: Error|null, result: Buffer) => void): void
|
||||||
|
toBuffer(cb: (err: Error|null, result: Buffer) => void, mimeType: 'image/png', config?: PngConfig): void
|
||||||
|
toBuffer(cb: (err: Error|null, result: Buffer) => void, mimeType: 'image/jpeg', config?: JpegConfig): void
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For image canvases, encodes the canvas as a PNG. For PDF canvases,
|
||||||
|
* encodes the canvas as a PDF. For SVG canvases, encodes the canvas as an
|
||||||
|
* SVG.
|
||||||
|
*/
|
||||||
|
toBuffer(): Buffer
|
||||||
|
toBuffer(mimeType: 'image/png', config?: PngConfig): Buffer
|
||||||
|
toBuffer(mimeType: 'image/jpeg', config?: JpegConfig): Buffer
|
||||||
|
toBuffer(mimeType: 'application/pdf', config?: PdfConfig): Buffer
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the unencoded pixel data, top-to-bottom. On little-endian (most)
|
||||||
|
* systems, the array will be ordered BGRA; on big-endian systems, it will
|
||||||
|
* be ARGB.
|
||||||
|
*/
|
||||||
|
toBuffer(mimeType: 'raw'): Buffer
|
||||||
|
|
||||||
|
createPNGStream(config?: PngConfig): PNGStream
|
||||||
|
createJPEGStream(config?: JpegConfig): JPEGStream
|
||||||
|
createPDFStream(config?: PdfConfig): PDFStream
|
||||||
|
|
||||||
|
/** Defaults to PNG image. */
|
||||||
|
toDataURL(): string
|
||||||
|
toDataURL(mimeType: 'image/png'): string
|
||||||
|
toDataURL(mimeType: 'image/jpeg', quality?: number): string
|
||||||
|
/** _Non-standard._ Defaults to PNG image. */
|
||||||
|
toDataURL(cb: (err: Error|null, result: string) => void): void
|
||||||
|
/** _Non-standard._ */
|
||||||
|
toDataURL(mimeType: 'image/png', cb: (err: Error|null, result: string) => void): void
|
||||||
|
/** _Non-standard._ */
|
||||||
|
toDataURL(mimeType: 'image/jpeg', cb: (err: Error|null, result: string) => void): void
|
||||||
|
/** _Non-standard._ */
|
||||||
|
toDataURL(mimeType: 'image/jpeg', config: JpegConfig, cb: (err: Error|null, result: string) => void): void
|
||||||
|
/** _Non-standard._ */
|
||||||
|
toDataURL(mimeType: 'image/jpeg', quality: number, cb: (err: Error|null, result: string) => void): void
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface TextMetrics {
|
||||||
|
readonly alphabeticBaseline: number;
|
||||||
|
readonly actualBoundingBoxAscent: number;
|
||||||
|
readonly actualBoundingBoxDescent: number;
|
||||||
|
readonly actualBoundingBoxLeft: number;
|
||||||
|
readonly actualBoundingBoxRight: number;
|
||||||
|
readonly emHeightAscent: number;
|
||||||
|
readonly emHeightDescent: number;
|
||||||
|
readonly fontBoundingBoxAscent: number;
|
||||||
|
readonly fontBoundingBoxDescent: number;
|
||||||
|
readonly width: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type CanvasFillRule = 'evenodd' | 'nonzero';
|
||||||
|
|
||||||
|
export type GlobalCompositeOperation =
|
||||||
|
| 'clear'
|
||||||
|
| 'copy'
|
||||||
|
| 'destination'
|
||||||
|
| 'source-over'
|
||||||
|
| 'destination-over'
|
||||||
|
| 'source-in'
|
||||||
|
| 'destination-in'
|
||||||
|
| 'source-out'
|
||||||
|
| 'destination-out'
|
||||||
|
| 'source-atop'
|
||||||
|
| 'destination-atop'
|
||||||
|
| 'xor'
|
||||||
|
| 'lighter'
|
||||||
|
| 'normal'
|
||||||
|
| 'multiply'
|
||||||
|
| 'screen'
|
||||||
|
| 'overlay'
|
||||||
|
| 'darken'
|
||||||
|
| 'lighten'
|
||||||
|
| 'color-dodge'
|
||||||
|
| 'color-burn'
|
||||||
|
| 'hard-light'
|
||||||
|
| 'soft-light'
|
||||||
|
| 'difference'
|
||||||
|
| 'exclusion'
|
||||||
|
| 'hue'
|
||||||
|
| 'saturation'
|
||||||
|
| 'color'
|
||||||
|
| 'luminosity'
|
||||||
|
| 'saturate';
|
||||||
|
|
||||||
|
export type CanvasLineCap = 'butt' | 'round' | 'square';
|
||||||
|
|
||||||
|
export type CanvasLineJoin = 'bevel' | 'miter' | 'round';
|
||||||
|
|
||||||
|
export type CanvasTextBaseline = 'alphabetic' | 'bottom' | 'hanging' | 'ideographic' | 'middle' | 'top';
|
||||||
|
|
||||||
|
export type CanvasTextAlign = 'center' | 'end' | 'left' | 'right' | 'start';
|
||||||
|
|
||||||
|
export class CanvasRenderingContext2D {
|
||||||
|
drawImage(image: Canvas|Image, dx: number, dy: number): void
|
||||||
|
drawImage(image: Canvas|Image, dx: number, dy: number, dw: number, dh: number): void
|
||||||
|
drawImage(image: Canvas|Image, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void
|
||||||
|
putImageData(imagedata: ImageData, dx: number, dy: number): void;
|
||||||
|
putImageData(imagedata: ImageData, dx: number, dy: number, dirtyX: number, dirtyY: number, dirtyWidth: number, dirtyHeight: number): void;
|
||||||
|
getImageData(sx: number, sy: number, sw: number, sh: number): ImageData;
|
||||||
|
createImageData(sw: number, sh: number): ImageData;
|
||||||
|
createImageData(imagedata: ImageData): ImageData;
|
||||||
|
/**
|
||||||
|
* For PDF canvases, adds another page. If width and/or height are omitted,
|
||||||
|
* the canvas's initial size is used.
|
||||||
|
*/
|
||||||
|
addPage(width?: number, height?: number): void
|
||||||
|
save(): void;
|
||||||
|
restore(): void;
|
||||||
|
rotate(angle: number): void;
|
||||||
|
translate(x: number, y: number): void;
|
||||||
|
transform(a: number, b: number, c: number, d: number, e: number, f: number): void;
|
||||||
|
getTransform(): DOMMatrix;
|
||||||
|
resetTransform(): void;
|
||||||
|
setTransform(transform?: DOMMatrix): void;
|
||||||
|
setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void;
|
||||||
|
isPointInPath(x: number, y: number, fillRule?: CanvasFillRule): boolean;
|
||||||
|
scale(x: number, y: number): void;
|
||||||
|
clip(fillRule?: CanvasFillRule): void;
|
||||||
|
fill(fillRule?: CanvasFillRule): void;
|
||||||
|
stroke(): void;
|
||||||
|
fillText(text: string, x: number, y: number, maxWidth?: number): void;
|
||||||
|
strokeText(text: string, x: number, y: number, maxWidth?: number): void;
|
||||||
|
fillRect(x: number, y: number, w: number, h: number): void;
|
||||||
|
strokeRect(x: number, y: number, w: number, h: number): void;
|
||||||
|
clearRect(x: number, y: number, w: number, h: number): void;
|
||||||
|
rect(x: number, y: number, w: number, h: number): void;
|
||||||
|
roundRect(x: number, y: number, w: number, h: number, radii?: number | number[]): void;
|
||||||
|
measureText(text: string): TextMetrics;
|
||||||
|
moveTo(x: number, y: number): void;
|
||||||
|
lineTo(x: number, y: number): void;
|
||||||
|
bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
|
||||||
|
quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;
|
||||||
|
beginPath(): void;
|
||||||
|
closePath(): void;
|
||||||
|
arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;
|
||||||
|
arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;
|
||||||
|
ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;
|
||||||
|
setLineDash(segments: number[]): void;
|
||||||
|
getLineDash(): number[];
|
||||||
|
createPattern(image: Canvas|Image, repetition: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat' | '' | null): CanvasPattern
|
||||||
|
createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient;
|
||||||
|
createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient;
|
||||||
|
beginTag(tagName: string, attributes?: string): void;
|
||||||
|
endTag(tagName: string): void;
|
||||||
|
/**
|
||||||
|
* _Non-standard_. Defaults to 'good'. Affects pattern (gradient, image,
|
||||||
|
* etc.) rendering quality.
|
||||||
|
*/
|
||||||
|
patternQuality: 'fast' | 'good' | 'best' | 'nearest' | 'bilinear'
|
||||||
|
imageSmoothingEnabled: boolean;
|
||||||
|
globalCompositeOperation: GlobalCompositeOperation;
|
||||||
|
globalAlpha: number;
|
||||||
|
shadowColor: string;
|
||||||
|
miterLimit: number;
|
||||||
|
lineWidth: number;
|
||||||
|
lineCap: CanvasLineCap;
|
||||||
|
lineJoin: CanvasLineJoin;
|
||||||
|
lineDashOffset: number;
|
||||||
|
shadowOffsetX: number;
|
||||||
|
shadowOffsetY: number;
|
||||||
|
shadowBlur: number;
|
||||||
|
/** _Non-standard_. Sets the antialiasing mode. */
|
||||||
|
antialias: 'default' | 'gray' | 'none' | 'subpixel'
|
||||||
|
/**
|
||||||
|
* Defaults to 'path'. The effect depends on the canvas type:
|
||||||
|
*
|
||||||
|
* * **Standard (image)** `'glyph'` and `'path'` both result in rasterized
|
||||||
|
* text. Glyph mode is faster than path, but may result in lower-quality
|
||||||
|
* text, especially when rotated or translated.
|
||||||
|
*
|
||||||
|
* * **PDF** `'glyph'` will embed text instead of paths into the PDF. This
|
||||||
|
* is faster to encode, faster to open with PDF viewers, yields a smaller
|
||||||
|
* file size and makes the text selectable. The subset of the font needed
|
||||||
|
* to render the glyphs will be embedded in the PDF. This is usually the
|
||||||
|
* mode you want to use with PDF canvases.
|
||||||
|
*
|
||||||
|
* * **SVG** glyph does not cause `<text>` elements to be produced as one
|
||||||
|
* might expect ([cairo bug](https://gitlab.freedesktop.org/cairo/cairo/issues/253)).
|
||||||
|
* Rather, glyph will create a `<defs>` section with a `<symbol>` for each
|
||||||
|
* glyph, then those glyphs be reused via `<use>` elements. `'path'` mode
|
||||||
|
* creates a `<path>` element for each text string. glyph mode is faster
|
||||||
|
* and yields a smaller file size.
|
||||||
|
*
|
||||||
|
* In glyph mode, `ctx.strokeText()` and `ctx.fillText()` behave the same
|
||||||
|
* (aside from using the stroke and fill style, respectively).
|
||||||
|
*/
|
||||||
|
textDrawingMode: 'path' | 'glyph'
|
||||||
|
/**
|
||||||
|
* _Non-standard_. Defaults to 'good'. Like `patternQuality`, but applies to
|
||||||
|
* transformations affecting more than just patterns.
|
||||||
|
*/
|
||||||
|
quality: 'fast' | 'good' | 'best' | 'nearest' | 'bilinear'
|
||||||
|
/** Returns or sets a `DOMMatrix` for the current transformation matrix. */
|
||||||
|
currentTransform: DOMMatrix
|
||||||
|
fillStyle: string | CanvasGradient | CanvasPattern;
|
||||||
|
strokeStyle: string | CanvasGradient | CanvasPattern;
|
||||||
|
font: string;
|
||||||
|
textBaseline: CanvasTextBaseline;
|
||||||
|
textAlign: CanvasTextAlign;
|
||||||
|
canvas: Canvas;
|
||||||
|
direction: 'ltr' | 'rtl';
|
||||||
|
lang: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class CanvasGradient {
|
||||||
|
addColorStop(offset: number, color: string): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class CanvasPattern {
|
||||||
|
setTransform(transform?: DOMMatrix): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This does not extend HTMLImageElement because there are dozens of inherited
|
||||||
|
// methods and properties that we do not provide.
|
||||||
|
export class Image {
|
||||||
|
/** Track image data */
|
||||||
|
static readonly MODE_IMAGE: number
|
||||||
|
/** Track MIME data */
|
||||||
|
static readonly MODE_MIME: number
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The URL, `data:` URI or local file path of the image to be loaded, or a
|
||||||
|
* Buffer instance containing an encoded image.
|
||||||
|
*/
|
||||||
|
src: string | Buffer
|
||||||
|
/** Retrieves whether the object is fully loaded. */
|
||||||
|
readonly complete: boolean
|
||||||
|
/** Sets or retrieves the height of the image. */
|
||||||
|
height: number
|
||||||
|
/** Sets or retrieves the width of the image. */
|
||||||
|
width: number
|
||||||
|
|
||||||
|
/** The original height of the image resource before sizing. */
|
||||||
|
readonly naturalHeight: number
|
||||||
|
/** The original width of the image resource before sizing. */
|
||||||
|
readonly naturalWidth: number
|
||||||
|
/**
|
||||||
|
* Applies to JPEG images drawn to PDF canvases only. Setting
|
||||||
|
* `img.dataMode = Image.MODE_MIME` or `Image.MODE_MIME|Image.MODE_IMAGE`
|
||||||
|
* enables image MIME data tracking. When MIME data is tracked, PDF canvases
|
||||||
|
* can embed JPEGs directly into the output, rather than re-encoding into
|
||||||
|
* PNG. This can drastically reduce filesize and speed up rendering.
|
||||||
|
*/
|
||||||
|
dataMode: number
|
||||||
|
|
||||||
|
onload: (() => void) | null;
|
||||||
|
onerror: ((err: Error) => void) | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a Canvas instance. This function works in both Node.js and Web
|
||||||
|
* browsers, where there is no Canvas constructor.
|
||||||
|
* @param type Optionally specify to create a PDF or SVG canvas. Defaults to an
|
||||||
|
* image canvas.
|
||||||
|
*/
|
||||||
|
export function createCanvas(width: number, height: number, type?: 'pdf'|'svg'): Canvas
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an ImageData instance. This function works in both Node.js and Web
|
||||||
|
* browsers.
|
||||||
|
* @param data An array containing the pixel representation of the image.
|
||||||
|
* @param height If omitted, the height is calculated based on the array's size
|
||||||
|
* and `width`.
|
||||||
|
*/
|
||||||
|
export function createImageData(data: Uint8ClampedArray, width: number, height?: number): ImageData
|
||||||
|
/**
|
||||||
|
* _Non-standard._ Creates an ImageData instance for an alternative pixel
|
||||||
|
* format, such as RGB16_565
|
||||||
|
* @param data An array containing the pixel representation of the image.
|
||||||
|
* @param height If omitted, the height is calculated based on the array's size
|
||||||
|
* and `width`.
|
||||||
|
*/
|
||||||
|
export function createImageData(data: Uint16Array, width: number, height?: number): ImageData
|
||||||
|
/**
|
||||||
|
* Creates an ImageData instance. This function works in both Node.js and Web
|
||||||
|
* browsers.
|
||||||
|
*/
|
||||||
|
export function createImageData(width: number, height: number): ImageData
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convenience function for loading an image with a Promise interface. This
|
||||||
|
* function works in both Node.js and Web browsers; however, the `src` must be
|
||||||
|
* a string in Web browsers (it can only be a Buffer in Node.js).
|
||||||
|
* @param src URL, `data: ` URI or (Node.js only) a local file path or Buffer
|
||||||
|
* instance.
|
||||||
|
*/
|
||||||
|
export function loadImage(src: string|Buffer, options?: any): Promise<Image>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a font that is not installed as a system font. This must be used
|
||||||
|
* before creating Canvas instances.
|
||||||
|
* @param path Path to local font file.
|
||||||
|
* @param fontFace Description of the font face, corresponding to CSS properties
|
||||||
|
* used in `@font-face` rules.
|
||||||
|
*/
|
||||||
|
export function registerFont(path: string, fontFace: {family: string, weight?: string, style?: string}): void
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unloads all fonts
|
||||||
|
*/
|
||||||
|
export function deregisterAllFonts(): void;
|
||||||
|
|
||||||
|
/** This class must not be constructed directly; use `canvas.createPNGStream()`. */
|
||||||
|
export class PNGStream extends Readable {}
|
||||||
|
/** This class must not be constructed directly; use `canvas.createJPEGStream()`. */
|
||||||
|
export class JPEGStream extends Readable {}
|
||||||
|
/** This class must not be constructed directly; use `canvas.createPDFStream()`. */
|
||||||
|
export class PDFStream extends Readable {}
|
||||||
|
|
||||||
|
// TODO: this is wrong. See matrixTransform in lib/DOMMatrix.js
|
||||||
|
type DOMMatrixInit = DOMMatrix | string | number[];
|
||||||
|
|
||||||
|
interface DOMPointInit {
|
||||||
|
w?: number;
|
||||||
|
x?: number;
|
||||||
|
y?: number;
|
||||||
|
z?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class DOMPoint {
|
||||||
|
w: number;
|
||||||
|
x: number;
|
||||||
|
y: number;
|
||||||
|
z: number;
|
||||||
|
matrixTransform(matrix?: DOMMatrixInit): DOMPoint;
|
||||||
|
toJSON(): any;
|
||||||
|
static fromPoint(other?: DOMPointInit): DOMPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class DOMMatrix {
|
||||||
|
constructor(init?: string | number[]);
|
||||||
|
toString(): string;
|
||||||
|
multiply(other?: DOMMatrix): DOMMatrix;
|
||||||
|
multiplySelf(other?: DOMMatrix): DOMMatrix;
|
||||||
|
preMultiplySelf(other?: DOMMatrix): DOMMatrix;
|
||||||
|
translate(tx?: number, ty?: number, tz?: number): DOMMatrix;
|
||||||
|
translateSelf(tx?: number, ty?: number, tz?: number): DOMMatrix;
|
||||||
|
scale(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;
|
||||||
|
scale3d(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;
|
||||||
|
scale3dSelf(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;
|
||||||
|
scaleSelf(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;
|
||||||
|
/**
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
scaleNonUniform(scaleX?: number, scaleY?: number): DOMMatrix;
|
||||||
|
rotateFromVector(x?: number, y?: number): DOMMatrix;
|
||||||
|
rotateFromVectorSelf(x?: number, y?: number): DOMMatrix;
|
||||||
|
rotate(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix;
|
||||||
|
rotateSelf(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix;
|
||||||
|
rotateAxisAngle(x?: number, y?: number, z?: number, angle?: number): DOMMatrix;
|
||||||
|
rotateAxisAngleSelf(x?: number, y?: number, z?: number, angle?: number): DOMMatrix;
|
||||||
|
skewX(sx?: number): DOMMatrix;
|
||||||
|
skewXSelf(sx?: number): DOMMatrix;
|
||||||
|
skewY(sy?: number): DOMMatrix;
|
||||||
|
skewYSelf(sy?: number): DOMMatrix;
|
||||||
|
flipX(): DOMMatrix;
|
||||||
|
flipY(): DOMMatrix;
|
||||||
|
inverse(): DOMMatrix;
|
||||||
|
invertSelf(): DOMMatrix;
|
||||||
|
setMatrixValue(transformList: string): DOMMatrix;
|
||||||
|
transformPoint(point?: DOMPoint): DOMPoint;
|
||||||
|
toJSON(): any;
|
||||||
|
toFloat32Array(): Float32Array;
|
||||||
|
toFloat64Array(): Float64Array;
|
||||||
|
readonly is2D: boolean;
|
||||||
|
readonly isIdentity: boolean;
|
||||||
|
a: number;
|
||||||
|
b: number;
|
||||||
|
c: number;
|
||||||
|
d: number;
|
||||||
|
e: number;
|
||||||
|
f: number;
|
||||||
|
m11: number;
|
||||||
|
m12: number;
|
||||||
|
m13: number;
|
||||||
|
m14: number;
|
||||||
|
m21: number;
|
||||||
|
m22: number;
|
||||||
|
m23: number;
|
||||||
|
m24: number;
|
||||||
|
m31: number;
|
||||||
|
m32: number;
|
||||||
|
m33: number;
|
||||||
|
m34: number;
|
||||||
|
m41: number;
|
||||||
|
m42: number;
|
||||||
|
m43: number;
|
||||||
|
m44: number;
|
||||||
|
static fromMatrix(other: DOMMatrix): DOMMatrix;
|
||||||
|
static fromFloat32Array(a: Float32Array): DOMMatrix;
|
||||||
|
static fromFloat64Array(a: Float64Array): DOMMatrix;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ImageData {
|
||||||
|
constructor(sw: number, sh: number);
|
||||||
|
constructor(data: Uint8ClampedArray, sw: number, sh?: number);
|
||||||
|
readonly data: Uint8ClampedArray;
|
||||||
|
readonly height: number;
|
||||||
|
readonly width: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not documented: backends
|
||||||
|
|
||||||
|
/** Library version. */
|
||||||
|
export const version: string
|
||||||
|
/** Cairo version. */
|
||||||
|
export const cairoVersion: string
|
||||||
|
/** jpeglib version, if built with JPEG support. */
|
||||||
|
export const jpegVersion: string | undefined
|
||||||
|
/** giflib version, if built with GIF support. */
|
||||||
|
export const gifVersion: string | undefined
|
||||||
|
/** freetype version. */
|
||||||
|
export const freetypeVersion: string
|
||||||
|
/** rsvg version. */
|
||||||
|
export const rsvgVersion: string | undefined
|
||||||
94
miniprogram/node_modules/canvas/index.js
generated
vendored
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
const Canvas = require('./lib/canvas')
|
||||||
|
const Image = require('./lib/image')
|
||||||
|
const CanvasRenderingContext2D = require('./lib/context2d')
|
||||||
|
const CanvasPattern = require('./lib/pattern')
|
||||||
|
const packageJson = require('./package.json')
|
||||||
|
const bindings = require('./lib/bindings')
|
||||||
|
const fs = require('fs')
|
||||||
|
const PNGStream = require('./lib/pngstream')
|
||||||
|
const PDFStream = require('./lib/pdfstream')
|
||||||
|
const JPEGStream = require('./lib/jpegstream')
|
||||||
|
const { DOMPoint, DOMMatrix } = require('./lib/DOMMatrix')
|
||||||
|
|
||||||
|
bindings.setDOMMatrix(DOMMatrix)
|
||||||
|
|
||||||
|
function createCanvas (width, height, type) {
|
||||||
|
return new Canvas(width, height, type)
|
||||||
|
}
|
||||||
|
|
||||||
|
function createImageData (array, width, height) {
|
||||||
|
return new bindings.ImageData(array, width, height)
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadImage (src) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const image = new Image()
|
||||||
|
|
||||||
|
function cleanup () {
|
||||||
|
image.onload = null
|
||||||
|
image.onerror = null
|
||||||
|
}
|
||||||
|
|
||||||
|
image.onload = () => { cleanup(); resolve(image) }
|
||||||
|
image.onerror = (err) => { cleanup(); reject(err) }
|
||||||
|
|
||||||
|
image.src = src
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resolve paths for registerFont. Must be called *before* creating a Canvas
|
||||||
|
* instance.
|
||||||
|
* @param src {string} Path to font file.
|
||||||
|
* @param fontFace {{family: string, weight?: string, style?: string}} Object
|
||||||
|
* specifying font information. `weight` and `style` default to `"normal"`.
|
||||||
|
*/
|
||||||
|
function registerFont (src, fontFace) {
|
||||||
|
// TODO this doesn't need to be on Canvas; it should just be a static method
|
||||||
|
// of `bindings`.
|
||||||
|
return Canvas._registerFont(fs.realpathSync(src), fontFace)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unload all fonts from pango to free up memory
|
||||||
|
*/
|
||||||
|
function deregisterAllFonts () {
|
||||||
|
return Canvas._deregisterAllFonts()
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.Canvas = Canvas
|
||||||
|
exports.Context2d = CanvasRenderingContext2D // Legacy/compat export
|
||||||
|
exports.CanvasRenderingContext2D = CanvasRenderingContext2D
|
||||||
|
exports.CanvasGradient = bindings.CanvasGradient
|
||||||
|
exports.CanvasPattern = CanvasPattern
|
||||||
|
exports.Image = Image
|
||||||
|
exports.ImageData = bindings.ImageData
|
||||||
|
exports.PNGStream = PNGStream
|
||||||
|
exports.PDFStream = PDFStream
|
||||||
|
exports.JPEGStream = JPEGStream
|
||||||
|
exports.DOMMatrix = DOMMatrix
|
||||||
|
exports.DOMPoint = DOMPoint
|
||||||
|
|
||||||
|
exports.registerFont = registerFont
|
||||||
|
exports.deregisterAllFonts = deregisterAllFonts
|
||||||
|
|
||||||
|
exports.createCanvas = createCanvas
|
||||||
|
exports.createImageData = createImageData
|
||||||
|
exports.loadImage = loadImage
|
||||||
|
|
||||||
|
exports.backends = bindings.Backends
|
||||||
|
|
||||||
|
/** Library version. */
|
||||||
|
exports.version = packageJson.version
|
||||||
|
/** Cairo version. */
|
||||||
|
exports.cairoVersion = bindings.cairoVersion
|
||||||
|
/** jpeglib version. */
|
||||||
|
exports.jpegVersion = bindings.jpegVersion
|
||||||
|
/** gif_lib version. */
|
||||||
|
exports.gifVersion = bindings.gifVersion ? bindings.gifVersion.replace(/[^.\d]/g, '') : undefined
|
||||||
|
/** freetype version. */
|
||||||
|
exports.freetypeVersion = bindings.freetypeVersion
|
||||||
|
/** rsvg version. */
|
||||||
|
exports.rsvgVersion = bindings.rsvgVersion
|
||||||
|
/** pango version. */
|
||||||
|
exports.pangoVersion = bindings.pangoVersion
|
||||||
678
miniprogram/node_modules/canvas/lib/DOMMatrix.js
generated
vendored
Normal file
@ -0,0 +1,678 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
const util = require('util')
|
||||||
|
|
||||||
|
// DOMMatrix per https://drafts.fxtf.org/geometry/#DOMMatrix
|
||||||
|
|
||||||
|
class DOMPoint {
|
||||||
|
constructor (x, y, z, w) {
|
||||||
|
if (typeof x === 'object' && x !== null) {
|
||||||
|
w = x.w
|
||||||
|
z = x.z
|
||||||
|
y = x.y
|
||||||
|
x = x.x
|
||||||
|
}
|
||||||
|
this.x = typeof x === 'number' ? x : 0
|
||||||
|
this.y = typeof y === 'number' ? y : 0
|
||||||
|
this.z = typeof z === 'number' ? z : 0
|
||||||
|
this.w = typeof w === 'number' ? w : 1
|
||||||
|
}
|
||||||
|
|
||||||
|
matrixTransform(init) {
|
||||||
|
// TODO: this next line is wrong. matrixTransform is supposed to only take
|
||||||
|
// an object with the DOMMatrix properties called DOMMatrixInit
|
||||||
|
const m = init instanceof DOMMatrix ? init : new DOMMatrix(init)
|
||||||
|
return m.transformPoint(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
toJSON() {
|
||||||
|
return {
|
||||||
|
x: this.x,
|
||||||
|
y: this.y,
|
||||||
|
z: this.z,
|
||||||
|
w: this.w
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static fromPoint(other) {
|
||||||
|
return new this(other.x, other.y, other.z, other.w)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Constants to index into _values (col-major)
|
||||||
|
const M11 = 0; const M12 = 1; const M13 = 2; const M14 = 3
|
||||||
|
const M21 = 4; const M22 = 5; const M23 = 6; const M24 = 7
|
||||||
|
const M31 = 8; const M32 = 9; const M33 = 10; const M34 = 11
|
||||||
|
const M41 = 12; const M42 = 13; const M43 = 14; const M44 = 15
|
||||||
|
|
||||||
|
const DEGREE_PER_RAD = 180 / Math.PI
|
||||||
|
const RAD_PER_DEGREE = Math.PI / 180
|
||||||
|
|
||||||
|
function parseMatrix (init) {
|
||||||
|
let parsed = init.replace('matrix(', '')
|
||||||
|
parsed = parsed.split(',', 7) // 6 + 1 to handle too many params
|
||||||
|
if (parsed.length !== 6) throw new Error(`Failed to parse ${init}`)
|
||||||
|
parsed = parsed.map(parseFloat)
|
||||||
|
return [
|
||||||
|
parsed[0], parsed[1], 0, 0,
|
||||||
|
parsed[2], parsed[3], 0, 0,
|
||||||
|
0, 0, 1, 0,
|
||||||
|
parsed[4], parsed[5], 0, 1
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseMatrix3d (init) {
|
||||||
|
let parsed = init.replace('matrix3d(', '')
|
||||||
|
parsed = parsed.split(',', 17) // 16 + 1 to handle too many params
|
||||||
|
if (parsed.length !== 16) throw new Error(`Failed to parse ${init}`)
|
||||||
|
return parsed.map(parseFloat)
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseTransform (tform) {
|
||||||
|
const type = tform.split('(', 1)[0]
|
||||||
|
switch (type) {
|
||||||
|
case 'matrix':
|
||||||
|
return parseMatrix(tform)
|
||||||
|
case 'matrix3d':
|
||||||
|
return parseMatrix3d(tform)
|
||||||
|
// TODO This is supposed to support any CSS transform value.
|
||||||
|
default:
|
||||||
|
throw new Error(`${type} parsing not implemented`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class DOMMatrix {
|
||||||
|
constructor (init) {
|
||||||
|
this._is2D = true
|
||||||
|
this._values = new Float64Array([
|
||||||
|
1, 0, 0, 0,
|
||||||
|
0, 1, 0, 0,
|
||||||
|
0, 0, 1, 0,
|
||||||
|
0, 0, 0, 1
|
||||||
|
])
|
||||||
|
|
||||||
|
let i
|
||||||
|
|
||||||
|
if (typeof init === 'string') { // parse CSS transformList
|
||||||
|
if (init === '') return // default identity matrix
|
||||||
|
const tforms = init.split(/\)\s+/, 20).map(parseTransform)
|
||||||
|
if (tforms.length === 0) return
|
||||||
|
init = tforms[0]
|
||||||
|
for (i = 1; i < tforms.length; i++) init = multiply(tforms[i], init)
|
||||||
|
}
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
if (init && init.length === 6) {
|
||||||
|
setNumber2D(this, M11, init[i++])
|
||||||
|
setNumber2D(this, M12, init[i++])
|
||||||
|
setNumber2D(this, M21, init[i++])
|
||||||
|
setNumber2D(this, M22, init[i++])
|
||||||
|
setNumber2D(this, M41, init[i++])
|
||||||
|
setNumber2D(this, M42, init[i++])
|
||||||
|
} else if (init && init.length === 16) {
|
||||||
|
setNumber2D(this, M11, init[i++])
|
||||||
|
setNumber2D(this, M12, init[i++])
|
||||||
|
setNumber3D(this, M13, init[i++])
|
||||||
|
setNumber3D(this, M14, init[i++])
|
||||||
|
setNumber2D(this, M21, init[i++])
|
||||||
|
setNumber2D(this, M22, init[i++])
|
||||||
|
setNumber3D(this, M23, init[i++])
|
||||||
|
setNumber3D(this, M24, init[i++])
|
||||||
|
setNumber3D(this, M31, init[i++])
|
||||||
|
setNumber3D(this, M32, init[i++])
|
||||||
|
setNumber3D(this, M33, init[i++])
|
||||||
|
setNumber3D(this, M34, init[i++])
|
||||||
|
setNumber2D(this, M41, init[i++])
|
||||||
|
setNumber2D(this, M42, init[i++])
|
||||||
|
setNumber3D(this, M43, init[i++])
|
||||||
|
setNumber3D(this, M44, init[i])
|
||||||
|
} else if (init !== undefined) {
|
||||||
|
throw new TypeError('Expected string or array.')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toString () {
|
||||||
|
return this.is2D
|
||||||
|
? `matrix(${this.a}, ${this.b}, ${this.c}, ${this.d}, ${this.e}, ${this.f})`
|
||||||
|
: `matrix3d(${this._values.join(', ')})`
|
||||||
|
}
|
||||||
|
|
||||||
|
multiply (other) {
|
||||||
|
return newInstance(this._values).multiplySelf(other)
|
||||||
|
}
|
||||||
|
|
||||||
|
multiplySelf (other) {
|
||||||
|
this._values = multiply(other._values, this._values)
|
||||||
|
if (!other.is2D) this._is2D = false
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
preMultiplySelf (other) {
|
||||||
|
this._values = multiply(this._values, other._values)
|
||||||
|
if (!other.is2D) this._is2D = false
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
translate (tx, ty, tz) {
|
||||||
|
return newInstance(this._values).translateSelf(tx, ty, tz)
|
||||||
|
}
|
||||||
|
|
||||||
|
translateSelf (tx, ty, tz) {
|
||||||
|
if (typeof tx !== 'number') tx = 0
|
||||||
|
if (typeof ty !== 'number') ty = 0
|
||||||
|
if (typeof tz !== 'number') tz = 0
|
||||||
|
this._values = multiply([
|
||||||
|
1, 0, 0, 0,
|
||||||
|
0, 1, 0, 0,
|
||||||
|
0, 0, 1, 0,
|
||||||
|
tx, ty, tz, 1
|
||||||
|
], this._values)
|
||||||
|
if (tz !== 0) this._is2D = false
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
scale (scaleX, scaleY, scaleZ, originX, originY, originZ) {
|
||||||
|
return newInstance(this._values).scaleSelf(scaleX, scaleY, scaleZ, originX, originY, originZ)
|
||||||
|
}
|
||||||
|
|
||||||
|
scale3d (scale, originX, originY, originZ) {
|
||||||
|
return newInstance(this._values).scale3dSelf(scale, originX, originY, originZ)
|
||||||
|
}
|
||||||
|
|
||||||
|
scale3dSelf (scale, originX, originY, originZ) {
|
||||||
|
return this.scaleSelf(scale, scale, scale, originX, originY, originZ)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
scaleNonUniform(scaleX, scaleY) {
|
||||||
|
return this.scale(scaleX, scaleY)
|
||||||
|
}
|
||||||
|
|
||||||
|
scaleSelf (scaleX, scaleY, scaleZ, originX, originY, originZ) {
|
||||||
|
// Not redundant with translate's checks because we need to negate the values later.
|
||||||
|
if (typeof originX !== 'number') originX = 0
|
||||||
|
if (typeof originY !== 'number') originY = 0
|
||||||
|
if (typeof originZ !== 'number') originZ = 0
|
||||||
|
this.translateSelf(originX, originY, originZ)
|
||||||
|
if (typeof scaleX !== 'number') scaleX = 1
|
||||||
|
if (typeof scaleY !== 'number') scaleY = scaleX
|
||||||
|
if (typeof scaleZ !== 'number') scaleZ = 1
|
||||||
|
this._values = multiply([
|
||||||
|
scaleX, 0, 0, 0,
|
||||||
|
0, scaleY, 0, 0,
|
||||||
|
0, 0, scaleZ, 0,
|
||||||
|
0, 0, 0, 1
|
||||||
|
], this._values)
|
||||||
|
this.translateSelf(-originX, -originY, -originZ)
|
||||||
|
if (scaleZ !== 1 || originZ !== 0) this._is2D = false
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
rotateFromVector (x, y) {
|
||||||
|
return newInstance(this._values).rotateFromVectorSelf(x, y)
|
||||||
|
}
|
||||||
|
|
||||||
|
rotateFromVectorSelf (x, y) {
|
||||||
|
if (typeof x !== 'number') x = 0
|
||||||
|
if (typeof y !== 'number') y = 0
|
||||||
|
const theta = (x === 0 && y === 0) ? 0 : Math.atan2(y, x) * DEGREE_PER_RAD
|
||||||
|
return this.rotateSelf(theta)
|
||||||
|
}
|
||||||
|
|
||||||
|
rotate (rotX, rotY, rotZ) {
|
||||||
|
return newInstance(this._values).rotateSelf(rotX, rotY, rotZ)
|
||||||
|
}
|
||||||
|
|
||||||
|
rotateSelf (rotX, rotY, rotZ) {
|
||||||
|
if (rotY === undefined && rotZ === undefined) {
|
||||||
|
rotZ = rotX
|
||||||
|
rotX = rotY = 0
|
||||||
|
}
|
||||||
|
if (typeof rotY !== 'number') rotY = 0
|
||||||
|
if (typeof rotZ !== 'number') rotZ = 0
|
||||||
|
if (rotX !== 0 || rotY !== 0) this._is2D = false
|
||||||
|
rotX *= RAD_PER_DEGREE
|
||||||
|
rotY *= RAD_PER_DEGREE
|
||||||
|
rotZ *= RAD_PER_DEGREE
|
||||||
|
let c, s
|
||||||
|
c = Math.cos(rotZ)
|
||||||
|
s = Math.sin(rotZ)
|
||||||
|
this._values = multiply([
|
||||||
|
c, s, 0, 0,
|
||||||
|
-s, c, 0, 0,
|
||||||
|
0, 0, 1, 0,
|
||||||
|
0, 0, 0, 1
|
||||||
|
], this._values)
|
||||||
|
c = Math.cos(rotY)
|
||||||
|
s = Math.sin(rotY)
|
||||||
|
this._values = multiply([
|
||||||
|
c, 0, -s, 0,
|
||||||
|
0, 1, 0, 0,
|
||||||
|
s, 0, c, 0,
|
||||||
|
0, 0, 0, 1
|
||||||
|
], this._values)
|
||||||
|
c = Math.cos(rotX)
|
||||||
|
s = Math.sin(rotX)
|
||||||
|
this._values = multiply([
|
||||||
|
1, 0, 0, 0,
|
||||||
|
0, c, s, 0,
|
||||||
|
0, -s, c, 0,
|
||||||
|
0, 0, 0, 1
|
||||||
|
], this._values)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
rotateAxisAngle (x, y, z, angle) {
|
||||||
|
return newInstance(this._values).rotateAxisAngleSelf(x, y, z, angle)
|
||||||
|
}
|
||||||
|
|
||||||
|
rotateAxisAngleSelf (x, y, z, angle) {
|
||||||
|
if (typeof x !== 'number') x = 0
|
||||||
|
if (typeof y !== 'number') y = 0
|
||||||
|
if (typeof z !== 'number') z = 0
|
||||||
|
// Normalize axis
|
||||||
|
const length = Math.sqrt(x * x + y * y + z * z)
|
||||||
|
if (length === 0) return this
|
||||||
|
if (length !== 1) {
|
||||||
|
x /= length
|
||||||
|
y /= length
|
||||||
|
z /= length
|
||||||
|
}
|
||||||
|
angle *= RAD_PER_DEGREE
|
||||||
|
const c = Math.cos(angle)
|
||||||
|
const s = Math.sin(angle)
|
||||||
|
const t = 1 - c
|
||||||
|
const tx = t * x
|
||||||
|
const ty = t * y
|
||||||
|
// NB: This is the generic transform. If the axis is a major axis, there are
|
||||||
|
// faster transforms.
|
||||||
|
this._values = multiply([
|
||||||
|
tx * x + c, tx * y + s * z, tx * z - s * y, 0,
|
||||||
|
tx * y - s * z, ty * y + c, ty * z + s * x, 0,
|
||||||
|
tx * z + s * y, ty * z - s * x, t * z * z + c, 0,
|
||||||
|
0, 0, 0, 1
|
||||||
|
], this._values)
|
||||||
|
if (x !== 0 || y !== 0) this._is2D = false
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
skewX (sx) {
|
||||||
|
return newInstance(this._values).skewXSelf(sx)
|
||||||
|
}
|
||||||
|
|
||||||
|
skewXSelf (sx) {
|
||||||
|
if (typeof sx !== 'number') return this
|
||||||
|
const t = Math.tan(sx * RAD_PER_DEGREE)
|
||||||
|
this._values = multiply([
|
||||||
|
1, 0, 0, 0,
|
||||||
|
t, 1, 0, 0,
|
||||||
|
0, 0, 1, 0,
|
||||||
|
0, 0, 0, 1
|
||||||
|
], this._values)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
skewY (sy) {
|
||||||
|
return newInstance(this._values).skewYSelf(sy)
|
||||||
|
}
|
||||||
|
|
||||||
|
skewYSelf (sy) {
|
||||||
|
if (typeof sy !== 'number') return this
|
||||||
|
const t = Math.tan(sy * RAD_PER_DEGREE)
|
||||||
|
this._values = multiply([
|
||||||
|
1, t, 0, 0,
|
||||||
|
0, 1, 0, 0,
|
||||||
|
0, 0, 1, 0,
|
||||||
|
0, 0, 0, 1
|
||||||
|
], this._values)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
flipX () {
|
||||||
|
return newInstance(multiply([
|
||||||
|
-1, 0, 0, 0,
|
||||||
|
0, 1, 0, 0,
|
||||||
|
0, 0, 1, 0,
|
||||||
|
0, 0, 0, 1
|
||||||
|
], this._values))
|
||||||
|
}
|
||||||
|
|
||||||
|
flipY () {
|
||||||
|
return newInstance(multiply([
|
||||||
|
1, 0, 0, 0,
|
||||||
|
0, -1, 0, 0,
|
||||||
|
0, 0, 1, 0,
|
||||||
|
0, 0, 0, 1
|
||||||
|
], this._values))
|
||||||
|
}
|
||||||
|
|
||||||
|
inverse () {
|
||||||
|
return newInstance(this._values).invertSelf()
|
||||||
|
}
|
||||||
|
|
||||||
|
invertSelf () {
|
||||||
|
const m = this._values
|
||||||
|
const inv = m.map(v => 0)
|
||||||
|
|
||||||
|
inv[0] = m[5] * m[10] * m[15] -
|
||||||
|
m[5] * m[11] * m[14] -
|
||||||
|
m[9] * m[6] * m[15] +
|
||||||
|
m[9] * m[7] * m[14] +
|
||||||
|
m[13] * m[6] * m[11] -
|
||||||
|
m[13] * m[7] * m[10]
|
||||||
|
|
||||||
|
inv[4] = -m[4] * m[10] * m[15] +
|
||||||
|
m[4] * m[11] * m[14] +
|
||||||
|
m[8] * m[6] * m[15] -
|
||||||
|
m[8] * m[7] * m[14] -
|
||||||
|
m[12] * m[6] * m[11] +
|
||||||
|
m[12] * m[7] * m[10]
|
||||||
|
|
||||||
|
inv[8] = m[4] * m[9] * m[15] -
|
||||||
|
m[4] * m[11] * m[13] -
|
||||||
|
m[8] * m[5] * m[15] +
|
||||||
|
m[8] * m[7] * m[13] +
|
||||||
|
m[12] * m[5] * m[11] -
|
||||||
|
m[12] * m[7] * m[9]
|
||||||
|
|
||||||
|
inv[12] = -m[4] * m[9] * m[14] +
|
||||||
|
m[4] * m[10] * m[13] +
|
||||||
|
m[8] * m[5] * m[14] -
|
||||||
|
m[8] * m[6] * m[13] -
|
||||||
|
m[12] * m[5] * m[10] +
|
||||||
|
m[12] * m[6] * m[9]
|
||||||
|
|
||||||
|
// If the determinant is zero, this matrix cannot be inverted, and all
|
||||||
|
// values should be set to NaN, with the is2D flag set to false.
|
||||||
|
|
||||||
|
const det = m[0] * inv[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12]
|
||||||
|
|
||||||
|
if (det === 0) {
|
||||||
|
this._values = m.map(v => NaN)
|
||||||
|
this._is2D = false
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
inv[1] = -m[1] * m[10] * m[15] +
|
||||||
|
m[1] * m[11] * m[14] +
|
||||||
|
m[9] * m[2] * m[15] -
|
||||||
|
m[9] * m[3] * m[14] -
|
||||||
|
m[13] * m[2] * m[11] +
|
||||||
|
m[13] * m[3] * m[10]
|
||||||
|
|
||||||
|
inv[5] = m[0] * m[10] * m[15] -
|
||||||
|
m[0] * m[11] * m[14] -
|
||||||
|
m[8] * m[2] * m[15] +
|
||||||
|
m[8] * m[3] * m[14] +
|
||||||
|
m[12] * m[2] * m[11] -
|
||||||
|
m[12] * m[3] * m[10]
|
||||||
|
|
||||||
|
inv[9] = -m[0] * m[9] * m[15] +
|
||||||
|
m[0] * m[11] * m[13] +
|
||||||
|
m[8] * m[1] * m[15] -
|
||||||
|
m[8] * m[3] * m[13] -
|
||||||
|
m[12] * m[1] * m[11] +
|
||||||
|
m[12] * m[3] * m[9]
|
||||||
|
|
||||||
|
inv[13] = m[0] * m[9] * m[14] -
|
||||||
|
m[0] * m[10] * m[13] -
|
||||||
|
m[8] * m[1] * m[14] +
|
||||||
|
m[8] * m[2] * m[13] +
|
||||||
|
m[12] * m[1] * m[10] -
|
||||||
|
m[12] * m[2] * m[9]
|
||||||
|
|
||||||
|
inv[2] = m[1] * m[6] * m[15] -
|
||||||
|
m[1] * m[7] * m[14] -
|
||||||
|
m[5] * m[2] * m[15] +
|
||||||
|
m[5] * m[3] * m[14] +
|
||||||
|
m[13] * m[2] * m[7] -
|
||||||
|
m[13] * m[3] * m[6]
|
||||||
|
|
||||||
|
inv[6] = -m[0] * m[6] * m[15] +
|
||||||
|
m[0] * m[7] * m[14] +
|
||||||
|
m[4] * m[2] * m[15] -
|
||||||
|
m[4] * m[3] * m[14] -
|
||||||
|
m[12] * m[2] * m[7] +
|
||||||
|
m[12] * m[3] * m[6]
|
||||||
|
|
||||||
|
inv[10] = m[0] * m[5] * m[15] -
|
||||||
|
m[0] * m[7] * m[13] -
|
||||||
|
m[4] * m[1] * m[15] +
|
||||||
|
m[4] * m[3] * m[13] +
|
||||||
|
m[12] * m[1] * m[7] -
|
||||||
|
m[12] * m[3] * m[5]
|
||||||
|
|
||||||
|
inv[14] = -m[0] * m[5] * m[14] +
|
||||||
|
m[0] * m[6] * m[13] +
|
||||||
|
m[4] * m[1] * m[14] -
|
||||||
|
m[4] * m[2] * m[13] -
|
||||||
|
m[12] * m[1] * m[6] +
|
||||||
|
m[12] * m[2] * m[5]
|
||||||
|
|
||||||
|
inv[3] = -m[1] * m[6] * m[11] +
|
||||||
|
m[1] * m[7] * m[10] +
|
||||||
|
m[5] * m[2] * m[11] -
|
||||||
|
m[5] * m[3] * m[10] -
|
||||||
|
m[9] * m[2] * m[7] +
|
||||||
|
m[9] * m[3] * m[6]
|
||||||
|
|
||||||
|
inv[7] = m[0] * m[6] * m[11] -
|
||||||
|
m[0] * m[7] * m[10] -
|
||||||
|
m[4] * m[2] * m[11] +
|
||||||
|
m[4] * m[3] * m[10] +
|
||||||
|
m[8] * m[2] * m[7] -
|
||||||
|
m[8] * m[3] * m[6]
|
||||||
|
|
||||||
|
inv[11] = -m[0] * m[5] * m[11] +
|
||||||
|
m[0] * m[7] * m[9] +
|
||||||
|
m[4] * m[1] * m[11] -
|
||||||
|
m[4] * m[3] * m[9] -
|
||||||
|
m[8] * m[1] * m[7] +
|
||||||
|
m[8] * m[3] * m[5]
|
||||||
|
|
||||||
|
inv[15] = m[0] * m[5] * m[10] -
|
||||||
|
m[0] * m[6] * m[9] -
|
||||||
|
m[4] * m[1] * m[10] +
|
||||||
|
m[4] * m[2] * m[9] +
|
||||||
|
m[8] * m[1] * m[6] -
|
||||||
|
m[8] * m[2] * m[5]
|
||||||
|
|
||||||
|
inv.forEach((v, i) => { inv[i] = v / det })
|
||||||
|
this._values = inv
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
setMatrixValue (transformList) {
|
||||||
|
const temp = new DOMMatrix(transformList)
|
||||||
|
this._values = temp._values
|
||||||
|
this._is2D = temp._is2D
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
transformPoint (point) {
|
||||||
|
point = new DOMPoint(point)
|
||||||
|
const x = point.x
|
||||||
|
const y = point.y
|
||||||
|
const z = point.z
|
||||||
|
const w = point.w
|
||||||
|
const values = this._values
|
||||||
|
const nx = values[M11] * x + values[M21] * y + values[M31] * z + values[M41] * w
|
||||||
|
const ny = values[M12] * x + values[M22] * y + values[M32] * z + values[M42] * w
|
||||||
|
const nz = values[M13] * x + values[M23] * y + values[M33] * z + values[M43] * w
|
||||||
|
const nw = values[M14] * x + values[M24] * y + values[M34] * z + values[M44] * w
|
||||||
|
return new DOMPoint(nx, ny, nz, nw)
|
||||||
|
}
|
||||||
|
|
||||||
|
toFloat32Array () {
|
||||||
|
return Float32Array.from(this._values)
|
||||||
|
}
|
||||||
|
|
||||||
|
toFloat64Array () {
|
||||||
|
return this._values.slice(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
static fromMatrix (init) {
|
||||||
|
if (!(init instanceof DOMMatrix)) throw new TypeError('Expected DOMMatrix')
|
||||||
|
return new DOMMatrix(init._values)
|
||||||
|
}
|
||||||
|
|
||||||
|
static fromFloat32Array (init) {
|
||||||
|
if (!(init instanceof Float32Array)) throw new TypeError('Expected Float32Array')
|
||||||
|
return new DOMMatrix(init)
|
||||||
|
}
|
||||||
|
|
||||||
|
static fromFloat64Array (init) {
|
||||||
|
if (!(init instanceof Float64Array)) throw new TypeError('Expected Float64Array')
|
||||||
|
return new DOMMatrix(init)
|
||||||
|
}
|
||||||
|
|
||||||
|
[util.inspect.custom || 'inspect'] (depth, options) {
|
||||||
|
if (depth < 0) return '[DOMMatrix]'
|
||||||
|
|
||||||
|
return `DOMMatrix [
|
||||||
|
a: ${this.a}
|
||||||
|
b: ${this.b}
|
||||||
|
c: ${this.c}
|
||||||
|
d: ${this.d}
|
||||||
|
e: ${this.e}
|
||||||
|
f: ${this.f}
|
||||||
|
m11: ${this.m11}
|
||||||
|
m12: ${this.m12}
|
||||||
|
m13: ${this.m13}
|
||||||
|
m14: ${this.m14}
|
||||||
|
m21: ${this.m21}
|
||||||
|
m22: ${this.m22}
|
||||||
|
m23: ${this.m23}
|
||||||
|
m23: ${this.m23}
|
||||||
|
m31: ${this.m31}
|
||||||
|
m32: ${this.m32}
|
||||||
|
m33: ${this.m33}
|
||||||
|
m34: ${this.m34}
|
||||||
|
m41: ${this.m41}
|
||||||
|
m42: ${this.m42}
|
||||||
|
m43: ${this.m43}
|
||||||
|
m44: ${this.m44}
|
||||||
|
is2D: ${this.is2D}
|
||||||
|
isIdentity: ${this.isIdentity} ]`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks that `value` is a number and sets the value.
|
||||||
|
*/
|
||||||
|
function setNumber2D (receiver, index, value) {
|
||||||
|
if (typeof value !== 'number') throw new TypeError('Expected number')
|
||||||
|
return (receiver._values[index] = value)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks that `value` is a number, sets `_is2D = false` if necessary and sets
|
||||||
|
* the value.
|
||||||
|
*/
|
||||||
|
function setNumber3D (receiver, index, value) {
|
||||||
|
if (typeof value !== 'number') throw new TypeError('Expected number')
|
||||||
|
if (index === M33 || index === M44) {
|
||||||
|
if (value !== 1) receiver._is2D = false
|
||||||
|
} else if (value !== 0) receiver._is2D = false
|
||||||
|
return (receiver._values[index] = value)
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.defineProperties(DOMMatrix.prototype, {
|
||||||
|
m11: { get () { return this._values[M11] }, set (v) { return setNumber2D(this, M11, v) } },
|
||||||
|
m12: { get () { return this._values[M12] }, set (v) { return setNumber2D(this, M12, v) } },
|
||||||
|
m13: { get () { return this._values[M13] }, set (v) { return setNumber3D(this, M13, v) } },
|
||||||
|
m14: { get () { return this._values[M14] }, set (v) { return setNumber3D(this, M14, v) } },
|
||||||
|
m21: { get () { return this._values[M21] }, set (v) { return setNumber2D(this, M21, v) } },
|
||||||
|
m22: { get () { return this._values[M22] }, set (v) { return setNumber2D(this, M22, v) } },
|
||||||
|
m23: { get () { return this._values[M23] }, set (v) { return setNumber3D(this, M23, v) } },
|
||||||
|
m24: { get () { return this._values[M24] }, set (v) { return setNumber3D(this, M24, v) } },
|
||||||
|
m31: { get () { return this._values[M31] }, set (v) { return setNumber3D(this, M31, v) } },
|
||||||
|
m32: { get () { return this._values[M32] }, set (v) { return setNumber3D(this, M32, v) } },
|
||||||
|
m33: { get () { return this._values[M33] }, set (v) { return setNumber3D(this, M33, v) } },
|
||||||
|
m34: { get () { return this._values[M34] }, set (v) { return setNumber3D(this, M34, v) } },
|
||||||
|
m41: { get () { return this._values[M41] }, set (v) { return setNumber2D(this, M41, v) } },
|
||||||
|
m42: { get () { return this._values[M42] }, set (v) { return setNumber2D(this, M42, v) } },
|
||||||
|
m43: { get () { return this._values[M43] }, set (v) { return setNumber3D(this, M43, v) } },
|
||||||
|
m44: { get () { return this._values[M44] }, set (v) { return setNumber3D(this, M44, v) } },
|
||||||
|
|
||||||
|
a: { get () { return this.m11 }, set (v) { return (this.m11 = v) } },
|
||||||
|
b: { get () { return this.m12 }, set (v) { return (this.m12 = v) } },
|
||||||
|
c: { get () { return this.m21 }, set (v) { return (this.m21 = v) } },
|
||||||
|
d: { get () { return this.m22 }, set (v) { return (this.m22 = v) } },
|
||||||
|
e: { get () { return this.m41 }, set (v) { return (this.m41 = v) } },
|
||||||
|
f: { get () { return this.m42 }, set (v) { return (this.m42 = v) } },
|
||||||
|
|
||||||
|
is2D: { get () { return this._is2D } }, // read-only
|
||||||
|
|
||||||
|
isIdentity: {
|
||||||
|
get () {
|
||||||
|
const values = this._values
|
||||||
|
return (values[M11] === 1 && values[M12] === 0 && values[M13] === 0 && values[M14] === 0 &&
|
||||||
|
values[M21] === 0 && values[M22] === 1 && values[M23] === 0 && values[M24] === 0 &&
|
||||||
|
values[M31] === 0 && values[M32] === 0 && values[M33] === 1 && values[M34] === 0 &&
|
||||||
|
values[M41] === 0 && values[M42] === 0 && values[M43] === 0 && values[M44] === 1)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
toJSON: {
|
||||||
|
value() {
|
||||||
|
return {
|
||||||
|
a: this.a,
|
||||||
|
b: this.b,
|
||||||
|
c: this.c,
|
||||||
|
d: this.d,
|
||||||
|
e: this.e,
|
||||||
|
f: this.f,
|
||||||
|
m11: this.m11,
|
||||||
|
m12: this.m12,
|
||||||
|
m13: this.m13,
|
||||||
|
m14: this.m14,
|
||||||
|
m21: this.m21,
|
||||||
|
m22: this.m22,
|
||||||
|
m23: this.m23,
|
||||||
|
m23: this.m23,
|
||||||
|
m31: this.m31,
|
||||||
|
m32: this.m32,
|
||||||
|
m33: this.m33,
|
||||||
|
m34: this.m34,
|
||||||
|
m41: this.m41,
|
||||||
|
m42: this.m42,
|
||||||
|
m43: this.m43,
|
||||||
|
m44: this.m44,
|
||||||
|
is2D: this.is2D,
|
||||||
|
isIdentity: this.isIdentity,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a DOMMatrix, bypassing the constructor.
|
||||||
|
* @param {Float64Array} values Value to assign to `_values`. This is assigned
|
||||||
|
* without copying (okay because all usages are followed by a multiply).
|
||||||
|
*/
|
||||||
|
function newInstance (values) {
|
||||||
|
const instance = Object.create(DOMMatrix.prototype)
|
||||||
|
instance.constructor = DOMMatrix
|
||||||
|
instance._is2D = true
|
||||||
|
instance._values = values
|
||||||
|
return instance
|
||||||
|
}
|
||||||
|
|
||||||
|
function multiply (A, B) {
|
||||||
|
const dest = new Float64Array(16)
|
||||||
|
for (let i = 0; i < 4; i++) {
|
||||||
|
for (let j = 0; j < 4; j++) {
|
||||||
|
let sum = 0
|
||||||
|
for (let k = 0; k < 4; k++) {
|
||||||
|
sum += A[i * 4 + k] * B[k * 4 + j]
|
||||||
|
}
|
||||||
|
dest[i * 4 + j] = sum
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dest
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { DOMMatrix, DOMPoint }
|
||||||
43
miniprogram/node_modules/canvas/lib/bindings.js
generated
vendored
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
const bindings = require('../build/Release/canvas.node')
|
||||||
|
|
||||||
|
module.exports = bindings
|
||||||
|
|
||||||
|
Object.defineProperty(bindings.Canvas.prototype, Symbol.toStringTag, {
|
||||||
|
value: 'HTMLCanvasElement',
|
||||||
|
configurable: true
|
||||||
|
})
|
||||||
|
|
||||||
|
Object.defineProperty(bindings.Image.prototype, Symbol.toStringTag, {
|
||||||
|
value: 'HTMLImageElement',
|
||||||
|
configurable: true
|
||||||
|
})
|
||||||
|
|
||||||
|
bindings.ImageData.prototype.toString = function () {
|
||||||
|
return '[object ImageData]'
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.defineProperty(bindings.ImageData.prototype, Symbol.toStringTag, {
|
||||||
|
value: 'ImageData',
|
||||||
|
configurable: true
|
||||||
|
})
|
||||||
|
|
||||||
|
bindings.CanvasGradient.prototype.toString = function () {
|
||||||
|
return '[object CanvasGradient]'
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.defineProperty(bindings.CanvasGradient.prototype, Symbol.toStringTag, {
|
||||||
|
value: 'CanvasGradient',
|
||||||
|
configurable: true
|
||||||
|
})
|
||||||
|
|
||||||
|
Object.defineProperty(bindings.CanvasPattern.prototype, Symbol.toStringTag, {
|
||||||
|
value: 'CanvasPattern',
|
||||||
|
configurable: true
|
||||||
|
})
|
||||||
|
|
||||||
|
Object.defineProperty(bindings.CanvasRenderingContext2d.prototype, Symbol.toStringTag, {
|
||||||
|
value: 'CanvasRenderingContext2d',
|
||||||
|
configurable: true
|
||||||
|
})
|
||||||
113
miniprogram/node_modules/canvas/lib/canvas.js
generated
vendored
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Canvas
|
||||||
|
* Copyright (c) 2010 LearnBoost <tj@learnboost.com>
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
const bindings = require('./bindings')
|
||||||
|
const Canvas = module.exports = bindings.Canvas
|
||||||
|
const Context2d = require('./context2d')
|
||||||
|
const PNGStream = require('./pngstream')
|
||||||
|
const PDFStream = require('./pdfstream')
|
||||||
|
const JPEGStream = require('./jpegstream')
|
||||||
|
const FORMATS = ['image/png', 'image/jpeg']
|
||||||
|
const util = require('util')
|
||||||
|
|
||||||
|
// TODO || is for Node.js pre-v6.6.0
|
||||||
|
Canvas.prototype[util.inspect.custom || 'inspect'] = function () {
|
||||||
|
return `[Canvas ${this.width}x${this.height}]`
|
||||||
|
}
|
||||||
|
|
||||||
|
Canvas.prototype.getContext = function (contextType, contextAttributes) {
|
||||||
|
if (contextType == '2d') {
|
||||||
|
const ctx = this._context2d || (this._context2d = new Context2d(this, contextAttributes))
|
||||||
|
this.context = ctx
|
||||||
|
ctx.canvas = this
|
||||||
|
return ctx
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Canvas.prototype.pngStream =
|
||||||
|
Canvas.prototype.createPNGStream = function (options) {
|
||||||
|
return new PNGStream(this, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
Canvas.prototype.pdfStream =
|
||||||
|
Canvas.prototype.createPDFStream = function (options) {
|
||||||
|
return new PDFStream(this, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
Canvas.prototype.jpegStream =
|
||||||
|
Canvas.prototype.createJPEGStream = function (options) {
|
||||||
|
return new JPEGStream(this, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
Canvas.prototype.toDataURL = function (a1, a2, a3) {
|
||||||
|
// valid arg patterns (args -> [type, opts, fn]):
|
||||||
|
// [] -> ['image/png', null, null]
|
||||||
|
// [qual] -> ['image/png', null, null]
|
||||||
|
// [undefined] -> ['image/png', null, null]
|
||||||
|
// ['image/png'] -> ['image/png', null, null]
|
||||||
|
// ['image/png', qual] -> ['image/png', null, null]
|
||||||
|
// [fn] -> ['image/png', null, fn]
|
||||||
|
// [type, fn] -> [type, null, fn]
|
||||||
|
// [undefined, fn] -> ['image/png', null, fn]
|
||||||
|
// ['image/png', qual, fn] -> ['image/png', null, fn]
|
||||||
|
// ['image/jpeg', fn] -> ['image/jpeg', null, fn]
|
||||||
|
// ['image/jpeg', opts, fn] -> ['image/jpeg', opts, fn]
|
||||||
|
// ['image/jpeg', qual, fn] -> ['image/jpeg', {quality: qual}, fn]
|
||||||
|
// ['image/jpeg', undefined, fn] -> ['image/jpeg', null, fn]
|
||||||
|
// ['image/jpeg'] -> ['image/jpeg', null, fn]
|
||||||
|
// ['image/jpeg', opts] -> ['image/jpeg', opts, fn]
|
||||||
|
// ['image/jpeg', qual] -> ['image/jpeg', {quality: qual}, fn]
|
||||||
|
|
||||||
|
let type = 'image/png'
|
||||||
|
let opts = {}
|
||||||
|
let fn
|
||||||
|
|
||||||
|
if (typeof a1 === 'function') {
|
||||||
|
fn = a1
|
||||||
|
} else {
|
||||||
|
if (typeof a1 === 'string' && FORMATS.includes(a1.toLowerCase())) {
|
||||||
|
type = a1.toLowerCase()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof a2 === 'function') {
|
||||||
|
fn = a2
|
||||||
|
} else {
|
||||||
|
if (typeof a2 === 'object') {
|
||||||
|
opts = a2
|
||||||
|
} else if (typeof a2 === 'number') {
|
||||||
|
opts = { quality: Math.max(0, Math.min(1, a2)) }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof a3 === 'function') {
|
||||||
|
fn = a3
|
||||||
|
} else if (undefined !== a3) {
|
||||||
|
throw new TypeError(`${typeof a3} is not a function`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.width === 0 || this.height === 0) {
|
||||||
|
// Per spec, if the bitmap has no pixels, return this string:
|
||||||
|
const str = 'data:,'
|
||||||
|
if (fn) {
|
||||||
|
setTimeout(() => fn(null, str))
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fn) {
|
||||||
|
this.toBuffer((err, buf) => {
|
||||||
|
if (err) return fn(err)
|
||||||
|
fn(null, `data:${type};base64,${buf.toString('base64')}`)
|
||||||
|
}, type, opts)
|
||||||
|
} else {
|
||||||
|
return `data:${type};base64,${this.toBuffer(type, opts).toString('base64')}`
|
||||||
|
}
|
||||||
|
}
|
||||||
11
miniprogram/node_modules/canvas/lib/context2d.js
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Canvas - Context2d
|
||||||
|
* Copyright (c) 2010 LearnBoost <tj@learnboost.com>
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
const bindings = require('./bindings')
|
||||||
|
|
||||||
|
module.exports = bindings.CanvasRenderingContext2d
|
||||||
97
miniprogram/node_modules/canvas/lib/image.js
generated
vendored
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Canvas - Image
|
||||||
|
* Copyright (c) 2010 LearnBoost <tj@learnboost.com>
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module dependencies.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const bindings = require('./bindings')
|
||||||
|
const Image = module.exports = bindings.Image
|
||||||
|
const util = require('util')
|
||||||
|
|
||||||
|
const { GetSource, SetSource } = bindings
|
||||||
|
|
||||||
|
Object.defineProperty(Image.prototype, 'src', {
|
||||||
|
/**
|
||||||
|
* src setter. Valid values:
|
||||||
|
* * `data:` URI
|
||||||
|
* * Local file path
|
||||||
|
* * HTTP or HTTPS URL
|
||||||
|
* * Buffer containing image data (i.e. not a `data:` URI stored in a Buffer)
|
||||||
|
*
|
||||||
|
* @param {String|Buffer} val filename, buffer, data URI, URL
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
set (val) {
|
||||||
|
if (typeof val === 'string') {
|
||||||
|
if (/^\s*data:/.test(val)) { // data: URI
|
||||||
|
const commaI = val.indexOf(',')
|
||||||
|
// 'base64' must come before the comma
|
||||||
|
const isBase64 = val.lastIndexOf('base64', commaI) !== -1
|
||||||
|
const content = val.slice(commaI + 1)
|
||||||
|
setSource(this, Buffer.from(content, isBase64 ? 'base64' : 'utf8'), val)
|
||||||
|
} else if (/^\s*https?:\/\//.test(val)) { // remote URL
|
||||||
|
const onerror = err => {
|
||||||
|
if (typeof this.onerror === 'function') {
|
||||||
|
this.onerror(err)
|
||||||
|
} else {
|
||||||
|
throw err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch(val, {
|
||||||
|
method: 'GET',
|
||||||
|
headers: { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36' }
|
||||||
|
})
|
||||||
|
.then(res => {
|
||||||
|
if (!res.ok) {
|
||||||
|
throw new Error(`Server responded with ${res.status}`)
|
||||||
|
}
|
||||||
|
return res.arrayBuffer()
|
||||||
|
})
|
||||||
|
.then(data => {
|
||||||
|
setSource(this, Buffer.from(data))
|
||||||
|
})
|
||||||
|
.catch(onerror)
|
||||||
|
} else { // local file path assumed
|
||||||
|
setSource(this, val)
|
||||||
|
}
|
||||||
|
} else if (Buffer.isBuffer(val)) {
|
||||||
|
setSource(this, val)
|
||||||
|
} else {
|
||||||
|
const err = new Error("Invalid image source")
|
||||||
|
if (typeof this.onerror === 'function') this.onerror(err)
|
||||||
|
else throw err
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
get () {
|
||||||
|
// TODO https://github.com/Automattic/node-canvas/issues/118
|
||||||
|
return getSource(this)
|
||||||
|
},
|
||||||
|
|
||||||
|
configurable: true
|
||||||
|
})
|
||||||
|
|
||||||
|
// TODO || is for Node.js pre-v6.6.0
|
||||||
|
Image.prototype[util.inspect.custom || 'inspect'] = function () {
|
||||||
|
return '[Image' +
|
||||||
|
(this.complete ? ':' + this.width + 'x' + this.height : '') +
|
||||||
|
(this.src ? ' ' + this.src : '') +
|
||||||
|
(this.complete ? ' complete' : '') +
|
||||||
|
']'
|
||||||
|
}
|
||||||
|
|
||||||
|
function getSource (img) {
|
||||||
|
return img._originalSource || GetSource.call(img)
|
||||||
|
}
|
||||||
|
|
||||||
|
function setSource (img, src, origSrc) {
|
||||||
|
SetSource.call(img, src)
|
||||||
|
img._originalSource = origSrc
|
||||||
|
}
|
||||||
41
miniprogram/node_modules/canvas/lib/jpegstream.js
generated
vendored
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Canvas - JPEGStream
|
||||||
|
* Copyright (c) 2010 LearnBoost <tj@learnboost.com>
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
const { Readable } = require('stream')
|
||||||
|
function noop () {}
|
||||||
|
|
||||||
|
class JPEGStream extends Readable {
|
||||||
|
constructor (canvas, options) {
|
||||||
|
super()
|
||||||
|
|
||||||
|
if (canvas.streamJPEGSync === undefined) {
|
||||||
|
throw new Error('node-canvas was built without JPEG support.')
|
||||||
|
}
|
||||||
|
|
||||||
|
this.options = options
|
||||||
|
this.canvas = canvas
|
||||||
|
}
|
||||||
|
|
||||||
|
_read () {
|
||||||
|
// For now we're not controlling the c++ code's data emission, so we only
|
||||||
|
// call canvas.streamJPEGSync once and let it emit data at will.
|
||||||
|
this._read = noop
|
||||||
|
|
||||||
|
this.canvas.streamJPEGSync(this.options, (err, chunk) => {
|
||||||
|
if (err) {
|
||||||
|
this.emit('error', err)
|
||||||
|
} else if (chunk) {
|
||||||
|
this.push(chunk)
|
||||||
|
} else {
|
||||||
|
this.push(null)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = JPEGStream
|
||||||