mirror of
https://github.com/sndrec/WebMonkeyBall.git
synced 2026-02-03 02:03:33 +00:00
chore: remove node_modules
This commit is contained in:
141
.gitignore
vendored
Normal file
141
.gitignore
vendored
Normal file
@@ -0,0 +1,141 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Snowpack dependency directory (https://snowpack.dev/)
|
||||
web_modules/
|
||||
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional stylelint cache
|
||||
.stylelintcache
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variable files
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# Next.js build output
|
||||
.next
|
||||
out
|
||||
|
||||
# Nuxt.js build / generate output
|
||||
.nuxt
|
||||
dist
|
||||
.output
|
||||
|
||||
# Gatsby files
|
||||
.cache/
|
||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||
# public
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# vuepress v2.x temp and cache directory
|
||||
.temp
|
||||
.cache
|
||||
|
||||
# Sveltekit cache directory
|
||||
.svelte-kit/
|
||||
|
||||
# vitepress build output
|
||||
**/.vitepress/dist
|
||||
|
||||
# vitepress cache directory
|
||||
**/.vitepress/cache
|
||||
|
||||
# Docusaurus cache and generated files
|
||||
.docusaurus
|
||||
|
||||
# Serverless directories
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
|
||||
# Firebase cache directory
|
||||
.firebase/
|
||||
|
||||
# TernJS port file
|
||||
.tern-port
|
||||
|
||||
# Stores VSCode versions used for testing VSCode extensions
|
||||
.vscode-test
|
||||
|
||||
# yarn v3
|
||||
.pnp.*
|
||||
.yarn/*
|
||||
!.yarn/patches
|
||||
!.yarn/plugins
|
||||
!.yarn/releases
|
||||
!.yarn/sdks
|
||||
!.yarn/versions
|
||||
|
||||
# Vite files
|
||||
vite.config.js.timestamp-*
|
||||
vite.config.ts.timestamp-*
|
||||
.vite/
|
||||
104
node_modules/.package-lock.json
generated
vendored
104
node_modules/.package-lock.json
generated
vendored
@@ -1,104 +0,0 @@
|
||||
{
|
||||
"name": "smb-web",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"node_modules/@esbuild/linux-x64": {
|
||||
"version": "0.25.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
|
||||
"integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild": {
|
||||
"version": "0.25.12",
|
||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
|
||||
"integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"esbuild": "bin/esbuild"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@esbuild/aix-ppc64": "0.25.12",
|
||||
"@esbuild/android-arm": "0.25.12",
|
||||
"@esbuild/android-arm64": "0.25.12",
|
||||
"@esbuild/android-x64": "0.25.12",
|
||||
"@esbuild/darwin-arm64": "0.25.12",
|
||||
"@esbuild/darwin-x64": "0.25.12",
|
||||
"@esbuild/freebsd-arm64": "0.25.12",
|
||||
"@esbuild/freebsd-x64": "0.25.12",
|
||||
"@esbuild/linux-arm": "0.25.12",
|
||||
"@esbuild/linux-arm64": "0.25.12",
|
||||
"@esbuild/linux-ia32": "0.25.12",
|
||||
"@esbuild/linux-loong64": "0.25.12",
|
||||
"@esbuild/linux-mips64el": "0.25.12",
|
||||
"@esbuild/linux-ppc64": "0.25.12",
|
||||
"@esbuild/linux-riscv64": "0.25.12",
|
||||
"@esbuild/linux-s390x": "0.25.12",
|
||||
"@esbuild/linux-x64": "0.25.12",
|
||||
"@esbuild/netbsd-arm64": "0.25.12",
|
||||
"@esbuild/netbsd-x64": "0.25.12",
|
||||
"@esbuild/openbsd-arm64": "0.25.12",
|
||||
"@esbuild/openbsd-x64": "0.25.12",
|
||||
"@esbuild/openharmony-arm64": "0.25.12",
|
||||
"@esbuild/sunos-x64": "0.25.12",
|
||||
"@esbuild/win32-arm64": "0.25.12",
|
||||
"@esbuild/win32-ia32": "0.25.12",
|
||||
"@esbuild/win32-x64": "0.25.12"
|
||||
}
|
||||
},
|
||||
"node_modules/gl-matrix": {
|
||||
"version": "3.4.4",
|
||||
"resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.4.tgz",
|
||||
"integrity": "sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/playwright": {
|
||||
"version": "1.57.0",
|
||||
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0.tgz",
|
||||
"integrity": "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"playwright-core": "1.57.0"
|
||||
},
|
||||
"bin": {
|
||||
"playwright": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "2.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/playwright-core": {
|
||||
"version": "1.57.0",
|
||||
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.57.0.tgz",
|
||||
"integrity": "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"playwright-core": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
3
node_modules/@esbuild/linux-x64/README.md
generated
vendored
3
node_modules/@esbuild/linux-x64/README.md
generated
vendored
@@ -1,3 +0,0 @@
|
||||
# esbuild
|
||||
|
||||
This is the Linux 64-bit binary for esbuild, a JavaScript bundler and minifier. See https://github.com/evanw/esbuild for details.
|
||||
BIN
node_modules/@esbuild/linux-x64/bin/esbuild
generated
vendored
BIN
node_modules/@esbuild/linux-x64/bin/esbuild
generated
vendored
Binary file not shown.
20
node_modules/@esbuild/linux-x64/package.json
generated
vendored
20
node_modules/@esbuild/linux-x64/package.json
generated
vendored
@@ -1,20 +0,0 @@
|
||||
{
|
||||
"name": "@esbuild/linux-x64",
|
||||
"version": "0.25.12",
|
||||
"description": "The Linux 64-bit binary for esbuild, a JavaScript bundler.",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/evanw/esbuild.git"
|
||||
},
|
||||
"license": "MIT",
|
||||
"preferUnplugged": true,
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"cpu": [
|
||||
"x64"
|
||||
]
|
||||
}
|
||||
21
node_modules/esbuild/LICENSE.md
generated
vendored
21
node_modules/esbuild/LICENSE.md
generated
vendored
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 Evan Wallace
|
||||
|
||||
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.
|
||||
3
node_modules/esbuild/README.md
generated
vendored
3
node_modules/esbuild/README.md
generated
vendored
@@ -1,3 +0,0 @@
|
||||
# esbuild
|
||||
|
||||
This is a JavaScript bundler and minifier. See https://github.com/evanw/esbuild and the [JavaScript API documentation](https://esbuild.github.io/api/) for details.
|
||||
BIN
node_modules/esbuild/bin/esbuild
generated
vendored
BIN
node_modules/esbuild/bin/esbuild
generated
vendored
Binary file not shown.
289
node_modules/esbuild/install.js
generated
vendored
289
node_modules/esbuild/install.js
generated
vendored
@@ -1,289 +0,0 @@
|
||||
"use strict";
|
||||
var __create = Object.create;
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __getProtoOf = Object.getPrototypeOf;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
||||
// If the importer is in node compatibility mode or this is not an ESM
|
||||
// file that has been converted to a CommonJS file using a Babel-
|
||||
// compatible transform (i.e. "__esModule" has not been set), then set
|
||||
// "default" to the CommonJS "module.exports" for node compatibility.
|
||||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
||||
mod
|
||||
));
|
||||
|
||||
// lib/npm/node-platform.ts
|
||||
var fs = require("fs");
|
||||
var os = require("os");
|
||||
var path = require("path");
|
||||
var ESBUILD_BINARY_PATH = process.env.ESBUILD_BINARY_PATH || ESBUILD_BINARY_PATH;
|
||||
var isValidBinaryPath = (x) => !!x && x !== "/usr/bin/esbuild";
|
||||
var knownWindowsPackages = {
|
||||
"win32 arm64 LE": "@esbuild/win32-arm64",
|
||||
"win32 ia32 LE": "@esbuild/win32-ia32",
|
||||
"win32 x64 LE": "@esbuild/win32-x64"
|
||||
};
|
||||
var knownUnixlikePackages = {
|
||||
"aix ppc64 BE": "@esbuild/aix-ppc64",
|
||||
"android arm64 LE": "@esbuild/android-arm64",
|
||||
"darwin arm64 LE": "@esbuild/darwin-arm64",
|
||||
"darwin x64 LE": "@esbuild/darwin-x64",
|
||||
"freebsd arm64 LE": "@esbuild/freebsd-arm64",
|
||||
"freebsd x64 LE": "@esbuild/freebsd-x64",
|
||||
"linux arm LE": "@esbuild/linux-arm",
|
||||
"linux arm64 LE": "@esbuild/linux-arm64",
|
||||
"linux ia32 LE": "@esbuild/linux-ia32",
|
||||
"linux mips64el LE": "@esbuild/linux-mips64el",
|
||||
"linux ppc64 LE": "@esbuild/linux-ppc64",
|
||||
"linux riscv64 LE": "@esbuild/linux-riscv64",
|
||||
"linux s390x BE": "@esbuild/linux-s390x",
|
||||
"linux x64 LE": "@esbuild/linux-x64",
|
||||
"linux loong64 LE": "@esbuild/linux-loong64",
|
||||
"netbsd arm64 LE": "@esbuild/netbsd-arm64",
|
||||
"netbsd x64 LE": "@esbuild/netbsd-x64",
|
||||
"openbsd arm64 LE": "@esbuild/openbsd-arm64",
|
||||
"openbsd x64 LE": "@esbuild/openbsd-x64",
|
||||
"sunos x64 LE": "@esbuild/sunos-x64"
|
||||
};
|
||||
var knownWebAssemblyFallbackPackages = {
|
||||
"android arm LE": "@esbuild/android-arm",
|
||||
"android x64 LE": "@esbuild/android-x64",
|
||||
"openharmony arm64 LE": "@esbuild/openharmony-arm64"
|
||||
};
|
||||
function pkgAndSubpathForCurrentPlatform() {
|
||||
let pkg;
|
||||
let subpath;
|
||||
let isWASM = false;
|
||||
let platformKey = `${process.platform} ${os.arch()} ${os.endianness()}`;
|
||||
if (platformKey in knownWindowsPackages) {
|
||||
pkg = knownWindowsPackages[platformKey];
|
||||
subpath = "esbuild.exe";
|
||||
} else if (platformKey in knownUnixlikePackages) {
|
||||
pkg = knownUnixlikePackages[platformKey];
|
||||
subpath = "bin/esbuild";
|
||||
} else if (platformKey in knownWebAssemblyFallbackPackages) {
|
||||
pkg = knownWebAssemblyFallbackPackages[platformKey];
|
||||
subpath = "bin/esbuild";
|
||||
isWASM = true;
|
||||
} else {
|
||||
throw new Error(`Unsupported platform: ${platformKey}`);
|
||||
}
|
||||
return { pkg, subpath, isWASM };
|
||||
}
|
||||
function downloadedBinPath(pkg, subpath) {
|
||||
const esbuildLibDir = path.dirname(require.resolve("esbuild"));
|
||||
return path.join(esbuildLibDir, `downloaded-${pkg.replace("/", "-")}-${path.basename(subpath)}`);
|
||||
}
|
||||
|
||||
// lib/npm/node-install.ts
|
||||
var fs2 = require("fs");
|
||||
var os2 = require("os");
|
||||
var path2 = require("path");
|
||||
var zlib = require("zlib");
|
||||
var https = require("https");
|
||||
var child_process = require("child_process");
|
||||
var versionFromPackageJSON = require(path2.join(__dirname, "package.json")).version;
|
||||
var toPath = path2.join(__dirname, "bin", "esbuild");
|
||||
var isToPathJS = true;
|
||||
function validateBinaryVersion(...command) {
|
||||
command.push("--version");
|
||||
let stdout;
|
||||
try {
|
||||
stdout = child_process.execFileSync(command.shift(), command, {
|
||||
// Without this, this install script strangely crashes with the error
|
||||
// "EACCES: permission denied, write" but only on Ubuntu Linux when node is
|
||||
// installed from the Snap Store. This is not a problem when you download
|
||||
// the official version of node. The problem appears to be that stderr
|
||||
// (i.e. file descriptor 2) isn't writable?
|
||||
//
|
||||
// More info:
|
||||
// - https://snapcraft.io/ (what the Snap Store is)
|
||||
// - https://nodejs.org/dist/ (download the official version of node)
|
||||
// - https://github.com/evanw/esbuild/issues/1711#issuecomment-1027554035
|
||||
//
|
||||
stdio: "pipe"
|
||||
}).toString().trim();
|
||||
} catch (err) {
|
||||
if (os2.platform() === "darwin" && /_SecTrustEvaluateWithError/.test(err + "")) {
|
||||
let os3 = "this version of macOS";
|
||||
try {
|
||||
os3 = "macOS " + child_process.execFileSync("sw_vers", ["-productVersion"]).toString().trim();
|
||||
} catch {
|
||||
}
|
||||
throw new Error(`The "esbuild" package cannot be installed because ${os3} is too outdated.
|
||||
|
||||
The Go compiler (which esbuild relies on) no longer supports ${os3},
|
||||
which means the "esbuild" binary executable can't be run. You can either:
|
||||
|
||||
* Update your version of macOS to one that the Go compiler supports
|
||||
* Use the "esbuild-wasm" package instead of the "esbuild" package
|
||||
* Build esbuild yourself using an older version of the Go compiler
|
||||
`);
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
if (stdout !== versionFromPackageJSON) {
|
||||
throw new Error(`Expected ${JSON.stringify(versionFromPackageJSON)} but got ${JSON.stringify(stdout)}`);
|
||||
}
|
||||
}
|
||||
function isYarn() {
|
||||
const { npm_config_user_agent } = process.env;
|
||||
if (npm_config_user_agent) {
|
||||
return /\byarn\//.test(npm_config_user_agent);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
function fetch(url) {
|
||||
return new Promise((resolve, reject) => {
|
||||
https.get(url, (res) => {
|
||||
if ((res.statusCode === 301 || res.statusCode === 302) && res.headers.location)
|
||||
return fetch(res.headers.location).then(resolve, reject);
|
||||
if (res.statusCode !== 200)
|
||||
return reject(new Error(`Server responded with ${res.statusCode}`));
|
||||
let chunks = [];
|
||||
res.on("data", (chunk) => chunks.push(chunk));
|
||||
res.on("end", () => resolve(Buffer.concat(chunks)));
|
||||
}).on("error", reject);
|
||||
});
|
||||
}
|
||||
function extractFileFromTarGzip(buffer, subpath) {
|
||||
try {
|
||||
buffer = zlib.unzipSync(buffer);
|
||||
} catch (err) {
|
||||
throw new Error(`Invalid gzip data in archive: ${err && err.message || err}`);
|
||||
}
|
||||
let str = (i, n) => String.fromCharCode(...buffer.subarray(i, i + n)).replace(/\0.*$/, "");
|
||||
let offset = 0;
|
||||
subpath = `package/${subpath}`;
|
||||
while (offset < buffer.length) {
|
||||
let name = str(offset, 100);
|
||||
let size = parseInt(str(offset + 124, 12), 8);
|
||||
offset += 512;
|
||||
if (!isNaN(size)) {
|
||||
if (name === subpath) return buffer.subarray(offset, offset + size);
|
||||
offset += size + 511 & ~511;
|
||||
}
|
||||
}
|
||||
throw new Error(`Could not find ${JSON.stringify(subpath)} in archive`);
|
||||
}
|
||||
function installUsingNPM(pkg, subpath, binPath) {
|
||||
const env = { ...process.env, npm_config_global: void 0 };
|
||||
const esbuildLibDir = path2.dirname(require.resolve("esbuild"));
|
||||
const installDir = path2.join(esbuildLibDir, "npm-install");
|
||||
fs2.mkdirSync(installDir);
|
||||
try {
|
||||
fs2.writeFileSync(path2.join(installDir, "package.json"), "{}");
|
||||
child_process.execSync(
|
||||
`npm install --loglevel=error --prefer-offline --no-audit --progress=false ${pkg}@${versionFromPackageJSON}`,
|
||||
{ cwd: installDir, stdio: "pipe", env }
|
||||
);
|
||||
const installedBinPath = path2.join(installDir, "node_modules", pkg, subpath);
|
||||
fs2.renameSync(installedBinPath, binPath);
|
||||
} finally {
|
||||
try {
|
||||
removeRecursive(installDir);
|
||||
} catch {
|
||||
}
|
||||
}
|
||||
}
|
||||
function removeRecursive(dir) {
|
||||
for (const entry of fs2.readdirSync(dir)) {
|
||||
const entryPath = path2.join(dir, entry);
|
||||
let stats;
|
||||
try {
|
||||
stats = fs2.lstatSync(entryPath);
|
||||
} catch {
|
||||
continue;
|
||||
}
|
||||
if (stats.isDirectory()) removeRecursive(entryPath);
|
||||
else fs2.unlinkSync(entryPath);
|
||||
}
|
||||
fs2.rmdirSync(dir);
|
||||
}
|
||||
function applyManualBinaryPathOverride(overridePath) {
|
||||
const pathString = JSON.stringify(overridePath);
|
||||
fs2.writeFileSync(toPath, `#!/usr/bin/env node
|
||||
require('child_process').execFileSync(${pathString}, process.argv.slice(2), { stdio: 'inherit' });
|
||||
`);
|
||||
const libMain = path2.join(__dirname, "lib", "main.js");
|
||||
const code = fs2.readFileSync(libMain, "utf8");
|
||||
fs2.writeFileSync(libMain, `var ESBUILD_BINARY_PATH = ${pathString};
|
||||
${code}`);
|
||||
}
|
||||
function maybeOptimizePackage(binPath) {
|
||||
const { isWASM } = pkgAndSubpathForCurrentPlatform();
|
||||
if (os2.platform() !== "win32" && !isYarn() && !isWASM) {
|
||||
const tempPath = path2.join(__dirname, "bin-esbuild");
|
||||
try {
|
||||
fs2.linkSync(binPath, tempPath);
|
||||
fs2.renameSync(tempPath, toPath);
|
||||
isToPathJS = false;
|
||||
fs2.unlinkSync(tempPath);
|
||||
} catch {
|
||||
}
|
||||
}
|
||||
}
|
||||
async function downloadDirectlyFromNPM(pkg, subpath, binPath) {
|
||||
const url = `https://registry.npmjs.org/${pkg}/-/${pkg.replace("@esbuild/", "")}-${versionFromPackageJSON}.tgz`;
|
||||
console.error(`[esbuild] Trying to download ${JSON.stringify(url)}`);
|
||||
try {
|
||||
fs2.writeFileSync(binPath, extractFileFromTarGzip(await fetch(url), subpath));
|
||||
fs2.chmodSync(binPath, 493);
|
||||
} catch (e) {
|
||||
console.error(`[esbuild] Failed to download ${JSON.stringify(url)}: ${e && e.message || e}`);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
async function checkAndPreparePackage() {
|
||||
if (isValidBinaryPath(ESBUILD_BINARY_PATH)) {
|
||||
if (!fs2.existsSync(ESBUILD_BINARY_PATH)) {
|
||||
console.warn(`[esbuild] Ignoring bad configuration: ESBUILD_BINARY_PATH=${ESBUILD_BINARY_PATH}`);
|
||||
} else {
|
||||
applyManualBinaryPathOverride(ESBUILD_BINARY_PATH);
|
||||
return;
|
||||
}
|
||||
}
|
||||
const { pkg, subpath } = pkgAndSubpathForCurrentPlatform();
|
||||
let binPath;
|
||||
try {
|
||||
binPath = require.resolve(`${pkg}/${subpath}`);
|
||||
} catch (e) {
|
||||
console.error(`[esbuild] Failed to find package "${pkg}" on the file system
|
||||
|
||||
This can happen if you use the "--no-optional" flag. The "optionalDependencies"
|
||||
package.json feature is used by esbuild to install the correct binary executable
|
||||
for your current platform. This install script will now attempt to work around
|
||||
this. If that fails, you need to remove the "--no-optional" flag to use esbuild.
|
||||
`);
|
||||
binPath = downloadedBinPath(pkg, subpath);
|
||||
try {
|
||||
console.error(`[esbuild] Trying to install package "${pkg}" using npm`);
|
||||
installUsingNPM(pkg, subpath, binPath);
|
||||
} catch (e2) {
|
||||
console.error(`[esbuild] Failed to install package "${pkg}" using npm: ${e2 && e2.message || e2}`);
|
||||
try {
|
||||
await downloadDirectlyFromNPM(pkg, subpath, binPath);
|
||||
} catch (e3) {
|
||||
throw new Error(`Failed to install package "${pkg}"`);
|
||||
}
|
||||
}
|
||||
}
|
||||
maybeOptimizePackage(binPath);
|
||||
}
|
||||
checkAndPreparePackage().then(() => {
|
||||
if (isToPathJS) {
|
||||
validateBinaryVersion(process.execPath, toPath);
|
||||
} else {
|
||||
validateBinaryVersion(toPath);
|
||||
}
|
||||
});
|
||||
716
node_modules/esbuild/lib/main.d.ts
generated
vendored
716
node_modules/esbuild/lib/main.d.ts
generated
vendored
@@ -1,716 +0,0 @@
|
||||
export type Platform = 'browser' | 'node' | 'neutral'
|
||||
export type Format = 'iife' | 'cjs' | 'esm'
|
||||
export type Loader = 'base64' | 'binary' | 'copy' | 'css' | 'dataurl' | 'default' | 'empty' | 'file' | 'js' | 'json' | 'jsx' | 'local-css' | 'text' | 'ts' | 'tsx'
|
||||
export type LogLevel = 'verbose' | 'debug' | 'info' | 'warning' | 'error' | 'silent'
|
||||
export type Charset = 'ascii' | 'utf8'
|
||||
export type Drop = 'console' | 'debugger'
|
||||
export type AbsPaths = 'code' | 'log' | 'metafile'
|
||||
|
||||
interface CommonOptions {
|
||||
/** Documentation: https://esbuild.github.io/api/#sourcemap */
|
||||
sourcemap?: boolean | 'linked' | 'inline' | 'external' | 'both'
|
||||
/** Documentation: https://esbuild.github.io/api/#legal-comments */
|
||||
legalComments?: 'none' | 'inline' | 'eof' | 'linked' | 'external'
|
||||
/** Documentation: https://esbuild.github.io/api/#source-root */
|
||||
sourceRoot?: string
|
||||
/** Documentation: https://esbuild.github.io/api/#sources-content */
|
||||
sourcesContent?: boolean
|
||||
|
||||
/** Documentation: https://esbuild.github.io/api/#format */
|
||||
format?: Format
|
||||
/** Documentation: https://esbuild.github.io/api/#global-name */
|
||||
globalName?: string
|
||||
/** Documentation: https://esbuild.github.io/api/#target */
|
||||
target?: string | string[]
|
||||
/** Documentation: https://esbuild.github.io/api/#supported */
|
||||
supported?: Record<string, boolean>
|
||||
/** Documentation: https://esbuild.github.io/api/#platform */
|
||||
platform?: Platform
|
||||
|
||||
/** Documentation: https://esbuild.github.io/api/#mangle-props */
|
||||
mangleProps?: RegExp
|
||||
/** Documentation: https://esbuild.github.io/api/#mangle-props */
|
||||
reserveProps?: RegExp
|
||||
/** Documentation: https://esbuild.github.io/api/#mangle-props */
|
||||
mangleQuoted?: boolean
|
||||
/** Documentation: https://esbuild.github.io/api/#mangle-props */
|
||||
mangleCache?: Record<string, string | false>
|
||||
/** Documentation: https://esbuild.github.io/api/#drop */
|
||||
drop?: Drop[]
|
||||
/** Documentation: https://esbuild.github.io/api/#drop-labels */
|
||||
dropLabels?: string[]
|
||||
/** Documentation: https://esbuild.github.io/api/#minify */
|
||||
minify?: boolean
|
||||
/** Documentation: https://esbuild.github.io/api/#minify */
|
||||
minifyWhitespace?: boolean
|
||||
/** Documentation: https://esbuild.github.io/api/#minify */
|
||||
minifyIdentifiers?: boolean
|
||||
/** Documentation: https://esbuild.github.io/api/#minify */
|
||||
minifySyntax?: boolean
|
||||
/** Documentation: https://esbuild.github.io/api/#line-limit */
|
||||
lineLimit?: number
|
||||
/** Documentation: https://esbuild.github.io/api/#charset */
|
||||
charset?: Charset
|
||||
/** Documentation: https://esbuild.github.io/api/#tree-shaking */
|
||||
treeShaking?: boolean
|
||||
/** Documentation: https://esbuild.github.io/api/#ignore-annotations */
|
||||
ignoreAnnotations?: boolean
|
||||
|
||||
/** Documentation: https://esbuild.github.io/api/#jsx */
|
||||
jsx?: 'transform' | 'preserve' | 'automatic'
|
||||
/** Documentation: https://esbuild.github.io/api/#jsx-factory */
|
||||
jsxFactory?: string
|
||||
/** Documentation: https://esbuild.github.io/api/#jsx-fragment */
|
||||
jsxFragment?: string
|
||||
/** Documentation: https://esbuild.github.io/api/#jsx-import-source */
|
||||
jsxImportSource?: string
|
||||
/** Documentation: https://esbuild.github.io/api/#jsx-development */
|
||||
jsxDev?: boolean
|
||||
/** Documentation: https://esbuild.github.io/api/#jsx-side-effects */
|
||||
jsxSideEffects?: boolean
|
||||
|
||||
/** Documentation: https://esbuild.github.io/api/#define */
|
||||
define?: { [key: string]: string }
|
||||
/** Documentation: https://esbuild.github.io/api/#pure */
|
||||
pure?: string[]
|
||||
/** Documentation: https://esbuild.github.io/api/#keep-names */
|
||||
keepNames?: boolean
|
||||
|
||||
/** Documentation: https://esbuild.github.io/api/#abs-paths */
|
||||
absPaths?: AbsPaths[]
|
||||
/** Documentation: https://esbuild.github.io/api/#color */
|
||||
color?: boolean
|
||||
/** Documentation: https://esbuild.github.io/api/#log-level */
|
||||
logLevel?: LogLevel
|
||||
/** Documentation: https://esbuild.github.io/api/#log-limit */
|
||||
logLimit?: number
|
||||
/** Documentation: https://esbuild.github.io/api/#log-override */
|
||||
logOverride?: Record<string, LogLevel>
|
||||
|
||||
/** Documentation: https://esbuild.github.io/api/#tsconfig-raw */
|
||||
tsconfigRaw?: string | TsconfigRaw
|
||||
}
|
||||
|
||||
export interface TsconfigRaw {
|
||||
compilerOptions?: {
|
||||
alwaysStrict?: boolean
|
||||
baseUrl?: string
|
||||
experimentalDecorators?: boolean
|
||||
importsNotUsedAsValues?: 'remove' | 'preserve' | 'error'
|
||||
jsx?: 'preserve' | 'react-native' | 'react' | 'react-jsx' | 'react-jsxdev'
|
||||
jsxFactory?: string
|
||||
jsxFragmentFactory?: string
|
||||
jsxImportSource?: string
|
||||
paths?: Record<string, string[]>
|
||||
preserveValueImports?: boolean
|
||||
strict?: boolean
|
||||
target?: string
|
||||
useDefineForClassFields?: boolean
|
||||
verbatimModuleSyntax?: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export interface BuildOptions extends CommonOptions {
|
||||
/** Documentation: https://esbuild.github.io/api/#bundle */
|
||||
bundle?: boolean
|
||||
/** Documentation: https://esbuild.github.io/api/#splitting */
|
||||
splitting?: boolean
|
||||
/** Documentation: https://esbuild.github.io/api/#preserve-symlinks */
|
||||
preserveSymlinks?: boolean
|
||||
/** Documentation: https://esbuild.github.io/api/#outfile */
|
||||
outfile?: string
|
||||
/** Documentation: https://esbuild.github.io/api/#metafile */
|
||||
metafile?: boolean
|
||||
/** Documentation: https://esbuild.github.io/api/#outdir */
|
||||
outdir?: string
|
||||
/** Documentation: https://esbuild.github.io/api/#outbase */
|
||||
outbase?: string
|
||||
/** Documentation: https://esbuild.github.io/api/#external */
|
||||
external?: string[]
|
||||
/** Documentation: https://esbuild.github.io/api/#packages */
|
||||
packages?: 'bundle' | 'external'
|
||||
/** Documentation: https://esbuild.github.io/api/#alias */
|
||||
alias?: Record<string, string>
|
||||
/** Documentation: https://esbuild.github.io/api/#loader */
|
||||
loader?: { [ext: string]: Loader }
|
||||
/** Documentation: https://esbuild.github.io/api/#resolve-extensions */
|
||||
resolveExtensions?: string[]
|
||||
/** Documentation: https://esbuild.github.io/api/#main-fields */
|
||||
mainFields?: string[]
|
||||
/** Documentation: https://esbuild.github.io/api/#conditions */
|
||||
conditions?: string[]
|
||||
/** Documentation: https://esbuild.github.io/api/#write */
|
||||
write?: boolean
|
||||
/** Documentation: https://esbuild.github.io/api/#allow-overwrite */
|
||||
allowOverwrite?: boolean
|
||||
/** Documentation: https://esbuild.github.io/api/#tsconfig */
|
||||
tsconfig?: string
|
||||
/** Documentation: https://esbuild.github.io/api/#out-extension */
|
||||
outExtension?: { [ext: string]: string }
|
||||
/** Documentation: https://esbuild.github.io/api/#public-path */
|
||||
publicPath?: string
|
||||
/** Documentation: https://esbuild.github.io/api/#entry-names */
|
||||
entryNames?: string
|
||||
/** Documentation: https://esbuild.github.io/api/#chunk-names */
|
||||
chunkNames?: string
|
||||
/** Documentation: https://esbuild.github.io/api/#asset-names */
|
||||
assetNames?: string
|
||||
/** Documentation: https://esbuild.github.io/api/#inject */
|
||||
inject?: string[]
|
||||
/** Documentation: https://esbuild.github.io/api/#banner */
|
||||
banner?: { [type: string]: string }
|
||||
/** Documentation: https://esbuild.github.io/api/#footer */
|
||||
footer?: { [type: string]: string }
|
||||
/** Documentation: https://esbuild.github.io/api/#entry-points */
|
||||
entryPoints?: (string | { in: string, out: string })[] | Record<string, string>
|
||||
/** Documentation: https://esbuild.github.io/api/#stdin */
|
||||
stdin?: StdinOptions
|
||||
/** Documentation: https://esbuild.github.io/plugins/ */
|
||||
plugins?: Plugin[]
|
||||
/** Documentation: https://esbuild.github.io/api/#working-directory */
|
||||
absWorkingDir?: string
|
||||
/** Documentation: https://esbuild.github.io/api/#node-paths */
|
||||
nodePaths?: string[]; // The "NODE_PATH" variable from Node.js
|
||||
}
|
||||
|
||||
export interface StdinOptions {
|
||||
contents: string | Uint8Array
|
||||
resolveDir?: string
|
||||
sourcefile?: string
|
||||
loader?: Loader
|
||||
}
|
||||
|
||||
export interface Message {
|
||||
id: string
|
||||
pluginName: string
|
||||
text: string
|
||||
location: Location | null
|
||||
notes: Note[]
|
||||
|
||||
/**
|
||||
* Optional user-specified data that is passed through unmodified. You can
|
||||
* use this to stash the original error, for example.
|
||||
*/
|
||||
detail: any
|
||||
}
|
||||
|
||||
export interface Note {
|
||||
text: string
|
||||
location: Location | null
|
||||
}
|
||||
|
||||
export interface Location {
|
||||
file: string
|
||||
namespace: string
|
||||
/** 1-based */
|
||||
line: number
|
||||
/** 0-based, in bytes */
|
||||
column: number
|
||||
/** in bytes */
|
||||
length: number
|
||||
lineText: string
|
||||
suggestion: string
|
||||
}
|
||||
|
||||
export interface OutputFile {
|
||||
path: string
|
||||
contents: Uint8Array
|
||||
hash: string
|
||||
/** "contents" as text (changes automatically with "contents") */
|
||||
readonly text: string
|
||||
}
|
||||
|
||||
export interface BuildResult<ProvidedOptions extends BuildOptions = BuildOptions> {
|
||||
errors: Message[]
|
||||
warnings: Message[]
|
||||
/** Only when "write: false" */
|
||||
outputFiles: OutputFile[] | (ProvidedOptions['write'] extends false ? never : undefined)
|
||||
/** Only when "metafile: true" */
|
||||
metafile: Metafile | (ProvidedOptions['metafile'] extends true ? never : undefined)
|
||||
/** Only when "mangleCache" is present */
|
||||
mangleCache: Record<string, string | false> | (ProvidedOptions['mangleCache'] extends Object ? never : undefined)
|
||||
}
|
||||
|
||||
export interface BuildFailure extends Error {
|
||||
errors: Message[]
|
||||
warnings: Message[]
|
||||
}
|
||||
|
||||
/** Documentation: https://esbuild.github.io/api/#serve-arguments */
|
||||
export interface ServeOptions {
|
||||
port?: number
|
||||
host?: string
|
||||
servedir?: string
|
||||
keyfile?: string
|
||||
certfile?: string
|
||||
fallback?: string
|
||||
cors?: CORSOptions
|
||||
onRequest?: (args: ServeOnRequestArgs) => void
|
||||
}
|
||||
|
||||
/** Documentation: https://esbuild.github.io/api/#cors */
|
||||
export interface CORSOptions {
|
||||
origin?: string | string[]
|
||||
}
|
||||
|
||||
export interface ServeOnRequestArgs {
|
||||
remoteAddress: string
|
||||
method: string
|
||||
path: string
|
||||
status: number
|
||||
/** The time to generate the response, not to send it */
|
||||
timeInMS: number
|
||||
}
|
||||
|
||||
/** Documentation: https://esbuild.github.io/api/#serve-return-values */
|
||||
export interface ServeResult {
|
||||
port: number
|
||||
hosts: string[]
|
||||
}
|
||||
|
||||
export interface TransformOptions extends CommonOptions {
|
||||
/** Documentation: https://esbuild.github.io/api/#sourcefile */
|
||||
sourcefile?: string
|
||||
/** Documentation: https://esbuild.github.io/api/#loader */
|
||||
loader?: Loader
|
||||
/** Documentation: https://esbuild.github.io/api/#banner */
|
||||
banner?: string
|
||||
/** Documentation: https://esbuild.github.io/api/#footer */
|
||||
footer?: string
|
||||
}
|
||||
|
||||
export interface TransformResult<ProvidedOptions extends TransformOptions = TransformOptions> {
|
||||
code: string
|
||||
map: string
|
||||
warnings: Message[]
|
||||
/** Only when "mangleCache" is present */
|
||||
mangleCache: Record<string, string | false> | (ProvidedOptions['mangleCache'] extends Object ? never : undefined)
|
||||
/** Only when "legalComments" is "external" */
|
||||
legalComments: string | (ProvidedOptions['legalComments'] extends 'external' ? never : undefined)
|
||||
}
|
||||
|
||||
export interface TransformFailure extends Error {
|
||||
errors: Message[]
|
||||
warnings: Message[]
|
||||
}
|
||||
|
||||
export interface Plugin {
|
||||
name: string
|
||||
setup: (build: PluginBuild) => (void | Promise<void>)
|
||||
}
|
||||
|
||||
export interface PluginBuild {
|
||||
/** Documentation: https://esbuild.github.io/plugins/#build-options */
|
||||
initialOptions: BuildOptions
|
||||
|
||||
/** Documentation: https://esbuild.github.io/plugins/#resolve */
|
||||
resolve(path: string, options?: ResolveOptions): Promise<ResolveResult>
|
||||
|
||||
/** Documentation: https://esbuild.github.io/plugins/#on-start */
|
||||
onStart(callback: () =>
|
||||
(OnStartResult | null | void | Promise<OnStartResult | null | void>)): void
|
||||
|
||||
/** Documentation: https://esbuild.github.io/plugins/#on-end */
|
||||
onEnd(callback: (result: BuildResult) =>
|
||||
(OnEndResult | null | void | Promise<OnEndResult | null | void>)): void
|
||||
|
||||
/** Documentation: https://esbuild.github.io/plugins/#on-resolve */
|
||||
onResolve(options: OnResolveOptions, callback: (args: OnResolveArgs) =>
|
||||
(OnResolveResult | null | undefined | Promise<OnResolveResult | null | undefined>)): void
|
||||
|
||||
/** Documentation: https://esbuild.github.io/plugins/#on-load */
|
||||
onLoad(options: OnLoadOptions, callback: (args: OnLoadArgs) =>
|
||||
(OnLoadResult | null | undefined | Promise<OnLoadResult | null | undefined>)): void
|
||||
|
||||
/** Documentation: https://esbuild.github.io/plugins/#on-dispose */
|
||||
onDispose(callback: () => void): void
|
||||
|
||||
// This is a full copy of the esbuild library in case you need it
|
||||
esbuild: {
|
||||
context: typeof context,
|
||||
build: typeof build,
|
||||
buildSync: typeof buildSync,
|
||||
transform: typeof transform,
|
||||
transformSync: typeof transformSync,
|
||||
formatMessages: typeof formatMessages,
|
||||
formatMessagesSync: typeof formatMessagesSync,
|
||||
analyzeMetafile: typeof analyzeMetafile,
|
||||
analyzeMetafileSync: typeof analyzeMetafileSync,
|
||||
initialize: typeof initialize,
|
||||
version: typeof version,
|
||||
}
|
||||
}
|
||||
|
||||
/** Documentation: https://esbuild.github.io/plugins/#resolve-options */
|
||||
export interface ResolveOptions {
|
||||
pluginName?: string
|
||||
importer?: string
|
||||
namespace?: string
|
||||
resolveDir?: string
|
||||
kind?: ImportKind
|
||||
pluginData?: any
|
||||
with?: Record<string, string>
|
||||
}
|
||||
|
||||
/** Documentation: https://esbuild.github.io/plugins/#resolve-results */
|
||||
export interface ResolveResult {
|
||||
errors: Message[]
|
||||
warnings: Message[]
|
||||
|
||||
path: string
|
||||
external: boolean
|
||||
sideEffects: boolean
|
||||
namespace: string
|
||||
suffix: string
|
||||
pluginData: any
|
||||
}
|
||||
|
||||
export interface OnStartResult {
|
||||
errors?: PartialMessage[]
|
||||
warnings?: PartialMessage[]
|
||||
}
|
||||
|
||||
export interface OnEndResult {
|
||||
errors?: PartialMessage[]
|
||||
warnings?: PartialMessage[]
|
||||
}
|
||||
|
||||
/** Documentation: https://esbuild.github.io/plugins/#on-resolve-options */
|
||||
export interface OnResolveOptions {
|
||||
filter: RegExp
|
||||
namespace?: string
|
||||
}
|
||||
|
||||
/** Documentation: https://esbuild.github.io/plugins/#on-resolve-arguments */
|
||||
export interface OnResolveArgs {
|
||||
path: string
|
||||
importer: string
|
||||
namespace: string
|
||||
resolveDir: string
|
||||
kind: ImportKind
|
||||
pluginData: any
|
||||
with: Record<string, string>
|
||||
}
|
||||
|
||||
export type ImportKind =
|
||||
| 'entry-point'
|
||||
|
||||
// JS
|
||||
| 'import-statement'
|
||||
| 'require-call'
|
||||
| 'dynamic-import'
|
||||
| 'require-resolve'
|
||||
|
||||
// CSS
|
||||
| 'import-rule'
|
||||
| 'composes-from'
|
||||
| 'url-token'
|
||||
|
||||
/** Documentation: https://esbuild.github.io/plugins/#on-resolve-results */
|
||||
export interface OnResolveResult {
|
||||
pluginName?: string
|
||||
|
||||
errors?: PartialMessage[]
|
||||
warnings?: PartialMessage[]
|
||||
|
||||
path?: string
|
||||
external?: boolean
|
||||
sideEffects?: boolean
|
||||
namespace?: string
|
||||
suffix?: string
|
||||
pluginData?: any
|
||||
|
||||
watchFiles?: string[]
|
||||
watchDirs?: string[]
|
||||
}
|
||||
|
||||
/** Documentation: https://esbuild.github.io/plugins/#on-load-options */
|
||||
export interface OnLoadOptions {
|
||||
filter: RegExp
|
||||
namespace?: string
|
||||
}
|
||||
|
||||
/** Documentation: https://esbuild.github.io/plugins/#on-load-arguments */
|
||||
export interface OnLoadArgs {
|
||||
path: string
|
||||
namespace: string
|
||||
suffix: string
|
||||
pluginData: any
|
||||
with: Record<string, string>
|
||||
}
|
||||
|
||||
/** Documentation: https://esbuild.github.io/plugins/#on-load-results */
|
||||
export interface OnLoadResult {
|
||||
pluginName?: string
|
||||
|
||||
errors?: PartialMessage[]
|
||||
warnings?: PartialMessage[]
|
||||
|
||||
contents?: string | Uint8Array
|
||||
resolveDir?: string
|
||||
loader?: Loader
|
||||
pluginData?: any
|
||||
|
||||
watchFiles?: string[]
|
||||
watchDirs?: string[]
|
||||
}
|
||||
|
||||
export interface PartialMessage {
|
||||
id?: string
|
||||
pluginName?: string
|
||||
text?: string
|
||||
location?: Partial<Location> | null
|
||||
notes?: PartialNote[]
|
||||
detail?: any
|
||||
}
|
||||
|
||||
export interface PartialNote {
|
||||
text?: string
|
||||
location?: Partial<Location> | null
|
||||
}
|
||||
|
||||
/** Documentation: https://esbuild.github.io/api/#metafile */
|
||||
export interface Metafile {
|
||||
inputs: {
|
||||
[path: string]: {
|
||||
bytes: number
|
||||
imports: {
|
||||
path: string
|
||||
kind: ImportKind
|
||||
external?: boolean
|
||||
original?: string
|
||||
with?: Record<string, string>
|
||||
}[]
|
||||
format?: 'cjs' | 'esm'
|
||||
with?: Record<string, string>
|
||||
}
|
||||
}
|
||||
outputs: {
|
||||
[path: string]: {
|
||||
bytes: number
|
||||
inputs: {
|
||||
[path: string]: {
|
||||
bytesInOutput: number
|
||||
}
|
||||
}
|
||||
imports: {
|
||||
path: string
|
||||
kind: ImportKind | 'file-loader'
|
||||
external?: boolean
|
||||
}[]
|
||||
exports: string[]
|
||||
entryPoint?: string
|
||||
cssBundle?: string
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export interface FormatMessagesOptions {
|
||||
kind: 'error' | 'warning'
|
||||
color?: boolean
|
||||
terminalWidth?: number
|
||||
}
|
||||
|
||||
export interface AnalyzeMetafileOptions {
|
||||
color?: boolean
|
||||
verbose?: boolean
|
||||
}
|
||||
|
||||
/** Documentation: https://esbuild.github.io/api/#watch-arguments */
|
||||
export interface WatchOptions {
|
||||
delay?: number // In milliseconds
|
||||
}
|
||||
|
||||
export interface BuildContext<ProvidedOptions extends BuildOptions = BuildOptions> {
|
||||
/** Documentation: https://esbuild.github.io/api/#rebuild */
|
||||
rebuild(): Promise<BuildResult<ProvidedOptions>>
|
||||
|
||||
/** Documentation: https://esbuild.github.io/api/#watch */
|
||||
watch(options?: WatchOptions): Promise<void>
|
||||
|
||||
/** Documentation: https://esbuild.github.io/api/#serve */
|
||||
serve(options?: ServeOptions): Promise<ServeResult>
|
||||
|
||||
cancel(): Promise<void>
|
||||
dispose(): Promise<void>
|
||||
}
|
||||
|
||||
// This is a TypeScript type-level function which replaces any keys in "In"
|
||||
// that aren't in "Out" with "never". We use this to reject properties with
|
||||
// typos in object literals. See: https://stackoverflow.com/questions/49580725
|
||||
type SameShape<Out, In extends Out> = In & { [Key in Exclude<keyof In, keyof Out>]: never }
|
||||
|
||||
/**
|
||||
* This function invokes the "esbuild" command-line tool for you. It returns a
|
||||
* promise that either resolves with a "BuildResult" object or rejects with a
|
||||
* "BuildFailure" object.
|
||||
*
|
||||
* - Works in node: yes
|
||||
* - Works in browser: yes
|
||||
*
|
||||
* Documentation: https://esbuild.github.io/api/#build
|
||||
*/
|
||||
export declare function build<T extends BuildOptions>(options: SameShape<BuildOptions, T>): Promise<BuildResult<T>>
|
||||
|
||||
/**
|
||||
* This is the advanced long-running form of "build" that supports additional
|
||||
* features such as watch mode and a local development server.
|
||||
*
|
||||
* - Works in node: yes
|
||||
* - Works in browser: no
|
||||
*
|
||||
* Documentation: https://esbuild.github.io/api/#build
|
||||
*/
|
||||
export declare function context<T extends BuildOptions>(options: SameShape<BuildOptions, T>): Promise<BuildContext<T>>
|
||||
|
||||
/**
|
||||
* This function transforms a single JavaScript file. It can be used to minify
|
||||
* JavaScript, convert TypeScript/JSX to JavaScript, or convert newer JavaScript
|
||||
* to older JavaScript. It returns a promise that is either resolved with a
|
||||
* "TransformResult" object or rejected with a "TransformFailure" object.
|
||||
*
|
||||
* - Works in node: yes
|
||||
* - Works in browser: yes
|
||||
*
|
||||
* Documentation: https://esbuild.github.io/api/#transform
|
||||
*/
|
||||
export declare function transform<T extends TransformOptions>(input: string | Uint8Array, options?: SameShape<TransformOptions, T>): Promise<TransformResult<T>>
|
||||
|
||||
/**
|
||||
* Converts log messages to formatted message strings suitable for printing in
|
||||
* the terminal. This allows you to reuse the built-in behavior of esbuild's
|
||||
* log message formatter. This is a batch-oriented API for efficiency.
|
||||
*
|
||||
* - Works in node: yes
|
||||
* - Works in browser: yes
|
||||
*/
|
||||
export declare function formatMessages(messages: PartialMessage[], options: FormatMessagesOptions): Promise<string[]>
|
||||
|
||||
/**
|
||||
* Pretty-prints an analysis of the metafile JSON to a string. This is just for
|
||||
* convenience to be able to match esbuild's pretty-printing exactly. If you want
|
||||
* to customize it, you can just inspect the data in the metafile yourself.
|
||||
*
|
||||
* - Works in node: yes
|
||||
* - Works in browser: yes
|
||||
*
|
||||
* Documentation: https://esbuild.github.io/api/#analyze
|
||||
*/
|
||||
export declare function analyzeMetafile(metafile: Metafile | string, options?: AnalyzeMetafileOptions): Promise<string>
|
||||
|
||||
/**
|
||||
* A synchronous version of "build".
|
||||
*
|
||||
* - Works in node: yes
|
||||
* - Works in browser: no
|
||||
*
|
||||
* Documentation: https://esbuild.github.io/api/#build
|
||||
*/
|
||||
export declare function buildSync<T extends BuildOptions>(options: SameShape<BuildOptions, T>): BuildResult<T>
|
||||
|
||||
/**
|
||||
* A synchronous version of "transform".
|
||||
*
|
||||
* - Works in node: yes
|
||||
* - Works in browser: no
|
||||
*
|
||||
* Documentation: https://esbuild.github.io/api/#transform
|
||||
*/
|
||||
export declare function transformSync<T extends TransformOptions>(input: string | Uint8Array, options?: SameShape<TransformOptions, T>): TransformResult<T>
|
||||
|
||||
/**
|
||||
* A synchronous version of "formatMessages".
|
||||
*
|
||||
* - Works in node: yes
|
||||
* - Works in browser: no
|
||||
*/
|
||||
export declare function formatMessagesSync(messages: PartialMessage[], options: FormatMessagesOptions): string[]
|
||||
|
||||
/**
|
||||
* A synchronous version of "analyzeMetafile".
|
||||
*
|
||||
* - Works in node: yes
|
||||
* - Works in browser: no
|
||||
*
|
||||
* Documentation: https://esbuild.github.io/api/#analyze
|
||||
*/
|
||||
export declare function analyzeMetafileSync(metafile: Metafile | string, options?: AnalyzeMetafileOptions): string
|
||||
|
||||
/**
|
||||
* This configures the browser-based version of esbuild. It is necessary to
|
||||
* call this first and wait for the returned promise to be resolved before
|
||||
* making other API calls when using esbuild in the browser.
|
||||
*
|
||||
* - Works in node: yes
|
||||
* - Works in browser: yes ("options" is required)
|
||||
*
|
||||
* Documentation: https://esbuild.github.io/api/#browser
|
||||
*/
|
||||
export declare function initialize(options: InitializeOptions): Promise<void>
|
||||
|
||||
export interface InitializeOptions {
|
||||
/**
|
||||
* The URL of the "esbuild.wasm" file. This must be provided when running
|
||||
* esbuild in the browser.
|
||||
*/
|
||||
wasmURL?: string | URL
|
||||
|
||||
/**
|
||||
* The result of calling "new WebAssembly.Module(buffer)" where "buffer"
|
||||
* is a typed array or ArrayBuffer containing the binary code of the
|
||||
* "esbuild.wasm" file.
|
||||
*
|
||||
* You can use this as an alternative to "wasmURL" for environments where it's
|
||||
* not possible to download the WebAssembly module.
|
||||
*/
|
||||
wasmModule?: WebAssembly.Module
|
||||
|
||||
/**
|
||||
* By default esbuild runs the WebAssembly-based browser API in a web worker
|
||||
* to avoid blocking the UI thread. This can be disabled by setting "worker"
|
||||
* to false.
|
||||
*/
|
||||
worker?: boolean
|
||||
}
|
||||
|
||||
export let version: string
|
||||
|
||||
// Call this function to terminate esbuild's child process. The child process
|
||||
// is not terminated and re-created after each API call because it's more
|
||||
// efficient to keep it around when there are multiple API calls.
|
||||
//
|
||||
// In node this happens automatically before the parent node process exits. So
|
||||
// you only need to call this if you know you will not make any more esbuild
|
||||
// API calls and you want to clean up resources.
|
||||
//
|
||||
// Unlike node, Deno lacks the necessary APIs to clean up child processes
|
||||
// automatically. You must manually call stop() in Deno when you're done
|
||||
// using esbuild or Deno will continue running forever.
|
||||
//
|
||||
// Another reason you might want to call this is if you are using esbuild from
|
||||
// within a Deno test. Deno fails tests that create a child process without
|
||||
// killing it before the test ends, so you have to call this function (and
|
||||
// await the returned promise) in every Deno test that uses esbuild.
|
||||
export declare function stop(): Promise<void>
|
||||
|
||||
// Note: These declarations exist to avoid type errors when you omit "dom" from
|
||||
// "lib" in your "tsconfig.json" file. TypeScript confusingly declares the
|
||||
// global "WebAssembly" type in "lib.dom.d.ts" even though it has nothing to do
|
||||
// with the browser DOM and is present in many non-browser JavaScript runtimes
|
||||
// (e.g. node and deno). Declaring it here allows esbuild's API to be used in
|
||||
// these scenarios.
|
||||
//
|
||||
// There's an open issue about getting this problem corrected (although these
|
||||
// declarations will need to remain even if this is fixed for backward
|
||||
// compatibility with older TypeScript versions):
|
||||
//
|
||||
// https://github.com/microsoft/TypeScript-DOM-lib-generator/issues/826
|
||||
//
|
||||
declare global {
|
||||
namespace WebAssembly {
|
||||
interface Module {
|
||||
}
|
||||
}
|
||||
interface URL {
|
||||
}
|
||||
}
|
||||
2242
node_modules/esbuild/lib/main.js
generated
vendored
2242
node_modules/esbuild/lib/main.js
generated
vendored
File diff suppressed because it is too large
Load Diff
49
node_modules/esbuild/package.json
generated
vendored
49
node_modules/esbuild/package.json
generated
vendored
@@ -1,49 +0,0 @@
|
||||
{
|
||||
"name": "esbuild",
|
||||
"version": "0.25.12",
|
||||
"description": "An extremely fast JavaScript and CSS bundler and minifier.",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/evanw/esbuild.git"
|
||||
},
|
||||
"scripts": {
|
||||
"postinstall": "node install.js"
|
||||
},
|
||||
"main": "lib/main.js",
|
||||
"types": "lib/main.d.ts",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"bin": {
|
||||
"esbuild": "bin/esbuild"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@esbuild/aix-ppc64": "0.25.12",
|
||||
"@esbuild/android-arm": "0.25.12",
|
||||
"@esbuild/android-arm64": "0.25.12",
|
||||
"@esbuild/android-x64": "0.25.12",
|
||||
"@esbuild/darwin-arm64": "0.25.12",
|
||||
"@esbuild/darwin-x64": "0.25.12",
|
||||
"@esbuild/freebsd-arm64": "0.25.12",
|
||||
"@esbuild/freebsd-x64": "0.25.12",
|
||||
"@esbuild/linux-arm": "0.25.12",
|
||||
"@esbuild/linux-arm64": "0.25.12",
|
||||
"@esbuild/linux-ia32": "0.25.12",
|
||||
"@esbuild/linux-loong64": "0.25.12",
|
||||
"@esbuild/linux-mips64el": "0.25.12",
|
||||
"@esbuild/linux-ppc64": "0.25.12",
|
||||
"@esbuild/linux-riscv64": "0.25.12",
|
||||
"@esbuild/linux-s390x": "0.25.12",
|
||||
"@esbuild/linux-x64": "0.25.12",
|
||||
"@esbuild/netbsd-arm64": "0.25.12",
|
||||
"@esbuild/netbsd-x64": "0.25.12",
|
||||
"@esbuild/openbsd-arm64": "0.25.12",
|
||||
"@esbuild/openbsd-x64": "0.25.12",
|
||||
"@esbuild/openharmony-arm64": "0.25.12",
|
||||
"@esbuild/sunos-x64": "0.25.12",
|
||||
"@esbuild/win32-arm64": "0.25.12",
|
||||
"@esbuild/win32-ia32": "0.25.12",
|
||||
"@esbuild/win32-x64": "0.25.12"
|
||||
},
|
||||
"license": "MIT"
|
||||
}
|
||||
19
node_modules/gl-matrix/LICENSE.md
generated
vendored
19
node_modules/gl-matrix/LICENSE.md
generated
vendored
@@ -1,19 +0,0 @@
|
||||
Copyright (c) 2015-2025, Brandon Jones, Colin MacKenzie IV.
|
||||
|
||||
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.
|
||||
33
node_modules/gl-matrix/README.md
generated
vendored
33
node_modules/gl-matrix/README.md
generated
vendored
@@ -1,33 +0,0 @@
|
||||
glMatrix
|
||||
=======================
|
||||
[](https://www.npmjs.com/package/gl-matrix)
|
||||
[](https://travis-ci.org/toji/gl-matrix)
|
||||
|
||||
JavaScript has evolved into a language capable of handling realtime 3D graphics,
|
||||
via WebGL, and computationally intensive tasks such as physics simulations.
|
||||
These types of applications demand high performance vector and matrix math,
|
||||
which is something that JavaScript doesn't provide by default.
|
||||
glMatrix to the rescue!
|
||||
|
||||
glMatrix is designed to perform vector and matrix operations stupidly fast! By
|
||||
hand-tuning each function for maximum performance and encouraging efficient
|
||||
usage patterns through API conventions, glMatrix will help you get the most out
|
||||
of your browser's JavaScript engine.
|
||||
|
||||
Learn More
|
||||
----------------------
|
||||
For documentation and news, visit the [glMatrix Homepage](http://glmatrix.net/)
|
||||
|
||||
For a tutorial, see [the "Introducing glMatrix" section of _Introduction to Computer Graphics_ by David J. Eck](http://math.hws.edu/graphicsbook/c7/s1.html#webgl3d.1.2)
|
||||
|
||||
For a babel plugin to make writing the API nicer, see [babel-plugin-transform-gl-matrix](https://github.com/akira-cn/babel-plugin-transform-gl-matrix)
|
||||
|
||||
Regarding the current performance in modern web browsers, calling `glMatrix.setMatrixArrayType(Array)` to use normal arrays instead of Float32Arrays can greatly increase the performance.
|
||||
|
||||
Contributing Guidelines
|
||||
----------------------
|
||||
See [CONTRIBUTING.md](./CONTRIBUTING.md)
|
||||
|
||||
Building
|
||||
----------------------
|
||||
See [BUILDING.md](./BUILDING.md)
|
||||
76
node_modules/gl-matrix/cjs/common.js
generated
vendored
76
node_modules/gl-matrix/cjs/common.js
generated
vendored
@@ -1,76 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.RANDOM = exports.EPSILON = exports.ARRAY_TYPE = exports.ANGLE_ORDER = void 0;
|
||||
exports.equals = equals;
|
||||
exports.round = round;
|
||||
exports.setMatrixArrayType = setMatrixArrayType;
|
||||
exports.toDegree = toDegree;
|
||||
exports.toRadian = toRadian;
|
||||
/**
|
||||
* Common utilities
|
||||
* @module glMatrix
|
||||
*/
|
||||
|
||||
// Configuration Constants
|
||||
var EPSILON = exports.EPSILON = 0.000001;
|
||||
var ARRAY_TYPE = exports.ARRAY_TYPE = typeof Float32Array !== "undefined" ? Float32Array : Array;
|
||||
var RANDOM = exports.RANDOM = Math.random;
|
||||
var ANGLE_ORDER = exports.ANGLE_ORDER = "zyx";
|
||||
|
||||
/**
|
||||
* Symmetric round
|
||||
* see https://www.npmjs.com/package/round-half-up-symmetric#user-content-detailed-background
|
||||
*
|
||||
* @param {Number} a value to round
|
||||
*/
|
||||
function round(a) {
|
||||
if (a >= 0) return Math.round(a);
|
||||
return a % 0.5 === 0 ? Math.floor(a) : Math.round(a);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the type of array used when creating new vectors and matrices
|
||||
*
|
||||
* @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array
|
||||
*/
|
||||
function setMatrixArrayType(type) {
|
||||
exports.ARRAY_TYPE = ARRAY_TYPE = type;
|
||||
}
|
||||
var degree = Math.PI / 180;
|
||||
var radian = 180 / Math.PI;
|
||||
|
||||
/**
|
||||
* Convert Degree To Radian
|
||||
*
|
||||
* @param {Number} a Angle in Degrees
|
||||
*/
|
||||
function toRadian(a) {
|
||||
return a * degree;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert Radian To Degree
|
||||
*
|
||||
* @param {Number} a Angle in Radians
|
||||
*/
|
||||
function toDegree(a) {
|
||||
return a * radian;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests whether or not the arguments have approximately the same value, within an absolute
|
||||
* or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less
|
||||
* than or equal to 1.0, and a relative tolerance is used for larger values)
|
||||
*
|
||||
* @param {Number} a The first number to test.
|
||||
* @param {Number} b The second number to test.
|
||||
* @param {Number} tolerance Absolute or relative tolerance (default glMatrix.EPSILON)
|
||||
* @returns {Boolean} True if the numbers are approximately equal, false otherwise.
|
||||
*/
|
||||
function equals(a, b) {
|
||||
var tolerance = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EPSILON;
|
||||
return Math.abs(a - b) <= tolerance * Math.max(1, Math.abs(a), Math.abs(b));
|
||||
}
|
||||
28
node_modules/gl-matrix/cjs/index.js
generated
vendored
28
node_modules/gl-matrix/cjs/index.js
generated
vendored
@@ -1,28 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.vec4 = exports.vec3 = exports.vec2 = exports.quat2 = exports.quat = exports.mat4 = exports.mat3 = exports.mat2d = exports.mat2 = exports.glMatrix = void 0;
|
||||
var glMatrix = _interopRequireWildcard(require("./common.js"));
|
||||
exports.glMatrix = glMatrix;
|
||||
var mat2 = _interopRequireWildcard(require("./mat2.js"));
|
||||
exports.mat2 = mat2;
|
||||
var mat2d = _interopRequireWildcard(require("./mat2d.js"));
|
||||
exports.mat2d = mat2d;
|
||||
var mat3 = _interopRequireWildcard(require("./mat3.js"));
|
||||
exports.mat3 = mat3;
|
||||
var mat4 = _interopRequireWildcard(require("./mat4.js"));
|
||||
exports.mat4 = mat4;
|
||||
var quat = _interopRequireWildcard(require("./quat.js"));
|
||||
exports.quat = quat;
|
||||
var quat2 = _interopRequireWildcard(require("./quat2.js"));
|
||||
exports.quat2 = quat2;
|
||||
var vec2 = _interopRequireWildcard(require("./vec2.js"));
|
||||
exports.vec2 = vec2;
|
||||
var vec3 = _interopRequireWildcard(require("./vec3.js"));
|
||||
exports.vec3 = vec3;
|
||||
var vec4 = _interopRequireWildcard(require("./vec4.js"));
|
||||
exports.vec4 = vec4;
|
||||
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
||||
461
node_modules/gl-matrix/cjs/mat2.js
generated
vendored
461
node_modules/gl-matrix/cjs/mat2.js
generated
vendored
@@ -1,461 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.LDU = LDU;
|
||||
exports.add = add;
|
||||
exports.adjoint = adjoint;
|
||||
exports.clone = clone;
|
||||
exports.copy = copy;
|
||||
exports.create = create;
|
||||
exports.determinant = determinant;
|
||||
exports.equals = equals;
|
||||
exports.exactEquals = exactEquals;
|
||||
exports.frob = frob;
|
||||
exports.fromRotation = fromRotation;
|
||||
exports.fromScaling = fromScaling;
|
||||
exports.fromValues = fromValues;
|
||||
exports.identity = identity;
|
||||
exports.invert = invert;
|
||||
exports.mul = void 0;
|
||||
exports.multiply = multiply;
|
||||
exports.multiplyScalar = multiplyScalar;
|
||||
exports.multiplyScalarAndAdd = multiplyScalarAndAdd;
|
||||
exports.rotate = rotate;
|
||||
exports.scale = scale;
|
||||
exports.set = set;
|
||||
exports.str = str;
|
||||
exports.sub = void 0;
|
||||
exports.subtract = subtract;
|
||||
exports.transpose = transpose;
|
||||
var glMatrix = _interopRequireWildcard(require("./common.js"));
|
||||
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
||||
/**
|
||||
* 2x2 Matrix
|
||||
* @module mat2
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new identity mat2
|
||||
*
|
||||
* @returns {mat2} a new 2x2 matrix
|
||||
*/
|
||||
function create() {
|
||||
var out = new glMatrix.ARRAY_TYPE(4);
|
||||
if (glMatrix.ARRAY_TYPE != Float32Array) {
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
}
|
||||
out[0] = 1;
|
||||
out[3] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new mat2 initialized with values from an existing matrix
|
||||
*
|
||||
* @param {ReadonlyMat2} a matrix to clone
|
||||
* @returns {mat2} a new 2x2 matrix
|
||||
*/
|
||||
function clone(a) {
|
||||
var out = new glMatrix.ARRAY_TYPE(4);
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy the values from one mat2 to another
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the source matrix
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
function copy(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a mat2 to the identity matrix
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
function identity(out) {
|
||||
out[0] = 1;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new mat2 with the given values
|
||||
*
|
||||
* @param {Number} m00 Component in column 0, row 0 position (index 0)
|
||||
* @param {Number} m01 Component in column 0, row 1 position (index 1)
|
||||
* @param {Number} m10 Component in column 1, row 0 position (index 2)
|
||||
* @param {Number} m11 Component in column 1, row 1 position (index 3)
|
||||
* @returns {mat2} out A new 2x2 matrix
|
||||
*/
|
||||
function fromValues(m00, m01, m10, m11) {
|
||||
var out = new glMatrix.ARRAY_TYPE(4);
|
||||
out[0] = m00;
|
||||
out[1] = m01;
|
||||
out[2] = m10;
|
||||
out[3] = m11;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a mat2 to the given values
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {Number} m00 Component in column 0, row 0 position (index 0)
|
||||
* @param {Number} m01 Component in column 0, row 1 position (index 1)
|
||||
* @param {Number} m10 Component in column 1, row 0 position (index 2)
|
||||
* @param {Number} m11 Component in column 1, row 1 position (index 3)
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
function set(out, m00, m01, m10, m11) {
|
||||
out[0] = m00;
|
||||
out[1] = m01;
|
||||
out[2] = m10;
|
||||
out[3] = m11;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transpose the values of a mat2
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the source matrix
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
function transpose(out, a) {
|
||||
// If we are transposing ourselves we can skip a few steps but have to cache
|
||||
// some values
|
||||
if (out === a) {
|
||||
var a1 = a[1];
|
||||
out[1] = a[2];
|
||||
out[2] = a1;
|
||||
} else {
|
||||
out[0] = a[0];
|
||||
out[1] = a[2];
|
||||
out[2] = a[1];
|
||||
out[3] = a[3];
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Inverts a mat2
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the source matrix
|
||||
* @returns {mat2 | null} out, or null if source matrix is not invertible
|
||||
*/
|
||||
function invert(out, a) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3];
|
||||
|
||||
// Calculate the determinant
|
||||
var det = a0 * a3 - a2 * a1;
|
||||
if (!det) {
|
||||
return null;
|
||||
}
|
||||
det = 1.0 / det;
|
||||
out[0] = a3 * det;
|
||||
out[1] = -a1 * det;
|
||||
out[2] = -a2 * det;
|
||||
out[3] = a0 * det;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the adjugate of a mat2
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the source matrix
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
function adjoint(out, a) {
|
||||
// Caching this value is necessary if out == a
|
||||
var a0 = a[0];
|
||||
out[0] = a[3];
|
||||
out[1] = -a[1];
|
||||
out[2] = -a[2];
|
||||
out[3] = a0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the determinant of a mat2
|
||||
*
|
||||
* @param {ReadonlyMat2} a the source matrix
|
||||
* @returns {Number} determinant of a
|
||||
*/
|
||||
function determinant(a) {
|
||||
return a[0] * a[3] - a[2] * a[1];
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies two mat2's
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the first operand
|
||||
* @param {ReadonlyMat2} b the second operand
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
function multiply(out, a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3];
|
||||
var b0 = b[0],
|
||||
b1 = b[1],
|
||||
b2 = b[2],
|
||||
b3 = b[3];
|
||||
out[0] = a0 * b0 + a2 * b1;
|
||||
out[1] = a1 * b0 + a3 * b1;
|
||||
out[2] = a0 * b2 + a2 * b3;
|
||||
out[3] = a1 * b2 + a3 * b3;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a mat2 by the given angle
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the matrix to rotate
|
||||
* @param {Number} rad the angle to rotate the matrix by
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
function rotate(out, a, rad) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3];
|
||||
var s = Math.sin(rad);
|
||||
var c = Math.cos(rad);
|
||||
out[0] = a0 * c + a2 * s;
|
||||
out[1] = a1 * c + a3 * s;
|
||||
out[2] = a0 * -s + a2 * c;
|
||||
out[3] = a1 * -s + a3 * c;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scales the mat2 by the dimensions in the given vec2
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the matrix to rotate
|
||||
* @param {ReadonlyVec2} v the vec2 to scale the matrix by
|
||||
* @returns {mat2} out
|
||||
**/
|
||||
function scale(out, a, v) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3];
|
||||
var v0 = v[0],
|
||||
v1 = v[1];
|
||||
out[0] = a0 * v0;
|
||||
out[1] = a1 * v0;
|
||||
out[2] = a2 * v1;
|
||||
out[3] = a3 * v1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matrix from a given angle
|
||||
* This is equivalent to (but much faster than):
|
||||
*
|
||||
* mat2.identity(dest);
|
||||
* mat2.rotate(dest, dest, rad);
|
||||
*
|
||||
* @param {mat2} out mat2 receiving operation result
|
||||
* @param {Number} rad the angle to rotate the matrix by
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
function fromRotation(out, rad) {
|
||||
var s = Math.sin(rad);
|
||||
var c = Math.cos(rad);
|
||||
out[0] = c;
|
||||
out[1] = s;
|
||||
out[2] = -s;
|
||||
out[3] = c;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matrix from a vector scaling
|
||||
* This is equivalent to (but much faster than):
|
||||
*
|
||||
* mat2.identity(dest);
|
||||
* mat2.scale(dest, dest, vec);
|
||||
*
|
||||
* @param {mat2} out mat2 receiving operation result
|
||||
* @param {ReadonlyVec2} v Scaling vector
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
function fromScaling(out, v) {
|
||||
out[0] = v[0];
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = v[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of a mat2
|
||||
*
|
||||
* @param {ReadonlyMat2} a matrix to represent as a string
|
||||
* @returns {String} string representation of the matrix
|
||||
*/
|
||||
function str(a) {
|
||||
return "mat2(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Frobenius norm of a mat2
|
||||
*
|
||||
* @param {ReadonlyMat2} a the matrix to calculate Frobenius norm of
|
||||
* @returns {Number} Frobenius norm
|
||||
*/
|
||||
function frob(a) {
|
||||
return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns L, D and U matrices (Lower triangular, Diagonal and Upper triangular) by factorizing the input matrix
|
||||
* @param {ReadonlyMat2} L the lower triangular matrix
|
||||
* @param {ReadonlyMat2} D the diagonal matrix
|
||||
* @param {ReadonlyMat2} U the upper triangular matrix
|
||||
* @param {ReadonlyMat2} a the input matrix to factorize
|
||||
*/
|
||||
|
||||
function LDU(L, D, U, a) {
|
||||
L[2] = a[2] / a[0];
|
||||
U[0] = a[0];
|
||||
U[1] = a[1];
|
||||
U[3] = a[3] - L[2] * U[1];
|
||||
return [L, D, U];
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two mat2's
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the first operand
|
||||
* @param {ReadonlyMat2} b the second operand
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
function add(out, a, b) {
|
||||
out[0] = a[0] + b[0];
|
||||
out[1] = a[1] + b[1];
|
||||
out[2] = a[2] + b[2];
|
||||
out[3] = a[3] + b[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subtracts matrix b from matrix a
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the first operand
|
||||
* @param {ReadonlyMat2} b the second operand
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
function subtract(out, a, b) {
|
||||
out[0] = a[0] - b[0];
|
||||
out[1] = a[1] - b[1];
|
||||
out[2] = a[2] - b[2];
|
||||
out[3] = a[3] - b[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
|
||||
*
|
||||
* @param {ReadonlyMat2} a The first matrix.
|
||||
* @param {ReadonlyMat2} b The second matrix.
|
||||
* @returns {Boolean} True if the matrices are equal, false otherwise.
|
||||
*/
|
||||
function exactEquals(a, b) {
|
||||
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the matrices have approximately the same elements in the same position.
|
||||
*
|
||||
* @param {ReadonlyMat2} a The first matrix.
|
||||
* @param {ReadonlyMat2} b The second matrix.
|
||||
* @returns {Boolean} True if the matrices are equal, false otherwise.
|
||||
*/
|
||||
function equals(a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3];
|
||||
var b0 = b[0],
|
||||
b1 = b[1],
|
||||
b2 = b[2],
|
||||
b3 = b[3];
|
||||
return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiply each element of the matrix by a scalar.
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the matrix to scale
|
||||
* @param {Number} b amount to scale the matrix's elements by
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
function multiplyScalar(out, a, b) {
|
||||
out[0] = a[0] * b;
|
||||
out[1] = a[1] * b;
|
||||
out[2] = a[2] * b;
|
||||
out[3] = a[3] * b;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two mat2's after multiplying each element of the second operand by a scalar value.
|
||||
*
|
||||
* @param {mat2} out the receiving vector
|
||||
* @param {ReadonlyMat2} a the first operand
|
||||
* @param {ReadonlyMat2} b the second operand
|
||||
* @param {Number} scale the amount to scale b's elements by before adding
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
function multiplyScalarAndAdd(out, a, b, scale) {
|
||||
out[0] = a[0] + b[0] * scale;
|
||||
out[1] = a[1] + b[1] * scale;
|
||||
out[2] = a[2] + b[2] * scale;
|
||||
out[3] = a[3] + b[3] * scale;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for {@link mat2.multiply}
|
||||
* @function
|
||||
*/
|
||||
var mul = exports.mul = multiply;
|
||||
|
||||
/**
|
||||
* Alias for {@link mat2.subtract}
|
||||
* @function
|
||||
*/
|
||||
var sub = exports.sub = subtract;
|
||||
513
node_modules/gl-matrix/cjs/mat2d.js
generated
vendored
513
node_modules/gl-matrix/cjs/mat2d.js
generated
vendored
@@ -1,513 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.add = add;
|
||||
exports.clone = clone;
|
||||
exports.copy = copy;
|
||||
exports.create = create;
|
||||
exports.determinant = determinant;
|
||||
exports.equals = equals;
|
||||
exports.exactEquals = exactEquals;
|
||||
exports.frob = frob;
|
||||
exports.fromRotation = fromRotation;
|
||||
exports.fromScaling = fromScaling;
|
||||
exports.fromTranslation = fromTranslation;
|
||||
exports.fromValues = fromValues;
|
||||
exports.identity = identity;
|
||||
exports.invert = invert;
|
||||
exports.mul = void 0;
|
||||
exports.multiply = multiply;
|
||||
exports.multiplyScalar = multiplyScalar;
|
||||
exports.multiplyScalarAndAdd = multiplyScalarAndAdd;
|
||||
exports.rotate = rotate;
|
||||
exports.scale = scale;
|
||||
exports.set = set;
|
||||
exports.str = str;
|
||||
exports.sub = void 0;
|
||||
exports.subtract = subtract;
|
||||
exports.translate = translate;
|
||||
var glMatrix = _interopRequireWildcard(require("./common.js"));
|
||||
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
||||
/**
|
||||
* 2x3 Matrix
|
||||
* @module mat2d
|
||||
* @description
|
||||
* A mat2d contains six elements defined as:
|
||||
* <pre>
|
||||
* [a, b,
|
||||
* c, d,
|
||||
* tx, ty]
|
||||
* </pre>
|
||||
* This is a short form for the 3x3 matrix:
|
||||
* <pre>
|
||||
* [a, b, 0,
|
||||
* c, d, 0,
|
||||
* tx, ty, 1]
|
||||
* </pre>
|
||||
* The last column is ignored so the array is shorter and operations are faster.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new identity mat2d
|
||||
*
|
||||
* @returns {mat2d} a new 2x3 matrix
|
||||
*/
|
||||
function create() {
|
||||
var out = new glMatrix.ARRAY_TYPE(6);
|
||||
if (glMatrix.ARRAY_TYPE != Float32Array) {
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[4] = 0;
|
||||
out[5] = 0;
|
||||
}
|
||||
out[0] = 1;
|
||||
out[3] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new mat2d initialized with values from an existing matrix
|
||||
*
|
||||
* @param {ReadonlyMat2d} a matrix to clone
|
||||
* @returns {mat2d} a new 2x3 matrix
|
||||
*/
|
||||
function clone(a) {
|
||||
var out = new glMatrix.ARRAY_TYPE(6);
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
out[4] = a[4];
|
||||
out[5] = a[5];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy the values from one mat2d to another
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the source matrix
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
function copy(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
out[4] = a[4];
|
||||
out[5] = a[5];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a mat2d to the identity matrix
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
function identity(out) {
|
||||
out[0] = 1;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 1;
|
||||
out[4] = 0;
|
||||
out[5] = 0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new mat2d with the given values
|
||||
*
|
||||
* @param {Number} a Component A (index 0)
|
||||
* @param {Number} b Component B (index 1)
|
||||
* @param {Number} c Component C (index 2)
|
||||
* @param {Number} d Component D (index 3)
|
||||
* @param {Number} tx Component TX (index 4)
|
||||
* @param {Number} ty Component TY (index 5)
|
||||
* @returns {mat2d} A new mat2d
|
||||
*/
|
||||
function fromValues(a, b, c, d, tx, ty) {
|
||||
var out = new glMatrix.ARRAY_TYPE(6);
|
||||
out[0] = a;
|
||||
out[1] = b;
|
||||
out[2] = c;
|
||||
out[3] = d;
|
||||
out[4] = tx;
|
||||
out[5] = ty;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a mat2d to the given values
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {Number} a Component A (index 0)
|
||||
* @param {Number} b Component B (index 1)
|
||||
* @param {Number} c Component C (index 2)
|
||||
* @param {Number} d Component D (index 3)
|
||||
* @param {Number} tx Component TX (index 4)
|
||||
* @param {Number} ty Component TY (index 5)
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
function set(out, a, b, c, d, tx, ty) {
|
||||
out[0] = a;
|
||||
out[1] = b;
|
||||
out[2] = c;
|
||||
out[3] = d;
|
||||
out[4] = tx;
|
||||
out[5] = ty;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Inverts a mat2d
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the source matrix
|
||||
* @returns {mat2d | null} out, or null if source matrix is not invertible
|
||||
*/
|
||||
function invert(out, a) {
|
||||
var aa = a[0],
|
||||
ab = a[1],
|
||||
ac = a[2],
|
||||
ad = a[3];
|
||||
var atx = a[4],
|
||||
aty = a[5];
|
||||
var det = aa * ad - ab * ac;
|
||||
if (!det) {
|
||||
return null;
|
||||
}
|
||||
det = 1.0 / det;
|
||||
out[0] = ad * det;
|
||||
out[1] = -ab * det;
|
||||
out[2] = -ac * det;
|
||||
out[3] = aa * det;
|
||||
out[4] = (ac * aty - ad * atx) * det;
|
||||
out[5] = (ab * atx - aa * aty) * det;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the determinant of a mat2d
|
||||
*
|
||||
* @param {ReadonlyMat2d} a the source matrix
|
||||
* @returns {Number} determinant of a
|
||||
*/
|
||||
function determinant(a) {
|
||||
return a[0] * a[3] - a[1] * a[2];
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies two mat2d's
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the first operand
|
||||
* @param {ReadonlyMat2d} b the second operand
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
function multiply(out, a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3],
|
||||
a4 = a[4],
|
||||
a5 = a[5];
|
||||
var b0 = b[0],
|
||||
b1 = b[1],
|
||||
b2 = b[2],
|
||||
b3 = b[3],
|
||||
b4 = b[4],
|
||||
b5 = b[5];
|
||||
out[0] = a0 * b0 + a2 * b1;
|
||||
out[1] = a1 * b0 + a3 * b1;
|
||||
out[2] = a0 * b2 + a2 * b3;
|
||||
out[3] = a1 * b2 + a3 * b3;
|
||||
out[4] = a0 * b4 + a2 * b5 + a4;
|
||||
out[5] = a1 * b4 + a3 * b5 + a5;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a mat2d by the given angle
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the matrix to rotate
|
||||
* @param {Number} rad the angle to rotate the matrix by
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
function rotate(out, a, rad) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3],
|
||||
a4 = a[4],
|
||||
a5 = a[5];
|
||||
var s = Math.sin(rad);
|
||||
var c = Math.cos(rad);
|
||||
out[0] = a0 * c + a2 * s;
|
||||
out[1] = a1 * c + a3 * s;
|
||||
out[2] = a0 * -s + a2 * c;
|
||||
out[3] = a1 * -s + a3 * c;
|
||||
out[4] = a4;
|
||||
out[5] = a5;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scales the mat2d by the dimensions in the given vec2
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the matrix to translate
|
||||
* @param {ReadonlyVec2} v the vec2 to scale the matrix by
|
||||
* @returns {mat2d} out
|
||||
**/
|
||||
function scale(out, a, v) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3],
|
||||
a4 = a[4],
|
||||
a5 = a[5];
|
||||
var v0 = v[0],
|
||||
v1 = v[1];
|
||||
out[0] = a0 * v0;
|
||||
out[1] = a1 * v0;
|
||||
out[2] = a2 * v1;
|
||||
out[3] = a3 * v1;
|
||||
out[4] = a4;
|
||||
out[5] = a5;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Translates the mat2d by the dimensions in the given vec2
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the matrix to translate
|
||||
* @param {ReadonlyVec2} v the vec2 to translate the matrix by
|
||||
* @returns {mat2d} out
|
||||
**/
|
||||
function translate(out, a, v) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3],
|
||||
a4 = a[4],
|
||||
a5 = a[5];
|
||||
var v0 = v[0],
|
||||
v1 = v[1];
|
||||
out[0] = a0;
|
||||
out[1] = a1;
|
||||
out[2] = a2;
|
||||
out[3] = a3;
|
||||
out[4] = a0 * v0 + a2 * v1 + a4;
|
||||
out[5] = a1 * v0 + a3 * v1 + a5;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matrix from a given angle
|
||||
* This is equivalent to (but much faster than):
|
||||
*
|
||||
* mat2d.identity(dest);
|
||||
* mat2d.rotate(dest, dest, rad);
|
||||
*
|
||||
* @param {mat2d} out mat2d receiving operation result
|
||||
* @param {Number} rad the angle to rotate the matrix by
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
function fromRotation(out, rad) {
|
||||
var s = Math.sin(rad),
|
||||
c = Math.cos(rad);
|
||||
out[0] = c;
|
||||
out[1] = s;
|
||||
out[2] = -s;
|
||||
out[3] = c;
|
||||
out[4] = 0;
|
||||
out[5] = 0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matrix from a vector scaling
|
||||
* This is equivalent to (but much faster than):
|
||||
*
|
||||
* mat2d.identity(dest);
|
||||
* mat2d.scale(dest, dest, vec);
|
||||
*
|
||||
* @param {mat2d} out mat2d receiving operation result
|
||||
* @param {ReadonlyVec2} v Scaling vector
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
function fromScaling(out, v) {
|
||||
out[0] = v[0];
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = v[1];
|
||||
out[4] = 0;
|
||||
out[5] = 0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matrix from a vector translation
|
||||
* This is equivalent to (but much faster than):
|
||||
*
|
||||
* mat2d.identity(dest);
|
||||
* mat2d.translate(dest, dest, vec);
|
||||
*
|
||||
* @param {mat2d} out mat2d receiving operation result
|
||||
* @param {ReadonlyVec2} v Translation vector
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
function fromTranslation(out, v) {
|
||||
out[0] = 1;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 1;
|
||||
out[4] = v[0];
|
||||
out[5] = v[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of a mat2d
|
||||
*
|
||||
* @param {ReadonlyMat2d} a matrix to represent as a string
|
||||
* @returns {String} string representation of the matrix
|
||||
*/
|
||||
function str(a) {
|
||||
return "mat2d(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ", " + a[4] + ", " + a[5] + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Frobenius norm of a mat2d
|
||||
*
|
||||
* @param {ReadonlyMat2d} a the matrix to calculate Frobenius norm of
|
||||
* @returns {Number} Frobenius norm
|
||||
*/
|
||||
function frob(a) {
|
||||
return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3] + a[4] * a[4] + a[5] * a[5] + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two mat2d's
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the first operand
|
||||
* @param {ReadonlyMat2d} b the second operand
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
function add(out, a, b) {
|
||||
out[0] = a[0] + b[0];
|
||||
out[1] = a[1] + b[1];
|
||||
out[2] = a[2] + b[2];
|
||||
out[3] = a[3] + b[3];
|
||||
out[4] = a[4] + b[4];
|
||||
out[5] = a[5] + b[5];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subtracts matrix b from matrix a
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the first operand
|
||||
* @param {ReadonlyMat2d} b the second operand
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
function subtract(out, a, b) {
|
||||
out[0] = a[0] - b[0];
|
||||
out[1] = a[1] - b[1];
|
||||
out[2] = a[2] - b[2];
|
||||
out[3] = a[3] - b[3];
|
||||
out[4] = a[4] - b[4];
|
||||
out[5] = a[5] - b[5];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiply each element of the matrix by a scalar.
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the matrix to scale
|
||||
* @param {Number} b amount to scale the matrix's elements by
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
function multiplyScalar(out, a, b) {
|
||||
out[0] = a[0] * b;
|
||||
out[1] = a[1] * b;
|
||||
out[2] = a[2] * b;
|
||||
out[3] = a[3] * b;
|
||||
out[4] = a[4] * b;
|
||||
out[5] = a[5] * b;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two mat2d's after multiplying each element of the second operand by a scalar value.
|
||||
*
|
||||
* @param {mat2d} out the receiving vector
|
||||
* @param {ReadonlyMat2d} a the first operand
|
||||
* @param {ReadonlyMat2d} b the second operand
|
||||
* @param {Number} scale the amount to scale b's elements by before adding
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
function multiplyScalarAndAdd(out, a, b, scale) {
|
||||
out[0] = a[0] + b[0] * scale;
|
||||
out[1] = a[1] + b[1] * scale;
|
||||
out[2] = a[2] + b[2] * scale;
|
||||
out[3] = a[3] + b[3] * scale;
|
||||
out[4] = a[4] + b[4] * scale;
|
||||
out[5] = a[5] + b[5] * scale;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
|
||||
*
|
||||
* @param {ReadonlyMat2d} a The first matrix.
|
||||
* @param {ReadonlyMat2d} b The second matrix.
|
||||
* @returns {Boolean} True if the matrices are equal, false otherwise.
|
||||
*/
|
||||
function exactEquals(a, b) {
|
||||
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the matrices have approximately the same elements in the same position.
|
||||
*
|
||||
* @param {ReadonlyMat2d} a The first matrix.
|
||||
* @param {ReadonlyMat2d} b The second matrix.
|
||||
* @returns {Boolean} True if the matrices are equal, false otherwise.
|
||||
*/
|
||||
function equals(a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3],
|
||||
a4 = a[4],
|
||||
a5 = a[5];
|
||||
var b0 = b[0],
|
||||
b1 = b[1],
|
||||
b2 = b[2],
|
||||
b3 = b[3],
|
||||
b4 = b[4],
|
||||
b5 = b[5];
|
||||
return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5));
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for {@link mat2d.multiply}
|
||||
* @function
|
||||
*/
|
||||
var mul = exports.mul = multiply;
|
||||
|
||||
/**
|
||||
* Alias for {@link mat2d.subtract}
|
||||
* @function
|
||||
*/
|
||||
var sub = exports.sub = subtract;
|
||||
811
node_modules/gl-matrix/cjs/mat3.js
generated
vendored
811
node_modules/gl-matrix/cjs/mat3.js
generated
vendored
@@ -1,811 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.add = add;
|
||||
exports.adjoint = adjoint;
|
||||
exports.clone = clone;
|
||||
exports.copy = copy;
|
||||
exports.create = create;
|
||||
exports.determinant = determinant;
|
||||
exports.equals = equals;
|
||||
exports.exactEquals = exactEquals;
|
||||
exports.frob = frob;
|
||||
exports.fromMat2d = fromMat2d;
|
||||
exports.fromMat4 = fromMat4;
|
||||
exports.fromQuat = fromQuat;
|
||||
exports.fromRotation = fromRotation;
|
||||
exports.fromScaling = fromScaling;
|
||||
exports.fromTranslation = fromTranslation;
|
||||
exports.fromValues = fromValues;
|
||||
exports.identity = identity;
|
||||
exports.invert = invert;
|
||||
exports.mul = void 0;
|
||||
exports.multiply = multiply;
|
||||
exports.multiplyScalar = multiplyScalar;
|
||||
exports.multiplyScalarAndAdd = multiplyScalarAndAdd;
|
||||
exports.normalFromMat4 = normalFromMat4;
|
||||
exports.projection = projection;
|
||||
exports.rotate = rotate;
|
||||
exports.scale = scale;
|
||||
exports.set = set;
|
||||
exports.str = str;
|
||||
exports.sub = void 0;
|
||||
exports.subtract = subtract;
|
||||
exports.translate = translate;
|
||||
exports.transpose = transpose;
|
||||
var glMatrix = _interopRequireWildcard(require("./common.js"));
|
||||
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
||||
/**
|
||||
* 3x3 Matrix
|
||||
* @module mat3
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new identity mat3
|
||||
*
|
||||
* @returns {mat3} a new 3x3 matrix
|
||||
*/
|
||||
function create() {
|
||||
var out = new glMatrix.ARRAY_TYPE(9);
|
||||
if (glMatrix.ARRAY_TYPE != Float32Array) {
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 0;
|
||||
out[5] = 0;
|
||||
out[6] = 0;
|
||||
out[7] = 0;
|
||||
}
|
||||
out[0] = 1;
|
||||
out[4] = 1;
|
||||
out[8] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies the upper-left 3x3 values into the given mat3.
|
||||
*
|
||||
* @param {mat3} out the receiving 3x3 matrix
|
||||
* @param {ReadonlyMat4} a the source 4x4 matrix
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function fromMat4(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[4];
|
||||
out[4] = a[5];
|
||||
out[5] = a[6];
|
||||
out[6] = a[8];
|
||||
out[7] = a[9];
|
||||
out[8] = a[10];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new mat3 initialized with values from an existing matrix
|
||||
*
|
||||
* @param {ReadonlyMat3} a matrix to clone
|
||||
* @returns {mat3} a new 3x3 matrix
|
||||
*/
|
||||
function clone(a) {
|
||||
var out = new glMatrix.ARRAY_TYPE(9);
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
out[4] = a[4];
|
||||
out[5] = a[5];
|
||||
out[6] = a[6];
|
||||
out[7] = a[7];
|
||||
out[8] = a[8];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy the values from one mat3 to another
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the source matrix
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function copy(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
out[4] = a[4];
|
||||
out[5] = a[5];
|
||||
out[6] = a[6];
|
||||
out[7] = a[7];
|
||||
out[8] = a[8];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new mat3 with the given values
|
||||
*
|
||||
* @param {Number} m00 Component in column 0, row 0 position (index 0)
|
||||
* @param {Number} m01 Component in column 0, row 1 position (index 1)
|
||||
* @param {Number} m02 Component in column 0, row 2 position (index 2)
|
||||
* @param {Number} m10 Component in column 1, row 0 position (index 3)
|
||||
* @param {Number} m11 Component in column 1, row 1 position (index 4)
|
||||
* @param {Number} m12 Component in column 1, row 2 position (index 5)
|
||||
* @param {Number} m20 Component in column 2, row 0 position (index 6)
|
||||
* @param {Number} m21 Component in column 2, row 1 position (index 7)
|
||||
* @param {Number} m22 Component in column 2, row 2 position (index 8)
|
||||
* @returns {mat3} A new mat3
|
||||
*/
|
||||
function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {
|
||||
var out = new glMatrix.ARRAY_TYPE(9);
|
||||
out[0] = m00;
|
||||
out[1] = m01;
|
||||
out[2] = m02;
|
||||
out[3] = m10;
|
||||
out[4] = m11;
|
||||
out[5] = m12;
|
||||
out[6] = m20;
|
||||
out[7] = m21;
|
||||
out[8] = m22;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a mat3 to the given values
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {Number} m00 Component in column 0, row 0 position (index 0)
|
||||
* @param {Number} m01 Component in column 0, row 1 position (index 1)
|
||||
* @param {Number} m02 Component in column 0, row 2 position (index 2)
|
||||
* @param {Number} m10 Component in column 1, row 0 position (index 3)
|
||||
* @param {Number} m11 Component in column 1, row 1 position (index 4)
|
||||
* @param {Number} m12 Component in column 1, row 2 position (index 5)
|
||||
* @param {Number} m20 Component in column 2, row 0 position (index 6)
|
||||
* @param {Number} m21 Component in column 2, row 1 position (index 7)
|
||||
* @param {Number} m22 Component in column 2, row 2 position (index 8)
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {
|
||||
out[0] = m00;
|
||||
out[1] = m01;
|
||||
out[2] = m02;
|
||||
out[3] = m10;
|
||||
out[4] = m11;
|
||||
out[5] = m12;
|
||||
out[6] = m20;
|
||||
out[7] = m21;
|
||||
out[8] = m22;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a mat3 to the identity matrix
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function identity(out) {
|
||||
out[0] = 1;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 0;
|
||||
out[4] = 1;
|
||||
out[5] = 0;
|
||||
out[6] = 0;
|
||||
out[7] = 0;
|
||||
out[8] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transpose the values of a mat3
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the source matrix
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function transpose(out, a) {
|
||||
// If we are transposing ourselves we can skip a few steps but have to cache some values
|
||||
if (out === a) {
|
||||
var a01 = a[1],
|
||||
a02 = a[2],
|
||||
a12 = a[5];
|
||||
out[1] = a[3];
|
||||
out[2] = a[6];
|
||||
out[3] = a01;
|
||||
out[5] = a[7];
|
||||
out[6] = a02;
|
||||
out[7] = a12;
|
||||
} else {
|
||||
out[0] = a[0];
|
||||
out[1] = a[3];
|
||||
out[2] = a[6];
|
||||
out[3] = a[1];
|
||||
out[4] = a[4];
|
||||
out[5] = a[7];
|
||||
out[6] = a[2];
|
||||
out[7] = a[5];
|
||||
out[8] = a[8];
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Inverts a mat3
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the source matrix
|
||||
* @returns {mat3 | null} out, or null if source matrix is not invertible
|
||||
*/
|
||||
function invert(out, a) {
|
||||
var a00 = a[0],
|
||||
a01 = a[1],
|
||||
a02 = a[2];
|
||||
var a10 = a[3],
|
||||
a11 = a[4],
|
||||
a12 = a[5];
|
||||
var a20 = a[6],
|
||||
a21 = a[7],
|
||||
a22 = a[8];
|
||||
var b01 = a22 * a11 - a12 * a21;
|
||||
var b11 = -a22 * a10 + a12 * a20;
|
||||
var b21 = a21 * a10 - a11 * a20;
|
||||
|
||||
// Calculate the determinant
|
||||
var det = a00 * b01 + a01 * b11 + a02 * b21;
|
||||
if (!det) {
|
||||
return null;
|
||||
}
|
||||
det = 1.0 / det;
|
||||
out[0] = b01 * det;
|
||||
out[1] = (-a22 * a01 + a02 * a21) * det;
|
||||
out[2] = (a12 * a01 - a02 * a11) * det;
|
||||
out[3] = b11 * det;
|
||||
out[4] = (a22 * a00 - a02 * a20) * det;
|
||||
out[5] = (-a12 * a00 + a02 * a10) * det;
|
||||
out[6] = b21 * det;
|
||||
out[7] = (-a21 * a00 + a01 * a20) * det;
|
||||
out[8] = (a11 * a00 - a01 * a10) * det;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the adjugate of a mat3
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the source matrix
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function adjoint(out, a) {
|
||||
var a00 = a[0],
|
||||
a01 = a[1],
|
||||
a02 = a[2];
|
||||
var a10 = a[3],
|
||||
a11 = a[4],
|
||||
a12 = a[5];
|
||||
var a20 = a[6],
|
||||
a21 = a[7],
|
||||
a22 = a[8];
|
||||
out[0] = a11 * a22 - a12 * a21;
|
||||
out[1] = a02 * a21 - a01 * a22;
|
||||
out[2] = a01 * a12 - a02 * a11;
|
||||
out[3] = a12 * a20 - a10 * a22;
|
||||
out[4] = a00 * a22 - a02 * a20;
|
||||
out[5] = a02 * a10 - a00 * a12;
|
||||
out[6] = a10 * a21 - a11 * a20;
|
||||
out[7] = a01 * a20 - a00 * a21;
|
||||
out[8] = a00 * a11 - a01 * a10;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the determinant of a mat3
|
||||
*
|
||||
* @param {ReadonlyMat3} a the source matrix
|
||||
* @returns {Number} determinant of a
|
||||
*/
|
||||
function determinant(a) {
|
||||
var a00 = a[0],
|
||||
a01 = a[1],
|
||||
a02 = a[2];
|
||||
var a10 = a[3],
|
||||
a11 = a[4],
|
||||
a12 = a[5];
|
||||
var a20 = a[6],
|
||||
a21 = a[7],
|
||||
a22 = a[8];
|
||||
return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies two mat3's
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the first operand
|
||||
* @param {ReadonlyMat3} b the second operand
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function multiply(out, a, b) {
|
||||
var a00 = a[0],
|
||||
a01 = a[1],
|
||||
a02 = a[2];
|
||||
var a10 = a[3],
|
||||
a11 = a[4],
|
||||
a12 = a[5];
|
||||
var a20 = a[6],
|
||||
a21 = a[7],
|
||||
a22 = a[8];
|
||||
var b00 = b[0],
|
||||
b01 = b[1],
|
||||
b02 = b[2];
|
||||
var b10 = b[3],
|
||||
b11 = b[4],
|
||||
b12 = b[5];
|
||||
var b20 = b[6],
|
||||
b21 = b[7],
|
||||
b22 = b[8];
|
||||
out[0] = b00 * a00 + b01 * a10 + b02 * a20;
|
||||
out[1] = b00 * a01 + b01 * a11 + b02 * a21;
|
||||
out[2] = b00 * a02 + b01 * a12 + b02 * a22;
|
||||
out[3] = b10 * a00 + b11 * a10 + b12 * a20;
|
||||
out[4] = b10 * a01 + b11 * a11 + b12 * a21;
|
||||
out[5] = b10 * a02 + b11 * a12 + b12 * a22;
|
||||
out[6] = b20 * a00 + b21 * a10 + b22 * a20;
|
||||
out[7] = b20 * a01 + b21 * a11 + b22 * a21;
|
||||
out[8] = b20 * a02 + b21 * a12 + b22 * a22;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate a mat3 by the given vector
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the matrix to translate
|
||||
* @param {ReadonlyVec2} v vector to translate by
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function translate(out, a, v) {
|
||||
var a00 = a[0],
|
||||
a01 = a[1],
|
||||
a02 = a[2],
|
||||
a10 = a[3],
|
||||
a11 = a[4],
|
||||
a12 = a[5],
|
||||
a20 = a[6],
|
||||
a21 = a[7],
|
||||
a22 = a[8],
|
||||
x = v[0],
|
||||
y = v[1];
|
||||
out[0] = a00;
|
||||
out[1] = a01;
|
||||
out[2] = a02;
|
||||
out[3] = a10;
|
||||
out[4] = a11;
|
||||
out[5] = a12;
|
||||
out[6] = x * a00 + y * a10 + a20;
|
||||
out[7] = x * a01 + y * a11 + a21;
|
||||
out[8] = x * a02 + y * a12 + a22;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a mat3 by the given angle
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the matrix to rotate
|
||||
* @param {Number} rad the angle to rotate the matrix by
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function rotate(out, a, rad) {
|
||||
var a00 = a[0],
|
||||
a01 = a[1],
|
||||
a02 = a[2],
|
||||
a10 = a[3],
|
||||
a11 = a[4],
|
||||
a12 = a[5],
|
||||
a20 = a[6],
|
||||
a21 = a[7],
|
||||
a22 = a[8],
|
||||
s = Math.sin(rad),
|
||||
c = Math.cos(rad);
|
||||
out[0] = c * a00 + s * a10;
|
||||
out[1] = c * a01 + s * a11;
|
||||
out[2] = c * a02 + s * a12;
|
||||
out[3] = c * a10 - s * a00;
|
||||
out[4] = c * a11 - s * a01;
|
||||
out[5] = c * a12 - s * a02;
|
||||
out[6] = a20;
|
||||
out[7] = a21;
|
||||
out[8] = a22;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scales the mat3 by the dimensions in the given vec2
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the matrix to scale
|
||||
* @param {ReadonlyVec2} v the vec2 to scale the matrix by
|
||||
* @returns {mat3} out
|
||||
**/
|
||||
function scale(out, a, v) {
|
||||
var x = v[0],
|
||||
y = v[1];
|
||||
out[0] = x * a[0];
|
||||
out[1] = x * a[1];
|
||||
out[2] = x * a[2];
|
||||
out[3] = y * a[3];
|
||||
out[4] = y * a[4];
|
||||
out[5] = y * a[5];
|
||||
out[6] = a[6];
|
||||
out[7] = a[7];
|
||||
out[8] = a[8];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matrix from a vector translation
|
||||
* This is equivalent to (but much faster than):
|
||||
*
|
||||
* mat3.identity(dest);
|
||||
* mat3.translate(dest, dest, vec);
|
||||
*
|
||||
* @param {mat3} out mat3 receiving operation result
|
||||
* @param {ReadonlyVec2} v Translation vector
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function fromTranslation(out, v) {
|
||||
out[0] = 1;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 0;
|
||||
out[4] = 1;
|
||||
out[5] = 0;
|
||||
out[6] = v[0];
|
||||
out[7] = v[1];
|
||||
out[8] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matrix from a given angle
|
||||
* This is equivalent to (but much faster than):
|
||||
*
|
||||
* mat3.identity(dest);
|
||||
* mat3.rotate(dest, dest, rad);
|
||||
*
|
||||
* @param {mat3} out mat3 receiving operation result
|
||||
* @param {Number} rad the angle to rotate the matrix by
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function fromRotation(out, rad) {
|
||||
var s = Math.sin(rad),
|
||||
c = Math.cos(rad);
|
||||
out[0] = c;
|
||||
out[1] = s;
|
||||
out[2] = 0;
|
||||
out[3] = -s;
|
||||
out[4] = c;
|
||||
out[5] = 0;
|
||||
out[6] = 0;
|
||||
out[7] = 0;
|
||||
out[8] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matrix from a vector scaling
|
||||
* This is equivalent to (but much faster than):
|
||||
*
|
||||
* mat3.identity(dest);
|
||||
* mat3.scale(dest, dest, vec);
|
||||
*
|
||||
* @param {mat3} out mat3 receiving operation result
|
||||
* @param {ReadonlyVec2} v Scaling vector
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function fromScaling(out, v) {
|
||||
out[0] = v[0];
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 0;
|
||||
out[4] = v[1];
|
||||
out[5] = 0;
|
||||
out[6] = 0;
|
||||
out[7] = 0;
|
||||
out[8] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies the values from a mat2d into a mat3
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the matrix to copy
|
||||
* @returns {mat3} out
|
||||
**/
|
||||
function fromMat2d(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = 0;
|
||||
out[3] = a[2];
|
||||
out[4] = a[3];
|
||||
out[5] = 0;
|
||||
out[6] = a[4];
|
||||
out[7] = a[5];
|
||||
out[8] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates a 3x3 matrix from the given quaternion
|
||||
*
|
||||
* @param {mat3} out mat3 receiving operation result
|
||||
* @param {ReadonlyQuat} q Quaternion to create matrix from
|
||||
*
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function fromQuat(out, q) {
|
||||
var x = q[0],
|
||||
y = q[1],
|
||||
z = q[2],
|
||||
w = q[3];
|
||||
var x2 = x + x;
|
||||
var y2 = y + y;
|
||||
var z2 = z + z;
|
||||
var xx = x * x2;
|
||||
var yx = y * x2;
|
||||
var yy = y * y2;
|
||||
var zx = z * x2;
|
||||
var zy = z * y2;
|
||||
var zz = z * z2;
|
||||
var wx = w * x2;
|
||||
var wy = w * y2;
|
||||
var wz = w * z2;
|
||||
out[0] = 1 - yy - zz;
|
||||
out[3] = yx - wz;
|
||||
out[6] = zx + wy;
|
||||
out[1] = yx + wz;
|
||||
out[4] = 1 - xx - zz;
|
||||
out[7] = zy - wx;
|
||||
out[2] = zx - wy;
|
||||
out[5] = zy + wx;
|
||||
out[8] = 1 - xx - yy;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix
|
||||
*
|
||||
* @param {mat3} out mat3 receiving operation result
|
||||
* @param {ReadonlyMat4} a Mat4 to derive the normal matrix from
|
||||
*
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function normalFromMat4(out, a) {
|
||||
var a00 = a[0],
|
||||
a01 = a[1],
|
||||
a02 = a[2],
|
||||
a03 = a[3];
|
||||
var a10 = a[4],
|
||||
a11 = a[5],
|
||||
a12 = a[6],
|
||||
a13 = a[7];
|
||||
var a20 = a[8],
|
||||
a21 = a[9],
|
||||
a22 = a[10],
|
||||
a23 = a[11];
|
||||
var a30 = a[12],
|
||||
a31 = a[13],
|
||||
a32 = a[14],
|
||||
a33 = a[15];
|
||||
var b00 = a00 * a11 - a01 * a10;
|
||||
var b01 = a00 * a12 - a02 * a10;
|
||||
var b02 = a00 * a13 - a03 * a10;
|
||||
var b03 = a01 * a12 - a02 * a11;
|
||||
var b04 = a01 * a13 - a03 * a11;
|
||||
var b05 = a02 * a13 - a03 * a12;
|
||||
var b06 = a20 * a31 - a21 * a30;
|
||||
var b07 = a20 * a32 - a22 * a30;
|
||||
var b08 = a20 * a33 - a23 * a30;
|
||||
var b09 = a21 * a32 - a22 * a31;
|
||||
var b10 = a21 * a33 - a23 * a31;
|
||||
var b11 = a22 * a33 - a23 * a32;
|
||||
|
||||
// Calculate the determinant
|
||||
var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
|
||||
if (!det) {
|
||||
return null;
|
||||
}
|
||||
det = 1.0 / det;
|
||||
out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;
|
||||
out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;
|
||||
out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;
|
||||
out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;
|
||||
out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;
|
||||
out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;
|
||||
out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;
|
||||
out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;
|
||||
out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a 2D projection matrix with the given bounds
|
||||
*
|
||||
* @param {mat3} out mat3 frustum matrix will be written into
|
||||
* @param {number} width Width of your gl context
|
||||
* @param {number} height Height of gl context
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function projection(out, width, height) {
|
||||
out[0] = 2 / width;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 0;
|
||||
out[4] = -2 / height;
|
||||
out[5] = 0;
|
||||
out[6] = -1;
|
||||
out[7] = 1;
|
||||
out[8] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of a mat3
|
||||
*
|
||||
* @param {ReadonlyMat3} a matrix to represent as a string
|
||||
* @returns {String} string representation of the matrix
|
||||
*/
|
||||
function str(a) {
|
||||
return "mat3(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ", " + a[4] + ", " + a[5] + ", " + a[6] + ", " + a[7] + ", " + a[8] + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Frobenius norm of a mat3
|
||||
*
|
||||
* @param {ReadonlyMat3} a the matrix to calculate Frobenius norm of
|
||||
* @returns {Number} Frobenius norm
|
||||
*/
|
||||
function frob(a) {
|
||||
return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3] + a[4] * a[4] + a[5] * a[5] + a[6] * a[6] + a[7] * a[7] + a[8] * a[8]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two mat3's
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the first operand
|
||||
* @param {ReadonlyMat3} b the second operand
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function add(out, a, b) {
|
||||
out[0] = a[0] + b[0];
|
||||
out[1] = a[1] + b[1];
|
||||
out[2] = a[2] + b[2];
|
||||
out[3] = a[3] + b[3];
|
||||
out[4] = a[4] + b[4];
|
||||
out[5] = a[5] + b[5];
|
||||
out[6] = a[6] + b[6];
|
||||
out[7] = a[7] + b[7];
|
||||
out[8] = a[8] + b[8];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subtracts matrix b from matrix a
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the first operand
|
||||
* @param {ReadonlyMat3} b the second operand
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function subtract(out, a, b) {
|
||||
out[0] = a[0] - b[0];
|
||||
out[1] = a[1] - b[1];
|
||||
out[2] = a[2] - b[2];
|
||||
out[3] = a[3] - b[3];
|
||||
out[4] = a[4] - b[4];
|
||||
out[5] = a[5] - b[5];
|
||||
out[6] = a[6] - b[6];
|
||||
out[7] = a[7] - b[7];
|
||||
out[8] = a[8] - b[8];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiply each element of the matrix by a scalar.
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the matrix to scale
|
||||
* @param {Number} b amount to scale the matrix's elements by
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function multiplyScalar(out, a, b) {
|
||||
out[0] = a[0] * b;
|
||||
out[1] = a[1] * b;
|
||||
out[2] = a[2] * b;
|
||||
out[3] = a[3] * b;
|
||||
out[4] = a[4] * b;
|
||||
out[5] = a[5] * b;
|
||||
out[6] = a[6] * b;
|
||||
out[7] = a[7] * b;
|
||||
out[8] = a[8] * b;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two mat3's after multiplying each element of the second operand by a scalar value.
|
||||
*
|
||||
* @param {mat3} out the receiving vector
|
||||
* @param {ReadonlyMat3} a the first operand
|
||||
* @param {ReadonlyMat3} b the second operand
|
||||
* @param {Number} scale the amount to scale b's elements by before adding
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
function multiplyScalarAndAdd(out, a, b, scale) {
|
||||
out[0] = a[0] + b[0] * scale;
|
||||
out[1] = a[1] + b[1] * scale;
|
||||
out[2] = a[2] + b[2] * scale;
|
||||
out[3] = a[3] + b[3] * scale;
|
||||
out[4] = a[4] + b[4] * scale;
|
||||
out[5] = a[5] + b[5] * scale;
|
||||
out[6] = a[6] + b[6] * scale;
|
||||
out[7] = a[7] + b[7] * scale;
|
||||
out[8] = a[8] + b[8] * scale;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
|
||||
*
|
||||
* @param {ReadonlyMat3} a The first matrix.
|
||||
* @param {ReadonlyMat3} b The second matrix.
|
||||
* @returns {Boolean} True if the matrices are equal, false otherwise.
|
||||
*/
|
||||
function exactEquals(a, b) {
|
||||
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the matrices have approximately the same elements in the same position.
|
||||
*
|
||||
* @param {ReadonlyMat3} a The first matrix.
|
||||
* @param {ReadonlyMat3} b The second matrix.
|
||||
* @returns {Boolean} True if the matrices are equal, false otherwise.
|
||||
*/
|
||||
function equals(a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3],
|
||||
a4 = a[4],
|
||||
a5 = a[5],
|
||||
a6 = a[6],
|
||||
a7 = a[7],
|
||||
a8 = a[8];
|
||||
var b0 = b[0],
|
||||
b1 = b[1],
|
||||
b2 = b[2],
|
||||
b3 = b[3],
|
||||
b4 = b[4],
|
||||
b5 = b[5],
|
||||
b6 = b[6],
|
||||
b7 = b[7],
|
||||
b8 = b[8];
|
||||
return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8));
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for {@link mat3.multiply}
|
||||
* @function
|
||||
*/
|
||||
var mul = exports.mul = multiply;
|
||||
|
||||
/**
|
||||
* Alias for {@link mat3.subtract}
|
||||
* @function
|
||||
*/
|
||||
var sub = exports.sub = subtract;
|
||||
2019
node_modules/gl-matrix/cjs/mat4.js
generated
vendored
2019
node_modules/gl-matrix/cjs/mat4.js
generated
vendored
File diff suppressed because it is too large
Load Diff
782
node_modules/gl-matrix/cjs/quat.js
generated
vendored
782
node_modules/gl-matrix/cjs/quat.js
generated
vendored
@@ -1,782 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.add = void 0;
|
||||
exports.calculateW = calculateW;
|
||||
exports.clone = void 0;
|
||||
exports.conjugate = conjugate;
|
||||
exports.copy = void 0;
|
||||
exports.create = create;
|
||||
exports.dot = void 0;
|
||||
exports.equals = equals;
|
||||
exports.exactEquals = void 0;
|
||||
exports.exp = exp;
|
||||
exports.fromEuler = fromEuler;
|
||||
exports.fromMat3 = fromMat3;
|
||||
exports.fromValues = void 0;
|
||||
exports.getAngle = getAngle;
|
||||
exports.getAxisAngle = getAxisAngle;
|
||||
exports.identity = identity;
|
||||
exports.invert = invert;
|
||||
exports.lerp = exports.length = exports.len = void 0;
|
||||
exports.ln = ln;
|
||||
exports.mul = void 0;
|
||||
exports.multiply = multiply;
|
||||
exports.normalize = void 0;
|
||||
exports.pow = pow;
|
||||
exports.random = random;
|
||||
exports.rotateX = rotateX;
|
||||
exports.rotateY = rotateY;
|
||||
exports.rotateZ = rotateZ;
|
||||
exports.setAxes = exports.set = exports.scale = exports.rotationTo = void 0;
|
||||
exports.setAxisAngle = setAxisAngle;
|
||||
exports.slerp = slerp;
|
||||
exports.squaredLength = exports.sqrLen = exports.sqlerp = void 0;
|
||||
exports.str = str;
|
||||
var glMatrix = _interopRequireWildcard(require("./common.js"));
|
||||
var mat3 = _interopRequireWildcard(require("./mat3.js"));
|
||||
var vec3 = _interopRequireWildcard(require("./vec3.js"));
|
||||
var vec4 = _interopRequireWildcard(require("./vec4.js"));
|
||||
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
||||
/**
|
||||
* Quaternion in the format XYZW
|
||||
* @module quat
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new identity quat
|
||||
*
|
||||
* @returns {quat} a new quaternion
|
||||
*/
|
||||
function create() {
|
||||
var out = new glMatrix.ARRAY_TYPE(4);
|
||||
if (glMatrix.ARRAY_TYPE != Float32Array) {
|
||||
out[0] = 0;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
}
|
||||
out[3] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a quat to the identity quaternion
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @returns {quat} out
|
||||
*/
|
||||
function identity(out) {
|
||||
out[0] = 0;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a quat from the given angle and rotation axis,
|
||||
* then returns it.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyVec3} axis the axis around which to rotate
|
||||
* @param {Number} rad the angle in radians
|
||||
* @returns {quat} out
|
||||
**/
|
||||
function setAxisAngle(out, axis, rad) {
|
||||
rad = rad * 0.5;
|
||||
var s = Math.sin(rad);
|
||||
out[0] = s * axis[0];
|
||||
out[1] = s * axis[1];
|
||||
out[2] = s * axis[2];
|
||||
out[3] = Math.cos(rad);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the rotation axis and angle for a given
|
||||
* quaternion. If a quaternion is created with
|
||||
* setAxisAngle, this method will return the same
|
||||
* values as providied in the original parameter list
|
||||
* OR functionally equivalent values.
|
||||
* Example: The quaternion formed by axis [0, 0, 1] and
|
||||
* angle -90 is the same as the quaternion formed by
|
||||
* [0, 0, 1] and 270. This method favors the latter.
|
||||
* @param {vec3} out_axis Vector receiving the axis of rotation
|
||||
* @param {ReadonlyQuat} q Quaternion to be decomposed
|
||||
* @return {Number} Angle, in radians, of the rotation
|
||||
*/
|
||||
function getAxisAngle(out_axis, q) {
|
||||
var rad = Math.acos(q[3]) * 2.0;
|
||||
var s = Math.sin(rad / 2.0);
|
||||
if (s > glMatrix.EPSILON) {
|
||||
out_axis[0] = q[0] / s;
|
||||
out_axis[1] = q[1] / s;
|
||||
out_axis[2] = q[2] / s;
|
||||
} else {
|
||||
// If s is zero, return any axis (no rotation - axis does not matter)
|
||||
out_axis[0] = 1;
|
||||
out_axis[1] = 0;
|
||||
out_axis[2] = 0;
|
||||
}
|
||||
return rad;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the angular distance between two unit quaternions
|
||||
*
|
||||
* @param {ReadonlyQuat} a Origin unit quaternion
|
||||
* @param {ReadonlyQuat} b Destination unit quaternion
|
||||
* @return {Number} Angle, in radians, between the two quaternions
|
||||
*/
|
||||
function getAngle(a, b) {
|
||||
var dotproduct = dot(a, b);
|
||||
return Math.acos(2 * dotproduct * dotproduct - 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies two quat's
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a the first operand
|
||||
* @param {ReadonlyQuat} b the second operand
|
||||
* @returns {quat} out
|
||||
*/
|
||||
function multiply(out, a, b) {
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
az = a[2],
|
||||
aw = a[3];
|
||||
var bx = b[0],
|
||||
by = b[1],
|
||||
bz = b[2],
|
||||
bw = b[3];
|
||||
out[0] = ax * bw + aw * bx + ay * bz - az * by;
|
||||
out[1] = ay * bw + aw * by + az * bx - ax * bz;
|
||||
out[2] = az * bw + aw * bz + ax * by - ay * bx;
|
||||
out[3] = aw * bw - ax * bx - ay * by - az * bz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a quaternion by the given angle about the X axis
|
||||
*
|
||||
* @param {quat} out quat receiving operation result
|
||||
* @param {ReadonlyQuat} a quat to rotate
|
||||
* @param {number} rad angle (in radians) to rotate
|
||||
* @returns {quat} out
|
||||
*/
|
||||
function rotateX(out, a, rad) {
|
||||
rad *= 0.5;
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
az = a[2],
|
||||
aw = a[3];
|
||||
var bx = Math.sin(rad),
|
||||
bw = Math.cos(rad);
|
||||
out[0] = ax * bw + aw * bx;
|
||||
out[1] = ay * bw + az * bx;
|
||||
out[2] = az * bw - ay * bx;
|
||||
out[3] = aw * bw - ax * bx;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a quaternion by the given angle about the Y axis
|
||||
*
|
||||
* @param {quat} out quat receiving operation result
|
||||
* @param {ReadonlyQuat} a quat to rotate
|
||||
* @param {number} rad angle (in radians) to rotate
|
||||
* @returns {quat} out
|
||||
*/
|
||||
function rotateY(out, a, rad) {
|
||||
rad *= 0.5;
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
az = a[2],
|
||||
aw = a[3];
|
||||
var by = Math.sin(rad),
|
||||
bw = Math.cos(rad);
|
||||
out[0] = ax * bw - az * by;
|
||||
out[1] = ay * bw + aw * by;
|
||||
out[2] = az * bw + ax * by;
|
||||
out[3] = aw * bw - ay * by;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a quaternion by the given angle about the Z axis
|
||||
*
|
||||
* @param {quat} out quat receiving operation result
|
||||
* @param {ReadonlyQuat} a quat to rotate
|
||||
* @param {number} rad angle (in radians) to rotate
|
||||
* @returns {quat} out
|
||||
*/
|
||||
function rotateZ(out, a, rad) {
|
||||
rad *= 0.5;
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
az = a[2],
|
||||
aw = a[3];
|
||||
var bz = Math.sin(rad),
|
||||
bw = Math.cos(rad);
|
||||
out[0] = ax * bw + ay * bz;
|
||||
out[1] = ay * bw - ax * bz;
|
||||
out[2] = az * bw + aw * bz;
|
||||
out[3] = aw * bw - az * bz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the W component of a quat from the X, Y, and Z components.
|
||||
* Assumes that quaternion is 1 unit in length.
|
||||
* Any existing W component will be ignored.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a quat to calculate W component of
|
||||
* @returns {quat} out
|
||||
*/
|
||||
function calculateW(out, a) {
|
||||
var x = a[0],
|
||||
y = a[1],
|
||||
z = a[2];
|
||||
out[0] = x;
|
||||
out[1] = y;
|
||||
out[2] = z;
|
||||
out[3] = Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the exponential of a unit quaternion.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a quat to calculate the exponential of
|
||||
* @returns {quat} out
|
||||
*/
|
||||
function exp(out, a) {
|
||||
var x = a[0],
|
||||
y = a[1],
|
||||
z = a[2],
|
||||
w = a[3];
|
||||
var r = Math.sqrt(x * x + y * y + z * z);
|
||||
var et = Math.exp(w);
|
||||
var s = r > 0 ? et * Math.sin(r) / r : 0;
|
||||
out[0] = x * s;
|
||||
out[1] = y * s;
|
||||
out[2] = z * s;
|
||||
out[3] = et * Math.cos(r);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the natural logarithm of a unit quaternion.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a quat to calculate the exponential of
|
||||
* @returns {quat} out
|
||||
*/
|
||||
function ln(out, a) {
|
||||
var x = a[0],
|
||||
y = a[1],
|
||||
z = a[2],
|
||||
w = a[3];
|
||||
var r = Math.sqrt(x * x + y * y + z * z);
|
||||
var t = r > 0 ? Math.atan2(r, w) / r : 0;
|
||||
out[0] = x * t;
|
||||
out[1] = y * t;
|
||||
out[2] = z * t;
|
||||
out[3] = 0.5 * Math.log(x * x + y * y + z * z + w * w);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the scalar power of a unit quaternion.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a quat to calculate the exponential of
|
||||
* @param {Number} b amount to scale the quaternion by
|
||||
* @returns {quat} out
|
||||
*/
|
||||
function pow(out, a, b) {
|
||||
ln(out, a);
|
||||
scale(out, out, b);
|
||||
exp(out, out);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a spherical linear interpolation between two quat
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a the first operand
|
||||
* @param {ReadonlyQuat} b the second operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {quat} out
|
||||
*/
|
||||
function slerp(out, a, b, t) {
|
||||
// benchmarks:
|
||||
// http://jsperf.com/quaternion-slerp-implementations
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
az = a[2],
|
||||
aw = a[3];
|
||||
var bx = b[0],
|
||||
by = b[1],
|
||||
bz = b[2],
|
||||
bw = b[3];
|
||||
var omega, cosom, sinom, scale0, scale1;
|
||||
|
||||
// calc cosine
|
||||
cosom = ax * bx + ay * by + az * bz + aw * bw;
|
||||
// adjust signs (if necessary)
|
||||
if (cosom < 0.0) {
|
||||
cosom = -cosom;
|
||||
bx = -bx;
|
||||
by = -by;
|
||||
bz = -bz;
|
||||
bw = -bw;
|
||||
}
|
||||
// calculate coefficients
|
||||
if (1.0 - cosom > glMatrix.EPSILON) {
|
||||
// standard case (slerp)
|
||||
omega = Math.acos(cosom);
|
||||
sinom = Math.sin(omega);
|
||||
scale0 = Math.sin((1.0 - t) * omega) / sinom;
|
||||
scale1 = Math.sin(t * omega) / sinom;
|
||||
} else {
|
||||
// "from" and "to" quaternions are very close
|
||||
// ... so we can do a linear interpolation
|
||||
scale0 = 1.0 - t;
|
||||
scale1 = t;
|
||||
}
|
||||
// calculate final values
|
||||
out[0] = scale0 * ax + scale1 * bx;
|
||||
out[1] = scale0 * ay + scale1 * by;
|
||||
out[2] = scale0 * az + scale1 * bz;
|
||||
out[3] = scale0 * aw + scale1 * bw;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a random unit quaternion
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @returns {quat} out
|
||||
*/
|
||||
function random(out) {
|
||||
// Implementation of http://planning.cs.uiuc.edu/node198.html
|
||||
// TODO: Calling random 3 times is probably not the fastest solution
|
||||
var u1 = glMatrix.RANDOM();
|
||||
var u2 = glMatrix.RANDOM();
|
||||
var u3 = glMatrix.RANDOM();
|
||||
var sqrt1MinusU1 = Math.sqrt(1 - u1);
|
||||
var sqrtU1 = Math.sqrt(u1);
|
||||
out[0] = sqrt1MinusU1 * Math.sin(2.0 * Math.PI * u2);
|
||||
out[1] = sqrt1MinusU1 * Math.cos(2.0 * Math.PI * u2);
|
||||
out[2] = sqrtU1 * Math.sin(2.0 * Math.PI * u3);
|
||||
out[3] = sqrtU1 * Math.cos(2.0 * Math.PI * u3);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the inverse of a quat
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a quat to calculate inverse of
|
||||
* @returns {quat} out
|
||||
*/
|
||||
function invert(out, a) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3];
|
||||
var dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;
|
||||
var invDot = dot ? 1.0 / dot : 0;
|
||||
|
||||
// TODO: Would be faster to return [0,0,0,0] immediately if dot == 0
|
||||
|
||||
out[0] = -a0 * invDot;
|
||||
out[1] = -a1 * invDot;
|
||||
out[2] = -a2 * invDot;
|
||||
out[3] = a3 * invDot;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the conjugate of a quat
|
||||
* If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a quat to calculate conjugate of
|
||||
* @returns {quat} out
|
||||
*/
|
||||
function conjugate(out, a) {
|
||||
out[0] = -a[0];
|
||||
out[1] = -a[1];
|
||||
out[2] = -a[2];
|
||||
out[3] = a[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a quaternion from the given 3x3 rotation matrix.
|
||||
*
|
||||
* NOTE: The resultant quaternion is not normalized, so you should be sure
|
||||
* to renormalize the quaternion yourself where necessary.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyMat3} m rotation matrix
|
||||
* @returns {quat} out
|
||||
* @function
|
||||
*/
|
||||
function fromMat3(out, m) {
|
||||
// Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes
|
||||
// article "Quaternion Calculus and Fast Animation".
|
||||
var fTrace = m[0] + m[4] + m[8];
|
||||
var fRoot;
|
||||
if (fTrace > 0.0) {
|
||||
// |w| > 1/2, may as well choose w > 1/2
|
||||
fRoot = Math.sqrt(fTrace + 1.0); // 2w
|
||||
out[3] = 0.5 * fRoot;
|
||||
fRoot = 0.5 / fRoot; // 1/(4w)
|
||||
out[0] = (m[5] - m[7]) * fRoot;
|
||||
out[1] = (m[6] - m[2]) * fRoot;
|
||||
out[2] = (m[1] - m[3]) * fRoot;
|
||||
} else {
|
||||
// |w| <= 1/2
|
||||
var i = 0;
|
||||
if (m[4] > m[0]) i = 1;
|
||||
if (m[8] > m[i * 3 + i]) i = 2;
|
||||
var j = (i + 1) % 3;
|
||||
var k = (i + 2) % 3;
|
||||
fRoot = Math.sqrt(m[i * 3 + i] - m[j * 3 + j] - m[k * 3 + k] + 1.0);
|
||||
out[i] = 0.5 * fRoot;
|
||||
fRoot = 0.5 / fRoot;
|
||||
out[3] = (m[j * 3 + k] - m[k * 3 + j]) * fRoot;
|
||||
out[j] = (m[j * 3 + i] + m[i * 3 + j]) * fRoot;
|
||||
out[k] = (m[k * 3 + i] + m[i * 3 + k]) * fRoot;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a quaternion from the given euler angle x, y, z using the provided intrinsic order for the conversion.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {Number} x Angle to rotate around X axis in degrees.
|
||||
* @param {Number} y Angle to rotate around Y axis in degrees.
|
||||
* @param {Number} z Angle to rotate around Z axis in degrees.
|
||||
* @param {'xyz'|'xzy'|'yxz'|'yzx'|'zxy'|'zyx'} order Intrinsic order for conversion, default is zyx.
|
||||
* @returns {quat} out
|
||||
* @function
|
||||
*/
|
||||
function fromEuler(out, x, y, z) {
|
||||
var order = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : glMatrix.ANGLE_ORDER;
|
||||
var halfToRad = Math.PI / 360;
|
||||
x *= halfToRad;
|
||||
z *= halfToRad;
|
||||
y *= halfToRad;
|
||||
var sx = Math.sin(x);
|
||||
var cx = Math.cos(x);
|
||||
var sy = Math.sin(y);
|
||||
var cy = Math.cos(y);
|
||||
var sz = Math.sin(z);
|
||||
var cz = Math.cos(z);
|
||||
switch (order) {
|
||||
case "xyz":
|
||||
out[0] = sx * cy * cz + cx * sy * sz;
|
||||
out[1] = cx * sy * cz - sx * cy * sz;
|
||||
out[2] = cx * cy * sz + sx * sy * cz;
|
||||
out[3] = cx * cy * cz - sx * sy * sz;
|
||||
break;
|
||||
case "xzy":
|
||||
out[0] = sx * cy * cz - cx * sy * sz;
|
||||
out[1] = cx * sy * cz - sx * cy * sz;
|
||||
out[2] = cx * cy * sz + sx * sy * cz;
|
||||
out[3] = cx * cy * cz + sx * sy * sz;
|
||||
break;
|
||||
case "yxz":
|
||||
out[0] = sx * cy * cz + cx * sy * sz;
|
||||
out[1] = cx * sy * cz - sx * cy * sz;
|
||||
out[2] = cx * cy * sz - sx * sy * cz;
|
||||
out[3] = cx * cy * cz + sx * sy * sz;
|
||||
break;
|
||||
case "yzx":
|
||||
out[0] = sx * cy * cz + cx * sy * sz;
|
||||
out[1] = cx * sy * cz + sx * cy * sz;
|
||||
out[2] = cx * cy * sz - sx * sy * cz;
|
||||
out[3] = cx * cy * cz - sx * sy * sz;
|
||||
break;
|
||||
case "zxy":
|
||||
out[0] = sx * cy * cz - cx * sy * sz;
|
||||
out[1] = cx * sy * cz + sx * cy * sz;
|
||||
out[2] = cx * cy * sz + sx * sy * cz;
|
||||
out[3] = cx * cy * cz - sx * sy * sz;
|
||||
break;
|
||||
case "zyx":
|
||||
out[0] = sx * cy * cz - cx * sy * sz;
|
||||
out[1] = cx * sy * cz + sx * cy * sz;
|
||||
out[2] = cx * cy * sz - sx * sy * cz;
|
||||
out[3] = cx * cy * cz + sx * sy * sz;
|
||||
break;
|
||||
default:
|
||||
throw new Error('Unknown angle order ' + order);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of a quaternion
|
||||
*
|
||||
* @param {ReadonlyQuat} a vector to represent as a string
|
||||
* @returns {String} string representation of the vector
|
||||
*/
|
||||
function str(a) {
|
||||
return "quat(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new quat initialized with values from an existing quaternion
|
||||
*
|
||||
* @param {ReadonlyQuat} a quaternion to clone
|
||||
* @returns {quat} a new quaternion
|
||||
* @function
|
||||
*/
|
||||
var clone = exports.clone = vec4.clone;
|
||||
|
||||
/**
|
||||
* Creates a new quat initialized with the given values
|
||||
*
|
||||
* @param {Number} x X component
|
||||
* @param {Number} y Y component
|
||||
* @param {Number} z Z component
|
||||
* @param {Number} w W component
|
||||
* @returns {quat} a new quaternion
|
||||
* @function
|
||||
*/
|
||||
var fromValues = exports.fromValues = vec4.fromValues;
|
||||
|
||||
/**
|
||||
* Copy the values from one quat to another
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a the source quaternion
|
||||
* @returns {quat} out
|
||||
* @function
|
||||
*/
|
||||
var copy = exports.copy = vec4.copy;
|
||||
|
||||
/**
|
||||
* Set the components of a quat to the given values
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {Number} x X component
|
||||
* @param {Number} y Y component
|
||||
* @param {Number} z Z component
|
||||
* @param {Number} w W component
|
||||
* @returns {quat} out
|
||||
* @function
|
||||
*/
|
||||
var set = exports.set = vec4.set;
|
||||
|
||||
/**
|
||||
* Adds two quat's
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a the first operand
|
||||
* @param {ReadonlyQuat} b the second operand
|
||||
* @returns {quat} out
|
||||
* @function
|
||||
*/
|
||||
var add = exports.add = vec4.add;
|
||||
|
||||
/**
|
||||
* Alias for {@link quat.multiply}
|
||||
* @function
|
||||
*/
|
||||
var mul = exports.mul = multiply;
|
||||
|
||||
/**
|
||||
* Scales a quat by a scalar number
|
||||
*
|
||||
* @param {quat} out the receiving vector
|
||||
* @param {ReadonlyQuat} a the vector to scale
|
||||
* @param {Number} b amount to scale the vector by
|
||||
* @returns {quat} out
|
||||
* @function
|
||||
*/
|
||||
var scale = exports.scale = vec4.scale;
|
||||
|
||||
/**
|
||||
* Calculates the dot product of two quat's
|
||||
*
|
||||
* @param {ReadonlyQuat} a the first operand
|
||||
* @param {ReadonlyQuat} b the second operand
|
||||
* @returns {Number} dot product of a and b
|
||||
* @function
|
||||
*/
|
||||
var dot = exports.dot = vec4.dot;
|
||||
|
||||
/**
|
||||
* Performs a linear interpolation between two quat's
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a the first operand
|
||||
* @param {ReadonlyQuat} b the second operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {quat} out
|
||||
* @function
|
||||
*/
|
||||
var lerp = exports.lerp = vec4.lerp;
|
||||
|
||||
/**
|
||||
* Calculates the length of a quat
|
||||
*
|
||||
* @param {ReadonlyQuat} a vector to calculate length of
|
||||
* @returns {Number} length of a
|
||||
*/
|
||||
var length = exports.length = vec4.length;
|
||||
|
||||
/**
|
||||
* Alias for {@link quat.length}
|
||||
* @function
|
||||
*/
|
||||
var len = exports.len = length;
|
||||
|
||||
/**
|
||||
* Calculates the squared length of a quat
|
||||
*
|
||||
* @param {ReadonlyQuat} a vector to calculate squared length of
|
||||
* @returns {Number} squared length of a
|
||||
* @function
|
||||
*/
|
||||
var squaredLength = exports.squaredLength = vec4.squaredLength;
|
||||
|
||||
/**
|
||||
* Alias for {@link quat.squaredLength}
|
||||
* @function
|
||||
*/
|
||||
var sqrLen = exports.sqrLen = squaredLength;
|
||||
|
||||
/**
|
||||
* Normalize a quat
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a quaternion to normalize
|
||||
* @returns {quat} out
|
||||
* @function
|
||||
*/
|
||||
var normalize = exports.normalize = vec4.normalize;
|
||||
|
||||
/**
|
||||
* Returns whether or not the quaternions have exactly the same elements in the same position (when compared with ===)
|
||||
*
|
||||
* @param {ReadonlyQuat} a The first quaternion.
|
||||
* @param {ReadonlyQuat} b The second quaternion.
|
||||
* @returns {Boolean} True if the vectors are equal, false otherwise.
|
||||
*/
|
||||
var exactEquals = exports.exactEquals = vec4.exactEquals;
|
||||
|
||||
/**
|
||||
* Returns whether or not the quaternions point approximately to the same direction.
|
||||
*
|
||||
* Both quaternions are assumed to be unit length.
|
||||
*
|
||||
* @param {ReadonlyQuat} a The first unit quaternion.
|
||||
* @param {ReadonlyQuat} b The second unit quaternion.
|
||||
* @returns {Boolean} True if the quaternions are equal, false otherwise.
|
||||
*/
|
||||
function equals(a, b) {
|
||||
return Math.abs(vec4.dot(a, b)) >= 1 - glMatrix.EPSILON;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a quaternion to represent the shortest rotation from one
|
||||
* vector to another.
|
||||
*
|
||||
* Both vectors are assumed to be unit length.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion.
|
||||
* @param {ReadonlyVec3} a the initial vector
|
||||
* @param {ReadonlyVec3} b the destination vector
|
||||
* @returns {quat} out
|
||||
*/
|
||||
var rotationTo = exports.rotationTo = function () {
|
||||
var tmpvec3 = vec3.create();
|
||||
var xUnitVec3 = vec3.fromValues(1, 0, 0);
|
||||
var yUnitVec3 = vec3.fromValues(0, 1, 0);
|
||||
return function (out, a, b) {
|
||||
var dot = vec3.dot(a, b);
|
||||
if (dot < -0.999999) {
|
||||
vec3.cross(tmpvec3, xUnitVec3, a);
|
||||
if (vec3.len(tmpvec3) < 0.000001) vec3.cross(tmpvec3, yUnitVec3, a);
|
||||
vec3.normalize(tmpvec3, tmpvec3);
|
||||
setAxisAngle(out, tmpvec3, Math.PI);
|
||||
return out;
|
||||
} else if (dot > 0.999999) {
|
||||
out[0] = 0;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 1;
|
||||
return out;
|
||||
} else {
|
||||
vec3.cross(tmpvec3, a, b);
|
||||
out[0] = tmpvec3[0];
|
||||
out[1] = tmpvec3[1];
|
||||
out[2] = tmpvec3[2];
|
||||
out[3] = 1 + dot;
|
||||
return normalize(out, out);
|
||||
}
|
||||
};
|
||||
}();
|
||||
|
||||
/**
|
||||
* Performs a spherical linear interpolation with two control points
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a the first operand
|
||||
* @param {ReadonlyQuat} b the second operand
|
||||
* @param {ReadonlyQuat} c the third operand
|
||||
* @param {ReadonlyQuat} d the fourth operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {quat} out
|
||||
*/
|
||||
var sqlerp = exports.sqlerp = function () {
|
||||
var temp1 = create();
|
||||
var temp2 = create();
|
||||
return function (out, a, b, c, d, t) {
|
||||
slerp(temp1, a, d, t);
|
||||
slerp(temp2, b, c, t);
|
||||
slerp(out, temp1, temp2, 2 * t * (1 - t));
|
||||
return out;
|
||||
};
|
||||
}();
|
||||
|
||||
/**
|
||||
* Sets the specified quaternion with values corresponding to the given
|
||||
* axes. Each axis is a vec3 and is expected to be unit length and
|
||||
* perpendicular to all other specified axes.
|
||||
*
|
||||
* @param {ReadonlyVec3} view the vector representing the viewing direction
|
||||
* @param {ReadonlyVec3} right the vector representing the local "right" direction
|
||||
* @param {ReadonlyVec3} up the vector representing the local "up" direction
|
||||
* @returns {quat} out
|
||||
*/
|
||||
var setAxes = exports.setAxes = function () {
|
||||
var matr = mat3.create();
|
||||
return function (out, view, right, up) {
|
||||
matr[0] = right[0];
|
||||
matr[3] = right[1];
|
||||
matr[6] = right[2];
|
||||
matr[1] = up[0];
|
||||
matr[4] = up[1];
|
||||
matr[7] = up[2];
|
||||
matr[2] = -view[0];
|
||||
matr[5] = -view[1];
|
||||
matr[8] = -view[2];
|
||||
return normalize(out, fromMat3(out, matr));
|
||||
};
|
||||
}();
|
||||
872
node_modules/gl-matrix/cjs/quat2.js
generated
vendored
872
node_modules/gl-matrix/cjs/quat2.js
generated
vendored
@@ -1,872 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.add = add;
|
||||
exports.clone = clone;
|
||||
exports.conjugate = conjugate;
|
||||
exports.copy = copy;
|
||||
exports.create = create;
|
||||
exports.dot = void 0;
|
||||
exports.equals = equals;
|
||||
exports.exactEquals = exactEquals;
|
||||
exports.fromMat4 = fromMat4;
|
||||
exports.fromRotation = fromRotation;
|
||||
exports.fromRotationTranslation = fromRotationTranslation;
|
||||
exports.fromRotationTranslationValues = fromRotationTranslationValues;
|
||||
exports.fromTranslation = fromTranslation;
|
||||
exports.fromValues = fromValues;
|
||||
exports.getDual = getDual;
|
||||
exports.getReal = void 0;
|
||||
exports.getTranslation = getTranslation;
|
||||
exports.identity = identity;
|
||||
exports.invert = invert;
|
||||
exports.length = exports.len = void 0;
|
||||
exports.lerp = lerp;
|
||||
exports.mul = void 0;
|
||||
exports.multiply = multiply;
|
||||
exports.normalize = normalize;
|
||||
exports.rotateAroundAxis = rotateAroundAxis;
|
||||
exports.rotateByQuatAppend = rotateByQuatAppend;
|
||||
exports.rotateByQuatPrepend = rotateByQuatPrepend;
|
||||
exports.rotateX = rotateX;
|
||||
exports.rotateY = rotateY;
|
||||
exports.rotateZ = rotateZ;
|
||||
exports.scale = scale;
|
||||
exports.set = set;
|
||||
exports.setDual = setDual;
|
||||
exports.squaredLength = exports.sqrLen = exports.setReal = void 0;
|
||||
exports.str = str;
|
||||
exports.translate = translate;
|
||||
var glMatrix = _interopRequireWildcard(require("./common.js"));
|
||||
var quat = _interopRequireWildcard(require("./quat.js"));
|
||||
var mat4 = _interopRequireWildcard(require("./mat4.js"));
|
||||
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
||||
/**
|
||||
* Dual Quaternion<br>
|
||||
* Format: [real, dual]<br>
|
||||
* Quaternion format: XYZW<br>
|
||||
* Make sure to have normalized dual quaternions, otherwise the functions may not work as intended.<br>
|
||||
* @module quat2
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new identity dual quat
|
||||
*
|
||||
* @returns {quat2} a new dual quaternion [real -> rotation, dual -> translation]
|
||||
*/
|
||||
function create() {
|
||||
var dq = new glMatrix.ARRAY_TYPE(8);
|
||||
if (glMatrix.ARRAY_TYPE != Float32Array) {
|
||||
dq[0] = 0;
|
||||
dq[1] = 0;
|
||||
dq[2] = 0;
|
||||
dq[4] = 0;
|
||||
dq[5] = 0;
|
||||
dq[6] = 0;
|
||||
dq[7] = 0;
|
||||
}
|
||||
dq[3] = 1;
|
||||
return dq;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new quat initialized with values from an existing quaternion
|
||||
*
|
||||
* @param {ReadonlyQuat2} a dual quaternion to clone
|
||||
* @returns {quat2} new dual quaternion
|
||||
* @function
|
||||
*/
|
||||
function clone(a) {
|
||||
var dq = new glMatrix.ARRAY_TYPE(8);
|
||||
dq[0] = a[0];
|
||||
dq[1] = a[1];
|
||||
dq[2] = a[2];
|
||||
dq[3] = a[3];
|
||||
dq[4] = a[4];
|
||||
dq[5] = a[5];
|
||||
dq[6] = a[6];
|
||||
dq[7] = a[7];
|
||||
return dq;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new dual quat initialized with the given values
|
||||
*
|
||||
* @param {Number} x1 X component
|
||||
* @param {Number} y1 Y component
|
||||
* @param {Number} z1 Z component
|
||||
* @param {Number} w1 W component
|
||||
* @param {Number} x2 X component
|
||||
* @param {Number} y2 Y component
|
||||
* @param {Number} z2 Z component
|
||||
* @param {Number} w2 W component
|
||||
* @returns {quat2} new dual quaternion
|
||||
* @function
|
||||
*/
|
||||
function fromValues(x1, y1, z1, w1, x2, y2, z2, w2) {
|
||||
var dq = new glMatrix.ARRAY_TYPE(8);
|
||||
dq[0] = x1;
|
||||
dq[1] = y1;
|
||||
dq[2] = z1;
|
||||
dq[3] = w1;
|
||||
dq[4] = x2;
|
||||
dq[5] = y2;
|
||||
dq[6] = z2;
|
||||
dq[7] = w2;
|
||||
return dq;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new dual quat from the given values (quat and translation)
|
||||
*
|
||||
* @param {Number} x1 X component
|
||||
* @param {Number} y1 Y component
|
||||
* @param {Number} z1 Z component
|
||||
* @param {Number} w1 W component
|
||||
* @param {Number} x2 X component (translation)
|
||||
* @param {Number} y2 Y component (translation)
|
||||
* @param {Number} z2 Z component (translation)
|
||||
* @returns {quat2} new dual quaternion
|
||||
* @function
|
||||
*/
|
||||
function fromRotationTranslationValues(x1, y1, z1, w1, x2, y2, z2) {
|
||||
var dq = new glMatrix.ARRAY_TYPE(8);
|
||||
dq[0] = x1;
|
||||
dq[1] = y1;
|
||||
dq[2] = z1;
|
||||
dq[3] = w1;
|
||||
var ax = x2 * 0.5,
|
||||
ay = y2 * 0.5,
|
||||
az = z2 * 0.5;
|
||||
dq[4] = ax * w1 + ay * z1 - az * y1;
|
||||
dq[5] = ay * w1 + az * x1 - ax * z1;
|
||||
dq[6] = az * w1 + ax * y1 - ay * x1;
|
||||
dq[7] = -ax * x1 - ay * y1 - az * z1;
|
||||
return dq;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a dual quat from a quaternion and a translation
|
||||
*
|
||||
* @param {ReadonlyQuat2} dual quaternion receiving operation result
|
||||
* @param {ReadonlyQuat} q a normalized quaternion
|
||||
* @param {ReadonlyVec3} t translation vector
|
||||
* @returns {quat2} dual quaternion receiving operation result
|
||||
* @function
|
||||
*/
|
||||
function fromRotationTranslation(out, q, t) {
|
||||
var ax = t[0] * 0.5,
|
||||
ay = t[1] * 0.5,
|
||||
az = t[2] * 0.5,
|
||||
bx = q[0],
|
||||
by = q[1],
|
||||
bz = q[2],
|
||||
bw = q[3];
|
||||
out[0] = bx;
|
||||
out[1] = by;
|
||||
out[2] = bz;
|
||||
out[3] = bw;
|
||||
out[4] = ax * bw + ay * bz - az * by;
|
||||
out[5] = ay * bw + az * bx - ax * bz;
|
||||
out[6] = az * bw + ax * by - ay * bx;
|
||||
out[7] = -ax * bx - ay * by - az * bz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a dual quat from a translation
|
||||
*
|
||||
* @param {ReadonlyQuat2} dual quaternion receiving operation result
|
||||
* @param {ReadonlyVec3} t translation vector
|
||||
* @returns {quat2} dual quaternion receiving operation result
|
||||
* @function
|
||||
*/
|
||||
function fromTranslation(out, t) {
|
||||
out[0] = 0;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 1;
|
||||
out[4] = t[0] * 0.5;
|
||||
out[5] = t[1] * 0.5;
|
||||
out[6] = t[2] * 0.5;
|
||||
out[7] = 0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a dual quat from a quaternion
|
||||
*
|
||||
* @param {ReadonlyQuat2} dual quaternion receiving operation result
|
||||
* @param {ReadonlyQuat} q the quaternion
|
||||
* @returns {quat2} dual quaternion receiving operation result
|
||||
* @function
|
||||
*/
|
||||
function fromRotation(out, q) {
|
||||
out[0] = q[0];
|
||||
out[1] = q[1];
|
||||
out[2] = q[2];
|
||||
out[3] = q[3];
|
||||
out[4] = 0;
|
||||
out[5] = 0;
|
||||
out[6] = 0;
|
||||
out[7] = 0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new dual quat from a matrix (4x4)
|
||||
*
|
||||
* @param {quat2} out the dual quaternion
|
||||
* @param {ReadonlyMat4} a the matrix
|
||||
* @returns {quat2} dual quat receiving operation result
|
||||
* @function
|
||||
*/
|
||||
function fromMat4(out, a) {
|
||||
//TODO Optimize this
|
||||
var outer = quat.create();
|
||||
mat4.getRotation(outer, a);
|
||||
var t = new glMatrix.ARRAY_TYPE(3);
|
||||
mat4.getTranslation(t, a);
|
||||
fromRotationTranslation(out, outer, t);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy the values from one dual quat to another
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the source dual quaternion
|
||||
* @returns {quat2} out
|
||||
* @function
|
||||
*/
|
||||
function copy(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
out[4] = a[4];
|
||||
out[5] = a[5];
|
||||
out[6] = a[6];
|
||||
out[7] = a[7];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a dual quat to the identity dual quaternion
|
||||
*
|
||||
* @param {quat2} out the receiving quaternion
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
function identity(out) {
|
||||
out[0] = 0;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 1;
|
||||
out[4] = 0;
|
||||
out[5] = 0;
|
||||
out[6] = 0;
|
||||
out[7] = 0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a dual quat to the given values
|
||||
*
|
||||
* @param {quat2} out the receiving quaternion
|
||||
* @param {Number} x1 X component
|
||||
* @param {Number} y1 Y component
|
||||
* @param {Number} z1 Z component
|
||||
* @param {Number} w1 W component
|
||||
* @param {Number} x2 X component
|
||||
* @param {Number} y2 Y component
|
||||
* @param {Number} z2 Z component
|
||||
* @param {Number} w2 W component
|
||||
* @returns {quat2} out
|
||||
* @function
|
||||
*/
|
||||
function set(out, x1, y1, z1, w1, x2, y2, z2, w2) {
|
||||
out[0] = x1;
|
||||
out[1] = y1;
|
||||
out[2] = z1;
|
||||
out[3] = w1;
|
||||
out[4] = x2;
|
||||
out[5] = y2;
|
||||
out[6] = z2;
|
||||
out[7] = w2;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the real part of a dual quat
|
||||
* @param {quat} out real part
|
||||
* @param {ReadonlyQuat2} a Dual Quaternion
|
||||
* @return {quat} real part
|
||||
*/
|
||||
var getReal = exports.getReal = quat.copy;
|
||||
|
||||
/**
|
||||
* Gets the dual part of a dual quat
|
||||
* @param {quat} out dual part
|
||||
* @param {ReadonlyQuat2} a Dual Quaternion
|
||||
* @return {quat} dual part
|
||||
*/
|
||||
function getDual(out, a) {
|
||||
out[0] = a[4];
|
||||
out[1] = a[5];
|
||||
out[2] = a[6];
|
||||
out[3] = a[7];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the real component of a dual quat to the given quaternion
|
||||
*
|
||||
* @param {quat2} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} q a quaternion representing the real part
|
||||
* @returns {quat2} out
|
||||
* @function
|
||||
*/
|
||||
var setReal = exports.setReal = quat.copy;
|
||||
|
||||
/**
|
||||
* Set the dual component of a dual quat to the given quaternion
|
||||
*
|
||||
* @param {quat2} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} q a quaternion representing the dual part
|
||||
* @returns {quat2} out
|
||||
* @function
|
||||
*/
|
||||
function setDual(out, q) {
|
||||
out[4] = q[0];
|
||||
out[5] = q[1];
|
||||
out[6] = q[2];
|
||||
out[7] = q[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the translation of a normalized dual quat
|
||||
* @param {vec3} out translation
|
||||
* @param {ReadonlyQuat2} a Dual Quaternion to be decomposed
|
||||
* @return {vec3} translation
|
||||
*/
|
||||
function getTranslation(out, a) {
|
||||
var ax = a[4],
|
||||
ay = a[5],
|
||||
az = a[6],
|
||||
aw = a[7],
|
||||
bx = -a[0],
|
||||
by = -a[1],
|
||||
bz = -a[2],
|
||||
bw = a[3];
|
||||
out[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;
|
||||
out[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;
|
||||
out[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Translates a dual quat by the given vector
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the dual quaternion to translate
|
||||
* @param {ReadonlyVec3} v vector to translate by
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
function translate(out, a, v) {
|
||||
var ax1 = a[0],
|
||||
ay1 = a[1],
|
||||
az1 = a[2],
|
||||
aw1 = a[3],
|
||||
bx1 = v[0] * 0.5,
|
||||
by1 = v[1] * 0.5,
|
||||
bz1 = v[2] * 0.5,
|
||||
ax2 = a[4],
|
||||
ay2 = a[5],
|
||||
az2 = a[6],
|
||||
aw2 = a[7];
|
||||
out[0] = ax1;
|
||||
out[1] = ay1;
|
||||
out[2] = az1;
|
||||
out[3] = aw1;
|
||||
out[4] = aw1 * bx1 + ay1 * bz1 - az1 * by1 + ax2;
|
||||
out[5] = aw1 * by1 + az1 * bx1 - ax1 * bz1 + ay2;
|
||||
out[6] = aw1 * bz1 + ax1 * by1 - ay1 * bx1 + az2;
|
||||
out[7] = -ax1 * bx1 - ay1 * by1 - az1 * bz1 + aw2;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a dual quat around the X axis
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the dual quaternion to rotate
|
||||
* @param {number} rad how far should the rotation be
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
function rotateX(out, a, rad) {
|
||||
var bx = -a[0],
|
||||
by = -a[1],
|
||||
bz = -a[2],
|
||||
bw = a[3],
|
||||
ax = a[4],
|
||||
ay = a[5],
|
||||
az = a[6],
|
||||
aw = a[7],
|
||||
ax1 = ax * bw + aw * bx + ay * bz - az * by,
|
||||
ay1 = ay * bw + aw * by + az * bx - ax * bz,
|
||||
az1 = az * bw + aw * bz + ax * by - ay * bx,
|
||||
aw1 = aw * bw - ax * bx - ay * by - az * bz;
|
||||
quat.rotateX(out, a, rad);
|
||||
bx = out[0];
|
||||
by = out[1];
|
||||
bz = out[2];
|
||||
bw = out[3];
|
||||
out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;
|
||||
out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;
|
||||
out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;
|
||||
out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a dual quat around the Y axis
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the dual quaternion to rotate
|
||||
* @param {number} rad how far should the rotation be
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
function rotateY(out, a, rad) {
|
||||
var bx = -a[0],
|
||||
by = -a[1],
|
||||
bz = -a[2],
|
||||
bw = a[3],
|
||||
ax = a[4],
|
||||
ay = a[5],
|
||||
az = a[6],
|
||||
aw = a[7],
|
||||
ax1 = ax * bw + aw * bx + ay * bz - az * by,
|
||||
ay1 = ay * bw + aw * by + az * bx - ax * bz,
|
||||
az1 = az * bw + aw * bz + ax * by - ay * bx,
|
||||
aw1 = aw * bw - ax * bx - ay * by - az * bz;
|
||||
quat.rotateY(out, a, rad);
|
||||
bx = out[0];
|
||||
by = out[1];
|
||||
bz = out[2];
|
||||
bw = out[3];
|
||||
out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;
|
||||
out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;
|
||||
out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;
|
||||
out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a dual quat around the Z axis
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the dual quaternion to rotate
|
||||
* @param {number} rad how far should the rotation be
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
function rotateZ(out, a, rad) {
|
||||
var bx = -a[0],
|
||||
by = -a[1],
|
||||
bz = -a[2],
|
||||
bw = a[3],
|
||||
ax = a[4],
|
||||
ay = a[5],
|
||||
az = a[6],
|
||||
aw = a[7],
|
||||
ax1 = ax * bw + aw * bx + ay * bz - az * by,
|
||||
ay1 = ay * bw + aw * by + az * bx - ax * bz,
|
||||
az1 = az * bw + aw * bz + ax * by - ay * bx,
|
||||
aw1 = aw * bw - ax * bx - ay * by - az * bz;
|
||||
quat.rotateZ(out, a, rad);
|
||||
bx = out[0];
|
||||
by = out[1];
|
||||
bz = out[2];
|
||||
bw = out[3];
|
||||
out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;
|
||||
out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;
|
||||
out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;
|
||||
out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a dual quat by a given quaternion (a * q)
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the dual quaternion to rotate
|
||||
* @param {ReadonlyQuat} q quaternion to rotate by
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
function rotateByQuatAppend(out, a, q) {
|
||||
var qx = q[0],
|
||||
qy = q[1],
|
||||
qz = q[2],
|
||||
qw = q[3],
|
||||
ax = a[0],
|
||||
ay = a[1],
|
||||
az = a[2],
|
||||
aw = a[3];
|
||||
out[0] = ax * qw + aw * qx + ay * qz - az * qy;
|
||||
out[1] = ay * qw + aw * qy + az * qx - ax * qz;
|
||||
out[2] = az * qw + aw * qz + ax * qy - ay * qx;
|
||||
out[3] = aw * qw - ax * qx - ay * qy - az * qz;
|
||||
ax = a[4];
|
||||
ay = a[5];
|
||||
az = a[6];
|
||||
aw = a[7];
|
||||
out[4] = ax * qw + aw * qx + ay * qz - az * qy;
|
||||
out[5] = ay * qw + aw * qy + az * qx - ax * qz;
|
||||
out[6] = az * qw + aw * qz + ax * qy - ay * qx;
|
||||
out[7] = aw * qw - ax * qx - ay * qy - az * qz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a dual quat by a given quaternion (q * a)
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat} q quaternion to rotate by
|
||||
* @param {ReadonlyQuat2} a the dual quaternion to rotate
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
function rotateByQuatPrepend(out, q, a) {
|
||||
var qx = q[0],
|
||||
qy = q[1],
|
||||
qz = q[2],
|
||||
qw = q[3],
|
||||
bx = a[0],
|
||||
by = a[1],
|
||||
bz = a[2],
|
||||
bw = a[3];
|
||||
out[0] = qx * bw + qw * bx + qy * bz - qz * by;
|
||||
out[1] = qy * bw + qw * by + qz * bx - qx * bz;
|
||||
out[2] = qz * bw + qw * bz + qx * by - qy * bx;
|
||||
out[3] = qw * bw - qx * bx - qy * by - qz * bz;
|
||||
bx = a[4];
|
||||
by = a[5];
|
||||
bz = a[6];
|
||||
bw = a[7];
|
||||
out[4] = qx * bw + qw * bx + qy * bz - qz * by;
|
||||
out[5] = qy * bw + qw * by + qz * bx - qx * bz;
|
||||
out[6] = qz * bw + qw * bz + qx * by - qy * bx;
|
||||
out[7] = qw * bw - qx * bx - qy * by - qz * bz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a dual quat around a given axis. Does the normalisation automatically
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the dual quaternion to rotate
|
||||
* @param {ReadonlyVec3} axis the axis to rotate around
|
||||
* @param {Number} rad how far the rotation should be
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
function rotateAroundAxis(out, a, axis, rad) {
|
||||
//Special case for rad = 0
|
||||
if (Math.abs(rad) < glMatrix.EPSILON) {
|
||||
return copy(out, a);
|
||||
}
|
||||
var axisLength = Math.sqrt(axis[0] * axis[0] + axis[1] * axis[1] + axis[2] * axis[2]);
|
||||
rad = rad * 0.5;
|
||||
var s = Math.sin(rad);
|
||||
var bx = s * axis[0] / axisLength;
|
||||
var by = s * axis[1] / axisLength;
|
||||
var bz = s * axis[2] / axisLength;
|
||||
var bw = Math.cos(rad);
|
||||
var ax1 = a[0],
|
||||
ay1 = a[1],
|
||||
az1 = a[2],
|
||||
aw1 = a[3];
|
||||
out[0] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;
|
||||
out[1] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;
|
||||
out[2] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;
|
||||
out[3] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;
|
||||
var ax = a[4],
|
||||
ay = a[5],
|
||||
az = a[6],
|
||||
aw = a[7];
|
||||
out[4] = ax * bw + aw * bx + ay * bz - az * by;
|
||||
out[5] = ay * bw + aw * by + az * bx - ax * bz;
|
||||
out[6] = az * bw + aw * bz + ax * by - ay * bx;
|
||||
out[7] = aw * bw - ax * bx - ay * by - az * bz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two dual quat's
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the first operand
|
||||
* @param {ReadonlyQuat2} b the second operand
|
||||
* @returns {quat2} out
|
||||
* @function
|
||||
*/
|
||||
function add(out, a, b) {
|
||||
out[0] = a[0] + b[0];
|
||||
out[1] = a[1] + b[1];
|
||||
out[2] = a[2] + b[2];
|
||||
out[3] = a[3] + b[3];
|
||||
out[4] = a[4] + b[4];
|
||||
out[5] = a[5] + b[5];
|
||||
out[6] = a[6] + b[6];
|
||||
out[7] = a[7] + b[7];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies two dual quat's
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the first operand
|
||||
* @param {ReadonlyQuat2} b the second operand
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
function multiply(out, a, b) {
|
||||
var ax0 = a[0],
|
||||
ay0 = a[1],
|
||||
az0 = a[2],
|
||||
aw0 = a[3],
|
||||
bx1 = b[4],
|
||||
by1 = b[5],
|
||||
bz1 = b[6],
|
||||
bw1 = b[7],
|
||||
ax1 = a[4],
|
||||
ay1 = a[5],
|
||||
az1 = a[6],
|
||||
aw1 = a[7],
|
||||
bx0 = b[0],
|
||||
by0 = b[1],
|
||||
bz0 = b[2],
|
||||
bw0 = b[3];
|
||||
out[0] = ax0 * bw0 + aw0 * bx0 + ay0 * bz0 - az0 * by0;
|
||||
out[1] = ay0 * bw0 + aw0 * by0 + az0 * bx0 - ax0 * bz0;
|
||||
out[2] = az0 * bw0 + aw0 * bz0 + ax0 * by0 - ay0 * bx0;
|
||||
out[3] = aw0 * bw0 - ax0 * bx0 - ay0 * by0 - az0 * bz0;
|
||||
out[4] = ax0 * bw1 + aw0 * bx1 + ay0 * bz1 - az0 * by1 + ax1 * bw0 + aw1 * bx0 + ay1 * bz0 - az1 * by0;
|
||||
out[5] = ay0 * bw1 + aw0 * by1 + az0 * bx1 - ax0 * bz1 + ay1 * bw0 + aw1 * by0 + az1 * bx0 - ax1 * bz0;
|
||||
out[6] = az0 * bw1 + aw0 * bz1 + ax0 * by1 - ay0 * bx1 + az1 * bw0 + aw1 * bz0 + ax1 * by0 - ay1 * bx0;
|
||||
out[7] = aw0 * bw1 - ax0 * bx1 - ay0 * by1 - az0 * bz1 + aw1 * bw0 - ax1 * bx0 - ay1 * by0 - az1 * bz0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for {@link quat2.multiply}
|
||||
* @function
|
||||
*/
|
||||
var mul = exports.mul = multiply;
|
||||
|
||||
/**
|
||||
* Scales a dual quat by a scalar number
|
||||
*
|
||||
* @param {quat2} out the receiving dual quat
|
||||
* @param {ReadonlyQuat2} a the dual quat to scale
|
||||
* @param {Number} b amount to scale the dual quat by
|
||||
* @returns {quat2} out
|
||||
* @function
|
||||
*/
|
||||
function scale(out, a, b) {
|
||||
out[0] = a[0] * b;
|
||||
out[1] = a[1] * b;
|
||||
out[2] = a[2] * b;
|
||||
out[3] = a[3] * b;
|
||||
out[4] = a[4] * b;
|
||||
out[5] = a[5] * b;
|
||||
out[6] = a[6] * b;
|
||||
out[7] = a[7] * b;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the dot product of two dual quat's (The dot product of the real parts)
|
||||
*
|
||||
* @param {ReadonlyQuat2} a the first operand
|
||||
* @param {ReadonlyQuat2} b the second operand
|
||||
* @returns {Number} dot product of a and b
|
||||
* @function
|
||||
*/
|
||||
var dot = exports.dot = quat.dot;
|
||||
|
||||
/**
|
||||
* Performs a linear interpolation between two dual quats's
|
||||
* NOTE: The resulting dual quaternions won't always be normalized (The error is most noticeable when t = 0.5)
|
||||
*
|
||||
* @param {quat2} out the receiving dual quat
|
||||
* @param {ReadonlyQuat2} a the first operand
|
||||
* @param {ReadonlyQuat2} b the second operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
function lerp(out, a, b, t) {
|
||||
var mt = 1 - t;
|
||||
if (dot(a, b) < 0) t = -t;
|
||||
out[0] = a[0] * mt + b[0] * t;
|
||||
out[1] = a[1] * mt + b[1] * t;
|
||||
out[2] = a[2] * mt + b[2] * t;
|
||||
out[3] = a[3] * mt + b[3] * t;
|
||||
out[4] = a[4] * mt + b[4] * t;
|
||||
out[5] = a[5] * mt + b[5] * t;
|
||||
out[6] = a[6] * mt + b[6] * t;
|
||||
out[7] = a[7] * mt + b[7] * t;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the inverse of a dual quat. If they are normalized, conjugate is cheaper
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a dual quat to calculate inverse of
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
function invert(out, a) {
|
||||
var sqlen = squaredLength(a);
|
||||
out[0] = -a[0] / sqlen;
|
||||
out[1] = -a[1] / sqlen;
|
||||
out[2] = -a[2] / sqlen;
|
||||
out[3] = a[3] / sqlen;
|
||||
out[4] = -a[4] / sqlen;
|
||||
out[5] = -a[5] / sqlen;
|
||||
out[6] = -a[6] / sqlen;
|
||||
out[7] = a[7] / sqlen;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the conjugate of a dual quat
|
||||
* If the dual quaternion is normalized, this function is faster than quat2.inverse and produces the same result.
|
||||
*
|
||||
* @param {quat2} out the receiving quaternion
|
||||
* @param {ReadonlyQuat2} a quat to calculate conjugate of
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
function conjugate(out, a) {
|
||||
out[0] = -a[0];
|
||||
out[1] = -a[1];
|
||||
out[2] = -a[2];
|
||||
out[3] = a[3];
|
||||
out[4] = -a[4];
|
||||
out[5] = -a[5];
|
||||
out[6] = -a[6];
|
||||
out[7] = a[7];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the length of a dual quat
|
||||
*
|
||||
* @param {ReadonlyQuat2} a dual quat to calculate length of
|
||||
* @returns {Number} length of a
|
||||
* @function
|
||||
*/
|
||||
var length = exports.length = quat.length;
|
||||
|
||||
/**
|
||||
* Alias for {@link quat2.length}
|
||||
* @function
|
||||
*/
|
||||
var len = exports.len = length;
|
||||
|
||||
/**
|
||||
* Calculates the squared length of a dual quat
|
||||
*
|
||||
* @param {ReadonlyQuat2} a dual quat to calculate squared length of
|
||||
* @returns {Number} squared length of a
|
||||
* @function
|
||||
*/
|
||||
var squaredLength = exports.squaredLength = quat.squaredLength;
|
||||
|
||||
/**
|
||||
* Alias for {@link quat2.squaredLength}
|
||||
* @function
|
||||
*/
|
||||
var sqrLen = exports.sqrLen = squaredLength;
|
||||
|
||||
/**
|
||||
* Normalize a dual quat
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a dual quaternion to normalize
|
||||
* @returns {quat2} out
|
||||
* @function
|
||||
*/
|
||||
function normalize(out, a) {
|
||||
var magnitude = squaredLength(a);
|
||||
if (magnitude > 0) {
|
||||
magnitude = Math.sqrt(magnitude);
|
||||
var a0 = a[0] / magnitude;
|
||||
var a1 = a[1] / magnitude;
|
||||
var a2 = a[2] / magnitude;
|
||||
var a3 = a[3] / magnitude;
|
||||
var b0 = a[4];
|
||||
var b1 = a[5];
|
||||
var b2 = a[6];
|
||||
var b3 = a[7];
|
||||
var a_dot_b = a0 * b0 + a1 * b1 + a2 * b2 + a3 * b3;
|
||||
out[0] = a0;
|
||||
out[1] = a1;
|
||||
out[2] = a2;
|
||||
out[3] = a3;
|
||||
out[4] = (b0 - a0 * a_dot_b) / magnitude;
|
||||
out[5] = (b1 - a1 * a_dot_b) / magnitude;
|
||||
out[6] = (b2 - a2 * a_dot_b) / magnitude;
|
||||
out[7] = (b3 - a3 * a_dot_b) / magnitude;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of a dual quaternion
|
||||
*
|
||||
* @param {ReadonlyQuat2} a dual quaternion to represent as a string
|
||||
* @returns {String} string representation of the dual quat
|
||||
*/
|
||||
function str(a) {
|
||||
return "quat2(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ", " + a[4] + ", " + a[5] + ", " + a[6] + ", " + a[7] + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the dual quaternions have exactly the same elements in the same position (when compared with ===)
|
||||
*
|
||||
* @param {ReadonlyQuat2} a the first dual quaternion.
|
||||
* @param {ReadonlyQuat2} b the second dual quaternion.
|
||||
* @returns {Boolean} true if the dual quaternions are equal, false otherwise.
|
||||
*/
|
||||
function exactEquals(a, b) {
|
||||
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the dual quaternions have approximately the same elements in the same position.
|
||||
*
|
||||
* @param {ReadonlyQuat2} a the first dual quat.
|
||||
* @param {ReadonlyQuat2} b the second dual quat.
|
||||
* @returns {Boolean} true if the dual quats are equal, false otherwise.
|
||||
*/
|
||||
function equals(a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3],
|
||||
a4 = a[4],
|
||||
a5 = a[5],
|
||||
a6 = a[6],
|
||||
a7 = a[7];
|
||||
var b0 = b[0],
|
||||
b1 = b[1],
|
||||
b2 = b[2],
|
||||
b3 = b[3],
|
||||
b4 = b[4],
|
||||
b5 = b[5],
|
||||
b6 = b[6],
|
||||
b7 = b[7];
|
||||
return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7));
|
||||
}
|
||||
677
node_modules/gl-matrix/cjs/vec2.js
generated
vendored
677
node_modules/gl-matrix/cjs/vec2.js
generated
vendored
@@ -1,677 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.add = add;
|
||||
exports.angle = angle;
|
||||
exports.ceil = ceil;
|
||||
exports.clone = clone;
|
||||
exports.copy = copy;
|
||||
exports.create = create;
|
||||
exports.cross = cross;
|
||||
exports.dist = void 0;
|
||||
exports.distance = distance;
|
||||
exports.div = void 0;
|
||||
exports.divide = divide;
|
||||
exports.dot = dot;
|
||||
exports.equals = equals;
|
||||
exports.exactEquals = exactEquals;
|
||||
exports.floor = floor;
|
||||
exports.forEach = void 0;
|
||||
exports.fromValues = fromValues;
|
||||
exports.inverse = inverse;
|
||||
exports.len = void 0;
|
||||
exports.length = length;
|
||||
exports.lerp = lerp;
|
||||
exports.max = max;
|
||||
exports.min = min;
|
||||
exports.mul = void 0;
|
||||
exports.multiply = multiply;
|
||||
exports.negate = negate;
|
||||
exports.normalize = normalize;
|
||||
exports.random = random;
|
||||
exports.rotate = rotate;
|
||||
exports.round = round;
|
||||
exports.scale = scale;
|
||||
exports.scaleAndAdd = scaleAndAdd;
|
||||
exports.set = set;
|
||||
exports.signedAngle = signedAngle;
|
||||
exports.sqrLen = exports.sqrDist = void 0;
|
||||
exports.squaredDistance = squaredDistance;
|
||||
exports.squaredLength = squaredLength;
|
||||
exports.str = str;
|
||||
exports.sub = void 0;
|
||||
exports.subtract = subtract;
|
||||
exports.transformMat2 = transformMat2;
|
||||
exports.transformMat2d = transformMat2d;
|
||||
exports.transformMat3 = transformMat3;
|
||||
exports.transformMat4 = transformMat4;
|
||||
exports.zero = zero;
|
||||
var glMatrix = _interopRequireWildcard(require("./common.js"));
|
||||
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
||||
/**
|
||||
* 2 Dimensional Vector
|
||||
* @module vec2
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new, empty vec2
|
||||
*
|
||||
* @returns {vec2} a new 2D vector
|
||||
*/
|
||||
function create() {
|
||||
var out = new glMatrix.ARRAY_TYPE(2);
|
||||
if (glMatrix.ARRAY_TYPE != Float32Array) {
|
||||
out[0] = 0;
|
||||
out[1] = 0;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new vec2 initialized with values from an existing vector
|
||||
*
|
||||
* @param {ReadonlyVec2} a vector to clone
|
||||
* @returns {vec2} a new 2D vector
|
||||
*/
|
||||
function clone(a) {
|
||||
var out = new glMatrix.ARRAY_TYPE(2);
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new vec2 initialized with the given values
|
||||
*
|
||||
* @param {Number} x X component
|
||||
* @param {Number} y Y component
|
||||
* @returns {vec2} a new 2D vector
|
||||
*/
|
||||
function fromValues(x, y) {
|
||||
var out = new glMatrix.ARRAY_TYPE(2);
|
||||
out[0] = x;
|
||||
out[1] = y;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy the values from one vec2 to another
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the source vector
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function copy(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a vec2 to the given values
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {Number} x X component
|
||||
* @param {Number} y Y component
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function set(out, x, y) {
|
||||
out[0] = x;
|
||||
out[1] = y;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two vec2's
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function add(out, a, b) {
|
||||
out[0] = a[0] + b[0];
|
||||
out[1] = a[1] + b[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subtracts vector b from vector a
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function subtract(out, a, b) {
|
||||
out[0] = a[0] - b[0];
|
||||
out[1] = a[1] - b[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies two vec2's
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function multiply(out, a, b) {
|
||||
out[0] = a[0] * b[0];
|
||||
out[1] = a[1] * b[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Divides two vec2's
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function divide(out, a, b) {
|
||||
out[0] = a[0] / b[0];
|
||||
out[1] = a[1] / b[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Math.ceil the components of a vec2
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a vector to ceil
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function ceil(out, a) {
|
||||
out[0] = Math.ceil(a[0]);
|
||||
out[1] = Math.ceil(a[1]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Math.floor the components of a vec2
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a vector to floor
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function floor(out, a) {
|
||||
out[0] = Math.floor(a[0]);
|
||||
out[1] = Math.floor(a[1]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the minimum of two vec2's
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function min(out, a, b) {
|
||||
out[0] = Math.min(a[0], b[0]);
|
||||
out[1] = Math.min(a[1], b[1]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum of two vec2's
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function max(out, a, b) {
|
||||
out[0] = Math.max(a[0], b[0]);
|
||||
out[1] = Math.max(a[1], b[1]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* symmetric round the components of a vec2
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a vector to round
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function round(out, a) {
|
||||
out[0] = glMatrix.round(a[0]);
|
||||
out[1] = glMatrix.round(a[1]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scales a vec2 by a scalar number
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the vector to scale
|
||||
* @param {Number} b amount to scale the vector by
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function scale(out, a, b) {
|
||||
out[0] = a[0] * b;
|
||||
out[1] = a[1] * b;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two vec2's after scaling the second operand by a scalar value
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @param {Number} scale the amount to scale b by before adding
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function scaleAndAdd(out, a, b, scale) {
|
||||
out[0] = a[0] + b[0] * scale;
|
||||
out[1] = a[1] + b[1] * scale;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the euclidian distance between two vec2's
|
||||
*
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {Number} distance between a and b
|
||||
*/
|
||||
function distance(a, b) {
|
||||
var x = b[0] - a[0],
|
||||
y = b[1] - a[1];
|
||||
return Math.sqrt(x * x + y * y);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the squared euclidian distance between two vec2's
|
||||
*
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {Number} squared distance between a and b
|
||||
*/
|
||||
function squaredDistance(a, b) {
|
||||
var x = b[0] - a[0],
|
||||
y = b[1] - a[1];
|
||||
return x * x + y * y;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the length of a vec2
|
||||
*
|
||||
* @param {ReadonlyVec2} a vector to calculate length of
|
||||
* @returns {Number} length of a
|
||||
*/
|
||||
function length(a) {
|
||||
var x = a[0],
|
||||
y = a[1];
|
||||
return Math.sqrt(x * x + y * y);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the squared length of a vec2
|
||||
*
|
||||
* @param {ReadonlyVec2} a vector to calculate squared length of
|
||||
* @returns {Number} squared length of a
|
||||
*/
|
||||
function squaredLength(a) {
|
||||
var x = a[0],
|
||||
y = a[1];
|
||||
return x * x + y * y;
|
||||
}
|
||||
|
||||
/**
|
||||
* Negates the components of a vec2
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a vector to negate
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function negate(out, a) {
|
||||
out[0] = -a[0];
|
||||
out[1] = -a[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the inverse of the components of a vec2
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a vector to invert
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function inverse(out, a) {
|
||||
out[0] = 1.0 / a[0];
|
||||
out[1] = 1.0 / a[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalize a vec2
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a vector to normalize
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function normalize(out, a) {
|
||||
var x = a[0],
|
||||
y = a[1];
|
||||
var len = x * x + y * y;
|
||||
if (len > 0) {
|
||||
//TODO: evaluate use of glm_invsqrt here?
|
||||
len = 1 / Math.sqrt(len);
|
||||
}
|
||||
out[0] = a[0] * len;
|
||||
out[1] = a[1] * len;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the dot product of two vec2's
|
||||
*
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {Number} dot product of a and b
|
||||
*/
|
||||
function dot(a, b) {
|
||||
return a[0] * b[0] + a[1] * b[1];
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes the cross product of two vec2's
|
||||
* Note that the cross product must by definition produce a 3D vector
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function cross(out, a, b) {
|
||||
var z = a[0] * b[1] - a[1] * b[0];
|
||||
out[0] = out[1] = 0;
|
||||
out[2] = z;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a linear interpolation between two vec2's
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function lerp(out, a, b, t) {
|
||||
var ax = a[0],
|
||||
ay = a[1];
|
||||
out[0] = ax + t * (b[0] - ax);
|
||||
out[1] = ay + t * (b[1] - ay);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a random vector with the given scale
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function random(out, scale) {
|
||||
scale = scale === undefined ? 1.0 : scale;
|
||||
var r = glMatrix.RANDOM() * 2.0 * Math.PI;
|
||||
out[0] = Math.cos(r) * scale;
|
||||
out[1] = Math.sin(r) * scale;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec2 with a mat2
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the vector to transform
|
||||
* @param {ReadonlyMat2} m matrix to transform with
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function transformMat2(out, a, m) {
|
||||
var x = a[0],
|
||||
y = a[1];
|
||||
out[0] = m[0] * x + m[2] * y;
|
||||
out[1] = m[1] * x + m[3] * y;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec2 with a mat2d
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the vector to transform
|
||||
* @param {ReadonlyMat2d} m matrix to transform with
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function transformMat2d(out, a, m) {
|
||||
var x = a[0],
|
||||
y = a[1];
|
||||
out[0] = m[0] * x + m[2] * y + m[4];
|
||||
out[1] = m[1] * x + m[3] * y + m[5];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec2 with a mat3
|
||||
* 3rd vector component is implicitly '1'
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the vector to transform
|
||||
* @param {ReadonlyMat3} m matrix to transform with
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function transformMat3(out, a, m) {
|
||||
var x = a[0],
|
||||
y = a[1];
|
||||
out[0] = m[0] * x + m[3] * y + m[6];
|
||||
out[1] = m[1] * x + m[4] * y + m[7];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec2 with a mat4
|
||||
* 3rd vector component is implicitly '0'
|
||||
* 4th vector component is implicitly '1'
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the vector to transform
|
||||
* @param {ReadonlyMat4} m matrix to transform with
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function transformMat4(out, a, m) {
|
||||
var x = a[0];
|
||||
var y = a[1];
|
||||
out[0] = m[0] * x + m[4] * y + m[12];
|
||||
out[1] = m[1] * x + m[5] * y + m[13];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotate a 2D vector
|
||||
* @param {vec2} out The receiving vec2
|
||||
* @param {ReadonlyVec2} a The vec2 point to rotate
|
||||
* @param {ReadonlyVec2} b The origin of the rotation
|
||||
* @param {Number} rad The angle of rotation in radians
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function rotate(out, a, b, rad) {
|
||||
//Translate point to the origin
|
||||
var p0 = a[0] - b[0],
|
||||
p1 = a[1] - b[1],
|
||||
sinC = Math.sin(rad),
|
||||
cosC = Math.cos(rad);
|
||||
|
||||
//perform rotation and translate to correct position
|
||||
out[0] = p0 * cosC - p1 * sinC + b[0];
|
||||
out[1] = p0 * sinC + p1 * cosC + b[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the smallest angle between two 2D vectors
|
||||
* @param {ReadonlyVec2} a The first operand
|
||||
* @param {ReadonlyVec2} b The second operand
|
||||
* @returns {Number} The angle in radians
|
||||
*/
|
||||
function angle(a, b) {
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
bx = b[0],
|
||||
by = b[1];
|
||||
return Math.abs(Math.atan2(ay * bx - ax * by, ax * bx + ay * by));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the signed angle in the interval [-pi,pi] between two 2D vectors (positive if `a` is to the right of `b`)
|
||||
*
|
||||
* @param {ReadonlyVec2} a The first vector
|
||||
* @param {ReadonlyVec2} b The second vector
|
||||
* @returns {number} The signed angle in radians
|
||||
*/
|
||||
function signedAngle(a, b) {
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
bx = b[0],
|
||||
by = b[1];
|
||||
return Math.atan2(ax * by - ay * bx, ax * bx + ay * by);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a vec2 to zero
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
function zero(out) {
|
||||
out[0] = 0.0;
|
||||
out[1] = 0.0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of a vector
|
||||
*
|
||||
* @param {ReadonlyVec2} a vector to represent as a string
|
||||
* @returns {String} string representation of the vector
|
||||
*/
|
||||
function str(a) {
|
||||
return "vec2(" + a[0] + ", " + a[1] + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)
|
||||
*
|
||||
* @param {ReadonlyVec2} a The first vector.
|
||||
* @param {ReadonlyVec2} b The second vector.
|
||||
* @returns {Boolean} True if the vectors are equal, false otherwise.
|
||||
*/
|
||||
function exactEquals(a, b) {
|
||||
return a[0] === b[0] && a[1] === b[1];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the vectors have approximately the same elements in the same position.
|
||||
*
|
||||
* @param {ReadonlyVec2} a The first vector.
|
||||
* @param {ReadonlyVec2} b The second vector.
|
||||
* @returns {Boolean} True if the vectors are equal, false otherwise.
|
||||
*/
|
||||
function equals(a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1];
|
||||
var b0 = b[0],
|
||||
b1 = b[1];
|
||||
return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for {@link vec2.length}
|
||||
* @function
|
||||
*/
|
||||
var len = exports.len = length;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec2.subtract}
|
||||
* @function
|
||||
*/
|
||||
var sub = exports.sub = subtract;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec2.multiply}
|
||||
* @function
|
||||
*/
|
||||
var mul = exports.mul = multiply;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec2.divide}
|
||||
* @function
|
||||
*/
|
||||
var div = exports.div = divide;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec2.distance}
|
||||
* @function
|
||||
*/
|
||||
var dist = exports.dist = distance;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec2.squaredDistance}
|
||||
* @function
|
||||
*/
|
||||
var sqrDist = exports.sqrDist = squaredDistance;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec2.squaredLength}
|
||||
* @function
|
||||
*/
|
||||
var sqrLen = exports.sqrLen = squaredLength;
|
||||
|
||||
/**
|
||||
* Perform some operation over an array of vec2s.
|
||||
*
|
||||
* @param {Array} a the array of vectors to iterate over
|
||||
* @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed
|
||||
* @param {Number} offset Number of elements to skip at the beginning of the array
|
||||
* @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array
|
||||
* @param {Function} fn Function to call for each vector in the array
|
||||
* @param {Object} [arg] additional argument to pass to fn
|
||||
* @returns {Array} a
|
||||
* @function
|
||||
*/
|
||||
var forEach = exports.forEach = function () {
|
||||
var vec = create();
|
||||
return function (a, stride, offset, count, fn, arg) {
|
||||
var i, l;
|
||||
if (!stride) {
|
||||
stride = 2;
|
||||
}
|
||||
if (!offset) {
|
||||
offset = 0;
|
||||
}
|
||||
if (count) {
|
||||
l = Math.min(count * stride + offset, a.length);
|
||||
} else {
|
||||
l = a.length;
|
||||
}
|
||||
for (i = offset; i < l; i += stride) {
|
||||
vec[0] = a[i];
|
||||
vec[1] = a[i + 1];
|
||||
fn(vec, vec, arg);
|
||||
a[i] = vec[0];
|
||||
a[i + 1] = vec[1];
|
||||
}
|
||||
return a;
|
||||
};
|
||||
}();
|
||||
851
node_modules/gl-matrix/cjs/vec3.js
generated
vendored
851
node_modules/gl-matrix/cjs/vec3.js
generated
vendored
@@ -1,851 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.add = add;
|
||||
exports.angle = angle;
|
||||
exports.bezier = bezier;
|
||||
exports.ceil = ceil;
|
||||
exports.clone = clone;
|
||||
exports.copy = copy;
|
||||
exports.create = create;
|
||||
exports.cross = cross;
|
||||
exports.dist = void 0;
|
||||
exports.distance = distance;
|
||||
exports.div = void 0;
|
||||
exports.divide = divide;
|
||||
exports.dot = dot;
|
||||
exports.equals = equals;
|
||||
exports.exactEquals = exactEquals;
|
||||
exports.floor = floor;
|
||||
exports.forEach = void 0;
|
||||
exports.fromValues = fromValues;
|
||||
exports.hermite = hermite;
|
||||
exports.inverse = inverse;
|
||||
exports.len = void 0;
|
||||
exports.length = length;
|
||||
exports.lerp = lerp;
|
||||
exports.max = max;
|
||||
exports.min = min;
|
||||
exports.mul = void 0;
|
||||
exports.multiply = multiply;
|
||||
exports.negate = negate;
|
||||
exports.normalize = normalize;
|
||||
exports.random = random;
|
||||
exports.rotateX = rotateX;
|
||||
exports.rotateY = rotateY;
|
||||
exports.rotateZ = rotateZ;
|
||||
exports.round = round;
|
||||
exports.scale = scale;
|
||||
exports.scaleAndAdd = scaleAndAdd;
|
||||
exports.set = set;
|
||||
exports.slerp = slerp;
|
||||
exports.sqrLen = exports.sqrDist = void 0;
|
||||
exports.squaredDistance = squaredDistance;
|
||||
exports.squaredLength = squaredLength;
|
||||
exports.str = str;
|
||||
exports.sub = void 0;
|
||||
exports.subtract = subtract;
|
||||
exports.transformMat3 = transformMat3;
|
||||
exports.transformMat4 = transformMat4;
|
||||
exports.transformQuat = transformQuat;
|
||||
exports.zero = zero;
|
||||
var glMatrix = _interopRequireWildcard(require("./common.js"));
|
||||
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
||||
/**
|
||||
* 3 Dimensional Vector
|
||||
* @module vec3
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new, empty vec3
|
||||
*
|
||||
* @returns {vec3} a new 3D vector
|
||||
*/
|
||||
function create() {
|
||||
var out = new glMatrix.ARRAY_TYPE(3);
|
||||
if (glMatrix.ARRAY_TYPE != Float32Array) {
|
||||
out[0] = 0;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new vec3 initialized with values from an existing vector
|
||||
*
|
||||
* @param {ReadonlyVec3} a vector to clone
|
||||
* @returns {vec3} a new 3D vector
|
||||
*/
|
||||
function clone(a) {
|
||||
var out = new glMatrix.ARRAY_TYPE(3);
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the length of a vec3
|
||||
*
|
||||
* @param {ReadonlyVec3} a vector to calculate length of
|
||||
* @returns {Number} length of a
|
||||
*/
|
||||
function length(a) {
|
||||
var x = a[0];
|
||||
var y = a[1];
|
||||
var z = a[2];
|
||||
return Math.sqrt(x * x + y * y + z * z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new vec3 initialized with the given values
|
||||
*
|
||||
* @param {Number} x X component
|
||||
* @param {Number} y Y component
|
||||
* @param {Number} z Z component
|
||||
* @returns {vec3} a new 3D vector
|
||||
*/
|
||||
function fromValues(x, y, z) {
|
||||
var out = new glMatrix.ARRAY_TYPE(3);
|
||||
out[0] = x;
|
||||
out[1] = y;
|
||||
out[2] = z;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy the values from one vec3 to another
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the source vector
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function copy(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a vec3 to the given values
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {Number} x X component
|
||||
* @param {Number} y Y component
|
||||
* @param {Number} z Z component
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function set(out, x, y, z) {
|
||||
out[0] = x;
|
||||
out[1] = y;
|
||||
out[2] = z;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two vec3's
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function add(out, a, b) {
|
||||
out[0] = a[0] + b[0];
|
||||
out[1] = a[1] + b[1];
|
||||
out[2] = a[2] + b[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subtracts vector b from vector a
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function subtract(out, a, b) {
|
||||
out[0] = a[0] - b[0];
|
||||
out[1] = a[1] - b[1];
|
||||
out[2] = a[2] - b[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies two vec3's
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function multiply(out, a, b) {
|
||||
out[0] = a[0] * b[0];
|
||||
out[1] = a[1] * b[1];
|
||||
out[2] = a[2] * b[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Divides two vec3's
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function divide(out, a, b) {
|
||||
out[0] = a[0] / b[0];
|
||||
out[1] = a[1] / b[1];
|
||||
out[2] = a[2] / b[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Math.ceil the components of a vec3
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a vector to ceil
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function ceil(out, a) {
|
||||
out[0] = Math.ceil(a[0]);
|
||||
out[1] = Math.ceil(a[1]);
|
||||
out[2] = Math.ceil(a[2]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Math.floor the components of a vec3
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a vector to floor
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function floor(out, a) {
|
||||
out[0] = Math.floor(a[0]);
|
||||
out[1] = Math.floor(a[1]);
|
||||
out[2] = Math.floor(a[2]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the minimum of two vec3's
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function min(out, a, b) {
|
||||
out[0] = Math.min(a[0], b[0]);
|
||||
out[1] = Math.min(a[1], b[1]);
|
||||
out[2] = Math.min(a[2], b[2]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum of two vec3's
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function max(out, a, b) {
|
||||
out[0] = Math.max(a[0], b[0]);
|
||||
out[1] = Math.max(a[1], b[1]);
|
||||
out[2] = Math.max(a[2], b[2]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* symmetric round the components of a vec3
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a vector to round
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function round(out, a) {
|
||||
out[0] = glMatrix.round(a[0]);
|
||||
out[1] = glMatrix.round(a[1]);
|
||||
out[2] = glMatrix.round(a[2]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scales a vec3 by a scalar number
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the vector to scale
|
||||
* @param {Number} b amount to scale the vector by
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function scale(out, a, b) {
|
||||
out[0] = a[0] * b;
|
||||
out[1] = a[1] * b;
|
||||
out[2] = a[2] * b;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two vec3's after scaling the second operand by a scalar value
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @param {Number} scale the amount to scale b by before adding
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function scaleAndAdd(out, a, b, scale) {
|
||||
out[0] = a[0] + b[0] * scale;
|
||||
out[1] = a[1] + b[1] * scale;
|
||||
out[2] = a[2] + b[2] * scale;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the euclidian distance between two vec3's
|
||||
*
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {Number} distance between a and b
|
||||
*/
|
||||
function distance(a, b) {
|
||||
var x = b[0] - a[0];
|
||||
var y = b[1] - a[1];
|
||||
var z = b[2] - a[2];
|
||||
return Math.sqrt(x * x + y * y + z * z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the squared euclidian distance between two vec3's
|
||||
*
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {Number} squared distance between a and b
|
||||
*/
|
||||
function squaredDistance(a, b) {
|
||||
var x = b[0] - a[0];
|
||||
var y = b[1] - a[1];
|
||||
var z = b[2] - a[2];
|
||||
return x * x + y * y + z * z;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the squared length of a vec3
|
||||
*
|
||||
* @param {ReadonlyVec3} a vector to calculate squared length of
|
||||
* @returns {Number} squared length of a
|
||||
*/
|
||||
function squaredLength(a) {
|
||||
var x = a[0];
|
||||
var y = a[1];
|
||||
var z = a[2];
|
||||
return x * x + y * y + z * z;
|
||||
}
|
||||
|
||||
/**
|
||||
* Negates the components of a vec3
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a vector to negate
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function negate(out, a) {
|
||||
out[0] = -a[0];
|
||||
out[1] = -a[1];
|
||||
out[2] = -a[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the inverse of the components of a vec3
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a vector to invert
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function inverse(out, a) {
|
||||
out[0] = 1.0 / a[0];
|
||||
out[1] = 1.0 / a[1];
|
||||
out[2] = 1.0 / a[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalize a vec3
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a vector to normalize
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function normalize(out, a) {
|
||||
var x = a[0];
|
||||
var y = a[1];
|
||||
var z = a[2];
|
||||
var len = x * x + y * y + z * z;
|
||||
if (len > 0) {
|
||||
//TODO: evaluate use of glm_invsqrt here?
|
||||
len = 1 / Math.sqrt(len);
|
||||
}
|
||||
out[0] = a[0] * len;
|
||||
out[1] = a[1] * len;
|
||||
out[2] = a[2] * len;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the dot product of two vec3's
|
||||
*
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {Number} dot product of a and b
|
||||
*/
|
||||
function dot(a, b) {
|
||||
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes the cross product of two vec3's
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function cross(out, a, b) {
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
az = a[2];
|
||||
var bx = b[0],
|
||||
by = b[1],
|
||||
bz = b[2];
|
||||
out[0] = ay * bz - az * by;
|
||||
out[1] = az * bx - ax * bz;
|
||||
out[2] = ax * by - ay * bx;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a linear interpolation between two vec3's
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function lerp(out, a, b, t) {
|
||||
var ax = a[0];
|
||||
var ay = a[1];
|
||||
var az = a[2];
|
||||
out[0] = ax + t * (b[0] - ax);
|
||||
out[1] = ay + t * (b[1] - ay);
|
||||
out[2] = az + t * (b[2] - az);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a spherical linear interpolation between two vec3's
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function slerp(out, a, b, t) {
|
||||
var angle = Math.acos(Math.min(Math.max(dot(a, b), -1), 1));
|
||||
var sinTotal = Math.sin(angle);
|
||||
var ratioA = Math.sin((1 - t) * angle) / sinTotal;
|
||||
var ratioB = Math.sin(t * angle) / sinTotal;
|
||||
out[0] = ratioA * a[0] + ratioB * b[0];
|
||||
out[1] = ratioA * a[1] + ratioB * b[1];
|
||||
out[2] = ratioA * a[2] + ratioB * b[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a hermite interpolation with two control points
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @param {ReadonlyVec3} c the third operand
|
||||
* @param {ReadonlyVec3} d the fourth operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function hermite(out, a, b, c, d, t) {
|
||||
var factorTimes2 = t * t;
|
||||
var factor1 = factorTimes2 * (2 * t - 3) + 1;
|
||||
var factor2 = factorTimes2 * (t - 2) + t;
|
||||
var factor3 = factorTimes2 * (t - 1);
|
||||
var factor4 = factorTimes2 * (3 - 2 * t);
|
||||
out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;
|
||||
out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;
|
||||
out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a bezier interpolation with two control points
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @param {ReadonlyVec3} c the third operand
|
||||
* @param {ReadonlyVec3} d the fourth operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function bezier(out, a, b, c, d, t) {
|
||||
var inverseFactor = 1 - t;
|
||||
var inverseFactorTimesTwo = inverseFactor * inverseFactor;
|
||||
var factorTimes2 = t * t;
|
||||
var factor1 = inverseFactorTimesTwo * inverseFactor;
|
||||
var factor2 = 3 * t * inverseFactorTimesTwo;
|
||||
var factor3 = 3 * factorTimes2 * inverseFactor;
|
||||
var factor4 = factorTimes2 * t;
|
||||
out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;
|
||||
out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;
|
||||
out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a random vector with the given scale
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function random(out, scale) {
|
||||
scale = scale === undefined ? 1.0 : scale;
|
||||
var r = glMatrix.RANDOM() * 2.0 * Math.PI;
|
||||
var z = glMatrix.RANDOM() * 2.0 - 1.0;
|
||||
var zScale = Math.sqrt(1.0 - z * z) * scale;
|
||||
out[0] = Math.cos(r) * zScale;
|
||||
out[1] = Math.sin(r) * zScale;
|
||||
out[2] = z * scale;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec3 with a mat4.
|
||||
* 4th vector component is implicitly '1'
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the vector to transform
|
||||
* @param {ReadonlyMat4} m matrix to transform with
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function transformMat4(out, a, m) {
|
||||
var x = a[0],
|
||||
y = a[1],
|
||||
z = a[2];
|
||||
var w = m[3] * x + m[7] * y + m[11] * z + m[15];
|
||||
w = w || 1.0;
|
||||
out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;
|
||||
out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;
|
||||
out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec3 with a mat3.
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the vector to transform
|
||||
* @param {ReadonlyMat3} m the 3x3 matrix to transform with
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function transformMat3(out, a, m) {
|
||||
var x = a[0],
|
||||
y = a[1],
|
||||
z = a[2];
|
||||
out[0] = x * m[0] + y * m[3] + z * m[6];
|
||||
out[1] = x * m[1] + y * m[4] + z * m[7];
|
||||
out[2] = x * m[2] + y * m[5] + z * m[8];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec3 with a quat
|
||||
* Can also be used for dual quaternions. (Multiply it with the real part)
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the vector to transform
|
||||
* @param {ReadonlyQuat} q normalized quaternion to transform with
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function transformQuat(out, a, q) {
|
||||
// Fast Vector Rotation using Quaternions by Robert Eisele
|
||||
// https://raw.org/proof/vector-rotation-using-quaternions/
|
||||
|
||||
var qx = q[0],
|
||||
qy = q[1],
|
||||
qz = q[2],
|
||||
qw = q[3];
|
||||
var vx = a[0],
|
||||
vy = a[1],
|
||||
vz = a[2];
|
||||
|
||||
// t = q x v
|
||||
var tx = qy * vz - qz * vy;
|
||||
var ty = qz * vx - qx * vz;
|
||||
var tz = qx * vy - qy * vx;
|
||||
|
||||
// t = 2t
|
||||
tx = tx + tx;
|
||||
ty = ty + ty;
|
||||
tz = tz + tz;
|
||||
|
||||
// v + w t + q x t
|
||||
out[0] = vx + qw * tx + qy * tz - qz * ty;
|
||||
out[1] = vy + qw * ty + qz * tx - qx * tz;
|
||||
out[2] = vz + qw * tz + qx * ty - qy * tx;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotate a 3D vector around the x-axis
|
||||
* @param {vec3} out The receiving vec3
|
||||
* @param {ReadonlyVec3} a The vec3 point to rotate
|
||||
* @param {ReadonlyVec3} b The origin of the rotation
|
||||
* @param {Number} rad The angle of rotation in radians
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function rotateX(out, a, b, rad) {
|
||||
var p = [],
|
||||
r = [];
|
||||
//Translate point to the origin
|
||||
p[0] = a[0] - b[0];
|
||||
p[1] = a[1] - b[1];
|
||||
p[2] = a[2] - b[2];
|
||||
|
||||
//perform rotation
|
||||
r[0] = p[0];
|
||||
r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);
|
||||
r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad);
|
||||
|
||||
//translate to correct position
|
||||
out[0] = r[0] + b[0];
|
||||
out[1] = r[1] + b[1];
|
||||
out[2] = r[2] + b[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotate a 3D vector around the y-axis
|
||||
* @param {vec3} out The receiving vec3
|
||||
* @param {ReadonlyVec3} a The vec3 point to rotate
|
||||
* @param {ReadonlyVec3} b The origin of the rotation
|
||||
* @param {Number} rad The angle of rotation in radians
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function rotateY(out, a, b, rad) {
|
||||
var p = [],
|
||||
r = [];
|
||||
//Translate point to the origin
|
||||
p[0] = a[0] - b[0];
|
||||
p[1] = a[1] - b[1];
|
||||
p[2] = a[2] - b[2];
|
||||
|
||||
//perform rotation
|
||||
r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);
|
||||
r[1] = p[1];
|
||||
r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad);
|
||||
|
||||
//translate to correct position
|
||||
out[0] = r[0] + b[0];
|
||||
out[1] = r[1] + b[1];
|
||||
out[2] = r[2] + b[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotate a 3D vector around the z-axis
|
||||
* @param {vec3} out The receiving vec3
|
||||
* @param {ReadonlyVec3} a The vec3 point to rotate
|
||||
* @param {ReadonlyVec3} b The origin of the rotation
|
||||
* @param {Number} rad The angle of rotation in radians
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function rotateZ(out, a, b, rad) {
|
||||
var p = [],
|
||||
r = [];
|
||||
//Translate point to the origin
|
||||
p[0] = a[0] - b[0];
|
||||
p[1] = a[1] - b[1];
|
||||
p[2] = a[2] - b[2];
|
||||
|
||||
//perform rotation
|
||||
r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);
|
||||
r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);
|
||||
r[2] = p[2];
|
||||
|
||||
//translate to correct position
|
||||
out[0] = r[0] + b[0];
|
||||
out[1] = r[1] + b[1];
|
||||
out[2] = r[2] + b[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the angle between two 3D vectors
|
||||
* @param {ReadonlyVec3} a The first operand
|
||||
* @param {ReadonlyVec3} b The second operand
|
||||
* @returns {Number} The angle in radians
|
||||
*/
|
||||
function angle(a, b) {
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
az = a[2],
|
||||
bx = b[0],
|
||||
by = b[1],
|
||||
bz = b[2],
|
||||
mag = Math.sqrt((ax * ax + ay * ay + az * az) * (bx * bx + by * by + bz * bz)),
|
||||
cosine = mag && dot(a, b) / mag;
|
||||
return Math.acos(Math.min(Math.max(cosine, -1), 1));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a vec3 to zero
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
function zero(out) {
|
||||
out[0] = 0.0;
|
||||
out[1] = 0.0;
|
||||
out[2] = 0.0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of a vector
|
||||
*
|
||||
* @param {ReadonlyVec3} a vector to represent as a string
|
||||
* @returns {String} string representation of the vector
|
||||
*/
|
||||
function str(a) {
|
||||
return "vec3(" + a[0] + ", " + a[1] + ", " + a[2] + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)
|
||||
*
|
||||
* @param {ReadonlyVec3} a The first vector.
|
||||
* @param {ReadonlyVec3} b The second vector.
|
||||
* @returns {Boolean} True if the vectors are equal, false otherwise.
|
||||
*/
|
||||
function exactEquals(a, b) {
|
||||
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the vectors have approximately the same elements in the same position.
|
||||
*
|
||||
* @param {ReadonlyVec3} a The first vector.
|
||||
* @param {ReadonlyVec3} b The second vector.
|
||||
* @returns {Boolean} True if the vectors are equal, false otherwise.
|
||||
*/
|
||||
function equals(a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2];
|
||||
var b0 = b[0],
|
||||
b1 = b[1],
|
||||
b2 = b[2];
|
||||
return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for {@link vec3.subtract}
|
||||
* @function
|
||||
*/
|
||||
var sub = exports.sub = subtract;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec3.multiply}
|
||||
* @function
|
||||
*/
|
||||
var mul = exports.mul = multiply;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec3.divide}
|
||||
* @function
|
||||
*/
|
||||
var div = exports.div = divide;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec3.distance}
|
||||
* @function
|
||||
*/
|
||||
var dist = exports.dist = distance;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec3.squaredDistance}
|
||||
* @function
|
||||
*/
|
||||
var sqrDist = exports.sqrDist = squaredDistance;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec3.length}
|
||||
* @function
|
||||
*/
|
||||
var len = exports.len = length;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec3.squaredLength}
|
||||
* @function
|
||||
*/
|
||||
var sqrLen = exports.sqrLen = squaredLength;
|
||||
|
||||
/**
|
||||
* Perform some operation over an array of vec3s.
|
||||
*
|
||||
* @param {Array} a the array of vectors to iterate over
|
||||
* @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed
|
||||
* @param {Number} offset Number of elements to skip at the beginning of the array
|
||||
* @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array
|
||||
* @param {Function} fn Function to call for each vector in the array
|
||||
* @param {Object} [arg] additional argument to pass to fn
|
||||
* @returns {Array} a
|
||||
* @function
|
||||
*/
|
||||
var forEach = exports.forEach = function () {
|
||||
var vec = create();
|
||||
return function (a, stride, offset, count, fn, arg) {
|
||||
var i, l;
|
||||
if (!stride) {
|
||||
stride = 3;
|
||||
}
|
||||
if (!offset) {
|
||||
offset = 0;
|
||||
}
|
||||
if (count) {
|
||||
l = Math.min(count * stride + offset, a.length);
|
||||
} else {
|
||||
l = a.length;
|
||||
}
|
||||
for (i = offset; i < l; i += stride) {
|
||||
vec[0] = a[i];
|
||||
vec[1] = a[i + 1];
|
||||
vec[2] = a[i + 2];
|
||||
fn(vec, vec, arg);
|
||||
a[i] = vec[0];
|
||||
a[i + 1] = vec[1];
|
||||
a[i + 2] = vec[2];
|
||||
}
|
||||
return a;
|
||||
};
|
||||
}();
|
||||
706
node_modules/gl-matrix/cjs/vec4.js
generated
vendored
706
node_modules/gl-matrix/cjs/vec4.js
generated
vendored
@@ -1,706 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.add = add;
|
||||
exports.ceil = ceil;
|
||||
exports.clone = clone;
|
||||
exports.copy = copy;
|
||||
exports.create = create;
|
||||
exports.cross = cross;
|
||||
exports.dist = void 0;
|
||||
exports.distance = distance;
|
||||
exports.div = void 0;
|
||||
exports.divide = divide;
|
||||
exports.dot = dot;
|
||||
exports.equals = equals;
|
||||
exports.exactEquals = exactEquals;
|
||||
exports.floor = floor;
|
||||
exports.forEach = void 0;
|
||||
exports.fromValues = fromValues;
|
||||
exports.inverse = inverse;
|
||||
exports.len = void 0;
|
||||
exports.length = length;
|
||||
exports.lerp = lerp;
|
||||
exports.max = max;
|
||||
exports.min = min;
|
||||
exports.mul = void 0;
|
||||
exports.multiply = multiply;
|
||||
exports.negate = negate;
|
||||
exports.normalize = normalize;
|
||||
exports.random = random;
|
||||
exports.round = round;
|
||||
exports.scale = scale;
|
||||
exports.scaleAndAdd = scaleAndAdd;
|
||||
exports.set = set;
|
||||
exports.sqrLen = exports.sqrDist = void 0;
|
||||
exports.squaredDistance = squaredDistance;
|
||||
exports.squaredLength = squaredLength;
|
||||
exports.str = str;
|
||||
exports.sub = void 0;
|
||||
exports.subtract = subtract;
|
||||
exports.transformMat4 = transformMat4;
|
||||
exports.transformQuat = transformQuat;
|
||||
exports.zero = zero;
|
||||
var glMatrix = _interopRequireWildcard(require("./common.js"));
|
||||
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
||||
/**
|
||||
* 4 Dimensional Vector
|
||||
* @module vec4
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new, empty vec4
|
||||
*
|
||||
* @returns {vec4} a new 4D vector
|
||||
*/
|
||||
function create() {
|
||||
var out = new glMatrix.ARRAY_TYPE(4);
|
||||
if (glMatrix.ARRAY_TYPE != Float32Array) {
|
||||
out[0] = 0;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 0;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new vec4 initialized with values from an existing vector
|
||||
*
|
||||
* @param {ReadonlyVec4} a vector to clone
|
||||
* @returns {vec4} a new 4D vector
|
||||
*/
|
||||
function clone(a) {
|
||||
var out = new glMatrix.ARRAY_TYPE(4);
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new vec4 initialized with the given values
|
||||
*
|
||||
* @param {Number} x X component
|
||||
* @param {Number} y Y component
|
||||
* @param {Number} z Z component
|
||||
* @param {Number} w W component
|
||||
* @returns {vec4} a new 4D vector
|
||||
*/
|
||||
function fromValues(x, y, z, w) {
|
||||
var out = new glMatrix.ARRAY_TYPE(4);
|
||||
out[0] = x;
|
||||
out[1] = y;
|
||||
out[2] = z;
|
||||
out[3] = w;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy the values from one vec4 to another
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the source vector
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function copy(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a vec4 to the given values
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {Number} x X component
|
||||
* @param {Number} y Y component
|
||||
* @param {Number} z Z component
|
||||
* @param {Number} w W component
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function set(out, x, y, z, w) {
|
||||
out[0] = x;
|
||||
out[1] = y;
|
||||
out[2] = z;
|
||||
out[3] = w;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two vec4's
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function add(out, a, b) {
|
||||
out[0] = a[0] + b[0];
|
||||
out[1] = a[1] + b[1];
|
||||
out[2] = a[2] + b[2];
|
||||
out[3] = a[3] + b[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subtracts vector b from vector a
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function subtract(out, a, b) {
|
||||
out[0] = a[0] - b[0];
|
||||
out[1] = a[1] - b[1];
|
||||
out[2] = a[2] - b[2];
|
||||
out[3] = a[3] - b[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies two vec4's
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function multiply(out, a, b) {
|
||||
out[0] = a[0] * b[0];
|
||||
out[1] = a[1] * b[1];
|
||||
out[2] = a[2] * b[2];
|
||||
out[3] = a[3] * b[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Divides two vec4's
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function divide(out, a, b) {
|
||||
out[0] = a[0] / b[0];
|
||||
out[1] = a[1] / b[1];
|
||||
out[2] = a[2] / b[2];
|
||||
out[3] = a[3] / b[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Math.ceil the components of a vec4
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a vector to ceil
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function ceil(out, a) {
|
||||
out[0] = Math.ceil(a[0]);
|
||||
out[1] = Math.ceil(a[1]);
|
||||
out[2] = Math.ceil(a[2]);
|
||||
out[3] = Math.ceil(a[3]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Math.floor the components of a vec4
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a vector to floor
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function floor(out, a) {
|
||||
out[0] = Math.floor(a[0]);
|
||||
out[1] = Math.floor(a[1]);
|
||||
out[2] = Math.floor(a[2]);
|
||||
out[3] = Math.floor(a[3]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the minimum of two vec4's
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function min(out, a, b) {
|
||||
out[0] = Math.min(a[0], b[0]);
|
||||
out[1] = Math.min(a[1], b[1]);
|
||||
out[2] = Math.min(a[2], b[2]);
|
||||
out[3] = Math.min(a[3], b[3]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum of two vec4's
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function max(out, a, b) {
|
||||
out[0] = Math.max(a[0], b[0]);
|
||||
out[1] = Math.max(a[1], b[1]);
|
||||
out[2] = Math.max(a[2], b[2]);
|
||||
out[3] = Math.max(a[3], b[3]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* symmetric round the components of a vec4
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a vector to round
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function round(out, a) {
|
||||
out[0] = glMatrix.round(a[0]);
|
||||
out[1] = glMatrix.round(a[1]);
|
||||
out[2] = glMatrix.round(a[2]);
|
||||
out[3] = glMatrix.round(a[3]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scales a vec4 by a scalar number
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the vector to scale
|
||||
* @param {Number} b amount to scale the vector by
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function scale(out, a, b) {
|
||||
out[0] = a[0] * b;
|
||||
out[1] = a[1] * b;
|
||||
out[2] = a[2] * b;
|
||||
out[3] = a[3] * b;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two vec4's after scaling the second operand by a scalar value
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @param {Number} scale the amount to scale b by before adding
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function scaleAndAdd(out, a, b, scale) {
|
||||
out[0] = a[0] + b[0] * scale;
|
||||
out[1] = a[1] + b[1] * scale;
|
||||
out[2] = a[2] + b[2] * scale;
|
||||
out[3] = a[3] + b[3] * scale;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the euclidian distance between two vec4's
|
||||
*
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {Number} distance between a and b
|
||||
*/
|
||||
function distance(a, b) {
|
||||
var x = b[0] - a[0];
|
||||
var y = b[1] - a[1];
|
||||
var z = b[2] - a[2];
|
||||
var w = b[3] - a[3];
|
||||
return Math.sqrt(x * x + y * y + z * z + w * w);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the squared euclidian distance between two vec4's
|
||||
*
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {Number} squared distance between a and b
|
||||
*/
|
||||
function squaredDistance(a, b) {
|
||||
var x = b[0] - a[0];
|
||||
var y = b[1] - a[1];
|
||||
var z = b[2] - a[2];
|
||||
var w = b[3] - a[3];
|
||||
return x * x + y * y + z * z + w * w;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the length of a vec4
|
||||
*
|
||||
* @param {ReadonlyVec4} a vector to calculate length of
|
||||
* @returns {Number} length of a
|
||||
*/
|
||||
function length(a) {
|
||||
var x = a[0];
|
||||
var y = a[1];
|
||||
var z = a[2];
|
||||
var w = a[3];
|
||||
return Math.sqrt(x * x + y * y + z * z + w * w);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the squared length of a vec4
|
||||
*
|
||||
* @param {ReadonlyVec4} a vector to calculate squared length of
|
||||
* @returns {Number} squared length of a
|
||||
*/
|
||||
function squaredLength(a) {
|
||||
var x = a[0];
|
||||
var y = a[1];
|
||||
var z = a[2];
|
||||
var w = a[3];
|
||||
return x * x + y * y + z * z + w * w;
|
||||
}
|
||||
|
||||
/**
|
||||
* Negates the components of a vec4
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a vector to negate
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function negate(out, a) {
|
||||
out[0] = -a[0];
|
||||
out[1] = -a[1];
|
||||
out[2] = -a[2];
|
||||
out[3] = -a[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the inverse of the components of a vec4
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a vector to invert
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function inverse(out, a) {
|
||||
out[0] = 1.0 / a[0];
|
||||
out[1] = 1.0 / a[1];
|
||||
out[2] = 1.0 / a[2];
|
||||
out[3] = 1.0 / a[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalize a vec4
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a vector to normalize
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function normalize(out, a) {
|
||||
var x = a[0];
|
||||
var y = a[1];
|
||||
var z = a[2];
|
||||
var w = a[3];
|
||||
var len = x * x + y * y + z * z + w * w;
|
||||
if (len > 0) {
|
||||
len = 1 / Math.sqrt(len);
|
||||
}
|
||||
out[0] = x * len;
|
||||
out[1] = y * len;
|
||||
out[2] = z * len;
|
||||
out[3] = w * len;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the dot product of two vec4's
|
||||
*
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {Number} dot product of a and b
|
||||
*/
|
||||
function dot(a, b) {
|
||||
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the cross-product of three vectors in a 4-dimensional space
|
||||
*
|
||||
* @param {ReadonlyVec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} u the first vector
|
||||
* @param {ReadonlyVec4} v the second vector
|
||||
* @param {ReadonlyVec4} w the third vector
|
||||
* @returns {vec4} result
|
||||
*/
|
||||
function cross(out, u, v, w) {
|
||||
var A = v[0] * w[1] - v[1] * w[0],
|
||||
B = v[0] * w[2] - v[2] * w[0],
|
||||
C = v[0] * w[3] - v[3] * w[0],
|
||||
D = v[1] * w[2] - v[2] * w[1],
|
||||
E = v[1] * w[3] - v[3] * w[1],
|
||||
F = v[2] * w[3] - v[3] * w[2];
|
||||
var G = u[0];
|
||||
var H = u[1];
|
||||
var I = u[2];
|
||||
var J = u[3];
|
||||
out[0] = H * F - I * E + J * D;
|
||||
out[1] = -(G * F) + I * C - J * B;
|
||||
out[2] = G * E - H * C + J * A;
|
||||
out[3] = -(G * D) + H * B - I * A;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a linear interpolation between two vec4's
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function lerp(out, a, b, t) {
|
||||
var ax = a[0];
|
||||
var ay = a[1];
|
||||
var az = a[2];
|
||||
var aw = a[3];
|
||||
out[0] = ax + t * (b[0] - ax);
|
||||
out[1] = ay + t * (b[1] - ay);
|
||||
out[2] = az + t * (b[2] - az);
|
||||
out[3] = aw + t * (b[3] - aw);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a random vector with the given scale
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function random(out, scale) {
|
||||
scale = scale === undefined ? 1.0 : scale;
|
||||
|
||||
// Marsaglia, George. Choosing a Point from the Surface of a
|
||||
// Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.
|
||||
// http://projecteuclid.org/euclid.aoms/1177692644;
|
||||
var v1, v2, v3, v4;
|
||||
var s1, s2;
|
||||
var rand;
|
||||
rand = glMatrix.RANDOM();
|
||||
v1 = rand * 2 - 1;
|
||||
v2 = (4 * glMatrix.RANDOM() - 2) * Math.sqrt(rand * -rand + rand);
|
||||
s1 = v1 * v1 + v2 * v2;
|
||||
rand = glMatrix.RANDOM();
|
||||
v3 = rand * 2 - 1;
|
||||
v4 = (4 * glMatrix.RANDOM() - 2) * Math.sqrt(rand * -rand + rand);
|
||||
s2 = v3 * v3 + v4 * v4;
|
||||
var d = Math.sqrt((1 - s1) / s2);
|
||||
out[0] = scale * v1;
|
||||
out[1] = scale * v2;
|
||||
out[2] = scale * v3 * d;
|
||||
out[3] = scale * v4 * d;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec4 with a mat4.
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the vector to transform
|
||||
* @param {ReadonlyMat4} m matrix to transform with
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function transformMat4(out, a, m) {
|
||||
var x = a[0],
|
||||
y = a[1],
|
||||
z = a[2],
|
||||
w = a[3];
|
||||
out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;
|
||||
out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;
|
||||
out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;
|
||||
out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec4 with a quat
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the vector to transform
|
||||
* @param {ReadonlyQuat} q normalized quaternion to transform with
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function transformQuat(out, a, q) {
|
||||
// Fast Vector Rotation using Quaternions by Robert Eisele
|
||||
// https://raw.org/proof/vector-rotation-using-quaternions/
|
||||
|
||||
var qx = q[0],
|
||||
qy = q[1],
|
||||
qz = q[2],
|
||||
qw = q[3];
|
||||
var vx = a[0],
|
||||
vy = a[1],
|
||||
vz = a[2];
|
||||
|
||||
// t = q x v
|
||||
var tx = qy * vz - qz * vy;
|
||||
var ty = qz * vx - qx * vz;
|
||||
var tz = qx * vy - qy * vx;
|
||||
|
||||
// t = 2t
|
||||
tx = tx + tx;
|
||||
ty = ty + ty;
|
||||
tz = tz + tz;
|
||||
|
||||
// v + w t + q x t
|
||||
out[0] = vx + qw * tx + qy * tz - qz * ty;
|
||||
out[1] = vy + qw * ty + qz * tx - qx * tz;
|
||||
out[2] = vz + qw * tz + qx * ty - qy * tx;
|
||||
out[3] = a[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a vec4 to zero
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
function zero(out) {
|
||||
out[0] = 0.0;
|
||||
out[1] = 0.0;
|
||||
out[2] = 0.0;
|
||||
out[3] = 0.0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of a vector
|
||||
*
|
||||
* @param {ReadonlyVec4} a vector to represent as a string
|
||||
* @returns {String} string representation of the vector
|
||||
*/
|
||||
function str(a) {
|
||||
return "vec4(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)
|
||||
*
|
||||
* @param {ReadonlyVec4} a The first vector.
|
||||
* @param {ReadonlyVec4} b The second vector.
|
||||
* @returns {Boolean} True if the vectors are equal, false otherwise.
|
||||
*/
|
||||
function exactEquals(a, b) {
|
||||
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the vectors have approximately the same elements in the same position.
|
||||
*
|
||||
* @param {ReadonlyVec4} a The first vector.
|
||||
* @param {ReadonlyVec4} b The second vector.
|
||||
* @returns {Boolean} True if the vectors are equal, false otherwise.
|
||||
*/
|
||||
function equals(a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3];
|
||||
var b0 = b[0],
|
||||
b1 = b[1],
|
||||
b2 = b[2],
|
||||
b3 = b[3];
|
||||
return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for {@link vec4.subtract}
|
||||
* @function
|
||||
*/
|
||||
var sub = exports.sub = subtract;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec4.multiply}
|
||||
* @function
|
||||
*/
|
||||
var mul = exports.mul = multiply;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec4.divide}
|
||||
* @function
|
||||
*/
|
||||
var div = exports.div = divide;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec4.distance}
|
||||
* @function
|
||||
*/
|
||||
var dist = exports.dist = distance;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec4.squaredDistance}
|
||||
* @function
|
||||
*/
|
||||
var sqrDist = exports.sqrDist = squaredDistance;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec4.length}
|
||||
* @function
|
||||
*/
|
||||
var len = exports.len = length;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec4.squaredLength}
|
||||
* @function
|
||||
*/
|
||||
var sqrLen = exports.sqrLen = squaredLength;
|
||||
|
||||
/**
|
||||
* Perform some operation over an array of vec4s.
|
||||
*
|
||||
* @param {Array} a the array of vectors to iterate over
|
||||
* @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed
|
||||
* @param {Number} offset Number of elements to skip at the beginning of the array
|
||||
* @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array
|
||||
* @param {Function} fn Function to call for each vector in the array
|
||||
* @param {Object} [arg] additional argument to pass to fn
|
||||
* @returns {Array} a
|
||||
* @function
|
||||
*/
|
||||
var forEach = exports.forEach = function () {
|
||||
var vec = create();
|
||||
return function (a, stride, offset, count, fn, arg) {
|
||||
var i, l;
|
||||
if (!stride) {
|
||||
stride = 4;
|
||||
}
|
||||
if (!offset) {
|
||||
offset = 0;
|
||||
}
|
||||
if (count) {
|
||||
l = Math.min(count * stride + offset, a.length);
|
||||
} else {
|
||||
l = a.length;
|
||||
}
|
||||
for (i = offset; i < l; i += stride) {
|
||||
vec[0] = a[i];
|
||||
vec[1] = a[i + 1];
|
||||
vec[2] = a[i + 2];
|
||||
vec[3] = a[i + 3];
|
||||
fn(vec, vec, arg);
|
||||
a[i] = vec[0];
|
||||
a[i + 1] = vec[1];
|
||||
a[i + 2] = vec[2];
|
||||
a[i + 3] = vec[3];
|
||||
}
|
||||
return a;
|
||||
};
|
||||
}();
|
||||
65
node_modules/gl-matrix/esm/common.js
generated
vendored
65
node_modules/gl-matrix/esm/common.js
generated
vendored
@@ -1,65 +0,0 @@
|
||||
/**
|
||||
* Common utilities
|
||||
* @module glMatrix
|
||||
*/
|
||||
|
||||
// Configuration Constants
|
||||
export var EPSILON = 0.000001;
|
||||
export var ARRAY_TYPE = typeof Float32Array !== "undefined" ? Float32Array : Array;
|
||||
export var RANDOM = Math.random;
|
||||
export var ANGLE_ORDER = "zyx";
|
||||
|
||||
/**
|
||||
* Symmetric round
|
||||
* see https://www.npmjs.com/package/round-half-up-symmetric#user-content-detailed-background
|
||||
*
|
||||
* @param {Number} a value to round
|
||||
*/
|
||||
export function round(a) {
|
||||
if (a >= 0) return Math.round(a);
|
||||
return a % 0.5 === 0 ? Math.floor(a) : Math.round(a);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the type of array used when creating new vectors and matrices
|
||||
*
|
||||
* @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array
|
||||
*/
|
||||
export function setMatrixArrayType(type) {
|
||||
ARRAY_TYPE = type;
|
||||
}
|
||||
var degree = Math.PI / 180;
|
||||
var radian = 180 / Math.PI;
|
||||
|
||||
/**
|
||||
* Convert Degree To Radian
|
||||
*
|
||||
* @param {Number} a Angle in Degrees
|
||||
*/
|
||||
export function toRadian(a) {
|
||||
return a * degree;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert Radian To Degree
|
||||
*
|
||||
* @param {Number} a Angle in Radians
|
||||
*/
|
||||
export function toDegree(a) {
|
||||
return a * radian;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests whether or not the arguments have approximately the same value, within an absolute
|
||||
* or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less
|
||||
* than or equal to 1.0, and a relative tolerance is used for larger values)
|
||||
*
|
||||
* @param {Number} a The first number to test.
|
||||
* @param {Number} b The second number to test.
|
||||
* @param {Number} tolerance Absolute or relative tolerance (default glMatrix.EPSILON)
|
||||
* @returns {Boolean} True if the numbers are approximately equal, false otherwise.
|
||||
*/
|
||||
export function equals(a, b) {
|
||||
var tolerance = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EPSILON;
|
||||
return Math.abs(a - b) <= tolerance * Math.max(1, Math.abs(a), Math.abs(b));
|
||||
}
|
||||
11
node_modules/gl-matrix/esm/index.js
generated
vendored
11
node_modules/gl-matrix/esm/index.js
generated
vendored
@@ -1,11 +0,0 @@
|
||||
import * as glMatrix from "./common.js";
|
||||
import * as mat2 from "./mat2.js";
|
||||
import * as mat2d from "./mat2d.js";
|
||||
import * as mat3 from "./mat3.js";
|
||||
import * as mat4 from "./mat4.js";
|
||||
import * as quat from "./quat.js";
|
||||
import * as quat2 from "./quat2.js";
|
||||
import * as vec2 from "./vec2.js";
|
||||
import * as vec3 from "./vec3.js";
|
||||
import * as vec4 from "./vec4.js";
|
||||
export { glMatrix, mat2, mat2d, mat3, mat4, quat, quat2, vec2, vec3, vec4 };
|
||||
429
node_modules/gl-matrix/esm/mat2.js
generated
vendored
429
node_modules/gl-matrix/esm/mat2.js
generated
vendored
@@ -1,429 +0,0 @@
|
||||
import * as glMatrix from "./common.js";
|
||||
|
||||
/**
|
||||
* 2x2 Matrix
|
||||
* @module mat2
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new identity mat2
|
||||
*
|
||||
* @returns {mat2} a new 2x2 matrix
|
||||
*/
|
||||
export function create() {
|
||||
var out = new glMatrix.ARRAY_TYPE(4);
|
||||
if (glMatrix.ARRAY_TYPE != Float32Array) {
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
}
|
||||
out[0] = 1;
|
||||
out[3] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new mat2 initialized with values from an existing matrix
|
||||
*
|
||||
* @param {ReadonlyMat2} a matrix to clone
|
||||
* @returns {mat2} a new 2x2 matrix
|
||||
*/
|
||||
export function clone(a) {
|
||||
var out = new glMatrix.ARRAY_TYPE(4);
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy the values from one mat2 to another
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the source matrix
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
export function copy(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a mat2 to the identity matrix
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
export function identity(out) {
|
||||
out[0] = 1;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new mat2 with the given values
|
||||
*
|
||||
* @param {Number} m00 Component in column 0, row 0 position (index 0)
|
||||
* @param {Number} m01 Component in column 0, row 1 position (index 1)
|
||||
* @param {Number} m10 Component in column 1, row 0 position (index 2)
|
||||
* @param {Number} m11 Component in column 1, row 1 position (index 3)
|
||||
* @returns {mat2} out A new 2x2 matrix
|
||||
*/
|
||||
export function fromValues(m00, m01, m10, m11) {
|
||||
var out = new glMatrix.ARRAY_TYPE(4);
|
||||
out[0] = m00;
|
||||
out[1] = m01;
|
||||
out[2] = m10;
|
||||
out[3] = m11;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a mat2 to the given values
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {Number} m00 Component in column 0, row 0 position (index 0)
|
||||
* @param {Number} m01 Component in column 0, row 1 position (index 1)
|
||||
* @param {Number} m10 Component in column 1, row 0 position (index 2)
|
||||
* @param {Number} m11 Component in column 1, row 1 position (index 3)
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
export function set(out, m00, m01, m10, m11) {
|
||||
out[0] = m00;
|
||||
out[1] = m01;
|
||||
out[2] = m10;
|
||||
out[3] = m11;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transpose the values of a mat2
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the source matrix
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
export function transpose(out, a) {
|
||||
// If we are transposing ourselves we can skip a few steps but have to cache
|
||||
// some values
|
||||
if (out === a) {
|
||||
var a1 = a[1];
|
||||
out[1] = a[2];
|
||||
out[2] = a1;
|
||||
} else {
|
||||
out[0] = a[0];
|
||||
out[1] = a[2];
|
||||
out[2] = a[1];
|
||||
out[3] = a[3];
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Inverts a mat2
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the source matrix
|
||||
* @returns {mat2 | null} out, or null if source matrix is not invertible
|
||||
*/
|
||||
export function invert(out, a) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3];
|
||||
|
||||
// Calculate the determinant
|
||||
var det = a0 * a3 - a2 * a1;
|
||||
if (!det) {
|
||||
return null;
|
||||
}
|
||||
det = 1.0 / det;
|
||||
out[0] = a3 * det;
|
||||
out[1] = -a1 * det;
|
||||
out[2] = -a2 * det;
|
||||
out[3] = a0 * det;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the adjugate of a mat2
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the source matrix
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
export function adjoint(out, a) {
|
||||
// Caching this value is necessary if out == a
|
||||
var a0 = a[0];
|
||||
out[0] = a[3];
|
||||
out[1] = -a[1];
|
||||
out[2] = -a[2];
|
||||
out[3] = a0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the determinant of a mat2
|
||||
*
|
||||
* @param {ReadonlyMat2} a the source matrix
|
||||
* @returns {Number} determinant of a
|
||||
*/
|
||||
export function determinant(a) {
|
||||
return a[0] * a[3] - a[2] * a[1];
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies two mat2's
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the first operand
|
||||
* @param {ReadonlyMat2} b the second operand
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
export function multiply(out, a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3];
|
||||
var b0 = b[0],
|
||||
b1 = b[1],
|
||||
b2 = b[2],
|
||||
b3 = b[3];
|
||||
out[0] = a0 * b0 + a2 * b1;
|
||||
out[1] = a1 * b0 + a3 * b1;
|
||||
out[2] = a0 * b2 + a2 * b3;
|
||||
out[3] = a1 * b2 + a3 * b3;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a mat2 by the given angle
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the matrix to rotate
|
||||
* @param {Number} rad the angle to rotate the matrix by
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
export function rotate(out, a, rad) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3];
|
||||
var s = Math.sin(rad);
|
||||
var c = Math.cos(rad);
|
||||
out[0] = a0 * c + a2 * s;
|
||||
out[1] = a1 * c + a3 * s;
|
||||
out[2] = a0 * -s + a2 * c;
|
||||
out[3] = a1 * -s + a3 * c;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scales the mat2 by the dimensions in the given vec2
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the matrix to rotate
|
||||
* @param {ReadonlyVec2} v the vec2 to scale the matrix by
|
||||
* @returns {mat2} out
|
||||
**/
|
||||
export function scale(out, a, v) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3];
|
||||
var v0 = v[0],
|
||||
v1 = v[1];
|
||||
out[0] = a0 * v0;
|
||||
out[1] = a1 * v0;
|
||||
out[2] = a2 * v1;
|
||||
out[3] = a3 * v1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matrix from a given angle
|
||||
* This is equivalent to (but much faster than):
|
||||
*
|
||||
* mat2.identity(dest);
|
||||
* mat2.rotate(dest, dest, rad);
|
||||
*
|
||||
* @param {mat2} out mat2 receiving operation result
|
||||
* @param {Number} rad the angle to rotate the matrix by
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
export function fromRotation(out, rad) {
|
||||
var s = Math.sin(rad);
|
||||
var c = Math.cos(rad);
|
||||
out[0] = c;
|
||||
out[1] = s;
|
||||
out[2] = -s;
|
||||
out[3] = c;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matrix from a vector scaling
|
||||
* This is equivalent to (but much faster than):
|
||||
*
|
||||
* mat2.identity(dest);
|
||||
* mat2.scale(dest, dest, vec);
|
||||
*
|
||||
* @param {mat2} out mat2 receiving operation result
|
||||
* @param {ReadonlyVec2} v Scaling vector
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
export function fromScaling(out, v) {
|
||||
out[0] = v[0];
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = v[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of a mat2
|
||||
*
|
||||
* @param {ReadonlyMat2} a matrix to represent as a string
|
||||
* @returns {String} string representation of the matrix
|
||||
*/
|
||||
export function str(a) {
|
||||
return "mat2(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Frobenius norm of a mat2
|
||||
*
|
||||
* @param {ReadonlyMat2} a the matrix to calculate Frobenius norm of
|
||||
* @returns {Number} Frobenius norm
|
||||
*/
|
||||
export function frob(a) {
|
||||
return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns L, D and U matrices (Lower triangular, Diagonal and Upper triangular) by factorizing the input matrix
|
||||
* @param {ReadonlyMat2} L the lower triangular matrix
|
||||
* @param {ReadonlyMat2} D the diagonal matrix
|
||||
* @param {ReadonlyMat2} U the upper triangular matrix
|
||||
* @param {ReadonlyMat2} a the input matrix to factorize
|
||||
*/
|
||||
|
||||
export function LDU(L, D, U, a) {
|
||||
L[2] = a[2] / a[0];
|
||||
U[0] = a[0];
|
||||
U[1] = a[1];
|
||||
U[3] = a[3] - L[2] * U[1];
|
||||
return [L, D, U];
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two mat2's
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the first operand
|
||||
* @param {ReadonlyMat2} b the second operand
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
export function add(out, a, b) {
|
||||
out[0] = a[0] + b[0];
|
||||
out[1] = a[1] + b[1];
|
||||
out[2] = a[2] + b[2];
|
||||
out[3] = a[3] + b[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subtracts matrix b from matrix a
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the first operand
|
||||
* @param {ReadonlyMat2} b the second operand
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
export function subtract(out, a, b) {
|
||||
out[0] = a[0] - b[0];
|
||||
out[1] = a[1] - b[1];
|
||||
out[2] = a[2] - b[2];
|
||||
out[3] = a[3] - b[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
|
||||
*
|
||||
* @param {ReadonlyMat2} a The first matrix.
|
||||
* @param {ReadonlyMat2} b The second matrix.
|
||||
* @returns {Boolean} True if the matrices are equal, false otherwise.
|
||||
*/
|
||||
export function exactEquals(a, b) {
|
||||
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the matrices have approximately the same elements in the same position.
|
||||
*
|
||||
* @param {ReadonlyMat2} a The first matrix.
|
||||
* @param {ReadonlyMat2} b The second matrix.
|
||||
* @returns {Boolean} True if the matrices are equal, false otherwise.
|
||||
*/
|
||||
export function equals(a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3];
|
||||
var b0 = b[0],
|
||||
b1 = b[1],
|
||||
b2 = b[2],
|
||||
b3 = b[3];
|
||||
return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiply each element of the matrix by a scalar.
|
||||
*
|
||||
* @param {mat2} out the receiving matrix
|
||||
* @param {ReadonlyMat2} a the matrix to scale
|
||||
* @param {Number} b amount to scale the matrix's elements by
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
export function multiplyScalar(out, a, b) {
|
||||
out[0] = a[0] * b;
|
||||
out[1] = a[1] * b;
|
||||
out[2] = a[2] * b;
|
||||
out[3] = a[3] * b;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two mat2's after multiplying each element of the second operand by a scalar value.
|
||||
*
|
||||
* @param {mat2} out the receiving vector
|
||||
* @param {ReadonlyMat2} a the first operand
|
||||
* @param {ReadonlyMat2} b the second operand
|
||||
* @param {Number} scale the amount to scale b's elements by before adding
|
||||
* @returns {mat2} out
|
||||
*/
|
||||
export function multiplyScalarAndAdd(out, a, b, scale) {
|
||||
out[0] = a[0] + b[0] * scale;
|
||||
out[1] = a[1] + b[1] * scale;
|
||||
out[2] = a[2] + b[2] * scale;
|
||||
out[3] = a[3] + b[3] * scale;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for {@link mat2.multiply}
|
||||
* @function
|
||||
*/
|
||||
export var mul = multiply;
|
||||
|
||||
/**
|
||||
* Alias for {@link mat2.subtract}
|
||||
* @function
|
||||
*/
|
||||
export var sub = subtract;
|
||||
482
node_modules/gl-matrix/esm/mat2d.js
generated
vendored
482
node_modules/gl-matrix/esm/mat2d.js
generated
vendored
@@ -1,482 +0,0 @@
|
||||
import * as glMatrix from "./common.js";
|
||||
|
||||
/**
|
||||
* 2x3 Matrix
|
||||
* @module mat2d
|
||||
* @description
|
||||
* A mat2d contains six elements defined as:
|
||||
* <pre>
|
||||
* [a, b,
|
||||
* c, d,
|
||||
* tx, ty]
|
||||
* </pre>
|
||||
* This is a short form for the 3x3 matrix:
|
||||
* <pre>
|
||||
* [a, b, 0,
|
||||
* c, d, 0,
|
||||
* tx, ty, 1]
|
||||
* </pre>
|
||||
* The last column is ignored so the array is shorter and operations are faster.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new identity mat2d
|
||||
*
|
||||
* @returns {mat2d} a new 2x3 matrix
|
||||
*/
|
||||
export function create() {
|
||||
var out = new glMatrix.ARRAY_TYPE(6);
|
||||
if (glMatrix.ARRAY_TYPE != Float32Array) {
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[4] = 0;
|
||||
out[5] = 0;
|
||||
}
|
||||
out[0] = 1;
|
||||
out[3] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new mat2d initialized with values from an existing matrix
|
||||
*
|
||||
* @param {ReadonlyMat2d} a matrix to clone
|
||||
* @returns {mat2d} a new 2x3 matrix
|
||||
*/
|
||||
export function clone(a) {
|
||||
var out = new glMatrix.ARRAY_TYPE(6);
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
out[4] = a[4];
|
||||
out[5] = a[5];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy the values from one mat2d to another
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the source matrix
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
export function copy(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
out[4] = a[4];
|
||||
out[5] = a[5];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a mat2d to the identity matrix
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
export function identity(out) {
|
||||
out[0] = 1;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 1;
|
||||
out[4] = 0;
|
||||
out[5] = 0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new mat2d with the given values
|
||||
*
|
||||
* @param {Number} a Component A (index 0)
|
||||
* @param {Number} b Component B (index 1)
|
||||
* @param {Number} c Component C (index 2)
|
||||
* @param {Number} d Component D (index 3)
|
||||
* @param {Number} tx Component TX (index 4)
|
||||
* @param {Number} ty Component TY (index 5)
|
||||
* @returns {mat2d} A new mat2d
|
||||
*/
|
||||
export function fromValues(a, b, c, d, tx, ty) {
|
||||
var out = new glMatrix.ARRAY_TYPE(6);
|
||||
out[0] = a;
|
||||
out[1] = b;
|
||||
out[2] = c;
|
||||
out[3] = d;
|
||||
out[4] = tx;
|
||||
out[5] = ty;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a mat2d to the given values
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {Number} a Component A (index 0)
|
||||
* @param {Number} b Component B (index 1)
|
||||
* @param {Number} c Component C (index 2)
|
||||
* @param {Number} d Component D (index 3)
|
||||
* @param {Number} tx Component TX (index 4)
|
||||
* @param {Number} ty Component TY (index 5)
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
export function set(out, a, b, c, d, tx, ty) {
|
||||
out[0] = a;
|
||||
out[1] = b;
|
||||
out[2] = c;
|
||||
out[3] = d;
|
||||
out[4] = tx;
|
||||
out[5] = ty;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Inverts a mat2d
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the source matrix
|
||||
* @returns {mat2d | null} out, or null if source matrix is not invertible
|
||||
*/
|
||||
export function invert(out, a) {
|
||||
var aa = a[0],
|
||||
ab = a[1],
|
||||
ac = a[2],
|
||||
ad = a[3];
|
||||
var atx = a[4],
|
||||
aty = a[5];
|
||||
var det = aa * ad - ab * ac;
|
||||
if (!det) {
|
||||
return null;
|
||||
}
|
||||
det = 1.0 / det;
|
||||
out[0] = ad * det;
|
||||
out[1] = -ab * det;
|
||||
out[2] = -ac * det;
|
||||
out[3] = aa * det;
|
||||
out[4] = (ac * aty - ad * atx) * det;
|
||||
out[5] = (ab * atx - aa * aty) * det;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the determinant of a mat2d
|
||||
*
|
||||
* @param {ReadonlyMat2d} a the source matrix
|
||||
* @returns {Number} determinant of a
|
||||
*/
|
||||
export function determinant(a) {
|
||||
return a[0] * a[3] - a[1] * a[2];
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies two mat2d's
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the first operand
|
||||
* @param {ReadonlyMat2d} b the second operand
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
export function multiply(out, a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3],
|
||||
a4 = a[4],
|
||||
a5 = a[5];
|
||||
var b0 = b[0],
|
||||
b1 = b[1],
|
||||
b2 = b[2],
|
||||
b3 = b[3],
|
||||
b4 = b[4],
|
||||
b5 = b[5];
|
||||
out[0] = a0 * b0 + a2 * b1;
|
||||
out[1] = a1 * b0 + a3 * b1;
|
||||
out[2] = a0 * b2 + a2 * b3;
|
||||
out[3] = a1 * b2 + a3 * b3;
|
||||
out[4] = a0 * b4 + a2 * b5 + a4;
|
||||
out[5] = a1 * b4 + a3 * b5 + a5;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a mat2d by the given angle
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the matrix to rotate
|
||||
* @param {Number} rad the angle to rotate the matrix by
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
export function rotate(out, a, rad) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3],
|
||||
a4 = a[4],
|
||||
a5 = a[5];
|
||||
var s = Math.sin(rad);
|
||||
var c = Math.cos(rad);
|
||||
out[0] = a0 * c + a2 * s;
|
||||
out[1] = a1 * c + a3 * s;
|
||||
out[2] = a0 * -s + a2 * c;
|
||||
out[3] = a1 * -s + a3 * c;
|
||||
out[4] = a4;
|
||||
out[5] = a5;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scales the mat2d by the dimensions in the given vec2
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the matrix to translate
|
||||
* @param {ReadonlyVec2} v the vec2 to scale the matrix by
|
||||
* @returns {mat2d} out
|
||||
**/
|
||||
export function scale(out, a, v) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3],
|
||||
a4 = a[4],
|
||||
a5 = a[5];
|
||||
var v0 = v[0],
|
||||
v1 = v[1];
|
||||
out[0] = a0 * v0;
|
||||
out[1] = a1 * v0;
|
||||
out[2] = a2 * v1;
|
||||
out[3] = a3 * v1;
|
||||
out[4] = a4;
|
||||
out[5] = a5;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Translates the mat2d by the dimensions in the given vec2
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the matrix to translate
|
||||
* @param {ReadonlyVec2} v the vec2 to translate the matrix by
|
||||
* @returns {mat2d} out
|
||||
**/
|
||||
export function translate(out, a, v) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3],
|
||||
a4 = a[4],
|
||||
a5 = a[5];
|
||||
var v0 = v[0],
|
||||
v1 = v[1];
|
||||
out[0] = a0;
|
||||
out[1] = a1;
|
||||
out[2] = a2;
|
||||
out[3] = a3;
|
||||
out[4] = a0 * v0 + a2 * v1 + a4;
|
||||
out[5] = a1 * v0 + a3 * v1 + a5;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matrix from a given angle
|
||||
* This is equivalent to (but much faster than):
|
||||
*
|
||||
* mat2d.identity(dest);
|
||||
* mat2d.rotate(dest, dest, rad);
|
||||
*
|
||||
* @param {mat2d} out mat2d receiving operation result
|
||||
* @param {Number} rad the angle to rotate the matrix by
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
export function fromRotation(out, rad) {
|
||||
var s = Math.sin(rad),
|
||||
c = Math.cos(rad);
|
||||
out[0] = c;
|
||||
out[1] = s;
|
||||
out[2] = -s;
|
||||
out[3] = c;
|
||||
out[4] = 0;
|
||||
out[5] = 0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matrix from a vector scaling
|
||||
* This is equivalent to (but much faster than):
|
||||
*
|
||||
* mat2d.identity(dest);
|
||||
* mat2d.scale(dest, dest, vec);
|
||||
*
|
||||
* @param {mat2d} out mat2d receiving operation result
|
||||
* @param {ReadonlyVec2} v Scaling vector
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
export function fromScaling(out, v) {
|
||||
out[0] = v[0];
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = v[1];
|
||||
out[4] = 0;
|
||||
out[5] = 0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matrix from a vector translation
|
||||
* This is equivalent to (but much faster than):
|
||||
*
|
||||
* mat2d.identity(dest);
|
||||
* mat2d.translate(dest, dest, vec);
|
||||
*
|
||||
* @param {mat2d} out mat2d receiving operation result
|
||||
* @param {ReadonlyVec2} v Translation vector
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
export function fromTranslation(out, v) {
|
||||
out[0] = 1;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 1;
|
||||
out[4] = v[0];
|
||||
out[5] = v[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of a mat2d
|
||||
*
|
||||
* @param {ReadonlyMat2d} a matrix to represent as a string
|
||||
* @returns {String} string representation of the matrix
|
||||
*/
|
||||
export function str(a) {
|
||||
return "mat2d(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ", " + a[4] + ", " + a[5] + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Frobenius norm of a mat2d
|
||||
*
|
||||
* @param {ReadonlyMat2d} a the matrix to calculate Frobenius norm of
|
||||
* @returns {Number} Frobenius norm
|
||||
*/
|
||||
export function frob(a) {
|
||||
return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3] + a[4] * a[4] + a[5] * a[5] + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two mat2d's
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the first operand
|
||||
* @param {ReadonlyMat2d} b the second operand
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
export function add(out, a, b) {
|
||||
out[0] = a[0] + b[0];
|
||||
out[1] = a[1] + b[1];
|
||||
out[2] = a[2] + b[2];
|
||||
out[3] = a[3] + b[3];
|
||||
out[4] = a[4] + b[4];
|
||||
out[5] = a[5] + b[5];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subtracts matrix b from matrix a
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the first operand
|
||||
* @param {ReadonlyMat2d} b the second operand
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
export function subtract(out, a, b) {
|
||||
out[0] = a[0] - b[0];
|
||||
out[1] = a[1] - b[1];
|
||||
out[2] = a[2] - b[2];
|
||||
out[3] = a[3] - b[3];
|
||||
out[4] = a[4] - b[4];
|
||||
out[5] = a[5] - b[5];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiply each element of the matrix by a scalar.
|
||||
*
|
||||
* @param {mat2d} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the matrix to scale
|
||||
* @param {Number} b amount to scale the matrix's elements by
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
export function multiplyScalar(out, a, b) {
|
||||
out[0] = a[0] * b;
|
||||
out[1] = a[1] * b;
|
||||
out[2] = a[2] * b;
|
||||
out[3] = a[3] * b;
|
||||
out[4] = a[4] * b;
|
||||
out[5] = a[5] * b;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two mat2d's after multiplying each element of the second operand by a scalar value.
|
||||
*
|
||||
* @param {mat2d} out the receiving vector
|
||||
* @param {ReadonlyMat2d} a the first operand
|
||||
* @param {ReadonlyMat2d} b the second operand
|
||||
* @param {Number} scale the amount to scale b's elements by before adding
|
||||
* @returns {mat2d} out
|
||||
*/
|
||||
export function multiplyScalarAndAdd(out, a, b, scale) {
|
||||
out[0] = a[0] + b[0] * scale;
|
||||
out[1] = a[1] + b[1] * scale;
|
||||
out[2] = a[2] + b[2] * scale;
|
||||
out[3] = a[3] + b[3] * scale;
|
||||
out[4] = a[4] + b[4] * scale;
|
||||
out[5] = a[5] + b[5] * scale;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
|
||||
*
|
||||
* @param {ReadonlyMat2d} a The first matrix.
|
||||
* @param {ReadonlyMat2d} b The second matrix.
|
||||
* @returns {Boolean} True if the matrices are equal, false otherwise.
|
||||
*/
|
||||
export function exactEquals(a, b) {
|
||||
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the matrices have approximately the same elements in the same position.
|
||||
*
|
||||
* @param {ReadonlyMat2d} a The first matrix.
|
||||
* @param {ReadonlyMat2d} b The second matrix.
|
||||
* @returns {Boolean} True if the matrices are equal, false otherwise.
|
||||
*/
|
||||
export function equals(a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3],
|
||||
a4 = a[4],
|
||||
a5 = a[5];
|
||||
var b0 = b[0],
|
||||
b1 = b[1],
|
||||
b2 = b[2],
|
||||
b3 = b[3],
|
||||
b4 = b[4],
|
||||
b5 = b[5];
|
||||
return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5));
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for {@link mat2d.multiply}
|
||||
* @function
|
||||
*/
|
||||
export var mul = multiply;
|
||||
|
||||
/**
|
||||
* Alias for {@link mat2d.subtract}
|
||||
* @function
|
||||
*/
|
||||
export var sub = subtract;
|
||||
773
node_modules/gl-matrix/esm/mat3.js
generated
vendored
773
node_modules/gl-matrix/esm/mat3.js
generated
vendored
@@ -1,773 +0,0 @@
|
||||
import * as glMatrix from "./common.js";
|
||||
|
||||
/**
|
||||
* 3x3 Matrix
|
||||
* @module mat3
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new identity mat3
|
||||
*
|
||||
* @returns {mat3} a new 3x3 matrix
|
||||
*/
|
||||
export function create() {
|
||||
var out = new glMatrix.ARRAY_TYPE(9);
|
||||
if (glMatrix.ARRAY_TYPE != Float32Array) {
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 0;
|
||||
out[5] = 0;
|
||||
out[6] = 0;
|
||||
out[7] = 0;
|
||||
}
|
||||
out[0] = 1;
|
||||
out[4] = 1;
|
||||
out[8] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies the upper-left 3x3 values into the given mat3.
|
||||
*
|
||||
* @param {mat3} out the receiving 3x3 matrix
|
||||
* @param {ReadonlyMat4} a the source 4x4 matrix
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function fromMat4(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[4];
|
||||
out[4] = a[5];
|
||||
out[5] = a[6];
|
||||
out[6] = a[8];
|
||||
out[7] = a[9];
|
||||
out[8] = a[10];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new mat3 initialized with values from an existing matrix
|
||||
*
|
||||
* @param {ReadonlyMat3} a matrix to clone
|
||||
* @returns {mat3} a new 3x3 matrix
|
||||
*/
|
||||
export function clone(a) {
|
||||
var out = new glMatrix.ARRAY_TYPE(9);
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
out[4] = a[4];
|
||||
out[5] = a[5];
|
||||
out[6] = a[6];
|
||||
out[7] = a[7];
|
||||
out[8] = a[8];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy the values from one mat3 to another
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the source matrix
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function copy(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
out[4] = a[4];
|
||||
out[5] = a[5];
|
||||
out[6] = a[6];
|
||||
out[7] = a[7];
|
||||
out[8] = a[8];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new mat3 with the given values
|
||||
*
|
||||
* @param {Number} m00 Component in column 0, row 0 position (index 0)
|
||||
* @param {Number} m01 Component in column 0, row 1 position (index 1)
|
||||
* @param {Number} m02 Component in column 0, row 2 position (index 2)
|
||||
* @param {Number} m10 Component in column 1, row 0 position (index 3)
|
||||
* @param {Number} m11 Component in column 1, row 1 position (index 4)
|
||||
* @param {Number} m12 Component in column 1, row 2 position (index 5)
|
||||
* @param {Number} m20 Component in column 2, row 0 position (index 6)
|
||||
* @param {Number} m21 Component in column 2, row 1 position (index 7)
|
||||
* @param {Number} m22 Component in column 2, row 2 position (index 8)
|
||||
* @returns {mat3} A new mat3
|
||||
*/
|
||||
export function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {
|
||||
var out = new glMatrix.ARRAY_TYPE(9);
|
||||
out[0] = m00;
|
||||
out[1] = m01;
|
||||
out[2] = m02;
|
||||
out[3] = m10;
|
||||
out[4] = m11;
|
||||
out[5] = m12;
|
||||
out[6] = m20;
|
||||
out[7] = m21;
|
||||
out[8] = m22;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a mat3 to the given values
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {Number} m00 Component in column 0, row 0 position (index 0)
|
||||
* @param {Number} m01 Component in column 0, row 1 position (index 1)
|
||||
* @param {Number} m02 Component in column 0, row 2 position (index 2)
|
||||
* @param {Number} m10 Component in column 1, row 0 position (index 3)
|
||||
* @param {Number} m11 Component in column 1, row 1 position (index 4)
|
||||
* @param {Number} m12 Component in column 1, row 2 position (index 5)
|
||||
* @param {Number} m20 Component in column 2, row 0 position (index 6)
|
||||
* @param {Number} m21 Component in column 2, row 1 position (index 7)
|
||||
* @param {Number} m22 Component in column 2, row 2 position (index 8)
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {
|
||||
out[0] = m00;
|
||||
out[1] = m01;
|
||||
out[2] = m02;
|
||||
out[3] = m10;
|
||||
out[4] = m11;
|
||||
out[5] = m12;
|
||||
out[6] = m20;
|
||||
out[7] = m21;
|
||||
out[8] = m22;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a mat3 to the identity matrix
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function identity(out) {
|
||||
out[0] = 1;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 0;
|
||||
out[4] = 1;
|
||||
out[5] = 0;
|
||||
out[6] = 0;
|
||||
out[7] = 0;
|
||||
out[8] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transpose the values of a mat3
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the source matrix
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function transpose(out, a) {
|
||||
// If we are transposing ourselves we can skip a few steps but have to cache some values
|
||||
if (out === a) {
|
||||
var a01 = a[1],
|
||||
a02 = a[2],
|
||||
a12 = a[5];
|
||||
out[1] = a[3];
|
||||
out[2] = a[6];
|
||||
out[3] = a01;
|
||||
out[5] = a[7];
|
||||
out[6] = a02;
|
||||
out[7] = a12;
|
||||
} else {
|
||||
out[0] = a[0];
|
||||
out[1] = a[3];
|
||||
out[2] = a[6];
|
||||
out[3] = a[1];
|
||||
out[4] = a[4];
|
||||
out[5] = a[7];
|
||||
out[6] = a[2];
|
||||
out[7] = a[5];
|
||||
out[8] = a[8];
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Inverts a mat3
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the source matrix
|
||||
* @returns {mat3 | null} out, or null if source matrix is not invertible
|
||||
*/
|
||||
export function invert(out, a) {
|
||||
var a00 = a[0],
|
||||
a01 = a[1],
|
||||
a02 = a[2];
|
||||
var a10 = a[3],
|
||||
a11 = a[4],
|
||||
a12 = a[5];
|
||||
var a20 = a[6],
|
||||
a21 = a[7],
|
||||
a22 = a[8];
|
||||
var b01 = a22 * a11 - a12 * a21;
|
||||
var b11 = -a22 * a10 + a12 * a20;
|
||||
var b21 = a21 * a10 - a11 * a20;
|
||||
|
||||
// Calculate the determinant
|
||||
var det = a00 * b01 + a01 * b11 + a02 * b21;
|
||||
if (!det) {
|
||||
return null;
|
||||
}
|
||||
det = 1.0 / det;
|
||||
out[0] = b01 * det;
|
||||
out[1] = (-a22 * a01 + a02 * a21) * det;
|
||||
out[2] = (a12 * a01 - a02 * a11) * det;
|
||||
out[3] = b11 * det;
|
||||
out[4] = (a22 * a00 - a02 * a20) * det;
|
||||
out[5] = (-a12 * a00 + a02 * a10) * det;
|
||||
out[6] = b21 * det;
|
||||
out[7] = (-a21 * a00 + a01 * a20) * det;
|
||||
out[8] = (a11 * a00 - a01 * a10) * det;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the adjugate of a mat3
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the source matrix
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function adjoint(out, a) {
|
||||
var a00 = a[0],
|
||||
a01 = a[1],
|
||||
a02 = a[2];
|
||||
var a10 = a[3],
|
||||
a11 = a[4],
|
||||
a12 = a[5];
|
||||
var a20 = a[6],
|
||||
a21 = a[7],
|
||||
a22 = a[8];
|
||||
out[0] = a11 * a22 - a12 * a21;
|
||||
out[1] = a02 * a21 - a01 * a22;
|
||||
out[2] = a01 * a12 - a02 * a11;
|
||||
out[3] = a12 * a20 - a10 * a22;
|
||||
out[4] = a00 * a22 - a02 * a20;
|
||||
out[5] = a02 * a10 - a00 * a12;
|
||||
out[6] = a10 * a21 - a11 * a20;
|
||||
out[7] = a01 * a20 - a00 * a21;
|
||||
out[8] = a00 * a11 - a01 * a10;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the determinant of a mat3
|
||||
*
|
||||
* @param {ReadonlyMat3} a the source matrix
|
||||
* @returns {Number} determinant of a
|
||||
*/
|
||||
export function determinant(a) {
|
||||
var a00 = a[0],
|
||||
a01 = a[1],
|
||||
a02 = a[2];
|
||||
var a10 = a[3],
|
||||
a11 = a[4],
|
||||
a12 = a[5];
|
||||
var a20 = a[6],
|
||||
a21 = a[7],
|
||||
a22 = a[8];
|
||||
return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies two mat3's
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the first operand
|
||||
* @param {ReadonlyMat3} b the second operand
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function multiply(out, a, b) {
|
||||
var a00 = a[0],
|
||||
a01 = a[1],
|
||||
a02 = a[2];
|
||||
var a10 = a[3],
|
||||
a11 = a[4],
|
||||
a12 = a[5];
|
||||
var a20 = a[6],
|
||||
a21 = a[7],
|
||||
a22 = a[8];
|
||||
var b00 = b[0],
|
||||
b01 = b[1],
|
||||
b02 = b[2];
|
||||
var b10 = b[3],
|
||||
b11 = b[4],
|
||||
b12 = b[5];
|
||||
var b20 = b[6],
|
||||
b21 = b[7],
|
||||
b22 = b[8];
|
||||
out[0] = b00 * a00 + b01 * a10 + b02 * a20;
|
||||
out[1] = b00 * a01 + b01 * a11 + b02 * a21;
|
||||
out[2] = b00 * a02 + b01 * a12 + b02 * a22;
|
||||
out[3] = b10 * a00 + b11 * a10 + b12 * a20;
|
||||
out[4] = b10 * a01 + b11 * a11 + b12 * a21;
|
||||
out[5] = b10 * a02 + b11 * a12 + b12 * a22;
|
||||
out[6] = b20 * a00 + b21 * a10 + b22 * a20;
|
||||
out[7] = b20 * a01 + b21 * a11 + b22 * a21;
|
||||
out[8] = b20 * a02 + b21 * a12 + b22 * a22;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate a mat3 by the given vector
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the matrix to translate
|
||||
* @param {ReadonlyVec2} v vector to translate by
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function translate(out, a, v) {
|
||||
var a00 = a[0],
|
||||
a01 = a[1],
|
||||
a02 = a[2],
|
||||
a10 = a[3],
|
||||
a11 = a[4],
|
||||
a12 = a[5],
|
||||
a20 = a[6],
|
||||
a21 = a[7],
|
||||
a22 = a[8],
|
||||
x = v[0],
|
||||
y = v[1];
|
||||
out[0] = a00;
|
||||
out[1] = a01;
|
||||
out[2] = a02;
|
||||
out[3] = a10;
|
||||
out[4] = a11;
|
||||
out[5] = a12;
|
||||
out[6] = x * a00 + y * a10 + a20;
|
||||
out[7] = x * a01 + y * a11 + a21;
|
||||
out[8] = x * a02 + y * a12 + a22;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a mat3 by the given angle
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the matrix to rotate
|
||||
* @param {Number} rad the angle to rotate the matrix by
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function rotate(out, a, rad) {
|
||||
var a00 = a[0],
|
||||
a01 = a[1],
|
||||
a02 = a[2],
|
||||
a10 = a[3],
|
||||
a11 = a[4],
|
||||
a12 = a[5],
|
||||
a20 = a[6],
|
||||
a21 = a[7],
|
||||
a22 = a[8],
|
||||
s = Math.sin(rad),
|
||||
c = Math.cos(rad);
|
||||
out[0] = c * a00 + s * a10;
|
||||
out[1] = c * a01 + s * a11;
|
||||
out[2] = c * a02 + s * a12;
|
||||
out[3] = c * a10 - s * a00;
|
||||
out[4] = c * a11 - s * a01;
|
||||
out[5] = c * a12 - s * a02;
|
||||
out[6] = a20;
|
||||
out[7] = a21;
|
||||
out[8] = a22;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scales the mat3 by the dimensions in the given vec2
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the matrix to scale
|
||||
* @param {ReadonlyVec2} v the vec2 to scale the matrix by
|
||||
* @returns {mat3} out
|
||||
**/
|
||||
export function scale(out, a, v) {
|
||||
var x = v[0],
|
||||
y = v[1];
|
||||
out[0] = x * a[0];
|
||||
out[1] = x * a[1];
|
||||
out[2] = x * a[2];
|
||||
out[3] = y * a[3];
|
||||
out[4] = y * a[4];
|
||||
out[5] = y * a[5];
|
||||
out[6] = a[6];
|
||||
out[7] = a[7];
|
||||
out[8] = a[8];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matrix from a vector translation
|
||||
* This is equivalent to (but much faster than):
|
||||
*
|
||||
* mat3.identity(dest);
|
||||
* mat3.translate(dest, dest, vec);
|
||||
*
|
||||
* @param {mat3} out mat3 receiving operation result
|
||||
* @param {ReadonlyVec2} v Translation vector
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function fromTranslation(out, v) {
|
||||
out[0] = 1;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 0;
|
||||
out[4] = 1;
|
||||
out[5] = 0;
|
||||
out[6] = v[0];
|
||||
out[7] = v[1];
|
||||
out[8] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matrix from a given angle
|
||||
* This is equivalent to (but much faster than):
|
||||
*
|
||||
* mat3.identity(dest);
|
||||
* mat3.rotate(dest, dest, rad);
|
||||
*
|
||||
* @param {mat3} out mat3 receiving operation result
|
||||
* @param {Number} rad the angle to rotate the matrix by
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function fromRotation(out, rad) {
|
||||
var s = Math.sin(rad),
|
||||
c = Math.cos(rad);
|
||||
out[0] = c;
|
||||
out[1] = s;
|
||||
out[2] = 0;
|
||||
out[3] = -s;
|
||||
out[4] = c;
|
||||
out[5] = 0;
|
||||
out[6] = 0;
|
||||
out[7] = 0;
|
||||
out[8] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matrix from a vector scaling
|
||||
* This is equivalent to (but much faster than):
|
||||
*
|
||||
* mat3.identity(dest);
|
||||
* mat3.scale(dest, dest, vec);
|
||||
*
|
||||
* @param {mat3} out mat3 receiving operation result
|
||||
* @param {ReadonlyVec2} v Scaling vector
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function fromScaling(out, v) {
|
||||
out[0] = v[0];
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 0;
|
||||
out[4] = v[1];
|
||||
out[5] = 0;
|
||||
out[6] = 0;
|
||||
out[7] = 0;
|
||||
out[8] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies the values from a mat2d into a mat3
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat2d} a the matrix to copy
|
||||
* @returns {mat3} out
|
||||
**/
|
||||
export function fromMat2d(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = 0;
|
||||
out[3] = a[2];
|
||||
out[4] = a[3];
|
||||
out[5] = 0;
|
||||
out[6] = a[4];
|
||||
out[7] = a[5];
|
||||
out[8] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates a 3x3 matrix from the given quaternion
|
||||
*
|
||||
* @param {mat3} out mat3 receiving operation result
|
||||
* @param {ReadonlyQuat} q Quaternion to create matrix from
|
||||
*
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function fromQuat(out, q) {
|
||||
var x = q[0],
|
||||
y = q[1],
|
||||
z = q[2],
|
||||
w = q[3];
|
||||
var x2 = x + x;
|
||||
var y2 = y + y;
|
||||
var z2 = z + z;
|
||||
var xx = x * x2;
|
||||
var yx = y * x2;
|
||||
var yy = y * y2;
|
||||
var zx = z * x2;
|
||||
var zy = z * y2;
|
||||
var zz = z * z2;
|
||||
var wx = w * x2;
|
||||
var wy = w * y2;
|
||||
var wz = w * z2;
|
||||
out[0] = 1 - yy - zz;
|
||||
out[3] = yx - wz;
|
||||
out[6] = zx + wy;
|
||||
out[1] = yx + wz;
|
||||
out[4] = 1 - xx - zz;
|
||||
out[7] = zy - wx;
|
||||
out[2] = zx - wy;
|
||||
out[5] = zy + wx;
|
||||
out[8] = 1 - xx - yy;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix
|
||||
*
|
||||
* @param {mat3} out mat3 receiving operation result
|
||||
* @param {ReadonlyMat4} a Mat4 to derive the normal matrix from
|
||||
*
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function normalFromMat4(out, a) {
|
||||
var a00 = a[0],
|
||||
a01 = a[1],
|
||||
a02 = a[2],
|
||||
a03 = a[3];
|
||||
var a10 = a[4],
|
||||
a11 = a[5],
|
||||
a12 = a[6],
|
||||
a13 = a[7];
|
||||
var a20 = a[8],
|
||||
a21 = a[9],
|
||||
a22 = a[10],
|
||||
a23 = a[11];
|
||||
var a30 = a[12],
|
||||
a31 = a[13],
|
||||
a32 = a[14],
|
||||
a33 = a[15];
|
||||
var b00 = a00 * a11 - a01 * a10;
|
||||
var b01 = a00 * a12 - a02 * a10;
|
||||
var b02 = a00 * a13 - a03 * a10;
|
||||
var b03 = a01 * a12 - a02 * a11;
|
||||
var b04 = a01 * a13 - a03 * a11;
|
||||
var b05 = a02 * a13 - a03 * a12;
|
||||
var b06 = a20 * a31 - a21 * a30;
|
||||
var b07 = a20 * a32 - a22 * a30;
|
||||
var b08 = a20 * a33 - a23 * a30;
|
||||
var b09 = a21 * a32 - a22 * a31;
|
||||
var b10 = a21 * a33 - a23 * a31;
|
||||
var b11 = a22 * a33 - a23 * a32;
|
||||
|
||||
// Calculate the determinant
|
||||
var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
|
||||
if (!det) {
|
||||
return null;
|
||||
}
|
||||
det = 1.0 / det;
|
||||
out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;
|
||||
out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;
|
||||
out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;
|
||||
out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;
|
||||
out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;
|
||||
out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;
|
||||
out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;
|
||||
out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;
|
||||
out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a 2D projection matrix with the given bounds
|
||||
*
|
||||
* @param {mat3} out mat3 frustum matrix will be written into
|
||||
* @param {number} width Width of your gl context
|
||||
* @param {number} height Height of gl context
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function projection(out, width, height) {
|
||||
out[0] = 2 / width;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 0;
|
||||
out[4] = -2 / height;
|
||||
out[5] = 0;
|
||||
out[6] = -1;
|
||||
out[7] = 1;
|
||||
out[8] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of a mat3
|
||||
*
|
||||
* @param {ReadonlyMat3} a matrix to represent as a string
|
||||
* @returns {String} string representation of the matrix
|
||||
*/
|
||||
export function str(a) {
|
||||
return "mat3(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ", " + a[4] + ", " + a[5] + ", " + a[6] + ", " + a[7] + ", " + a[8] + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Frobenius norm of a mat3
|
||||
*
|
||||
* @param {ReadonlyMat3} a the matrix to calculate Frobenius norm of
|
||||
* @returns {Number} Frobenius norm
|
||||
*/
|
||||
export function frob(a) {
|
||||
return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3] + a[4] * a[4] + a[5] * a[5] + a[6] * a[6] + a[7] * a[7] + a[8] * a[8]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two mat3's
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the first operand
|
||||
* @param {ReadonlyMat3} b the second operand
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function add(out, a, b) {
|
||||
out[0] = a[0] + b[0];
|
||||
out[1] = a[1] + b[1];
|
||||
out[2] = a[2] + b[2];
|
||||
out[3] = a[3] + b[3];
|
||||
out[4] = a[4] + b[4];
|
||||
out[5] = a[5] + b[5];
|
||||
out[6] = a[6] + b[6];
|
||||
out[7] = a[7] + b[7];
|
||||
out[8] = a[8] + b[8];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subtracts matrix b from matrix a
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the first operand
|
||||
* @param {ReadonlyMat3} b the second operand
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function subtract(out, a, b) {
|
||||
out[0] = a[0] - b[0];
|
||||
out[1] = a[1] - b[1];
|
||||
out[2] = a[2] - b[2];
|
||||
out[3] = a[3] - b[3];
|
||||
out[4] = a[4] - b[4];
|
||||
out[5] = a[5] - b[5];
|
||||
out[6] = a[6] - b[6];
|
||||
out[7] = a[7] - b[7];
|
||||
out[8] = a[8] - b[8];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiply each element of the matrix by a scalar.
|
||||
*
|
||||
* @param {mat3} out the receiving matrix
|
||||
* @param {ReadonlyMat3} a the matrix to scale
|
||||
* @param {Number} b amount to scale the matrix's elements by
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function multiplyScalar(out, a, b) {
|
||||
out[0] = a[0] * b;
|
||||
out[1] = a[1] * b;
|
||||
out[2] = a[2] * b;
|
||||
out[3] = a[3] * b;
|
||||
out[4] = a[4] * b;
|
||||
out[5] = a[5] * b;
|
||||
out[6] = a[6] * b;
|
||||
out[7] = a[7] * b;
|
||||
out[8] = a[8] * b;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two mat3's after multiplying each element of the second operand by a scalar value.
|
||||
*
|
||||
* @param {mat3} out the receiving vector
|
||||
* @param {ReadonlyMat3} a the first operand
|
||||
* @param {ReadonlyMat3} b the second operand
|
||||
* @param {Number} scale the amount to scale b's elements by before adding
|
||||
* @returns {mat3} out
|
||||
*/
|
||||
export function multiplyScalarAndAdd(out, a, b, scale) {
|
||||
out[0] = a[0] + b[0] * scale;
|
||||
out[1] = a[1] + b[1] * scale;
|
||||
out[2] = a[2] + b[2] * scale;
|
||||
out[3] = a[3] + b[3] * scale;
|
||||
out[4] = a[4] + b[4] * scale;
|
||||
out[5] = a[5] + b[5] * scale;
|
||||
out[6] = a[6] + b[6] * scale;
|
||||
out[7] = a[7] + b[7] * scale;
|
||||
out[8] = a[8] + b[8] * scale;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
|
||||
*
|
||||
* @param {ReadonlyMat3} a The first matrix.
|
||||
* @param {ReadonlyMat3} b The second matrix.
|
||||
* @returns {Boolean} True if the matrices are equal, false otherwise.
|
||||
*/
|
||||
export function exactEquals(a, b) {
|
||||
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the matrices have approximately the same elements in the same position.
|
||||
*
|
||||
* @param {ReadonlyMat3} a The first matrix.
|
||||
* @param {ReadonlyMat3} b The second matrix.
|
||||
* @returns {Boolean} True if the matrices are equal, false otherwise.
|
||||
*/
|
||||
export function equals(a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3],
|
||||
a4 = a[4],
|
||||
a5 = a[5],
|
||||
a6 = a[6],
|
||||
a7 = a[7],
|
||||
a8 = a[8];
|
||||
var b0 = b[0],
|
||||
b1 = b[1],
|
||||
b2 = b[2],
|
||||
b3 = b[3],
|
||||
b4 = b[4],
|
||||
b5 = b[5],
|
||||
b6 = b[6],
|
||||
b7 = b[7],
|
||||
b8 = b[8];
|
||||
return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8));
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for {@link mat3.multiply}
|
||||
* @function
|
||||
*/
|
||||
export var mul = multiply;
|
||||
|
||||
/**
|
||||
* Alias for {@link mat3.subtract}
|
||||
* @function
|
||||
*/
|
||||
export var sub = subtract;
|
||||
1961
node_modules/gl-matrix/esm/mat4.js
generated
vendored
1961
node_modules/gl-matrix/esm/mat4.js
generated
vendored
File diff suppressed because it is too large
Load Diff
744
node_modules/gl-matrix/esm/quat.js
generated
vendored
744
node_modules/gl-matrix/esm/quat.js
generated
vendored
@@ -1,744 +0,0 @@
|
||||
import * as glMatrix from "./common.js";
|
||||
import * as mat3 from "./mat3.js";
|
||||
import * as vec3 from "./vec3.js";
|
||||
import * as vec4 from "./vec4.js";
|
||||
|
||||
/**
|
||||
* Quaternion in the format XYZW
|
||||
* @module quat
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new identity quat
|
||||
*
|
||||
* @returns {quat} a new quaternion
|
||||
*/
|
||||
export function create() {
|
||||
var out = new glMatrix.ARRAY_TYPE(4);
|
||||
if (glMatrix.ARRAY_TYPE != Float32Array) {
|
||||
out[0] = 0;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
}
|
||||
out[3] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a quat to the identity quaternion
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @returns {quat} out
|
||||
*/
|
||||
export function identity(out) {
|
||||
out[0] = 0;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a quat from the given angle and rotation axis,
|
||||
* then returns it.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyVec3} axis the axis around which to rotate
|
||||
* @param {Number} rad the angle in radians
|
||||
* @returns {quat} out
|
||||
**/
|
||||
export function setAxisAngle(out, axis, rad) {
|
||||
rad = rad * 0.5;
|
||||
var s = Math.sin(rad);
|
||||
out[0] = s * axis[0];
|
||||
out[1] = s * axis[1];
|
||||
out[2] = s * axis[2];
|
||||
out[3] = Math.cos(rad);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the rotation axis and angle for a given
|
||||
* quaternion. If a quaternion is created with
|
||||
* setAxisAngle, this method will return the same
|
||||
* values as providied in the original parameter list
|
||||
* OR functionally equivalent values.
|
||||
* Example: The quaternion formed by axis [0, 0, 1] and
|
||||
* angle -90 is the same as the quaternion formed by
|
||||
* [0, 0, 1] and 270. This method favors the latter.
|
||||
* @param {vec3} out_axis Vector receiving the axis of rotation
|
||||
* @param {ReadonlyQuat} q Quaternion to be decomposed
|
||||
* @return {Number} Angle, in radians, of the rotation
|
||||
*/
|
||||
export function getAxisAngle(out_axis, q) {
|
||||
var rad = Math.acos(q[3]) * 2.0;
|
||||
var s = Math.sin(rad / 2.0);
|
||||
if (s > glMatrix.EPSILON) {
|
||||
out_axis[0] = q[0] / s;
|
||||
out_axis[1] = q[1] / s;
|
||||
out_axis[2] = q[2] / s;
|
||||
} else {
|
||||
// If s is zero, return any axis (no rotation - axis does not matter)
|
||||
out_axis[0] = 1;
|
||||
out_axis[1] = 0;
|
||||
out_axis[2] = 0;
|
||||
}
|
||||
return rad;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the angular distance between two unit quaternions
|
||||
*
|
||||
* @param {ReadonlyQuat} a Origin unit quaternion
|
||||
* @param {ReadonlyQuat} b Destination unit quaternion
|
||||
* @return {Number} Angle, in radians, between the two quaternions
|
||||
*/
|
||||
export function getAngle(a, b) {
|
||||
var dotproduct = dot(a, b);
|
||||
return Math.acos(2 * dotproduct * dotproduct - 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies two quat's
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a the first operand
|
||||
* @param {ReadonlyQuat} b the second operand
|
||||
* @returns {quat} out
|
||||
*/
|
||||
export function multiply(out, a, b) {
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
az = a[2],
|
||||
aw = a[3];
|
||||
var bx = b[0],
|
||||
by = b[1],
|
||||
bz = b[2],
|
||||
bw = b[3];
|
||||
out[0] = ax * bw + aw * bx + ay * bz - az * by;
|
||||
out[1] = ay * bw + aw * by + az * bx - ax * bz;
|
||||
out[2] = az * bw + aw * bz + ax * by - ay * bx;
|
||||
out[3] = aw * bw - ax * bx - ay * by - az * bz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a quaternion by the given angle about the X axis
|
||||
*
|
||||
* @param {quat} out quat receiving operation result
|
||||
* @param {ReadonlyQuat} a quat to rotate
|
||||
* @param {number} rad angle (in radians) to rotate
|
||||
* @returns {quat} out
|
||||
*/
|
||||
export function rotateX(out, a, rad) {
|
||||
rad *= 0.5;
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
az = a[2],
|
||||
aw = a[3];
|
||||
var bx = Math.sin(rad),
|
||||
bw = Math.cos(rad);
|
||||
out[0] = ax * bw + aw * bx;
|
||||
out[1] = ay * bw + az * bx;
|
||||
out[2] = az * bw - ay * bx;
|
||||
out[3] = aw * bw - ax * bx;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a quaternion by the given angle about the Y axis
|
||||
*
|
||||
* @param {quat} out quat receiving operation result
|
||||
* @param {ReadonlyQuat} a quat to rotate
|
||||
* @param {number} rad angle (in radians) to rotate
|
||||
* @returns {quat} out
|
||||
*/
|
||||
export function rotateY(out, a, rad) {
|
||||
rad *= 0.5;
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
az = a[2],
|
||||
aw = a[3];
|
||||
var by = Math.sin(rad),
|
||||
bw = Math.cos(rad);
|
||||
out[0] = ax * bw - az * by;
|
||||
out[1] = ay * bw + aw * by;
|
||||
out[2] = az * bw + ax * by;
|
||||
out[3] = aw * bw - ay * by;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a quaternion by the given angle about the Z axis
|
||||
*
|
||||
* @param {quat} out quat receiving operation result
|
||||
* @param {ReadonlyQuat} a quat to rotate
|
||||
* @param {number} rad angle (in radians) to rotate
|
||||
* @returns {quat} out
|
||||
*/
|
||||
export function rotateZ(out, a, rad) {
|
||||
rad *= 0.5;
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
az = a[2],
|
||||
aw = a[3];
|
||||
var bz = Math.sin(rad),
|
||||
bw = Math.cos(rad);
|
||||
out[0] = ax * bw + ay * bz;
|
||||
out[1] = ay * bw - ax * bz;
|
||||
out[2] = az * bw + aw * bz;
|
||||
out[3] = aw * bw - az * bz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the W component of a quat from the X, Y, and Z components.
|
||||
* Assumes that quaternion is 1 unit in length.
|
||||
* Any existing W component will be ignored.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a quat to calculate W component of
|
||||
* @returns {quat} out
|
||||
*/
|
||||
export function calculateW(out, a) {
|
||||
var x = a[0],
|
||||
y = a[1],
|
||||
z = a[2];
|
||||
out[0] = x;
|
||||
out[1] = y;
|
||||
out[2] = z;
|
||||
out[3] = Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the exponential of a unit quaternion.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a quat to calculate the exponential of
|
||||
* @returns {quat} out
|
||||
*/
|
||||
export function exp(out, a) {
|
||||
var x = a[0],
|
||||
y = a[1],
|
||||
z = a[2],
|
||||
w = a[3];
|
||||
var r = Math.sqrt(x * x + y * y + z * z);
|
||||
var et = Math.exp(w);
|
||||
var s = r > 0 ? et * Math.sin(r) / r : 0;
|
||||
out[0] = x * s;
|
||||
out[1] = y * s;
|
||||
out[2] = z * s;
|
||||
out[3] = et * Math.cos(r);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the natural logarithm of a unit quaternion.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a quat to calculate the exponential of
|
||||
* @returns {quat} out
|
||||
*/
|
||||
export function ln(out, a) {
|
||||
var x = a[0],
|
||||
y = a[1],
|
||||
z = a[2],
|
||||
w = a[3];
|
||||
var r = Math.sqrt(x * x + y * y + z * z);
|
||||
var t = r > 0 ? Math.atan2(r, w) / r : 0;
|
||||
out[0] = x * t;
|
||||
out[1] = y * t;
|
||||
out[2] = z * t;
|
||||
out[3] = 0.5 * Math.log(x * x + y * y + z * z + w * w);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the scalar power of a unit quaternion.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a quat to calculate the exponential of
|
||||
* @param {Number} b amount to scale the quaternion by
|
||||
* @returns {quat} out
|
||||
*/
|
||||
export function pow(out, a, b) {
|
||||
ln(out, a);
|
||||
scale(out, out, b);
|
||||
exp(out, out);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a spherical linear interpolation between two quat
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a the first operand
|
||||
* @param {ReadonlyQuat} b the second operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {quat} out
|
||||
*/
|
||||
export function slerp(out, a, b, t) {
|
||||
// benchmarks:
|
||||
// http://jsperf.com/quaternion-slerp-implementations
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
az = a[2],
|
||||
aw = a[3];
|
||||
var bx = b[0],
|
||||
by = b[1],
|
||||
bz = b[2],
|
||||
bw = b[3];
|
||||
var omega, cosom, sinom, scale0, scale1;
|
||||
|
||||
// calc cosine
|
||||
cosom = ax * bx + ay * by + az * bz + aw * bw;
|
||||
// adjust signs (if necessary)
|
||||
if (cosom < 0.0) {
|
||||
cosom = -cosom;
|
||||
bx = -bx;
|
||||
by = -by;
|
||||
bz = -bz;
|
||||
bw = -bw;
|
||||
}
|
||||
// calculate coefficients
|
||||
if (1.0 - cosom > glMatrix.EPSILON) {
|
||||
// standard case (slerp)
|
||||
omega = Math.acos(cosom);
|
||||
sinom = Math.sin(omega);
|
||||
scale0 = Math.sin((1.0 - t) * omega) / sinom;
|
||||
scale1 = Math.sin(t * omega) / sinom;
|
||||
} else {
|
||||
// "from" and "to" quaternions are very close
|
||||
// ... so we can do a linear interpolation
|
||||
scale0 = 1.0 - t;
|
||||
scale1 = t;
|
||||
}
|
||||
// calculate final values
|
||||
out[0] = scale0 * ax + scale1 * bx;
|
||||
out[1] = scale0 * ay + scale1 * by;
|
||||
out[2] = scale0 * az + scale1 * bz;
|
||||
out[3] = scale0 * aw + scale1 * bw;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a random unit quaternion
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @returns {quat} out
|
||||
*/
|
||||
export function random(out) {
|
||||
// Implementation of http://planning.cs.uiuc.edu/node198.html
|
||||
// TODO: Calling random 3 times is probably not the fastest solution
|
||||
var u1 = glMatrix.RANDOM();
|
||||
var u2 = glMatrix.RANDOM();
|
||||
var u3 = glMatrix.RANDOM();
|
||||
var sqrt1MinusU1 = Math.sqrt(1 - u1);
|
||||
var sqrtU1 = Math.sqrt(u1);
|
||||
out[0] = sqrt1MinusU1 * Math.sin(2.0 * Math.PI * u2);
|
||||
out[1] = sqrt1MinusU1 * Math.cos(2.0 * Math.PI * u2);
|
||||
out[2] = sqrtU1 * Math.sin(2.0 * Math.PI * u3);
|
||||
out[3] = sqrtU1 * Math.cos(2.0 * Math.PI * u3);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the inverse of a quat
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a quat to calculate inverse of
|
||||
* @returns {quat} out
|
||||
*/
|
||||
export function invert(out, a) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3];
|
||||
var dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;
|
||||
var invDot = dot ? 1.0 / dot : 0;
|
||||
|
||||
// TODO: Would be faster to return [0,0,0,0] immediately if dot == 0
|
||||
|
||||
out[0] = -a0 * invDot;
|
||||
out[1] = -a1 * invDot;
|
||||
out[2] = -a2 * invDot;
|
||||
out[3] = a3 * invDot;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the conjugate of a quat
|
||||
* If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a quat to calculate conjugate of
|
||||
* @returns {quat} out
|
||||
*/
|
||||
export function conjugate(out, a) {
|
||||
out[0] = -a[0];
|
||||
out[1] = -a[1];
|
||||
out[2] = -a[2];
|
||||
out[3] = a[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a quaternion from the given 3x3 rotation matrix.
|
||||
*
|
||||
* NOTE: The resultant quaternion is not normalized, so you should be sure
|
||||
* to renormalize the quaternion yourself where necessary.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyMat3} m rotation matrix
|
||||
* @returns {quat} out
|
||||
* @function
|
||||
*/
|
||||
export function fromMat3(out, m) {
|
||||
// Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes
|
||||
// article "Quaternion Calculus and Fast Animation".
|
||||
var fTrace = m[0] + m[4] + m[8];
|
||||
var fRoot;
|
||||
if (fTrace > 0.0) {
|
||||
// |w| > 1/2, may as well choose w > 1/2
|
||||
fRoot = Math.sqrt(fTrace + 1.0); // 2w
|
||||
out[3] = 0.5 * fRoot;
|
||||
fRoot = 0.5 / fRoot; // 1/(4w)
|
||||
out[0] = (m[5] - m[7]) * fRoot;
|
||||
out[1] = (m[6] - m[2]) * fRoot;
|
||||
out[2] = (m[1] - m[3]) * fRoot;
|
||||
} else {
|
||||
// |w| <= 1/2
|
||||
var i = 0;
|
||||
if (m[4] > m[0]) i = 1;
|
||||
if (m[8] > m[i * 3 + i]) i = 2;
|
||||
var j = (i + 1) % 3;
|
||||
var k = (i + 2) % 3;
|
||||
fRoot = Math.sqrt(m[i * 3 + i] - m[j * 3 + j] - m[k * 3 + k] + 1.0);
|
||||
out[i] = 0.5 * fRoot;
|
||||
fRoot = 0.5 / fRoot;
|
||||
out[3] = (m[j * 3 + k] - m[k * 3 + j]) * fRoot;
|
||||
out[j] = (m[j * 3 + i] + m[i * 3 + j]) * fRoot;
|
||||
out[k] = (m[k * 3 + i] + m[i * 3 + k]) * fRoot;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a quaternion from the given euler angle x, y, z using the provided intrinsic order for the conversion.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {Number} x Angle to rotate around X axis in degrees.
|
||||
* @param {Number} y Angle to rotate around Y axis in degrees.
|
||||
* @param {Number} z Angle to rotate around Z axis in degrees.
|
||||
* @param {'xyz'|'xzy'|'yxz'|'yzx'|'zxy'|'zyx'} order Intrinsic order for conversion, default is zyx.
|
||||
* @returns {quat} out
|
||||
* @function
|
||||
*/
|
||||
export function fromEuler(out, x, y, z) {
|
||||
var order = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : glMatrix.ANGLE_ORDER;
|
||||
var halfToRad = Math.PI / 360;
|
||||
x *= halfToRad;
|
||||
z *= halfToRad;
|
||||
y *= halfToRad;
|
||||
var sx = Math.sin(x);
|
||||
var cx = Math.cos(x);
|
||||
var sy = Math.sin(y);
|
||||
var cy = Math.cos(y);
|
||||
var sz = Math.sin(z);
|
||||
var cz = Math.cos(z);
|
||||
switch (order) {
|
||||
case "xyz":
|
||||
out[0] = sx * cy * cz + cx * sy * sz;
|
||||
out[1] = cx * sy * cz - sx * cy * sz;
|
||||
out[2] = cx * cy * sz + sx * sy * cz;
|
||||
out[3] = cx * cy * cz - sx * sy * sz;
|
||||
break;
|
||||
case "xzy":
|
||||
out[0] = sx * cy * cz - cx * sy * sz;
|
||||
out[1] = cx * sy * cz - sx * cy * sz;
|
||||
out[2] = cx * cy * sz + sx * sy * cz;
|
||||
out[3] = cx * cy * cz + sx * sy * sz;
|
||||
break;
|
||||
case "yxz":
|
||||
out[0] = sx * cy * cz + cx * sy * sz;
|
||||
out[1] = cx * sy * cz - sx * cy * sz;
|
||||
out[2] = cx * cy * sz - sx * sy * cz;
|
||||
out[3] = cx * cy * cz + sx * sy * sz;
|
||||
break;
|
||||
case "yzx":
|
||||
out[0] = sx * cy * cz + cx * sy * sz;
|
||||
out[1] = cx * sy * cz + sx * cy * sz;
|
||||
out[2] = cx * cy * sz - sx * sy * cz;
|
||||
out[3] = cx * cy * cz - sx * sy * sz;
|
||||
break;
|
||||
case "zxy":
|
||||
out[0] = sx * cy * cz - cx * sy * sz;
|
||||
out[1] = cx * sy * cz + sx * cy * sz;
|
||||
out[2] = cx * cy * sz + sx * sy * cz;
|
||||
out[3] = cx * cy * cz - sx * sy * sz;
|
||||
break;
|
||||
case "zyx":
|
||||
out[0] = sx * cy * cz - cx * sy * sz;
|
||||
out[1] = cx * sy * cz + sx * cy * sz;
|
||||
out[2] = cx * cy * sz - sx * sy * cz;
|
||||
out[3] = cx * cy * cz + sx * sy * sz;
|
||||
break;
|
||||
default:
|
||||
throw new Error('Unknown angle order ' + order);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of a quaternion
|
||||
*
|
||||
* @param {ReadonlyQuat} a vector to represent as a string
|
||||
* @returns {String} string representation of the vector
|
||||
*/
|
||||
export function str(a) {
|
||||
return "quat(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new quat initialized with values from an existing quaternion
|
||||
*
|
||||
* @param {ReadonlyQuat} a quaternion to clone
|
||||
* @returns {quat} a new quaternion
|
||||
* @function
|
||||
*/
|
||||
export var clone = vec4.clone;
|
||||
|
||||
/**
|
||||
* Creates a new quat initialized with the given values
|
||||
*
|
||||
* @param {Number} x X component
|
||||
* @param {Number} y Y component
|
||||
* @param {Number} z Z component
|
||||
* @param {Number} w W component
|
||||
* @returns {quat} a new quaternion
|
||||
* @function
|
||||
*/
|
||||
export var fromValues = vec4.fromValues;
|
||||
|
||||
/**
|
||||
* Copy the values from one quat to another
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a the source quaternion
|
||||
* @returns {quat} out
|
||||
* @function
|
||||
*/
|
||||
export var copy = vec4.copy;
|
||||
|
||||
/**
|
||||
* Set the components of a quat to the given values
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {Number} x X component
|
||||
* @param {Number} y Y component
|
||||
* @param {Number} z Z component
|
||||
* @param {Number} w W component
|
||||
* @returns {quat} out
|
||||
* @function
|
||||
*/
|
||||
export var set = vec4.set;
|
||||
|
||||
/**
|
||||
* Adds two quat's
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a the first operand
|
||||
* @param {ReadonlyQuat} b the second operand
|
||||
* @returns {quat} out
|
||||
* @function
|
||||
*/
|
||||
export var add = vec4.add;
|
||||
|
||||
/**
|
||||
* Alias for {@link quat.multiply}
|
||||
* @function
|
||||
*/
|
||||
export var mul = multiply;
|
||||
|
||||
/**
|
||||
* Scales a quat by a scalar number
|
||||
*
|
||||
* @param {quat} out the receiving vector
|
||||
* @param {ReadonlyQuat} a the vector to scale
|
||||
* @param {Number} b amount to scale the vector by
|
||||
* @returns {quat} out
|
||||
* @function
|
||||
*/
|
||||
export var scale = vec4.scale;
|
||||
|
||||
/**
|
||||
* Calculates the dot product of two quat's
|
||||
*
|
||||
* @param {ReadonlyQuat} a the first operand
|
||||
* @param {ReadonlyQuat} b the second operand
|
||||
* @returns {Number} dot product of a and b
|
||||
* @function
|
||||
*/
|
||||
export var dot = vec4.dot;
|
||||
|
||||
/**
|
||||
* Performs a linear interpolation between two quat's
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a the first operand
|
||||
* @param {ReadonlyQuat} b the second operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {quat} out
|
||||
* @function
|
||||
*/
|
||||
export var lerp = vec4.lerp;
|
||||
|
||||
/**
|
||||
* Calculates the length of a quat
|
||||
*
|
||||
* @param {ReadonlyQuat} a vector to calculate length of
|
||||
* @returns {Number} length of a
|
||||
*/
|
||||
export var length = vec4.length;
|
||||
|
||||
/**
|
||||
* Alias for {@link quat.length}
|
||||
* @function
|
||||
*/
|
||||
export var len = length;
|
||||
|
||||
/**
|
||||
* Calculates the squared length of a quat
|
||||
*
|
||||
* @param {ReadonlyQuat} a vector to calculate squared length of
|
||||
* @returns {Number} squared length of a
|
||||
* @function
|
||||
*/
|
||||
export var squaredLength = vec4.squaredLength;
|
||||
|
||||
/**
|
||||
* Alias for {@link quat.squaredLength}
|
||||
* @function
|
||||
*/
|
||||
export var sqrLen = squaredLength;
|
||||
|
||||
/**
|
||||
* Normalize a quat
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a quaternion to normalize
|
||||
* @returns {quat} out
|
||||
* @function
|
||||
*/
|
||||
export var normalize = vec4.normalize;
|
||||
|
||||
/**
|
||||
* Returns whether or not the quaternions have exactly the same elements in the same position (when compared with ===)
|
||||
*
|
||||
* @param {ReadonlyQuat} a The first quaternion.
|
||||
* @param {ReadonlyQuat} b The second quaternion.
|
||||
* @returns {Boolean} True if the vectors are equal, false otherwise.
|
||||
*/
|
||||
export var exactEquals = vec4.exactEquals;
|
||||
|
||||
/**
|
||||
* Returns whether or not the quaternions point approximately to the same direction.
|
||||
*
|
||||
* Both quaternions are assumed to be unit length.
|
||||
*
|
||||
* @param {ReadonlyQuat} a The first unit quaternion.
|
||||
* @param {ReadonlyQuat} b The second unit quaternion.
|
||||
* @returns {Boolean} True if the quaternions are equal, false otherwise.
|
||||
*/
|
||||
export function equals(a, b) {
|
||||
return Math.abs(vec4.dot(a, b)) >= 1 - glMatrix.EPSILON;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a quaternion to represent the shortest rotation from one
|
||||
* vector to another.
|
||||
*
|
||||
* Both vectors are assumed to be unit length.
|
||||
*
|
||||
* @param {quat} out the receiving quaternion.
|
||||
* @param {ReadonlyVec3} a the initial vector
|
||||
* @param {ReadonlyVec3} b the destination vector
|
||||
* @returns {quat} out
|
||||
*/
|
||||
export var rotationTo = function () {
|
||||
var tmpvec3 = vec3.create();
|
||||
var xUnitVec3 = vec3.fromValues(1, 0, 0);
|
||||
var yUnitVec3 = vec3.fromValues(0, 1, 0);
|
||||
return function (out, a, b) {
|
||||
var dot = vec3.dot(a, b);
|
||||
if (dot < -0.999999) {
|
||||
vec3.cross(tmpvec3, xUnitVec3, a);
|
||||
if (vec3.len(tmpvec3) < 0.000001) vec3.cross(tmpvec3, yUnitVec3, a);
|
||||
vec3.normalize(tmpvec3, tmpvec3);
|
||||
setAxisAngle(out, tmpvec3, Math.PI);
|
||||
return out;
|
||||
} else if (dot > 0.999999) {
|
||||
out[0] = 0;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 1;
|
||||
return out;
|
||||
} else {
|
||||
vec3.cross(tmpvec3, a, b);
|
||||
out[0] = tmpvec3[0];
|
||||
out[1] = tmpvec3[1];
|
||||
out[2] = tmpvec3[2];
|
||||
out[3] = 1 + dot;
|
||||
return normalize(out, out);
|
||||
}
|
||||
};
|
||||
}();
|
||||
|
||||
/**
|
||||
* Performs a spherical linear interpolation with two control points
|
||||
*
|
||||
* @param {quat} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} a the first operand
|
||||
* @param {ReadonlyQuat} b the second operand
|
||||
* @param {ReadonlyQuat} c the third operand
|
||||
* @param {ReadonlyQuat} d the fourth operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {quat} out
|
||||
*/
|
||||
export var sqlerp = function () {
|
||||
var temp1 = create();
|
||||
var temp2 = create();
|
||||
return function (out, a, b, c, d, t) {
|
||||
slerp(temp1, a, d, t);
|
||||
slerp(temp2, b, c, t);
|
||||
slerp(out, temp1, temp2, 2 * t * (1 - t));
|
||||
return out;
|
||||
};
|
||||
}();
|
||||
|
||||
/**
|
||||
* Sets the specified quaternion with values corresponding to the given
|
||||
* axes. Each axis is a vec3 and is expected to be unit length and
|
||||
* perpendicular to all other specified axes.
|
||||
*
|
||||
* @param {ReadonlyVec3} view the vector representing the viewing direction
|
||||
* @param {ReadonlyVec3} right the vector representing the local "right" direction
|
||||
* @param {ReadonlyVec3} up the vector representing the local "up" direction
|
||||
* @returns {quat} out
|
||||
*/
|
||||
export var setAxes = function () {
|
||||
var matr = mat3.create();
|
||||
return function (out, view, right, up) {
|
||||
matr[0] = right[0];
|
||||
matr[3] = right[1];
|
||||
matr[6] = right[2];
|
||||
matr[1] = up[0];
|
||||
matr[4] = up[1];
|
||||
matr[7] = up[2];
|
||||
matr[2] = -view[0];
|
||||
matr[5] = -view[1];
|
||||
matr[8] = -view[2];
|
||||
return normalize(out, fromMat3(out, matr));
|
||||
};
|
||||
}();
|
||||
830
node_modules/gl-matrix/esm/quat2.js
generated
vendored
830
node_modules/gl-matrix/esm/quat2.js
generated
vendored
@@ -1,830 +0,0 @@
|
||||
import * as glMatrix from "./common.js";
|
||||
import * as quat from "./quat.js";
|
||||
import * as mat4 from "./mat4.js";
|
||||
|
||||
/**
|
||||
* Dual Quaternion<br>
|
||||
* Format: [real, dual]<br>
|
||||
* Quaternion format: XYZW<br>
|
||||
* Make sure to have normalized dual quaternions, otherwise the functions may not work as intended.<br>
|
||||
* @module quat2
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new identity dual quat
|
||||
*
|
||||
* @returns {quat2} a new dual quaternion [real -> rotation, dual -> translation]
|
||||
*/
|
||||
export function create() {
|
||||
var dq = new glMatrix.ARRAY_TYPE(8);
|
||||
if (glMatrix.ARRAY_TYPE != Float32Array) {
|
||||
dq[0] = 0;
|
||||
dq[1] = 0;
|
||||
dq[2] = 0;
|
||||
dq[4] = 0;
|
||||
dq[5] = 0;
|
||||
dq[6] = 0;
|
||||
dq[7] = 0;
|
||||
}
|
||||
dq[3] = 1;
|
||||
return dq;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new quat initialized with values from an existing quaternion
|
||||
*
|
||||
* @param {ReadonlyQuat2} a dual quaternion to clone
|
||||
* @returns {quat2} new dual quaternion
|
||||
* @function
|
||||
*/
|
||||
export function clone(a) {
|
||||
var dq = new glMatrix.ARRAY_TYPE(8);
|
||||
dq[0] = a[0];
|
||||
dq[1] = a[1];
|
||||
dq[2] = a[2];
|
||||
dq[3] = a[3];
|
||||
dq[4] = a[4];
|
||||
dq[5] = a[5];
|
||||
dq[6] = a[6];
|
||||
dq[7] = a[7];
|
||||
return dq;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new dual quat initialized with the given values
|
||||
*
|
||||
* @param {Number} x1 X component
|
||||
* @param {Number} y1 Y component
|
||||
* @param {Number} z1 Z component
|
||||
* @param {Number} w1 W component
|
||||
* @param {Number} x2 X component
|
||||
* @param {Number} y2 Y component
|
||||
* @param {Number} z2 Z component
|
||||
* @param {Number} w2 W component
|
||||
* @returns {quat2} new dual quaternion
|
||||
* @function
|
||||
*/
|
||||
export function fromValues(x1, y1, z1, w1, x2, y2, z2, w2) {
|
||||
var dq = new glMatrix.ARRAY_TYPE(8);
|
||||
dq[0] = x1;
|
||||
dq[1] = y1;
|
||||
dq[2] = z1;
|
||||
dq[3] = w1;
|
||||
dq[4] = x2;
|
||||
dq[5] = y2;
|
||||
dq[6] = z2;
|
||||
dq[7] = w2;
|
||||
return dq;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new dual quat from the given values (quat and translation)
|
||||
*
|
||||
* @param {Number} x1 X component
|
||||
* @param {Number} y1 Y component
|
||||
* @param {Number} z1 Z component
|
||||
* @param {Number} w1 W component
|
||||
* @param {Number} x2 X component (translation)
|
||||
* @param {Number} y2 Y component (translation)
|
||||
* @param {Number} z2 Z component (translation)
|
||||
* @returns {quat2} new dual quaternion
|
||||
* @function
|
||||
*/
|
||||
export function fromRotationTranslationValues(x1, y1, z1, w1, x2, y2, z2) {
|
||||
var dq = new glMatrix.ARRAY_TYPE(8);
|
||||
dq[0] = x1;
|
||||
dq[1] = y1;
|
||||
dq[2] = z1;
|
||||
dq[3] = w1;
|
||||
var ax = x2 * 0.5,
|
||||
ay = y2 * 0.5,
|
||||
az = z2 * 0.5;
|
||||
dq[4] = ax * w1 + ay * z1 - az * y1;
|
||||
dq[5] = ay * w1 + az * x1 - ax * z1;
|
||||
dq[6] = az * w1 + ax * y1 - ay * x1;
|
||||
dq[7] = -ax * x1 - ay * y1 - az * z1;
|
||||
return dq;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a dual quat from a quaternion and a translation
|
||||
*
|
||||
* @param {ReadonlyQuat2} dual quaternion receiving operation result
|
||||
* @param {ReadonlyQuat} q a normalized quaternion
|
||||
* @param {ReadonlyVec3} t translation vector
|
||||
* @returns {quat2} dual quaternion receiving operation result
|
||||
* @function
|
||||
*/
|
||||
export function fromRotationTranslation(out, q, t) {
|
||||
var ax = t[0] * 0.5,
|
||||
ay = t[1] * 0.5,
|
||||
az = t[2] * 0.5,
|
||||
bx = q[0],
|
||||
by = q[1],
|
||||
bz = q[2],
|
||||
bw = q[3];
|
||||
out[0] = bx;
|
||||
out[1] = by;
|
||||
out[2] = bz;
|
||||
out[3] = bw;
|
||||
out[4] = ax * bw + ay * bz - az * by;
|
||||
out[5] = ay * bw + az * bx - ax * bz;
|
||||
out[6] = az * bw + ax * by - ay * bx;
|
||||
out[7] = -ax * bx - ay * by - az * bz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a dual quat from a translation
|
||||
*
|
||||
* @param {ReadonlyQuat2} dual quaternion receiving operation result
|
||||
* @param {ReadonlyVec3} t translation vector
|
||||
* @returns {quat2} dual quaternion receiving operation result
|
||||
* @function
|
||||
*/
|
||||
export function fromTranslation(out, t) {
|
||||
out[0] = 0;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 1;
|
||||
out[4] = t[0] * 0.5;
|
||||
out[5] = t[1] * 0.5;
|
||||
out[6] = t[2] * 0.5;
|
||||
out[7] = 0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a dual quat from a quaternion
|
||||
*
|
||||
* @param {ReadonlyQuat2} dual quaternion receiving operation result
|
||||
* @param {ReadonlyQuat} q the quaternion
|
||||
* @returns {quat2} dual quaternion receiving operation result
|
||||
* @function
|
||||
*/
|
||||
export function fromRotation(out, q) {
|
||||
out[0] = q[0];
|
||||
out[1] = q[1];
|
||||
out[2] = q[2];
|
||||
out[3] = q[3];
|
||||
out[4] = 0;
|
||||
out[5] = 0;
|
||||
out[6] = 0;
|
||||
out[7] = 0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new dual quat from a matrix (4x4)
|
||||
*
|
||||
* @param {quat2} out the dual quaternion
|
||||
* @param {ReadonlyMat4} a the matrix
|
||||
* @returns {quat2} dual quat receiving operation result
|
||||
* @function
|
||||
*/
|
||||
export function fromMat4(out, a) {
|
||||
//TODO Optimize this
|
||||
var outer = quat.create();
|
||||
mat4.getRotation(outer, a);
|
||||
var t = new glMatrix.ARRAY_TYPE(3);
|
||||
mat4.getTranslation(t, a);
|
||||
fromRotationTranslation(out, outer, t);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy the values from one dual quat to another
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the source dual quaternion
|
||||
* @returns {quat2} out
|
||||
* @function
|
||||
*/
|
||||
export function copy(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
out[4] = a[4];
|
||||
out[5] = a[5];
|
||||
out[6] = a[6];
|
||||
out[7] = a[7];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a dual quat to the identity dual quaternion
|
||||
*
|
||||
* @param {quat2} out the receiving quaternion
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
export function identity(out) {
|
||||
out[0] = 0;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 1;
|
||||
out[4] = 0;
|
||||
out[5] = 0;
|
||||
out[6] = 0;
|
||||
out[7] = 0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a dual quat to the given values
|
||||
*
|
||||
* @param {quat2} out the receiving quaternion
|
||||
* @param {Number} x1 X component
|
||||
* @param {Number} y1 Y component
|
||||
* @param {Number} z1 Z component
|
||||
* @param {Number} w1 W component
|
||||
* @param {Number} x2 X component
|
||||
* @param {Number} y2 Y component
|
||||
* @param {Number} z2 Z component
|
||||
* @param {Number} w2 W component
|
||||
* @returns {quat2} out
|
||||
* @function
|
||||
*/
|
||||
export function set(out, x1, y1, z1, w1, x2, y2, z2, w2) {
|
||||
out[0] = x1;
|
||||
out[1] = y1;
|
||||
out[2] = z1;
|
||||
out[3] = w1;
|
||||
out[4] = x2;
|
||||
out[5] = y2;
|
||||
out[6] = z2;
|
||||
out[7] = w2;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the real part of a dual quat
|
||||
* @param {quat} out real part
|
||||
* @param {ReadonlyQuat2} a Dual Quaternion
|
||||
* @return {quat} real part
|
||||
*/
|
||||
export var getReal = quat.copy;
|
||||
|
||||
/**
|
||||
* Gets the dual part of a dual quat
|
||||
* @param {quat} out dual part
|
||||
* @param {ReadonlyQuat2} a Dual Quaternion
|
||||
* @return {quat} dual part
|
||||
*/
|
||||
export function getDual(out, a) {
|
||||
out[0] = a[4];
|
||||
out[1] = a[5];
|
||||
out[2] = a[6];
|
||||
out[3] = a[7];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the real component of a dual quat to the given quaternion
|
||||
*
|
||||
* @param {quat2} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} q a quaternion representing the real part
|
||||
* @returns {quat2} out
|
||||
* @function
|
||||
*/
|
||||
export var setReal = quat.copy;
|
||||
|
||||
/**
|
||||
* Set the dual component of a dual quat to the given quaternion
|
||||
*
|
||||
* @param {quat2} out the receiving quaternion
|
||||
* @param {ReadonlyQuat} q a quaternion representing the dual part
|
||||
* @returns {quat2} out
|
||||
* @function
|
||||
*/
|
||||
export function setDual(out, q) {
|
||||
out[4] = q[0];
|
||||
out[5] = q[1];
|
||||
out[6] = q[2];
|
||||
out[7] = q[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the translation of a normalized dual quat
|
||||
* @param {vec3} out translation
|
||||
* @param {ReadonlyQuat2} a Dual Quaternion to be decomposed
|
||||
* @return {vec3} translation
|
||||
*/
|
||||
export function getTranslation(out, a) {
|
||||
var ax = a[4],
|
||||
ay = a[5],
|
||||
az = a[6],
|
||||
aw = a[7],
|
||||
bx = -a[0],
|
||||
by = -a[1],
|
||||
bz = -a[2],
|
||||
bw = a[3];
|
||||
out[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;
|
||||
out[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;
|
||||
out[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Translates a dual quat by the given vector
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the dual quaternion to translate
|
||||
* @param {ReadonlyVec3} v vector to translate by
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
export function translate(out, a, v) {
|
||||
var ax1 = a[0],
|
||||
ay1 = a[1],
|
||||
az1 = a[2],
|
||||
aw1 = a[3],
|
||||
bx1 = v[0] * 0.5,
|
||||
by1 = v[1] * 0.5,
|
||||
bz1 = v[2] * 0.5,
|
||||
ax2 = a[4],
|
||||
ay2 = a[5],
|
||||
az2 = a[6],
|
||||
aw2 = a[7];
|
||||
out[0] = ax1;
|
||||
out[1] = ay1;
|
||||
out[2] = az1;
|
||||
out[3] = aw1;
|
||||
out[4] = aw1 * bx1 + ay1 * bz1 - az1 * by1 + ax2;
|
||||
out[5] = aw1 * by1 + az1 * bx1 - ax1 * bz1 + ay2;
|
||||
out[6] = aw1 * bz1 + ax1 * by1 - ay1 * bx1 + az2;
|
||||
out[7] = -ax1 * bx1 - ay1 * by1 - az1 * bz1 + aw2;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a dual quat around the X axis
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the dual quaternion to rotate
|
||||
* @param {number} rad how far should the rotation be
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
export function rotateX(out, a, rad) {
|
||||
var bx = -a[0],
|
||||
by = -a[1],
|
||||
bz = -a[2],
|
||||
bw = a[3],
|
||||
ax = a[4],
|
||||
ay = a[5],
|
||||
az = a[6],
|
||||
aw = a[7],
|
||||
ax1 = ax * bw + aw * bx + ay * bz - az * by,
|
||||
ay1 = ay * bw + aw * by + az * bx - ax * bz,
|
||||
az1 = az * bw + aw * bz + ax * by - ay * bx,
|
||||
aw1 = aw * bw - ax * bx - ay * by - az * bz;
|
||||
quat.rotateX(out, a, rad);
|
||||
bx = out[0];
|
||||
by = out[1];
|
||||
bz = out[2];
|
||||
bw = out[3];
|
||||
out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;
|
||||
out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;
|
||||
out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;
|
||||
out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a dual quat around the Y axis
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the dual quaternion to rotate
|
||||
* @param {number} rad how far should the rotation be
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
export function rotateY(out, a, rad) {
|
||||
var bx = -a[0],
|
||||
by = -a[1],
|
||||
bz = -a[2],
|
||||
bw = a[3],
|
||||
ax = a[4],
|
||||
ay = a[5],
|
||||
az = a[6],
|
||||
aw = a[7],
|
||||
ax1 = ax * bw + aw * bx + ay * bz - az * by,
|
||||
ay1 = ay * bw + aw * by + az * bx - ax * bz,
|
||||
az1 = az * bw + aw * bz + ax * by - ay * bx,
|
||||
aw1 = aw * bw - ax * bx - ay * by - az * bz;
|
||||
quat.rotateY(out, a, rad);
|
||||
bx = out[0];
|
||||
by = out[1];
|
||||
bz = out[2];
|
||||
bw = out[3];
|
||||
out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;
|
||||
out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;
|
||||
out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;
|
||||
out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a dual quat around the Z axis
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the dual quaternion to rotate
|
||||
* @param {number} rad how far should the rotation be
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
export function rotateZ(out, a, rad) {
|
||||
var bx = -a[0],
|
||||
by = -a[1],
|
||||
bz = -a[2],
|
||||
bw = a[3],
|
||||
ax = a[4],
|
||||
ay = a[5],
|
||||
az = a[6],
|
||||
aw = a[7],
|
||||
ax1 = ax * bw + aw * bx + ay * bz - az * by,
|
||||
ay1 = ay * bw + aw * by + az * bx - ax * bz,
|
||||
az1 = az * bw + aw * bz + ax * by - ay * bx,
|
||||
aw1 = aw * bw - ax * bx - ay * by - az * bz;
|
||||
quat.rotateZ(out, a, rad);
|
||||
bx = out[0];
|
||||
by = out[1];
|
||||
bz = out[2];
|
||||
bw = out[3];
|
||||
out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;
|
||||
out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;
|
||||
out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;
|
||||
out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a dual quat by a given quaternion (a * q)
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the dual quaternion to rotate
|
||||
* @param {ReadonlyQuat} q quaternion to rotate by
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
export function rotateByQuatAppend(out, a, q) {
|
||||
var qx = q[0],
|
||||
qy = q[1],
|
||||
qz = q[2],
|
||||
qw = q[3],
|
||||
ax = a[0],
|
||||
ay = a[1],
|
||||
az = a[2],
|
||||
aw = a[3];
|
||||
out[0] = ax * qw + aw * qx + ay * qz - az * qy;
|
||||
out[1] = ay * qw + aw * qy + az * qx - ax * qz;
|
||||
out[2] = az * qw + aw * qz + ax * qy - ay * qx;
|
||||
out[3] = aw * qw - ax * qx - ay * qy - az * qz;
|
||||
ax = a[4];
|
||||
ay = a[5];
|
||||
az = a[6];
|
||||
aw = a[7];
|
||||
out[4] = ax * qw + aw * qx + ay * qz - az * qy;
|
||||
out[5] = ay * qw + aw * qy + az * qx - ax * qz;
|
||||
out[6] = az * qw + aw * qz + ax * qy - ay * qx;
|
||||
out[7] = aw * qw - ax * qx - ay * qy - az * qz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a dual quat by a given quaternion (q * a)
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat} q quaternion to rotate by
|
||||
* @param {ReadonlyQuat2} a the dual quaternion to rotate
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
export function rotateByQuatPrepend(out, q, a) {
|
||||
var qx = q[0],
|
||||
qy = q[1],
|
||||
qz = q[2],
|
||||
qw = q[3],
|
||||
bx = a[0],
|
||||
by = a[1],
|
||||
bz = a[2],
|
||||
bw = a[3];
|
||||
out[0] = qx * bw + qw * bx + qy * bz - qz * by;
|
||||
out[1] = qy * bw + qw * by + qz * bx - qx * bz;
|
||||
out[2] = qz * bw + qw * bz + qx * by - qy * bx;
|
||||
out[3] = qw * bw - qx * bx - qy * by - qz * bz;
|
||||
bx = a[4];
|
||||
by = a[5];
|
||||
bz = a[6];
|
||||
bw = a[7];
|
||||
out[4] = qx * bw + qw * bx + qy * bz - qz * by;
|
||||
out[5] = qy * bw + qw * by + qz * bx - qx * bz;
|
||||
out[6] = qz * bw + qw * bz + qx * by - qy * bx;
|
||||
out[7] = qw * bw - qx * bx - qy * by - qz * bz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates a dual quat around a given axis. Does the normalisation automatically
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the dual quaternion to rotate
|
||||
* @param {ReadonlyVec3} axis the axis to rotate around
|
||||
* @param {Number} rad how far the rotation should be
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
export function rotateAroundAxis(out, a, axis, rad) {
|
||||
//Special case for rad = 0
|
||||
if (Math.abs(rad) < glMatrix.EPSILON) {
|
||||
return copy(out, a);
|
||||
}
|
||||
var axisLength = Math.sqrt(axis[0] * axis[0] + axis[1] * axis[1] + axis[2] * axis[2]);
|
||||
rad = rad * 0.5;
|
||||
var s = Math.sin(rad);
|
||||
var bx = s * axis[0] / axisLength;
|
||||
var by = s * axis[1] / axisLength;
|
||||
var bz = s * axis[2] / axisLength;
|
||||
var bw = Math.cos(rad);
|
||||
var ax1 = a[0],
|
||||
ay1 = a[1],
|
||||
az1 = a[2],
|
||||
aw1 = a[3];
|
||||
out[0] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;
|
||||
out[1] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;
|
||||
out[2] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;
|
||||
out[3] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;
|
||||
var ax = a[4],
|
||||
ay = a[5],
|
||||
az = a[6],
|
||||
aw = a[7];
|
||||
out[4] = ax * bw + aw * bx + ay * bz - az * by;
|
||||
out[5] = ay * bw + aw * by + az * bx - ax * bz;
|
||||
out[6] = az * bw + aw * bz + ax * by - ay * bx;
|
||||
out[7] = aw * bw - ax * bx - ay * by - az * bz;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two dual quat's
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the first operand
|
||||
* @param {ReadonlyQuat2} b the second operand
|
||||
* @returns {quat2} out
|
||||
* @function
|
||||
*/
|
||||
export function add(out, a, b) {
|
||||
out[0] = a[0] + b[0];
|
||||
out[1] = a[1] + b[1];
|
||||
out[2] = a[2] + b[2];
|
||||
out[3] = a[3] + b[3];
|
||||
out[4] = a[4] + b[4];
|
||||
out[5] = a[5] + b[5];
|
||||
out[6] = a[6] + b[6];
|
||||
out[7] = a[7] + b[7];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies two dual quat's
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a the first operand
|
||||
* @param {ReadonlyQuat2} b the second operand
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
export function multiply(out, a, b) {
|
||||
var ax0 = a[0],
|
||||
ay0 = a[1],
|
||||
az0 = a[2],
|
||||
aw0 = a[3],
|
||||
bx1 = b[4],
|
||||
by1 = b[5],
|
||||
bz1 = b[6],
|
||||
bw1 = b[7],
|
||||
ax1 = a[4],
|
||||
ay1 = a[5],
|
||||
az1 = a[6],
|
||||
aw1 = a[7],
|
||||
bx0 = b[0],
|
||||
by0 = b[1],
|
||||
bz0 = b[2],
|
||||
bw0 = b[3];
|
||||
out[0] = ax0 * bw0 + aw0 * bx0 + ay0 * bz0 - az0 * by0;
|
||||
out[1] = ay0 * bw0 + aw0 * by0 + az0 * bx0 - ax0 * bz0;
|
||||
out[2] = az0 * bw0 + aw0 * bz0 + ax0 * by0 - ay0 * bx0;
|
||||
out[3] = aw0 * bw0 - ax0 * bx0 - ay0 * by0 - az0 * bz0;
|
||||
out[4] = ax0 * bw1 + aw0 * bx1 + ay0 * bz1 - az0 * by1 + ax1 * bw0 + aw1 * bx0 + ay1 * bz0 - az1 * by0;
|
||||
out[5] = ay0 * bw1 + aw0 * by1 + az0 * bx1 - ax0 * bz1 + ay1 * bw0 + aw1 * by0 + az1 * bx0 - ax1 * bz0;
|
||||
out[6] = az0 * bw1 + aw0 * bz1 + ax0 * by1 - ay0 * bx1 + az1 * bw0 + aw1 * bz0 + ax1 * by0 - ay1 * bx0;
|
||||
out[7] = aw0 * bw1 - ax0 * bx1 - ay0 * by1 - az0 * bz1 + aw1 * bw0 - ax1 * bx0 - ay1 * by0 - az1 * bz0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for {@link quat2.multiply}
|
||||
* @function
|
||||
*/
|
||||
export var mul = multiply;
|
||||
|
||||
/**
|
||||
* Scales a dual quat by a scalar number
|
||||
*
|
||||
* @param {quat2} out the receiving dual quat
|
||||
* @param {ReadonlyQuat2} a the dual quat to scale
|
||||
* @param {Number} b amount to scale the dual quat by
|
||||
* @returns {quat2} out
|
||||
* @function
|
||||
*/
|
||||
export function scale(out, a, b) {
|
||||
out[0] = a[0] * b;
|
||||
out[1] = a[1] * b;
|
||||
out[2] = a[2] * b;
|
||||
out[3] = a[3] * b;
|
||||
out[4] = a[4] * b;
|
||||
out[5] = a[5] * b;
|
||||
out[6] = a[6] * b;
|
||||
out[7] = a[7] * b;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the dot product of two dual quat's (The dot product of the real parts)
|
||||
*
|
||||
* @param {ReadonlyQuat2} a the first operand
|
||||
* @param {ReadonlyQuat2} b the second operand
|
||||
* @returns {Number} dot product of a and b
|
||||
* @function
|
||||
*/
|
||||
export var dot = quat.dot;
|
||||
|
||||
/**
|
||||
* Performs a linear interpolation between two dual quats's
|
||||
* NOTE: The resulting dual quaternions won't always be normalized (The error is most noticeable when t = 0.5)
|
||||
*
|
||||
* @param {quat2} out the receiving dual quat
|
||||
* @param {ReadonlyQuat2} a the first operand
|
||||
* @param {ReadonlyQuat2} b the second operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
export function lerp(out, a, b, t) {
|
||||
var mt = 1 - t;
|
||||
if (dot(a, b) < 0) t = -t;
|
||||
out[0] = a[0] * mt + b[0] * t;
|
||||
out[1] = a[1] * mt + b[1] * t;
|
||||
out[2] = a[2] * mt + b[2] * t;
|
||||
out[3] = a[3] * mt + b[3] * t;
|
||||
out[4] = a[4] * mt + b[4] * t;
|
||||
out[5] = a[5] * mt + b[5] * t;
|
||||
out[6] = a[6] * mt + b[6] * t;
|
||||
out[7] = a[7] * mt + b[7] * t;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the inverse of a dual quat. If they are normalized, conjugate is cheaper
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a dual quat to calculate inverse of
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
export function invert(out, a) {
|
||||
var sqlen = squaredLength(a);
|
||||
out[0] = -a[0] / sqlen;
|
||||
out[1] = -a[1] / sqlen;
|
||||
out[2] = -a[2] / sqlen;
|
||||
out[3] = a[3] / sqlen;
|
||||
out[4] = -a[4] / sqlen;
|
||||
out[5] = -a[5] / sqlen;
|
||||
out[6] = -a[6] / sqlen;
|
||||
out[7] = a[7] / sqlen;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the conjugate of a dual quat
|
||||
* If the dual quaternion is normalized, this function is faster than quat2.inverse and produces the same result.
|
||||
*
|
||||
* @param {quat2} out the receiving quaternion
|
||||
* @param {ReadonlyQuat2} a quat to calculate conjugate of
|
||||
* @returns {quat2} out
|
||||
*/
|
||||
export function conjugate(out, a) {
|
||||
out[0] = -a[0];
|
||||
out[1] = -a[1];
|
||||
out[2] = -a[2];
|
||||
out[3] = a[3];
|
||||
out[4] = -a[4];
|
||||
out[5] = -a[5];
|
||||
out[6] = -a[6];
|
||||
out[7] = a[7];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the length of a dual quat
|
||||
*
|
||||
* @param {ReadonlyQuat2} a dual quat to calculate length of
|
||||
* @returns {Number} length of a
|
||||
* @function
|
||||
*/
|
||||
export var length = quat.length;
|
||||
|
||||
/**
|
||||
* Alias for {@link quat2.length}
|
||||
* @function
|
||||
*/
|
||||
export var len = length;
|
||||
|
||||
/**
|
||||
* Calculates the squared length of a dual quat
|
||||
*
|
||||
* @param {ReadonlyQuat2} a dual quat to calculate squared length of
|
||||
* @returns {Number} squared length of a
|
||||
* @function
|
||||
*/
|
||||
export var squaredLength = quat.squaredLength;
|
||||
|
||||
/**
|
||||
* Alias for {@link quat2.squaredLength}
|
||||
* @function
|
||||
*/
|
||||
export var sqrLen = squaredLength;
|
||||
|
||||
/**
|
||||
* Normalize a dual quat
|
||||
*
|
||||
* @param {quat2} out the receiving dual quaternion
|
||||
* @param {ReadonlyQuat2} a dual quaternion to normalize
|
||||
* @returns {quat2} out
|
||||
* @function
|
||||
*/
|
||||
export function normalize(out, a) {
|
||||
var magnitude = squaredLength(a);
|
||||
if (magnitude > 0) {
|
||||
magnitude = Math.sqrt(magnitude);
|
||||
var a0 = a[0] / magnitude;
|
||||
var a1 = a[1] / magnitude;
|
||||
var a2 = a[2] / magnitude;
|
||||
var a3 = a[3] / magnitude;
|
||||
var b0 = a[4];
|
||||
var b1 = a[5];
|
||||
var b2 = a[6];
|
||||
var b3 = a[7];
|
||||
var a_dot_b = a0 * b0 + a1 * b1 + a2 * b2 + a3 * b3;
|
||||
out[0] = a0;
|
||||
out[1] = a1;
|
||||
out[2] = a2;
|
||||
out[3] = a3;
|
||||
out[4] = (b0 - a0 * a_dot_b) / magnitude;
|
||||
out[5] = (b1 - a1 * a_dot_b) / magnitude;
|
||||
out[6] = (b2 - a2 * a_dot_b) / magnitude;
|
||||
out[7] = (b3 - a3 * a_dot_b) / magnitude;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of a dual quaternion
|
||||
*
|
||||
* @param {ReadonlyQuat2} a dual quaternion to represent as a string
|
||||
* @returns {String} string representation of the dual quat
|
||||
*/
|
||||
export function str(a) {
|
||||
return "quat2(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ", " + a[4] + ", " + a[5] + ", " + a[6] + ", " + a[7] + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the dual quaternions have exactly the same elements in the same position (when compared with ===)
|
||||
*
|
||||
* @param {ReadonlyQuat2} a the first dual quaternion.
|
||||
* @param {ReadonlyQuat2} b the second dual quaternion.
|
||||
* @returns {Boolean} true if the dual quaternions are equal, false otherwise.
|
||||
*/
|
||||
export function exactEquals(a, b) {
|
||||
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the dual quaternions have approximately the same elements in the same position.
|
||||
*
|
||||
* @param {ReadonlyQuat2} a the first dual quat.
|
||||
* @param {ReadonlyQuat2} b the second dual quat.
|
||||
* @returns {Boolean} true if the dual quats are equal, false otherwise.
|
||||
*/
|
||||
export function equals(a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3],
|
||||
a4 = a[4],
|
||||
a5 = a[5],
|
||||
a6 = a[6],
|
||||
a7 = a[7];
|
||||
var b0 = b[0],
|
||||
b1 = b[1],
|
||||
b2 = b[2],
|
||||
b3 = b[3],
|
||||
b4 = b[4],
|
||||
b5 = b[5],
|
||||
b6 = b[6],
|
||||
b7 = b[7];
|
||||
return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7));
|
||||
}
|
||||
626
node_modules/gl-matrix/esm/vec2.js
generated
vendored
626
node_modules/gl-matrix/esm/vec2.js
generated
vendored
@@ -1,626 +0,0 @@
|
||||
import * as glMatrix from "./common.js";
|
||||
|
||||
/**
|
||||
* 2 Dimensional Vector
|
||||
* @module vec2
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new, empty vec2
|
||||
*
|
||||
* @returns {vec2} a new 2D vector
|
||||
*/
|
||||
export function create() {
|
||||
var out = new glMatrix.ARRAY_TYPE(2);
|
||||
if (glMatrix.ARRAY_TYPE != Float32Array) {
|
||||
out[0] = 0;
|
||||
out[1] = 0;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new vec2 initialized with values from an existing vector
|
||||
*
|
||||
* @param {ReadonlyVec2} a vector to clone
|
||||
* @returns {vec2} a new 2D vector
|
||||
*/
|
||||
export function clone(a) {
|
||||
var out = new glMatrix.ARRAY_TYPE(2);
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new vec2 initialized with the given values
|
||||
*
|
||||
* @param {Number} x X component
|
||||
* @param {Number} y Y component
|
||||
* @returns {vec2} a new 2D vector
|
||||
*/
|
||||
export function fromValues(x, y) {
|
||||
var out = new glMatrix.ARRAY_TYPE(2);
|
||||
out[0] = x;
|
||||
out[1] = y;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy the values from one vec2 to another
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the source vector
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function copy(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a vec2 to the given values
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {Number} x X component
|
||||
* @param {Number} y Y component
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function set(out, x, y) {
|
||||
out[0] = x;
|
||||
out[1] = y;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two vec2's
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function add(out, a, b) {
|
||||
out[0] = a[0] + b[0];
|
||||
out[1] = a[1] + b[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subtracts vector b from vector a
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function subtract(out, a, b) {
|
||||
out[0] = a[0] - b[0];
|
||||
out[1] = a[1] - b[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies two vec2's
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function multiply(out, a, b) {
|
||||
out[0] = a[0] * b[0];
|
||||
out[1] = a[1] * b[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Divides two vec2's
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function divide(out, a, b) {
|
||||
out[0] = a[0] / b[0];
|
||||
out[1] = a[1] / b[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Math.ceil the components of a vec2
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a vector to ceil
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function ceil(out, a) {
|
||||
out[0] = Math.ceil(a[0]);
|
||||
out[1] = Math.ceil(a[1]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Math.floor the components of a vec2
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a vector to floor
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function floor(out, a) {
|
||||
out[0] = Math.floor(a[0]);
|
||||
out[1] = Math.floor(a[1]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the minimum of two vec2's
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function min(out, a, b) {
|
||||
out[0] = Math.min(a[0], b[0]);
|
||||
out[1] = Math.min(a[1], b[1]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum of two vec2's
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function max(out, a, b) {
|
||||
out[0] = Math.max(a[0], b[0]);
|
||||
out[1] = Math.max(a[1], b[1]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* symmetric round the components of a vec2
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a vector to round
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function round(out, a) {
|
||||
out[0] = glMatrix.round(a[0]);
|
||||
out[1] = glMatrix.round(a[1]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scales a vec2 by a scalar number
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the vector to scale
|
||||
* @param {Number} b amount to scale the vector by
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function scale(out, a, b) {
|
||||
out[0] = a[0] * b;
|
||||
out[1] = a[1] * b;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two vec2's after scaling the second operand by a scalar value
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @param {Number} scale the amount to scale b by before adding
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function scaleAndAdd(out, a, b, scale) {
|
||||
out[0] = a[0] + b[0] * scale;
|
||||
out[1] = a[1] + b[1] * scale;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the euclidian distance between two vec2's
|
||||
*
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {Number} distance between a and b
|
||||
*/
|
||||
export function distance(a, b) {
|
||||
var x = b[0] - a[0],
|
||||
y = b[1] - a[1];
|
||||
return Math.sqrt(x * x + y * y);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the squared euclidian distance between two vec2's
|
||||
*
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {Number} squared distance between a and b
|
||||
*/
|
||||
export function squaredDistance(a, b) {
|
||||
var x = b[0] - a[0],
|
||||
y = b[1] - a[1];
|
||||
return x * x + y * y;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the length of a vec2
|
||||
*
|
||||
* @param {ReadonlyVec2} a vector to calculate length of
|
||||
* @returns {Number} length of a
|
||||
*/
|
||||
export function length(a) {
|
||||
var x = a[0],
|
||||
y = a[1];
|
||||
return Math.sqrt(x * x + y * y);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the squared length of a vec2
|
||||
*
|
||||
* @param {ReadonlyVec2} a vector to calculate squared length of
|
||||
* @returns {Number} squared length of a
|
||||
*/
|
||||
export function squaredLength(a) {
|
||||
var x = a[0],
|
||||
y = a[1];
|
||||
return x * x + y * y;
|
||||
}
|
||||
|
||||
/**
|
||||
* Negates the components of a vec2
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a vector to negate
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function negate(out, a) {
|
||||
out[0] = -a[0];
|
||||
out[1] = -a[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the inverse of the components of a vec2
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a vector to invert
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function inverse(out, a) {
|
||||
out[0] = 1.0 / a[0];
|
||||
out[1] = 1.0 / a[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalize a vec2
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a vector to normalize
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function normalize(out, a) {
|
||||
var x = a[0],
|
||||
y = a[1];
|
||||
var len = x * x + y * y;
|
||||
if (len > 0) {
|
||||
//TODO: evaluate use of glm_invsqrt here?
|
||||
len = 1 / Math.sqrt(len);
|
||||
}
|
||||
out[0] = a[0] * len;
|
||||
out[1] = a[1] * len;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the dot product of two vec2's
|
||||
*
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {Number} dot product of a and b
|
||||
*/
|
||||
export function dot(a, b) {
|
||||
return a[0] * b[0] + a[1] * b[1];
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes the cross product of two vec2's
|
||||
* Note that the cross product must by definition produce a 3D vector
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function cross(out, a, b) {
|
||||
var z = a[0] * b[1] - a[1] * b[0];
|
||||
out[0] = out[1] = 0;
|
||||
out[2] = z;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a linear interpolation between two vec2's
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the first operand
|
||||
* @param {ReadonlyVec2} b the second operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function lerp(out, a, b, t) {
|
||||
var ax = a[0],
|
||||
ay = a[1];
|
||||
out[0] = ax + t * (b[0] - ax);
|
||||
out[1] = ay + t * (b[1] - ay);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a random vector with the given scale
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function random(out, scale) {
|
||||
scale = scale === undefined ? 1.0 : scale;
|
||||
var r = glMatrix.RANDOM() * 2.0 * Math.PI;
|
||||
out[0] = Math.cos(r) * scale;
|
||||
out[1] = Math.sin(r) * scale;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec2 with a mat2
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the vector to transform
|
||||
* @param {ReadonlyMat2} m matrix to transform with
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function transformMat2(out, a, m) {
|
||||
var x = a[0],
|
||||
y = a[1];
|
||||
out[0] = m[0] * x + m[2] * y;
|
||||
out[1] = m[1] * x + m[3] * y;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec2 with a mat2d
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the vector to transform
|
||||
* @param {ReadonlyMat2d} m matrix to transform with
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function transformMat2d(out, a, m) {
|
||||
var x = a[0],
|
||||
y = a[1];
|
||||
out[0] = m[0] * x + m[2] * y + m[4];
|
||||
out[1] = m[1] * x + m[3] * y + m[5];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec2 with a mat3
|
||||
* 3rd vector component is implicitly '1'
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the vector to transform
|
||||
* @param {ReadonlyMat3} m matrix to transform with
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function transformMat3(out, a, m) {
|
||||
var x = a[0],
|
||||
y = a[1];
|
||||
out[0] = m[0] * x + m[3] * y + m[6];
|
||||
out[1] = m[1] * x + m[4] * y + m[7];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec2 with a mat4
|
||||
* 3rd vector component is implicitly '0'
|
||||
* 4th vector component is implicitly '1'
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @param {ReadonlyVec2} a the vector to transform
|
||||
* @param {ReadonlyMat4} m matrix to transform with
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function transformMat4(out, a, m) {
|
||||
var x = a[0];
|
||||
var y = a[1];
|
||||
out[0] = m[0] * x + m[4] * y + m[12];
|
||||
out[1] = m[1] * x + m[5] * y + m[13];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotate a 2D vector
|
||||
* @param {vec2} out The receiving vec2
|
||||
* @param {ReadonlyVec2} a The vec2 point to rotate
|
||||
* @param {ReadonlyVec2} b The origin of the rotation
|
||||
* @param {Number} rad The angle of rotation in radians
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function rotate(out, a, b, rad) {
|
||||
//Translate point to the origin
|
||||
var p0 = a[0] - b[0],
|
||||
p1 = a[1] - b[1],
|
||||
sinC = Math.sin(rad),
|
||||
cosC = Math.cos(rad);
|
||||
|
||||
//perform rotation and translate to correct position
|
||||
out[0] = p0 * cosC - p1 * sinC + b[0];
|
||||
out[1] = p0 * sinC + p1 * cosC + b[1];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the smallest angle between two 2D vectors
|
||||
* @param {ReadonlyVec2} a The first operand
|
||||
* @param {ReadonlyVec2} b The second operand
|
||||
* @returns {Number} The angle in radians
|
||||
*/
|
||||
export function angle(a, b) {
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
bx = b[0],
|
||||
by = b[1];
|
||||
return Math.abs(Math.atan2(ay * bx - ax * by, ax * bx + ay * by));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the signed angle in the interval [-pi,pi] between two 2D vectors (positive if `a` is to the right of `b`)
|
||||
*
|
||||
* @param {ReadonlyVec2} a The first vector
|
||||
* @param {ReadonlyVec2} b The second vector
|
||||
* @returns {number} The signed angle in radians
|
||||
*/
|
||||
export function signedAngle(a, b) {
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
bx = b[0],
|
||||
by = b[1];
|
||||
return Math.atan2(ax * by - ay * bx, ax * bx + ay * by);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a vec2 to zero
|
||||
*
|
||||
* @param {vec2} out the receiving vector
|
||||
* @returns {vec2} out
|
||||
*/
|
||||
export function zero(out) {
|
||||
out[0] = 0.0;
|
||||
out[1] = 0.0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of a vector
|
||||
*
|
||||
* @param {ReadonlyVec2} a vector to represent as a string
|
||||
* @returns {String} string representation of the vector
|
||||
*/
|
||||
export function str(a) {
|
||||
return "vec2(" + a[0] + ", " + a[1] + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)
|
||||
*
|
||||
* @param {ReadonlyVec2} a The first vector.
|
||||
* @param {ReadonlyVec2} b The second vector.
|
||||
* @returns {Boolean} True if the vectors are equal, false otherwise.
|
||||
*/
|
||||
export function exactEquals(a, b) {
|
||||
return a[0] === b[0] && a[1] === b[1];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the vectors have approximately the same elements in the same position.
|
||||
*
|
||||
* @param {ReadonlyVec2} a The first vector.
|
||||
* @param {ReadonlyVec2} b The second vector.
|
||||
* @returns {Boolean} True if the vectors are equal, false otherwise.
|
||||
*/
|
||||
export function equals(a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1];
|
||||
var b0 = b[0],
|
||||
b1 = b[1];
|
||||
return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for {@link vec2.length}
|
||||
* @function
|
||||
*/
|
||||
export var len = length;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec2.subtract}
|
||||
* @function
|
||||
*/
|
||||
export var sub = subtract;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec2.multiply}
|
||||
* @function
|
||||
*/
|
||||
export var mul = multiply;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec2.divide}
|
||||
* @function
|
||||
*/
|
||||
export var div = divide;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec2.distance}
|
||||
* @function
|
||||
*/
|
||||
export var dist = distance;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec2.squaredDistance}
|
||||
* @function
|
||||
*/
|
||||
export var sqrDist = squaredDistance;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec2.squaredLength}
|
||||
* @function
|
||||
*/
|
||||
export var sqrLen = squaredLength;
|
||||
|
||||
/**
|
||||
* Perform some operation over an array of vec2s.
|
||||
*
|
||||
* @param {Array} a the array of vectors to iterate over
|
||||
* @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed
|
||||
* @param {Number} offset Number of elements to skip at the beginning of the array
|
||||
* @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array
|
||||
* @param {Function} fn Function to call for each vector in the array
|
||||
* @param {Object} [arg] additional argument to pass to fn
|
||||
* @returns {Array} a
|
||||
* @function
|
||||
*/
|
||||
export var forEach = function () {
|
||||
var vec = create();
|
||||
return function (a, stride, offset, count, fn, arg) {
|
||||
var i, l;
|
||||
if (!stride) {
|
||||
stride = 2;
|
||||
}
|
||||
if (!offset) {
|
||||
offset = 0;
|
||||
}
|
||||
if (count) {
|
||||
l = Math.min(count * stride + offset, a.length);
|
||||
} else {
|
||||
l = a.length;
|
||||
}
|
||||
for (i = offset; i < l; i += stride) {
|
||||
vec[0] = a[i];
|
||||
vec[1] = a[i + 1];
|
||||
fn(vec, vec, arg);
|
||||
a[i] = vec[0];
|
||||
a[i + 1] = vec[1];
|
||||
}
|
||||
return a;
|
||||
};
|
||||
}();
|
||||
797
node_modules/gl-matrix/esm/vec3.js
generated
vendored
797
node_modules/gl-matrix/esm/vec3.js
generated
vendored
@@ -1,797 +0,0 @@
|
||||
import * as glMatrix from "./common.js";
|
||||
|
||||
/**
|
||||
* 3 Dimensional Vector
|
||||
* @module vec3
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new, empty vec3
|
||||
*
|
||||
* @returns {vec3} a new 3D vector
|
||||
*/
|
||||
export function create() {
|
||||
var out = new glMatrix.ARRAY_TYPE(3);
|
||||
if (glMatrix.ARRAY_TYPE != Float32Array) {
|
||||
out[0] = 0;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new vec3 initialized with values from an existing vector
|
||||
*
|
||||
* @param {ReadonlyVec3} a vector to clone
|
||||
* @returns {vec3} a new 3D vector
|
||||
*/
|
||||
export function clone(a) {
|
||||
var out = new glMatrix.ARRAY_TYPE(3);
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the length of a vec3
|
||||
*
|
||||
* @param {ReadonlyVec3} a vector to calculate length of
|
||||
* @returns {Number} length of a
|
||||
*/
|
||||
export function length(a) {
|
||||
var x = a[0];
|
||||
var y = a[1];
|
||||
var z = a[2];
|
||||
return Math.sqrt(x * x + y * y + z * z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new vec3 initialized with the given values
|
||||
*
|
||||
* @param {Number} x X component
|
||||
* @param {Number} y Y component
|
||||
* @param {Number} z Z component
|
||||
* @returns {vec3} a new 3D vector
|
||||
*/
|
||||
export function fromValues(x, y, z) {
|
||||
var out = new glMatrix.ARRAY_TYPE(3);
|
||||
out[0] = x;
|
||||
out[1] = y;
|
||||
out[2] = z;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy the values from one vec3 to another
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the source vector
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function copy(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a vec3 to the given values
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {Number} x X component
|
||||
* @param {Number} y Y component
|
||||
* @param {Number} z Z component
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function set(out, x, y, z) {
|
||||
out[0] = x;
|
||||
out[1] = y;
|
||||
out[2] = z;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two vec3's
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function add(out, a, b) {
|
||||
out[0] = a[0] + b[0];
|
||||
out[1] = a[1] + b[1];
|
||||
out[2] = a[2] + b[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subtracts vector b from vector a
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function subtract(out, a, b) {
|
||||
out[0] = a[0] - b[0];
|
||||
out[1] = a[1] - b[1];
|
||||
out[2] = a[2] - b[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies two vec3's
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function multiply(out, a, b) {
|
||||
out[0] = a[0] * b[0];
|
||||
out[1] = a[1] * b[1];
|
||||
out[2] = a[2] * b[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Divides two vec3's
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function divide(out, a, b) {
|
||||
out[0] = a[0] / b[0];
|
||||
out[1] = a[1] / b[1];
|
||||
out[2] = a[2] / b[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Math.ceil the components of a vec3
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a vector to ceil
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function ceil(out, a) {
|
||||
out[0] = Math.ceil(a[0]);
|
||||
out[1] = Math.ceil(a[1]);
|
||||
out[2] = Math.ceil(a[2]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Math.floor the components of a vec3
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a vector to floor
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function floor(out, a) {
|
||||
out[0] = Math.floor(a[0]);
|
||||
out[1] = Math.floor(a[1]);
|
||||
out[2] = Math.floor(a[2]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the minimum of two vec3's
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function min(out, a, b) {
|
||||
out[0] = Math.min(a[0], b[0]);
|
||||
out[1] = Math.min(a[1], b[1]);
|
||||
out[2] = Math.min(a[2], b[2]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum of two vec3's
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function max(out, a, b) {
|
||||
out[0] = Math.max(a[0], b[0]);
|
||||
out[1] = Math.max(a[1], b[1]);
|
||||
out[2] = Math.max(a[2], b[2]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* symmetric round the components of a vec3
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a vector to round
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function round(out, a) {
|
||||
out[0] = glMatrix.round(a[0]);
|
||||
out[1] = glMatrix.round(a[1]);
|
||||
out[2] = glMatrix.round(a[2]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scales a vec3 by a scalar number
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the vector to scale
|
||||
* @param {Number} b amount to scale the vector by
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function scale(out, a, b) {
|
||||
out[0] = a[0] * b;
|
||||
out[1] = a[1] * b;
|
||||
out[2] = a[2] * b;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two vec3's after scaling the second operand by a scalar value
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @param {Number} scale the amount to scale b by before adding
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function scaleAndAdd(out, a, b, scale) {
|
||||
out[0] = a[0] + b[0] * scale;
|
||||
out[1] = a[1] + b[1] * scale;
|
||||
out[2] = a[2] + b[2] * scale;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the euclidian distance between two vec3's
|
||||
*
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {Number} distance between a and b
|
||||
*/
|
||||
export function distance(a, b) {
|
||||
var x = b[0] - a[0];
|
||||
var y = b[1] - a[1];
|
||||
var z = b[2] - a[2];
|
||||
return Math.sqrt(x * x + y * y + z * z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the squared euclidian distance between two vec3's
|
||||
*
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {Number} squared distance between a and b
|
||||
*/
|
||||
export function squaredDistance(a, b) {
|
||||
var x = b[0] - a[0];
|
||||
var y = b[1] - a[1];
|
||||
var z = b[2] - a[2];
|
||||
return x * x + y * y + z * z;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the squared length of a vec3
|
||||
*
|
||||
* @param {ReadonlyVec3} a vector to calculate squared length of
|
||||
* @returns {Number} squared length of a
|
||||
*/
|
||||
export function squaredLength(a) {
|
||||
var x = a[0];
|
||||
var y = a[1];
|
||||
var z = a[2];
|
||||
return x * x + y * y + z * z;
|
||||
}
|
||||
|
||||
/**
|
||||
* Negates the components of a vec3
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a vector to negate
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function negate(out, a) {
|
||||
out[0] = -a[0];
|
||||
out[1] = -a[1];
|
||||
out[2] = -a[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the inverse of the components of a vec3
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a vector to invert
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function inverse(out, a) {
|
||||
out[0] = 1.0 / a[0];
|
||||
out[1] = 1.0 / a[1];
|
||||
out[2] = 1.0 / a[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalize a vec3
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a vector to normalize
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function normalize(out, a) {
|
||||
var x = a[0];
|
||||
var y = a[1];
|
||||
var z = a[2];
|
||||
var len = x * x + y * y + z * z;
|
||||
if (len > 0) {
|
||||
//TODO: evaluate use of glm_invsqrt here?
|
||||
len = 1 / Math.sqrt(len);
|
||||
}
|
||||
out[0] = a[0] * len;
|
||||
out[1] = a[1] * len;
|
||||
out[2] = a[2] * len;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the dot product of two vec3's
|
||||
*
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {Number} dot product of a and b
|
||||
*/
|
||||
export function dot(a, b) {
|
||||
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes the cross product of two vec3's
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function cross(out, a, b) {
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
az = a[2];
|
||||
var bx = b[0],
|
||||
by = b[1],
|
||||
bz = b[2];
|
||||
out[0] = ay * bz - az * by;
|
||||
out[1] = az * bx - ax * bz;
|
||||
out[2] = ax * by - ay * bx;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a linear interpolation between two vec3's
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function lerp(out, a, b, t) {
|
||||
var ax = a[0];
|
||||
var ay = a[1];
|
||||
var az = a[2];
|
||||
out[0] = ax + t * (b[0] - ax);
|
||||
out[1] = ay + t * (b[1] - ay);
|
||||
out[2] = az + t * (b[2] - az);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a spherical linear interpolation between two vec3's
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function slerp(out, a, b, t) {
|
||||
var angle = Math.acos(Math.min(Math.max(dot(a, b), -1), 1));
|
||||
var sinTotal = Math.sin(angle);
|
||||
var ratioA = Math.sin((1 - t) * angle) / sinTotal;
|
||||
var ratioB = Math.sin(t * angle) / sinTotal;
|
||||
out[0] = ratioA * a[0] + ratioB * b[0];
|
||||
out[1] = ratioA * a[1] + ratioB * b[1];
|
||||
out[2] = ratioA * a[2] + ratioB * b[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a hermite interpolation with two control points
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @param {ReadonlyVec3} c the third operand
|
||||
* @param {ReadonlyVec3} d the fourth operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function hermite(out, a, b, c, d, t) {
|
||||
var factorTimes2 = t * t;
|
||||
var factor1 = factorTimes2 * (2 * t - 3) + 1;
|
||||
var factor2 = factorTimes2 * (t - 2) + t;
|
||||
var factor3 = factorTimes2 * (t - 1);
|
||||
var factor4 = factorTimes2 * (3 - 2 * t);
|
||||
out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;
|
||||
out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;
|
||||
out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a bezier interpolation with two control points
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the first operand
|
||||
* @param {ReadonlyVec3} b the second operand
|
||||
* @param {ReadonlyVec3} c the third operand
|
||||
* @param {ReadonlyVec3} d the fourth operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function bezier(out, a, b, c, d, t) {
|
||||
var inverseFactor = 1 - t;
|
||||
var inverseFactorTimesTwo = inverseFactor * inverseFactor;
|
||||
var factorTimes2 = t * t;
|
||||
var factor1 = inverseFactorTimesTwo * inverseFactor;
|
||||
var factor2 = 3 * t * inverseFactorTimesTwo;
|
||||
var factor3 = 3 * factorTimes2 * inverseFactor;
|
||||
var factor4 = factorTimes2 * t;
|
||||
out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;
|
||||
out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;
|
||||
out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a random vector with the given scale
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function random(out, scale) {
|
||||
scale = scale === undefined ? 1.0 : scale;
|
||||
var r = glMatrix.RANDOM() * 2.0 * Math.PI;
|
||||
var z = glMatrix.RANDOM() * 2.0 - 1.0;
|
||||
var zScale = Math.sqrt(1.0 - z * z) * scale;
|
||||
out[0] = Math.cos(r) * zScale;
|
||||
out[1] = Math.sin(r) * zScale;
|
||||
out[2] = z * scale;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec3 with a mat4.
|
||||
* 4th vector component is implicitly '1'
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the vector to transform
|
||||
* @param {ReadonlyMat4} m matrix to transform with
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function transformMat4(out, a, m) {
|
||||
var x = a[0],
|
||||
y = a[1],
|
||||
z = a[2];
|
||||
var w = m[3] * x + m[7] * y + m[11] * z + m[15];
|
||||
w = w || 1.0;
|
||||
out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;
|
||||
out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;
|
||||
out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec3 with a mat3.
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the vector to transform
|
||||
* @param {ReadonlyMat3} m the 3x3 matrix to transform with
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function transformMat3(out, a, m) {
|
||||
var x = a[0],
|
||||
y = a[1],
|
||||
z = a[2];
|
||||
out[0] = x * m[0] + y * m[3] + z * m[6];
|
||||
out[1] = x * m[1] + y * m[4] + z * m[7];
|
||||
out[2] = x * m[2] + y * m[5] + z * m[8];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec3 with a quat
|
||||
* Can also be used for dual quaternions. (Multiply it with the real part)
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @param {ReadonlyVec3} a the vector to transform
|
||||
* @param {ReadonlyQuat} q normalized quaternion to transform with
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function transformQuat(out, a, q) {
|
||||
// Fast Vector Rotation using Quaternions by Robert Eisele
|
||||
// https://raw.org/proof/vector-rotation-using-quaternions/
|
||||
|
||||
var qx = q[0],
|
||||
qy = q[1],
|
||||
qz = q[2],
|
||||
qw = q[3];
|
||||
var vx = a[0],
|
||||
vy = a[1],
|
||||
vz = a[2];
|
||||
|
||||
// t = q x v
|
||||
var tx = qy * vz - qz * vy;
|
||||
var ty = qz * vx - qx * vz;
|
||||
var tz = qx * vy - qy * vx;
|
||||
|
||||
// t = 2t
|
||||
tx = tx + tx;
|
||||
ty = ty + ty;
|
||||
tz = tz + tz;
|
||||
|
||||
// v + w t + q x t
|
||||
out[0] = vx + qw * tx + qy * tz - qz * ty;
|
||||
out[1] = vy + qw * ty + qz * tx - qx * tz;
|
||||
out[2] = vz + qw * tz + qx * ty - qy * tx;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotate a 3D vector around the x-axis
|
||||
* @param {vec3} out The receiving vec3
|
||||
* @param {ReadonlyVec3} a The vec3 point to rotate
|
||||
* @param {ReadonlyVec3} b The origin of the rotation
|
||||
* @param {Number} rad The angle of rotation in radians
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function rotateX(out, a, b, rad) {
|
||||
var p = [],
|
||||
r = [];
|
||||
//Translate point to the origin
|
||||
p[0] = a[0] - b[0];
|
||||
p[1] = a[1] - b[1];
|
||||
p[2] = a[2] - b[2];
|
||||
|
||||
//perform rotation
|
||||
r[0] = p[0];
|
||||
r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);
|
||||
r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad);
|
||||
|
||||
//translate to correct position
|
||||
out[0] = r[0] + b[0];
|
||||
out[1] = r[1] + b[1];
|
||||
out[2] = r[2] + b[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotate a 3D vector around the y-axis
|
||||
* @param {vec3} out The receiving vec3
|
||||
* @param {ReadonlyVec3} a The vec3 point to rotate
|
||||
* @param {ReadonlyVec3} b The origin of the rotation
|
||||
* @param {Number} rad The angle of rotation in radians
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function rotateY(out, a, b, rad) {
|
||||
var p = [],
|
||||
r = [];
|
||||
//Translate point to the origin
|
||||
p[0] = a[0] - b[0];
|
||||
p[1] = a[1] - b[1];
|
||||
p[2] = a[2] - b[2];
|
||||
|
||||
//perform rotation
|
||||
r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);
|
||||
r[1] = p[1];
|
||||
r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad);
|
||||
|
||||
//translate to correct position
|
||||
out[0] = r[0] + b[0];
|
||||
out[1] = r[1] + b[1];
|
||||
out[2] = r[2] + b[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotate a 3D vector around the z-axis
|
||||
* @param {vec3} out The receiving vec3
|
||||
* @param {ReadonlyVec3} a The vec3 point to rotate
|
||||
* @param {ReadonlyVec3} b The origin of the rotation
|
||||
* @param {Number} rad The angle of rotation in radians
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function rotateZ(out, a, b, rad) {
|
||||
var p = [],
|
||||
r = [];
|
||||
//Translate point to the origin
|
||||
p[0] = a[0] - b[0];
|
||||
p[1] = a[1] - b[1];
|
||||
p[2] = a[2] - b[2];
|
||||
|
||||
//perform rotation
|
||||
r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);
|
||||
r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);
|
||||
r[2] = p[2];
|
||||
|
||||
//translate to correct position
|
||||
out[0] = r[0] + b[0];
|
||||
out[1] = r[1] + b[1];
|
||||
out[2] = r[2] + b[2];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the angle between two 3D vectors
|
||||
* @param {ReadonlyVec3} a The first operand
|
||||
* @param {ReadonlyVec3} b The second operand
|
||||
* @returns {Number} The angle in radians
|
||||
*/
|
||||
export function angle(a, b) {
|
||||
var ax = a[0],
|
||||
ay = a[1],
|
||||
az = a[2],
|
||||
bx = b[0],
|
||||
by = b[1],
|
||||
bz = b[2],
|
||||
mag = Math.sqrt((ax * ax + ay * ay + az * az) * (bx * bx + by * by + bz * bz)),
|
||||
cosine = mag && dot(a, b) / mag;
|
||||
return Math.acos(Math.min(Math.max(cosine, -1), 1));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a vec3 to zero
|
||||
*
|
||||
* @param {vec3} out the receiving vector
|
||||
* @returns {vec3} out
|
||||
*/
|
||||
export function zero(out) {
|
||||
out[0] = 0.0;
|
||||
out[1] = 0.0;
|
||||
out[2] = 0.0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of a vector
|
||||
*
|
||||
* @param {ReadonlyVec3} a vector to represent as a string
|
||||
* @returns {String} string representation of the vector
|
||||
*/
|
||||
export function str(a) {
|
||||
return "vec3(" + a[0] + ", " + a[1] + ", " + a[2] + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)
|
||||
*
|
||||
* @param {ReadonlyVec3} a The first vector.
|
||||
* @param {ReadonlyVec3} b The second vector.
|
||||
* @returns {Boolean} True if the vectors are equal, false otherwise.
|
||||
*/
|
||||
export function exactEquals(a, b) {
|
||||
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the vectors have approximately the same elements in the same position.
|
||||
*
|
||||
* @param {ReadonlyVec3} a The first vector.
|
||||
* @param {ReadonlyVec3} b The second vector.
|
||||
* @returns {Boolean} True if the vectors are equal, false otherwise.
|
||||
*/
|
||||
export function equals(a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2];
|
||||
var b0 = b[0],
|
||||
b1 = b[1],
|
||||
b2 = b[2];
|
||||
return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for {@link vec3.subtract}
|
||||
* @function
|
||||
*/
|
||||
export var sub = subtract;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec3.multiply}
|
||||
* @function
|
||||
*/
|
||||
export var mul = multiply;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec3.divide}
|
||||
* @function
|
||||
*/
|
||||
export var div = divide;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec3.distance}
|
||||
* @function
|
||||
*/
|
||||
export var dist = distance;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec3.squaredDistance}
|
||||
* @function
|
||||
*/
|
||||
export var sqrDist = squaredDistance;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec3.length}
|
||||
* @function
|
||||
*/
|
||||
export var len = length;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec3.squaredLength}
|
||||
* @function
|
||||
*/
|
||||
export var sqrLen = squaredLength;
|
||||
|
||||
/**
|
||||
* Perform some operation over an array of vec3s.
|
||||
*
|
||||
* @param {Array} a the array of vectors to iterate over
|
||||
* @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed
|
||||
* @param {Number} offset Number of elements to skip at the beginning of the array
|
||||
* @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array
|
||||
* @param {Function} fn Function to call for each vector in the array
|
||||
* @param {Object} [arg] additional argument to pass to fn
|
||||
* @returns {Array} a
|
||||
* @function
|
||||
*/
|
||||
export var forEach = function () {
|
||||
var vec = create();
|
||||
return function (a, stride, offset, count, fn, arg) {
|
||||
var i, l;
|
||||
if (!stride) {
|
||||
stride = 3;
|
||||
}
|
||||
if (!offset) {
|
||||
offset = 0;
|
||||
}
|
||||
if (count) {
|
||||
l = Math.min(count * stride + offset, a.length);
|
||||
} else {
|
||||
l = a.length;
|
||||
}
|
||||
for (i = offset; i < l; i += stride) {
|
||||
vec[0] = a[i];
|
||||
vec[1] = a[i + 1];
|
||||
vec[2] = a[i + 2];
|
||||
fn(vec, vec, arg);
|
||||
a[i] = vec[0];
|
||||
a[i + 1] = vec[1];
|
||||
a[i + 2] = vec[2];
|
||||
}
|
||||
return a;
|
||||
};
|
||||
}();
|
||||
660
node_modules/gl-matrix/esm/vec4.js
generated
vendored
660
node_modules/gl-matrix/esm/vec4.js
generated
vendored
@@ -1,660 +0,0 @@
|
||||
import * as glMatrix from "./common.js";
|
||||
|
||||
/**
|
||||
* 4 Dimensional Vector
|
||||
* @module vec4
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new, empty vec4
|
||||
*
|
||||
* @returns {vec4} a new 4D vector
|
||||
*/
|
||||
export function create() {
|
||||
var out = new glMatrix.ARRAY_TYPE(4);
|
||||
if (glMatrix.ARRAY_TYPE != Float32Array) {
|
||||
out[0] = 0;
|
||||
out[1] = 0;
|
||||
out[2] = 0;
|
||||
out[3] = 0;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new vec4 initialized with values from an existing vector
|
||||
*
|
||||
* @param {ReadonlyVec4} a vector to clone
|
||||
* @returns {vec4} a new 4D vector
|
||||
*/
|
||||
export function clone(a) {
|
||||
var out = new glMatrix.ARRAY_TYPE(4);
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new vec4 initialized with the given values
|
||||
*
|
||||
* @param {Number} x X component
|
||||
* @param {Number} y Y component
|
||||
* @param {Number} z Z component
|
||||
* @param {Number} w W component
|
||||
* @returns {vec4} a new 4D vector
|
||||
*/
|
||||
export function fromValues(x, y, z, w) {
|
||||
var out = new glMatrix.ARRAY_TYPE(4);
|
||||
out[0] = x;
|
||||
out[1] = y;
|
||||
out[2] = z;
|
||||
out[3] = w;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy the values from one vec4 to another
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the source vector
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function copy(out, a) {
|
||||
out[0] = a[0];
|
||||
out[1] = a[1];
|
||||
out[2] = a[2];
|
||||
out[3] = a[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a vec4 to the given values
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {Number} x X component
|
||||
* @param {Number} y Y component
|
||||
* @param {Number} z Z component
|
||||
* @param {Number} w W component
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function set(out, x, y, z, w) {
|
||||
out[0] = x;
|
||||
out[1] = y;
|
||||
out[2] = z;
|
||||
out[3] = w;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two vec4's
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function add(out, a, b) {
|
||||
out[0] = a[0] + b[0];
|
||||
out[1] = a[1] + b[1];
|
||||
out[2] = a[2] + b[2];
|
||||
out[3] = a[3] + b[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subtracts vector b from vector a
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function subtract(out, a, b) {
|
||||
out[0] = a[0] - b[0];
|
||||
out[1] = a[1] - b[1];
|
||||
out[2] = a[2] - b[2];
|
||||
out[3] = a[3] - b[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies two vec4's
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function multiply(out, a, b) {
|
||||
out[0] = a[0] * b[0];
|
||||
out[1] = a[1] * b[1];
|
||||
out[2] = a[2] * b[2];
|
||||
out[3] = a[3] * b[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Divides two vec4's
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function divide(out, a, b) {
|
||||
out[0] = a[0] / b[0];
|
||||
out[1] = a[1] / b[1];
|
||||
out[2] = a[2] / b[2];
|
||||
out[3] = a[3] / b[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Math.ceil the components of a vec4
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a vector to ceil
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function ceil(out, a) {
|
||||
out[0] = Math.ceil(a[0]);
|
||||
out[1] = Math.ceil(a[1]);
|
||||
out[2] = Math.ceil(a[2]);
|
||||
out[3] = Math.ceil(a[3]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Math.floor the components of a vec4
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a vector to floor
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function floor(out, a) {
|
||||
out[0] = Math.floor(a[0]);
|
||||
out[1] = Math.floor(a[1]);
|
||||
out[2] = Math.floor(a[2]);
|
||||
out[3] = Math.floor(a[3]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the minimum of two vec4's
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function min(out, a, b) {
|
||||
out[0] = Math.min(a[0], b[0]);
|
||||
out[1] = Math.min(a[1], b[1]);
|
||||
out[2] = Math.min(a[2], b[2]);
|
||||
out[3] = Math.min(a[3], b[3]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum of two vec4's
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function max(out, a, b) {
|
||||
out[0] = Math.max(a[0], b[0]);
|
||||
out[1] = Math.max(a[1], b[1]);
|
||||
out[2] = Math.max(a[2], b[2]);
|
||||
out[3] = Math.max(a[3], b[3]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* symmetric round the components of a vec4
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a vector to round
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function round(out, a) {
|
||||
out[0] = glMatrix.round(a[0]);
|
||||
out[1] = glMatrix.round(a[1]);
|
||||
out[2] = glMatrix.round(a[2]);
|
||||
out[3] = glMatrix.round(a[3]);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scales a vec4 by a scalar number
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the vector to scale
|
||||
* @param {Number} b amount to scale the vector by
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function scale(out, a, b) {
|
||||
out[0] = a[0] * b;
|
||||
out[1] = a[1] * b;
|
||||
out[2] = a[2] * b;
|
||||
out[3] = a[3] * b;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two vec4's after scaling the second operand by a scalar value
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @param {Number} scale the amount to scale b by before adding
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function scaleAndAdd(out, a, b, scale) {
|
||||
out[0] = a[0] + b[0] * scale;
|
||||
out[1] = a[1] + b[1] * scale;
|
||||
out[2] = a[2] + b[2] * scale;
|
||||
out[3] = a[3] + b[3] * scale;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the euclidian distance between two vec4's
|
||||
*
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {Number} distance between a and b
|
||||
*/
|
||||
export function distance(a, b) {
|
||||
var x = b[0] - a[0];
|
||||
var y = b[1] - a[1];
|
||||
var z = b[2] - a[2];
|
||||
var w = b[3] - a[3];
|
||||
return Math.sqrt(x * x + y * y + z * z + w * w);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the squared euclidian distance between two vec4's
|
||||
*
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {Number} squared distance between a and b
|
||||
*/
|
||||
export function squaredDistance(a, b) {
|
||||
var x = b[0] - a[0];
|
||||
var y = b[1] - a[1];
|
||||
var z = b[2] - a[2];
|
||||
var w = b[3] - a[3];
|
||||
return x * x + y * y + z * z + w * w;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the length of a vec4
|
||||
*
|
||||
* @param {ReadonlyVec4} a vector to calculate length of
|
||||
* @returns {Number} length of a
|
||||
*/
|
||||
export function length(a) {
|
||||
var x = a[0];
|
||||
var y = a[1];
|
||||
var z = a[2];
|
||||
var w = a[3];
|
||||
return Math.sqrt(x * x + y * y + z * z + w * w);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the squared length of a vec4
|
||||
*
|
||||
* @param {ReadonlyVec4} a vector to calculate squared length of
|
||||
* @returns {Number} squared length of a
|
||||
*/
|
||||
export function squaredLength(a) {
|
||||
var x = a[0];
|
||||
var y = a[1];
|
||||
var z = a[2];
|
||||
var w = a[3];
|
||||
return x * x + y * y + z * z + w * w;
|
||||
}
|
||||
|
||||
/**
|
||||
* Negates the components of a vec4
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a vector to negate
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function negate(out, a) {
|
||||
out[0] = -a[0];
|
||||
out[1] = -a[1];
|
||||
out[2] = -a[2];
|
||||
out[3] = -a[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the inverse of the components of a vec4
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a vector to invert
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function inverse(out, a) {
|
||||
out[0] = 1.0 / a[0];
|
||||
out[1] = 1.0 / a[1];
|
||||
out[2] = 1.0 / a[2];
|
||||
out[3] = 1.0 / a[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalize a vec4
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a vector to normalize
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function normalize(out, a) {
|
||||
var x = a[0];
|
||||
var y = a[1];
|
||||
var z = a[2];
|
||||
var w = a[3];
|
||||
var len = x * x + y * y + z * z + w * w;
|
||||
if (len > 0) {
|
||||
len = 1 / Math.sqrt(len);
|
||||
}
|
||||
out[0] = x * len;
|
||||
out[1] = y * len;
|
||||
out[2] = z * len;
|
||||
out[3] = w * len;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the dot product of two vec4's
|
||||
*
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @returns {Number} dot product of a and b
|
||||
*/
|
||||
export function dot(a, b) {
|
||||
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the cross-product of three vectors in a 4-dimensional space
|
||||
*
|
||||
* @param {ReadonlyVec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} u the first vector
|
||||
* @param {ReadonlyVec4} v the second vector
|
||||
* @param {ReadonlyVec4} w the third vector
|
||||
* @returns {vec4} result
|
||||
*/
|
||||
export function cross(out, u, v, w) {
|
||||
var A = v[0] * w[1] - v[1] * w[0],
|
||||
B = v[0] * w[2] - v[2] * w[0],
|
||||
C = v[0] * w[3] - v[3] * w[0],
|
||||
D = v[1] * w[2] - v[2] * w[1],
|
||||
E = v[1] * w[3] - v[3] * w[1],
|
||||
F = v[2] * w[3] - v[3] * w[2];
|
||||
var G = u[0];
|
||||
var H = u[1];
|
||||
var I = u[2];
|
||||
var J = u[3];
|
||||
out[0] = H * F - I * E + J * D;
|
||||
out[1] = -(G * F) + I * C - J * B;
|
||||
out[2] = G * E - H * C + J * A;
|
||||
out[3] = -(G * D) + H * B - I * A;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a linear interpolation between two vec4's
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the first operand
|
||||
* @param {ReadonlyVec4} b the second operand
|
||||
* @param {Number} t interpolation amount, in the range [0-1], between the two inputs
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function lerp(out, a, b, t) {
|
||||
var ax = a[0];
|
||||
var ay = a[1];
|
||||
var az = a[2];
|
||||
var aw = a[3];
|
||||
out[0] = ax + t * (b[0] - ax);
|
||||
out[1] = ay + t * (b[1] - ay);
|
||||
out[2] = az + t * (b[2] - az);
|
||||
out[3] = aw + t * (b[3] - aw);
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a random vector with the given scale
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function random(out, scale) {
|
||||
scale = scale === undefined ? 1.0 : scale;
|
||||
|
||||
// Marsaglia, George. Choosing a Point from the Surface of a
|
||||
// Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.
|
||||
// http://projecteuclid.org/euclid.aoms/1177692644;
|
||||
var v1, v2, v3, v4;
|
||||
var s1, s2;
|
||||
var rand;
|
||||
rand = glMatrix.RANDOM();
|
||||
v1 = rand * 2 - 1;
|
||||
v2 = (4 * glMatrix.RANDOM() - 2) * Math.sqrt(rand * -rand + rand);
|
||||
s1 = v1 * v1 + v2 * v2;
|
||||
rand = glMatrix.RANDOM();
|
||||
v3 = rand * 2 - 1;
|
||||
v4 = (4 * glMatrix.RANDOM() - 2) * Math.sqrt(rand * -rand + rand);
|
||||
s2 = v3 * v3 + v4 * v4;
|
||||
var d = Math.sqrt((1 - s1) / s2);
|
||||
out[0] = scale * v1;
|
||||
out[1] = scale * v2;
|
||||
out[2] = scale * v3 * d;
|
||||
out[3] = scale * v4 * d;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec4 with a mat4.
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the vector to transform
|
||||
* @param {ReadonlyMat4} m matrix to transform with
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function transformMat4(out, a, m) {
|
||||
var x = a[0],
|
||||
y = a[1],
|
||||
z = a[2],
|
||||
w = a[3];
|
||||
out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;
|
||||
out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;
|
||||
out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;
|
||||
out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the vec4 with a quat
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @param {ReadonlyVec4} a the vector to transform
|
||||
* @param {ReadonlyQuat} q normalized quaternion to transform with
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function transformQuat(out, a, q) {
|
||||
// Fast Vector Rotation using Quaternions by Robert Eisele
|
||||
// https://raw.org/proof/vector-rotation-using-quaternions/
|
||||
|
||||
var qx = q[0],
|
||||
qy = q[1],
|
||||
qz = q[2],
|
||||
qw = q[3];
|
||||
var vx = a[0],
|
||||
vy = a[1],
|
||||
vz = a[2];
|
||||
|
||||
// t = q x v
|
||||
var tx = qy * vz - qz * vy;
|
||||
var ty = qz * vx - qx * vz;
|
||||
var tz = qx * vy - qy * vx;
|
||||
|
||||
// t = 2t
|
||||
tx = tx + tx;
|
||||
ty = ty + ty;
|
||||
tz = tz + tz;
|
||||
|
||||
// v + w t + q x t
|
||||
out[0] = vx + qw * tx + qy * tz - qz * ty;
|
||||
out[1] = vy + qw * ty + qz * tx - qx * tz;
|
||||
out[2] = vz + qw * tz + qx * ty - qy * tx;
|
||||
out[3] = a[3];
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the components of a vec4 to zero
|
||||
*
|
||||
* @param {vec4} out the receiving vector
|
||||
* @returns {vec4} out
|
||||
*/
|
||||
export function zero(out) {
|
||||
out[0] = 0.0;
|
||||
out[1] = 0.0;
|
||||
out[2] = 0.0;
|
||||
out[3] = 0.0;
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of a vector
|
||||
*
|
||||
* @param {ReadonlyVec4} a vector to represent as a string
|
||||
* @returns {String} string representation of the vector
|
||||
*/
|
||||
export function str(a) {
|
||||
return "vec4(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)
|
||||
*
|
||||
* @param {ReadonlyVec4} a The first vector.
|
||||
* @param {ReadonlyVec4} b The second vector.
|
||||
* @returns {Boolean} True if the vectors are equal, false otherwise.
|
||||
*/
|
||||
export function exactEquals(a, b) {
|
||||
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not the vectors have approximately the same elements in the same position.
|
||||
*
|
||||
* @param {ReadonlyVec4} a The first vector.
|
||||
* @param {ReadonlyVec4} b The second vector.
|
||||
* @returns {Boolean} True if the vectors are equal, false otherwise.
|
||||
*/
|
||||
export function equals(a, b) {
|
||||
var a0 = a[0],
|
||||
a1 = a[1],
|
||||
a2 = a[2],
|
||||
a3 = a[3];
|
||||
var b0 = b[0],
|
||||
b1 = b[1],
|
||||
b2 = b[2],
|
||||
b3 = b[3];
|
||||
return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for {@link vec4.subtract}
|
||||
* @function
|
||||
*/
|
||||
export var sub = subtract;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec4.multiply}
|
||||
* @function
|
||||
*/
|
||||
export var mul = multiply;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec4.divide}
|
||||
* @function
|
||||
*/
|
||||
export var div = divide;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec4.distance}
|
||||
* @function
|
||||
*/
|
||||
export var dist = distance;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec4.squaredDistance}
|
||||
* @function
|
||||
*/
|
||||
export var sqrDist = squaredDistance;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec4.length}
|
||||
* @function
|
||||
*/
|
||||
export var len = length;
|
||||
|
||||
/**
|
||||
* Alias for {@link vec4.squaredLength}
|
||||
* @function
|
||||
*/
|
||||
export var sqrLen = squaredLength;
|
||||
|
||||
/**
|
||||
* Perform some operation over an array of vec4s.
|
||||
*
|
||||
* @param {Array} a the array of vectors to iterate over
|
||||
* @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed
|
||||
* @param {Number} offset Number of elements to skip at the beginning of the array
|
||||
* @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array
|
||||
* @param {Function} fn Function to call for each vector in the array
|
||||
* @param {Object} [arg] additional argument to pass to fn
|
||||
* @returns {Array} a
|
||||
* @function
|
||||
*/
|
||||
export var forEach = function () {
|
||||
var vec = create();
|
||||
return function (a, stride, offset, count, fn, arg) {
|
||||
var i, l;
|
||||
if (!stride) {
|
||||
stride = 4;
|
||||
}
|
||||
if (!offset) {
|
||||
offset = 0;
|
||||
}
|
||||
if (count) {
|
||||
l = Math.min(count * stride + offset, a.length);
|
||||
} else {
|
||||
l = a.length;
|
||||
}
|
||||
for (i = offset; i < l; i += stride) {
|
||||
vec[0] = a[i];
|
||||
vec[1] = a[i + 1];
|
||||
vec[2] = a[i + 2];
|
||||
vec[3] = a[i + 3];
|
||||
fn(vec, vec, arg);
|
||||
a[i] = vec[0];
|
||||
a[i + 1] = vec[1];
|
||||
a[i + 2] = vec[2];
|
||||
a[i + 3] = vec[3];
|
||||
}
|
||||
return a;
|
||||
};
|
||||
}();
|
||||
28
node_modules/gl-matrix/gl-matrix-min.js
generated
vendored
28
node_modules/gl-matrix/gl-matrix-min.js
generated
vendored
File diff suppressed because one or more lines are too long
7800
node_modules/gl-matrix/gl-matrix.js
generated
vendored
7800
node_modules/gl-matrix/gl-matrix.js
generated
vendored
File diff suppressed because it is too large
Load Diff
3324
node_modules/gl-matrix/index.d.ts
generated
vendored
3324
node_modules/gl-matrix/index.d.ts
generated
vendored
File diff suppressed because it is too large
Load Diff
5
node_modules/gl-matrix/mat2/package.json
generated
vendored
5
node_modules/gl-matrix/mat2/package.json
generated
vendored
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"name": "gl-matrix/mat2",
|
||||
"main": "../cjs/mat2.js",
|
||||
"module": "../esm/mat2.js"
|
||||
}
|
||||
5
node_modules/gl-matrix/mat2d/package.json
generated
vendored
5
node_modules/gl-matrix/mat2d/package.json
generated
vendored
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"name": "gl-matrix/mat2d",
|
||||
"main": "../cjs/mat2d.js",
|
||||
"module": "../esm/mat2d.js"
|
||||
}
|
||||
5
node_modules/gl-matrix/mat3/package.json
generated
vendored
5
node_modules/gl-matrix/mat3/package.json
generated
vendored
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"name": "gl-matrix/mat3",
|
||||
"main": "../cjs/mat3.js",
|
||||
"module": "../esm/mat3.js"
|
||||
}
|
||||
5
node_modules/gl-matrix/mat4/package.json
generated
vendored
5
node_modules/gl-matrix/mat4/package.json
generated
vendored
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"name": "gl-matrix/mat4",
|
||||
"main": "../cjs/mat4.js",
|
||||
"module": "../esm/mat4.js"
|
||||
}
|
||||
28
node_modules/gl-matrix/package.json
generated
vendored
28
node_modules/gl-matrix/package.json
generated
vendored
@@ -1,28 +0,0 @@
|
||||
{
|
||||
"version": "3.4.4",
|
||||
"name": "gl-matrix",
|
||||
"description": "Javascript Matrix and Vector library for High Performance WebGL apps",
|
||||
"sideEffects": false,
|
||||
"main": "cjs/index.js",
|
||||
"module": "esm/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
"homepage": "http://glmatrix.net",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/toji/gl-matrix/issues"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/toji/gl-matrix.git"
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Brandon Jones",
|
||||
"email": "tojiro@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Colin MacKenzie IV",
|
||||
"email": "sinisterchipmunk@gmail.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
5
node_modules/gl-matrix/quat/package.json
generated
vendored
5
node_modules/gl-matrix/quat/package.json
generated
vendored
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"name": "gl-matrix/quat",
|
||||
"main": "../cjs/quat.js",
|
||||
"module": "../esm/quat.js"
|
||||
}
|
||||
5
node_modules/gl-matrix/quat2/package.json
generated
vendored
5
node_modules/gl-matrix/quat2/package.json
generated
vendored
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"name": "gl-matrix/quat2",
|
||||
"main": "../cjs/quat2.js",
|
||||
"module": "../esm/quat2.js"
|
||||
}
|
||||
5
node_modules/gl-matrix/types.d.ts/package.json
generated
vendored
5
node_modules/gl-matrix/types.d.ts/package.json
generated
vendored
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"name": "gl-matrix/types.d.ts",
|
||||
"main": "../cjs/types.d.ts",
|
||||
"module": "../esm/types.d.ts"
|
||||
}
|
||||
5
node_modules/gl-matrix/vec2/package.json
generated
vendored
5
node_modules/gl-matrix/vec2/package.json
generated
vendored
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"name": "gl-matrix/vec2",
|
||||
"main": "../cjs/vec2.js",
|
||||
"module": "../esm/vec2.js"
|
||||
}
|
||||
5
node_modules/gl-matrix/vec3/package.json
generated
vendored
5
node_modules/gl-matrix/vec3/package.json
generated
vendored
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"name": "gl-matrix/vec3",
|
||||
"main": "../cjs/vec3.js",
|
||||
"module": "../esm/vec3.js"
|
||||
}
|
||||
5
node_modules/gl-matrix/vec4/package.json
generated
vendored
5
node_modules/gl-matrix/vec4/package.json
generated
vendored
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"name": "gl-matrix/vec4",
|
||||
"main": "../cjs/vec4.js",
|
||||
"module": "../esm/vec4.js"
|
||||
}
|
||||
202
node_modules/playwright-core/LICENSE
generated
vendored
202
node_modules/playwright-core/LICENSE
generated
vendored
@@ -1,202 +0,0 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Portions Copyright (c) Microsoft Corporation.
|
||||
Portions Copyright 2017 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
5
node_modules/playwright-core/NOTICE
generated
vendored
5
node_modules/playwright-core/NOTICE
generated
vendored
@@ -1,5 +0,0 @@
|
||||
Playwright
|
||||
Copyright (c) Microsoft Corporation
|
||||
|
||||
This software contains code derived from the Puppeteer project (https://github.com/puppeteer/puppeteer),
|
||||
available under the Apache 2.0 license (https://github.com/puppeteer/puppeteer/blob/master/LICENSE).
|
||||
3
node_modules/playwright-core/README.md
generated
vendored
3
node_modules/playwright-core/README.md
generated
vendored
@@ -1,3 +0,0 @@
|
||||
# playwright-core
|
||||
|
||||
This package contains the no-browser flavor of [Playwright](http://github.com/microsoft/playwright).
|
||||
1161
node_modules/playwright-core/ThirdPartyNotices.txt
generated
vendored
1161
node_modules/playwright-core/ThirdPartyNotices.txt
generated
vendored
File diff suppressed because it is too large
Load Diff
5
node_modules/playwright-core/bin/install_media_pack.ps1
generated
vendored
5
node_modules/playwright-core/bin/install_media_pack.ps1
generated
vendored
@@ -1,5 +0,0 @@
|
||||
$osInfo = Get-WmiObject -Class Win32_OperatingSystem
|
||||
# check if running on Windows Server
|
||||
if ($osInfo.ProductType -eq 3) {
|
||||
Install-WindowsFeature Server-Media-Foundation
|
||||
}
|
||||
33
node_modules/playwright-core/bin/install_webkit_wsl.ps1
generated
vendored
33
node_modules/playwright-core/bin/install_webkit_wsl.ps1
generated
vendored
@@ -1,33 +0,0 @@
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
# This script sets up a WSL distribution that will be used to run WebKit.
|
||||
|
||||
$Distribution = "playwright"
|
||||
$Username = "pwuser"
|
||||
|
||||
$distributions = (wsl --list --quiet) -split "\r?\n"
|
||||
if ($distributions -contains $Distribution) {
|
||||
Write-Host "WSL distribution '$Distribution' already exists. Skipping installation."
|
||||
} else {
|
||||
Write-Host "Installing new WSL distribution '$Distribution'..."
|
||||
$VhdSize = "10GB"
|
||||
wsl --install -d Ubuntu-24.04 --name $Distribution --no-launch --vhd-size $VhdSize
|
||||
wsl -d $Distribution -u root adduser --gecos GECOS --disabled-password $Username
|
||||
}
|
||||
|
||||
$pwshDirname = (Resolve-Path -Path $PSScriptRoot).Path;
|
||||
$playwrightCoreRoot = Resolve-Path (Join-Path $pwshDirname "..")
|
||||
|
||||
$initScript = @"
|
||||
if [ ! -f "/home/$Username/node/bin/node" ]; then
|
||||
mkdir -p /home/$Username/node
|
||||
curl -fsSL https://nodejs.org/dist/v22.17.0/node-v22.17.0-linux-x64.tar.xz -o /home/$Username/node/node-v22.17.0-linux-x64.tar.xz
|
||||
tar -xJf /home/$Username/node/node-v22.17.0-linux-x64.tar.xz -C /home/$Username/node --strip-components=1
|
||||
sudo -u $Username echo 'export PATH=/home/$Username/node/bin:\`$PATH' >> /home/$Username/.profile
|
||||
fi
|
||||
/home/$Username/node/bin/node cli.js install-deps webkit
|
||||
sudo -u $Username PLAYWRIGHT_SKIP_BROWSER_GC=1 /home/$Username/node/bin/node cli.js install webkit
|
||||
"@ -replace "\r\n", "`n"
|
||||
|
||||
wsl -d $Distribution --cd $playwrightCoreRoot -u root -- bash -c "$initScript"
|
||||
Write-Host "Done!"
|
||||
42
node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh
generated
vendored
42
node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh
generated
vendored
@@ -1,42 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
set -x
|
||||
|
||||
if [[ $(arch) == "aarch64" ]]; then
|
||||
echo "ERROR: not supported on Linux Arm64"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$PLAYWRIGHT_HOST_PLATFORM_OVERRIDE" ]; then
|
||||
if [[ ! -f "/etc/os-release" ]]; then
|
||||
echo "ERROR: cannot install on unknown linux distribution (/etc/os-release is missing)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ID=$(bash -c 'source /etc/os-release && echo $ID')
|
||||
if [[ "${ID}" != "ubuntu" && "${ID}" != "debian" ]]; then
|
||||
echo "ERROR: cannot install on $ID distribution - only Ubuntu and Debian are supported"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# 1. make sure to remove old beta if any.
|
||||
if dpkg --get-selections | grep -q "^google-chrome-beta[[:space:]]*install$" >/dev/null; then
|
||||
apt-get remove -y google-chrome-beta
|
||||
fi
|
||||
|
||||
# 2. Update apt lists (needed to install curl and chrome dependencies)
|
||||
apt-get update
|
||||
|
||||
# 3. Install curl to download chrome
|
||||
if ! command -v curl >/dev/null; then
|
||||
apt-get install -y curl
|
||||
fi
|
||||
|
||||
# 4. download chrome beta from dl.google.com and install it.
|
||||
cd /tmp
|
||||
curl -O https://dl.google.com/linux/direct/google-chrome-beta_current_amd64.deb
|
||||
apt-get install -y ./google-chrome-beta_current_amd64.deb
|
||||
rm -rf ./google-chrome-beta_current_amd64.deb
|
||||
cd -
|
||||
google-chrome-beta --version
|
||||
13
node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh
generated
vendored
13
node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh
generated
vendored
@@ -1,13 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
set -x
|
||||
|
||||
rm -rf "/Applications/Google Chrome Beta.app"
|
||||
cd /tmp
|
||||
curl --retry 3 -o ./googlechromebeta.dmg https://dl.google.com/chrome/mac/universal/beta/googlechromebeta.dmg
|
||||
hdiutil attach -nobrowse -quiet -noautofsck -noautoopen -mountpoint /Volumes/googlechromebeta.dmg ./googlechromebeta.dmg
|
||||
cp -pR "/Volumes/googlechromebeta.dmg/Google Chrome Beta.app" /Applications
|
||||
hdiutil detach /Volumes/googlechromebeta.dmg
|
||||
rm -rf /tmp/googlechromebeta.dmg
|
||||
|
||||
/Applications/Google\ Chrome\ Beta.app/Contents/MacOS/Google\ Chrome\ Beta --version
|
||||
24
node_modules/playwright-core/bin/reinstall_chrome_beta_win.ps1
generated
vendored
24
node_modules/playwright-core/bin/reinstall_chrome_beta_win.ps1
generated
vendored
@@ -1,24 +0,0 @@
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$url = 'https://dl.google.com/tag/s/dl/chrome/install/beta/googlechromebetastandaloneenterprise64.msi'
|
||||
|
||||
Write-Host "Downloading Google Chrome Beta"
|
||||
$wc = New-Object net.webclient
|
||||
$msiInstaller = "$env:temp\google-chrome-beta.msi"
|
||||
$wc.Downloadfile($url, $msiInstaller)
|
||||
|
||||
Write-Host "Installing Google Chrome Beta"
|
||||
$arguments = "/i `"$msiInstaller`" /quiet"
|
||||
Start-Process msiexec.exe -ArgumentList $arguments -Wait
|
||||
Remove-Item $msiInstaller
|
||||
|
||||
$suffix = "\\Google\\Chrome Beta\\Application\\chrome.exe"
|
||||
if (Test-Path "${env:ProgramFiles(x86)}$suffix") {
|
||||
(Get-Item "${env:ProgramFiles(x86)}$suffix").VersionInfo
|
||||
} elseif (Test-Path "${env:ProgramFiles}$suffix") {
|
||||
(Get-Item "${env:ProgramFiles}$suffix").VersionInfo
|
||||
} else {
|
||||
Write-Host "ERROR: Failed to install Google Chrome Beta."
|
||||
Write-Host "ERROR: This could be due to insufficient privileges, in which case re-running as Administrator may help."
|
||||
exit 1
|
||||
}
|
||||
42
node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh
generated
vendored
42
node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh
generated
vendored
@@ -1,42 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
set -x
|
||||
|
||||
if [[ $(arch) == "aarch64" ]]; then
|
||||
echo "ERROR: not supported on Linux Arm64"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$PLAYWRIGHT_HOST_PLATFORM_OVERRIDE" ]; then
|
||||
if [[ ! -f "/etc/os-release" ]]; then
|
||||
echo "ERROR: cannot install on unknown linux distribution (/etc/os-release is missing)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ID=$(bash -c 'source /etc/os-release && echo $ID')
|
||||
if [[ "${ID}" != "ubuntu" && "${ID}" != "debian" ]]; then
|
||||
echo "ERROR: cannot install on $ID distribution - only Ubuntu and Debian are supported"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# 1. make sure to remove old stable if any.
|
||||
if dpkg --get-selections | grep -q "^google-chrome[[:space:]]*install$" >/dev/null; then
|
||||
apt-get remove -y google-chrome
|
||||
fi
|
||||
|
||||
# 2. Update apt lists (needed to install curl and chrome dependencies)
|
||||
apt-get update
|
||||
|
||||
# 3. Install curl to download chrome
|
||||
if ! command -v curl >/dev/null; then
|
||||
apt-get install -y curl
|
||||
fi
|
||||
|
||||
# 4. download chrome stable from dl.google.com and install it.
|
||||
cd /tmp
|
||||
curl -O https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
|
||||
apt-get install -y ./google-chrome-stable_current_amd64.deb
|
||||
rm -rf ./google-chrome-stable_current_amd64.deb
|
||||
cd -
|
||||
google-chrome --version
|
||||
12
node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh
generated
vendored
12
node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh
generated
vendored
@@ -1,12 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
set -x
|
||||
|
||||
rm -rf "/Applications/Google Chrome.app"
|
||||
cd /tmp
|
||||
curl --retry 3 -o ./googlechrome.dmg https://dl.google.com/chrome/mac/universal/stable/GGRO/googlechrome.dmg
|
||||
hdiutil attach -nobrowse -quiet -noautofsck -noautoopen -mountpoint /Volumes/googlechrome.dmg ./googlechrome.dmg
|
||||
cp -pR "/Volumes/googlechrome.dmg/Google Chrome.app" /Applications
|
||||
hdiutil detach /Volumes/googlechrome.dmg
|
||||
rm -rf /tmp/googlechrome.dmg
|
||||
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version
|
||||
24
node_modules/playwright-core/bin/reinstall_chrome_stable_win.ps1
generated
vendored
24
node_modules/playwright-core/bin/reinstall_chrome_stable_win.ps1
generated
vendored
@@ -1,24 +0,0 @@
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$url = 'https://dl.google.com/tag/s/dl/chrome/install/googlechromestandaloneenterprise64.msi'
|
||||
|
||||
$wc = New-Object net.webclient
|
||||
$msiInstaller = "$env:temp\google-chrome.msi"
|
||||
Write-Host "Downloading Google Chrome"
|
||||
$wc.Downloadfile($url, $msiInstaller)
|
||||
|
||||
Write-Host "Installing Google Chrome"
|
||||
$arguments = "/i `"$msiInstaller`" /quiet"
|
||||
Start-Process msiexec.exe -ArgumentList $arguments -Wait
|
||||
Remove-Item $msiInstaller
|
||||
|
||||
|
||||
$suffix = "\\Google\\Chrome\\Application\\chrome.exe"
|
||||
if (Test-Path "${env:ProgramFiles(x86)}$suffix") {
|
||||
(Get-Item "${env:ProgramFiles(x86)}$suffix").VersionInfo
|
||||
} elseif (Test-Path "${env:ProgramFiles}$suffix") {
|
||||
(Get-Item "${env:ProgramFiles}$suffix").VersionInfo
|
||||
} else {
|
||||
Write-Host "ERROR: Failed to install Google Chrome."
|
||||
Write-Host "ERROR: This could be due to insufficient privileges, in which case re-running as Administrator may help."
|
||||
exit 1
|
||||
}
|
||||
48
node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh
generated
vendored
48
node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh
generated
vendored
@@ -1,48 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -x
|
||||
|
||||
if [[ $(arch) == "aarch64" ]]; then
|
||||
echo "ERROR: not supported on Linux Arm64"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$PLAYWRIGHT_HOST_PLATFORM_OVERRIDE" ]; then
|
||||
if [[ ! -f "/etc/os-release" ]]; then
|
||||
echo "ERROR: cannot install on unknown linux distribution (/etc/os-release is missing)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ID=$(bash -c 'source /etc/os-release && echo $ID')
|
||||
if [[ "${ID}" != "ubuntu" && "${ID}" != "debian" ]]; then
|
||||
echo "ERROR: cannot install on $ID distribution - only Ubuntu and Debian are supported"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# 1. make sure to remove old beta if any.
|
||||
if dpkg --get-selections | grep -q "^microsoft-edge-beta[[:space:]]*install$" >/dev/null; then
|
||||
apt-get remove -y microsoft-edge-beta
|
||||
fi
|
||||
|
||||
# 2. Install curl to download Microsoft gpg key
|
||||
if ! command -v curl >/dev/null; then
|
||||
apt-get update
|
||||
apt-get install -y curl
|
||||
fi
|
||||
|
||||
# GnuPG is not preinstalled in slim images
|
||||
if ! command -v gpg >/dev/null; then
|
||||
apt-get update
|
||||
apt-get install -y gpg
|
||||
fi
|
||||
|
||||
# 3. Add the GPG key, the apt repo, update the apt cache, and install the package
|
||||
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /tmp/microsoft.gpg
|
||||
install -o root -g root -m 644 /tmp/microsoft.gpg /etc/apt/trusted.gpg.d/
|
||||
sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-dev.list'
|
||||
rm /tmp/microsoft.gpg
|
||||
apt-get update && apt-get install -y microsoft-edge-beta
|
||||
|
||||
microsoft-edge-beta --version
|
||||
11
node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh
generated
vendored
11
node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh
generated
vendored
@@ -1,11 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
set -x
|
||||
|
||||
cd /tmp
|
||||
curl --retry 3 -o ./msedge_beta.pkg "$1"
|
||||
# Note: there's no way to uninstall previously installed MSEdge.
|
||||
# However, running PKG again seems to update installation.
|
||||
sudo installer -pkg /tmp/msedge_beta.pkg -target /
|
||||
rm -rf /tmp/msedge_beta.pkg
|
||||
/Applications/Microsoft\ Edge\ Beta.app/Contents/MacOS/Microsoft\ Edge\ Beta --version
|
||||
23
node_modules/playwright-core/bin/reinstall_msedge_beta_win.ps1
generated
vendored
23
node_modules/playwright-core/bin/reinstall_msedge_beta_win.ps1
generated
vendored
@@ -1,23 +0,0 @@
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$url = $args[0]
|
||||
|
||||
Write-Host "Downloading Microsoft Edge Beta"
|
||||
$wc = New-Object net.webclient
|
||||
$msiInstaller = "$env:temp\microsoft-edge-beta.msi"
|
||||
$wc.Downloadfile($url, $msiInstaller)
|
||||
|
||||
Write-Host "Installing Microsoft Edge Beta"
|
||||
$arguments = "/i `"$msiInstaller`" /quiet"
|
||||
Start-Process msiexec.exe -ArgumentList $arguments -Wait
|
||||
Remove-Item $msiInstaller
|
||||
|
||||
$suffix = "\\Microsoft\\Edge Beta\\Application\\msedge.exe"
|
||||
if (Test-Path "${env:ProgramFiles(x86)}$suffix") {
|
||||
(Get-Item "${env:ProgramFiles(x86)}$suffix").VersionInfo
|
||||
} elseif (Test-Path "${env:ProgramFiles}$suffix") {
|
||||
(Get-Item "${env:ProgramFiles}$suffix").VersionInfo
|
||||
} else {
|
||||
Write-Host "ERROR: Failed to install Microsoft Edge Beta."
|
||||
Write-Host "ERROR: This could be due to insufficient privileges, in which case re-running as Administrator may help."
|
||||
exit 1
|
||||
}
|
||||
48
node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh
generated
vendored
48
node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh
generated
vendored
@@ -1,48 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -x
|
||||
|
||||
if [[ $(arch) == "aarch64" ]]; then
|
||||
echo "ERROR: not supported on Linux Arm64"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$PLAYWRIGHT_HOST_PLATFORM_OVERRIDE" ]; then
|
||||
if [[ ! -f "/etc/os-release" ]]; then
|
||||
echo "ERROR: cannot install on unknown linux distribution (/etc/os-release is missing)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ID=$(bash -c 'source /etc/os-release && echo $ID')
|
||||
if [[ "${ID}" != "ubuntu" && "${ID}" != "debian" ]]; then
|
||||
echo "ERROR: cannot install on $ID distribution - only Ubuntu and Debian are supported"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# 1. make sure to remove old dev if any.
|
||||
if dpkg --get-selections | grep -q "^microsoft-edge-dev[[:space:]]*install$" >/dev/null; then
|
||||
apt-get remove -y microsoft-edge-dev
|
||||
fi
|
||||
|
||||
# 2. Install curl to download Microsoft gpg key
|
||||
if ! command -v curl >/dev/null; then
|
||||
apt-get update
|
||||
apt-get install -y curl
|
||||
fi
|
||||
|
||||
# GnuPG is not preinstalled in slim images
|
||||
if ! command -v gpg >/dev/null; then
|
||||
apt-get update
|
||||
apt-get install -y gpg
|
||||
fi
|
||||
|
||||
# 3. Add the GPG key, the apt repo, update the apt cache, and install the package
|
||||
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /tmp/microsoft.gpg
|
||||
install -o root -g root -m 644 /tmp/microsoft.gpg /etc/apt/trusted.gpg.d/
|
||||
sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-dev.list'
|
||||
rm /tmp/microsoft.gpg
|
||||
apt-get update && apt-get install -y microsoft-edge-dev
|
||||
|
||||
microsoft-edge-dev --version
|
||||
11
node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh
generated
vendored
11
node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh
generated
vendored
@@ -1,11 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
set -x
|
||||
|
||||
cd /tmp
|
||||
curl --retry 3 -o ./msedge_dev.pkg "$1"
|
||||
# Note: there's no way to uninstall previously installed MSEdge.
|
||||
# However, running PKG again seems to update installation.
|
||||
sudo installer -pkg /tmp/msedge_dev.pkg -target /
|
||||
rm -rf /tmp/msedge_dev.pkg
|
||||
/Applications/Microsoft\ Edge\ Dev.app/Contents/MacOS/Microsoft\ Edge\ Dev --version
|
||||
23
node_modules/playwright-core/bin/reinstall_msedge_dev_win.ps1
generated
vendored
23
node_modules/playwright-core/bin/reinstall_msedge_dev_win.ps1
generated
vendored
@@ -1,23 +0,0 @@
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$url = $args[0]
|
||||
|
||||
Write-Host "Downloading Microsoft Edge Dev"
|
||||
$wc = New-Object net.webclient
|
||||
$msiInstaller = "$env:temp\microsoft-edge-dev.msi"
|
||||
$wc.Downloadfile($url, $msiInstaller)
|
||||
|
||||
Write-Host "Installing Microsoft Edge Dev"
|
||||
$arguments = "/i `"$msiInstaller`" /quiet"
|
||||
Start-Process msiexec.exe -ArgumentList $arguments -Wait
|
||||
Remove-Item $msiInstaller
|
||||
|
||||
$suffix = "\\Microsoft\\Edge Dev\\Application\\msedge.exe"
|
||||
if (Test-Path "${env:ProgramFiles(x86)}$suffix") {
|
||||
(Get-Item "${env:ProgramFiles(x86)}$suffix").VersionInfo
|
||||
} elseif (Test-Path "${env:ProgramFiles}$suffix") {
|
||||
(Get-Item "${env:ProgramFiles}$suffix").VersionInfo
|
||||
} else {
|
||||
Write-Host "ERROR: Failed to install Microsoft Edge Dev."
|
||||
Write-Host "ERROR: This could be due to insufficient privileges, in which case re-running as Administrator may help."
|
||||
exit 1
|
||||
}
|
||||
48
node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh
generated
vendored
48
node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh
generated
vendored
@@ -1,48 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -x
|
||||
|
||||
if [[ $(arch) == "aarch64" ]]; then
|
||||
echo "ERROR: not supported on Linux Arm64"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$PLAYWRIGHT_HOST_PLATFORM_OVERRIDE" ]; then
|
||||
if [[ ! -f "/etc/os-release" ]]; then
|
||||
echo "ERROR: cannot install on unknown linux distribution (/etc/os-release is missing)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ID=$(bash -c 'source /etc/os-release && echo $ID')
|
||||
if [[ "${ID}" != "ubuntu" && "${ID}" != "debian" ]]; then
|
||||
echo "ERROR: cannot install on $ID distribution - only Ubuntu and Debian are supported"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# 1. make sure to remove old stable if any.
|
||||
if dpkg --get-selections | grep -q "^microsoft-edge-stable[[:space:]]*install$" >/dev/null; then
|
||||
apt-get remove -y microsoft-edge-stable
|
||||
fi
|
||||
|
||||
# 2. Install curl to download Microsoft gpg key
|
||||
if ! command -v curl >/dev/null; then
|
||||
apt-get update
|
||||
apt-get install -y curl
|
||||
fi
|
||||
|
||||
# GnuPG is not preinstalled in slim images
|
||||
if ! command -v gpg >/dev/null; then
|
||||
apt-get update
|
||||
apt-get install -y gpg
|
||||
fi
|
||||
|
||||
# 3. Add the GPG key, the apt repo, update the apt cache, and install the package
|
||||
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /tmp/microsoft.gpg
|
||||
install -o root -g root -m 644 /tmp/microsoft.gpg /etc/apt/trusted.gpg.d/
|
||||
sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-stable.list'
|
||||
rm /tmp/microsoft.gpg
|
||||
apt-get update && apt-get install -y microsoft-edge-stable
|
||||
|
||||
microsoft-edge-stable --version
|
||||
11
node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh
generated
vendored
11
node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh
generated
vendored
@@ -1,11 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
set -x
|
||||
|
||||
cd /tmp
|
||||
curl --retry 3 -o ./msedge_stable.pkg "$1"
|
||||
# Note: there's no way to uninstall previously installed MSEdge.
|
||||
# However, running PKG again seems to update installation.
|
||||
sudo installer -pkg /tmp/msedge_stable.pkg -target /
|
||||
rm -rf /tmp/msedge_stable.pkg
|
||||
/Applications/Microsoft\ Edge.app/Contents/MacOS/Microsoft\ Edge --version
|
||||
24
node_modules/playwright-core/bin/reinstall_msedge_stable_win.ps1
generated
vendored
24
node_modules/playwright-core/bin/reinstall_msedge_stable_win.ps1
generated
vendored
@@ -1,24 +0,0 @@
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$url = $args[0]
|
||||
|
||||
Write-Host "Downloading Microsoft Edge"
|
||||
$wc = New-Object net.webclient
|
||||
$msiInstaller = "$env:temp\microsoft-edge-stable.msi"
|
||||
$wc.Downloadfile($url, $msiInstaller)
|
||||
|
||||
Write-Host "Installing Microsoft Edge"
|
||||
$arguments = "/i `"$msiInstaller`" /quiet"
|
||||
Start-Process msiexec.exe -ArgumentList $arguments -Wait
|
||||
Remove-Item $msiInstaller
|
||||
|
||||
$suffix = "\\Microsoft\\Edge\\Application\\msedge.exe"
|
||||
if (Test-Path "${env:ProgramFiles(x86)}$suffix") {
|
||||
(Get-Item "${env:ProgramFiles(x86)}$suffix").VersionInfo
|
||||
} elseif (Test-Path "${env:ProgramFiles}$suffix") {
|
||||
(Get-Item "${env:ProgramFiles}$suffix").VersionInfo
|
||||
} else {
|
||||
Write-Host "ERROR: Failed to install Microsoft Edge."
|
||||
Write-Host "ERROR: This could be due to insufficient privileges, in which case re-running as Administrator may help."
|
||||
exit 1
|
||||
}
|
||||
80
node_modules/playwright-core/browsers.json
generated
vendored
80
node_modules/playwright-core/browsers.json
generated
vendored
@@ -1,80 +0,0 @@
|
||||
{
|
||||
"comment": "Do not edit this file, use utils/roll_browser.js",
|
||||
"browsers": [
|
||||
{
|
||||
"name": "chromium",
|
||||
"revision": "1200",
|
||||
"installByDefault": true,
|
||||
"browserVersion": "143.0.7499.4"
|
||||
},
|
||||
{
|
||||
"name": "chromium-headless-shell",
|
||||
"revision": "1200",
|
||||
"installByDefault": true,
|
||||
"browserVersion": "143.0.7499.4"
|
||||
},
|
||||
{
|
||||
"name": "chromium-tip-of-tree",
|
||||
"revision": "1380",
|
||||
"installByDefault": false,
|
||||
"browserVersion": "143.0.7488.0"
|
||||
},
|
||||
{
|
||||
"name": "chromium-tip-of-tree-headless-shell",
|
||||
"revision": "1380",
|
||||
"installByDefault": false,
|
||||
"browserVersion": "143.0.7488.0"
|
||||
},
|
||||
{
|
||||
"name": "firefox",
|
||||
"revision": "1497",
|
||||
"installByDefault": true,
|
||||
"browserVersion": "144.0.2"
|
||||
},
|
||||
{
|
||||
"name": "firefox-beta",
|
||||
"revision": "1493",
|
||||
"installByDefault": false,
|
||||
"browserVersion": "145.0b10"
|
||||
},
|
||||
{
|
||||
"name": "webkit",
|
||||
"revision": "2227",
|
||||
"installByDefault": true,
|
||||
"revisionOverrides": {
|
||||
"debian11-x64": "2105",
|
||||
"debian11-arm64": "2105",
|
||||
"mac10.14": "1446",
|
||||
"mac10.15": "1616",
|
||||
"mac11": "1816",
|
||||
"mac11-arm64": "1816",
|
||||
"mac12": "2009",
|
||||
"mac12-arm64": "2009",
|
||||
"mac13": "2140",
|
||||
"mac13-arm64": "2140",
|
||||
"ubuntu20.04-x64": "2092",
|
||||
"ubuntu20.04-arm64": "2092"
|
||||
},
|
||||
"browserVersion": "26.0"
|
||||
},
|
||||
{
|
||||
"name": "ffmpeg",
|
||||
"revision": "1011",
|
||||
"installByDefault": true,
|
||||
"revisionOverrides": {
|
||||
"mac12": "1010",
|
||||
"mac12-arm64": "1010"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "winldd",
|
||||
"revision": "1007",
|
||||
"installByDefault": false
|
||||
},
|
||||
{
|
||||
"name": "android",
|
||||
"revision": "1001",
|
||||
"installByDefault": false
|
||||
}
|
||||
]
|
||||
}
|
||||
18
node_modules/playwright-core/cli.js
generated
vendored
18
node_modules/playwright-core/cli.js
generated
vendored
@@ -1,18 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* Copyright (c) Microsoft Corporation.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
const { program } = require('./lib/cli/programWithTestStub');
|
||||
program.parse(process.argv);
|
||||
17
node_modules/playwright-core/index.d.ts
generated
vendored
17
node_modules/playwright-core/index.d.ts
generated
vendored
@@ -1,17 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Microsoft Corporation.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export * from './types/types';
|
||||
32
node_modules/playwright-core/index.js
generated
vendored
32
node_modules/playwright-core/index.js
generated
vendored
@@ -1,32 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Microsoft Corporation.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
const minimumMajorNodeVersion = 18;
|
||||
const currentNodeVersion = process.versions.node;
|
||||
const semver = currentNodeVersion.split('.');
|
||||
const [major] = [+semver[0]];
|
||||
|
||||
if (major < minimumMajorNodeVersion) {
|
||||
console.error(
|
||||
'You are running Node.js ' +
|
||||
currentNodeVersion +
|
||||
'.\n' +
|
||||
`Playwright requires Node.js ${minimumMajorNodeVersion} or higher. \n` +
|
||||
'Please update your version of Node.js.'
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
module.exports = require('./lib/inprocess');
|
||||
28
node_modules/playwright-core/index.mjs
generated
vendored
28
node_modules/playwright-core/index.mjs
generated
vendored
@@ -1,28 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Microsoft Corporation.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import playwright from './index.js';
|
||||
|
||||
export const chromium = playwright.chromium;
|
||||
export const firefox = playwright.firefox;
|
||||
export const webkit = playwright.webkit;
|
||||
export const selectors = playwright.selectors;
|
||||
export const devices = playwright.devices;
|
||||
export const errors = playwright.errors;
|
||||
export const request = playwright.request;
|
||||
export const _electron = playwright._electron;
|
||||
export const _android = playwright._android;
|
||||
export default playwright;
|
||||
65
node_modules/playwright-core/lib/androidServerImpl.js
generated
vendored
65
node_modules/playwright-core/lib/androidServerImpl.js
generated
vendored
@@ -1,65 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var androidServerImpl_exports = {};
|
||||
__export(androidServerImpl_exports, {
|
||||
AndroidServerLauncherImpl: () => AndroidServerLauncherImpl
|
||||
});
|
||||
module.exports = __toCommonJS(androidServerImpl_exports);
|
||||
var import_playwrightServer = require("./remote/playwrightServer");
|
||||
var import_playwright = require("./server/playwright");
|
||||
var import_crypto = require("./server/utils/crypto");
|
||||
var import_utilsBundle = require("./utilsBundle");
|
||||
var import_progress = require("./server/progress");
|
||||
class AndroidServerLauncherImpl {
|
||||
async launchServer(options = {}) {
|
||||
const playwright = (0, import_playwright.createPlaywright)({ sdkLanguage: "javascript", isServer: true });
|
||||
const controller = new import_progress.ProgressController();
|
||||
let devices = await controller.run((progress) => playwright.android.devices(progress, {
|
||||
host: options.adbHost,
|
||||
port: options.adbPort,
|
||||
omitDriverInstall: options.omitDriverInstall
|
||||
}));
|
||||
if (devices.length === 0)
|
||||
throw new Error("No devices found");
|
||||
if (options.deviceSerialNumber) {
|
||||
devices = devices.filter((d) => d.serial === options.deviceSerialNumber);
|
||||
if (devices.length === 0)
|
||||
throw new Error(`No device with serial number '${options.deviceSerialNumber}' was found`);
|
||||
}
|
||||
if (devices.length > 1)
|
||||
throw new Error(`More than one device found. Please specify deviceSerialNumber`);
|
||||
const device = devices[0];
|
||||
const path = options.wsPath ? options.wsPath.startsWith("/") ? options.wsPath : `/${options.wsPath}` : `/${(0, import_crypto.createGuid)()}`;
|
||||
const server = new import_playwrightServer.PlaywrightServer({ mode: "launchServer", path, maxConnections: 1, preLaunchedAndroidDevice: device });
|
||||
const wsEndpoint = await server.listen(options.port, options.host);
|
||||
const browserServer = new import_utilsBundle.ws.EventEmitter();
|
||||
browserServer.wsEndpoint = () => wsEndpoint;
|
||||
browserServer.close = () => device.close();
|
||||
browserServer.kill = () => device.close();
|
||||
device.on("close", () => {
|
||||
server.close();
|
||||
browserServer.emit("close");
|
||||
});
|
||||
return browserServer;
|
||||
}
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
AndroidServerLauncherImpl
|
||||
});
|
||||
120
node_modules/playwright-core/lib/browserServerImpl.js
generated
vendored
120
node_modules/playwright-core/lib/browserServerImpl.js
generated
vendored
@@ -1,120 +0,0 @@
|
||||
"use strict";
|
||||
var __create = Object.create;
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __getProtoOf = Object.getPrototypeOf;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
||||
// If the importer is in node compatibility mode or this is not an ESM
|
||||
// file that has been converted to a CommonJS file using a Babel-
|
||||
// compatible transform (i.e. "__esModule" has not been set), then set
|
||||
// "default" to the CommonJS "module.exports" for node compatibility.
|
||||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
||||
mod
|
||||
));
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var browserServerImpl_exports = {};
|
||||
__export(browserServerImpl_exports, {
|
||||
BrowserServerLauncherImpl: () => BrowserServerLauncherImpl
|
||||
});
|
||||
module.exports = __toCommonJS(browserServerImpl_exports);
|
||||
var import_playwrightServer = require("./remote/playwrightServer");
|
||||
var import_helper = require("./server/helper");
|
||||
var import_playwright = require("./server/playwright");
|
||||
var import_crypto = require("./server/utils/crypto");
|
||||
var import_debug = require("./server/utils/debug");
|
||||
var import_stackTrace = require("./utils/isomorphic/stackTrace");
|
||||
var import_time = require("./utils/isomorphic/time");
|
||||
var import_utilsBundle = require("./utilsBundle");
|
||||
var validatorPrimitives = __toESM(require("./protocol/validatorPrimitives"));
|
||||
var import_progress = require("./server/progress");
|
||||
class BrowserServerLauncherImpl {
|
||||
constructor(browserName) {
|
||||
this._browserName = browserName;
|
||||
}
|
||||
async launchServer(options = {}) {
|
||||
const playwright = (0, import_playwright.createPlaywright)({ sdkLanguage: "javascript", isServer: true });
|
||||
const metadata = { id: "", startTime: 0, endTime: 0, type: "Internal", method: "", params: {}, log: [], internal: true };
|
||||
const validatorContext = {
|
||||
tChannelImpl: (names, arg, path2) => {
|
||||
throw new validatorPrimitives.ValidationError(`${path2}: channels are not expected in launchServer`);
|
||||
},
|
||||
binary: "buffer",
|
||||
isUnderTest: import_debug.isUnderTest
|
||||
};
|
||||
let launchOptions = {
|
||||
...options,
|
||||
ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : void 0,
|
||||
ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),
|
||||
env: options.env ? envObjectToArray(options.env) : void 0,
|
||||
timeout: options.timeout ?? import_time.DEFAULT_PLAYWRIGHT_LAUNCH_TIMEOUT
|
||||
};
|
||||
let browser;
|
||||
try {
|
||||
const controller = new import_progress.ProgressController(metadata);
|
||||
browser = await controller.run(async (progress) => {
|
||||
if (options._userDataDir !== void 0) {
|
||||
const validator = validatorPrimitives.scheme["BrowserTypeLaunchPersistentContextParams"];
|
||||
launchOptions = validator({ ...launchOptions, userDataDir: options._userDataDir }, "", validatorContext);
|
||||
const context = await playwright[this._browserName].launchPersistentContext(progress, options._userDataDir, launchOptions);
|
||||
return context._browser;
|
||||
} else {
|
||||
const validator = validatorPrimitives.scheme["BrowserTypeLaunchParams"];
|
||||
launchOptions = validator(launchOptions, "", validatorContext);
|
||||
return await playwright[this._browserName].launch(progress, launchOptions, toProtocolLogger(options.logger));
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
const log = import_helper.helper.formatBrowserLogs(metadata.log);
|
||||
(0, import_stackTrace.rewriteErrorMessage)(e, `${e.message} Failed to launch browser.${log}`);
|
||||
throw e;
|
||||
}
|
||||
const path = options.wsPath ? options.wsPath.startsWith("/") ? options.wsPath : `/${options.wsPath}` : `/${(0, import_crypto.createGuid)()}`;
|
||||
const server = new import_playwrightServer.PlaywrightServer({ mode: options._sharedBrowser ? "launchServerShared" : "launchServer", path, maxConnections: Infinity, preLaunchedBrowser: browser });
|
||||
const wsEndpoint = await server.listen(options.port, options.host);
|
||||
const browserServer = new import_utilsBundle.ws.EventEmitter();
|
||||
browserServer.process = () => browser.options.browserProcess.process;
|
||||
browserServer.wsEndpoint = () => wsEndpoint;
|
||||
browserServer.close = () => browser.options.browserProcess.close();
|
||||
browserServer[Symbol.asyncDispose] = browserServer.close;
|
||||
browserServer.kill = () => browser.options.browserProcess.kill();
|
||||
browserServer._disconnectForTest = () => server.close();
|
||||
browserServer._userDataDirForTest = browser._userDataDirForTest;
|
||||
browser.options.browserProcess.onclose = (exitCode, signal) => {
|
||||
server.close();
|
||||
browserServer.emit("close", exitCode, signal);
|
||||
};
|
||||
return browserServer;
|
||||
}
|
||||
}
|
||||
function toProtocolLogger(logger) {
|
||||
return logger ? (direction, message) => {
|
||||
if (logger.isEnabled("protocol", "verbose"))
|
||||
logger.log("protocol", "verbose", (direction === "send" ? "SEND \u25BA " : "\u25C0 RECV ") + JSON.stringify(message), [], {});
|
||||
} : void 0;
|
||||
}
|
||||
function envObjectToArray(env) {
|
||||
const result = [];
|
||||
for (const name in env) {
|
||||
if (!Object.is(env[name], void 0))
|
||||
result.push({ name, value: String(env[name]) });
|
||||
}
|
||||
return result;
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
BrowserServerLauncherImpl
|
||||
});
|
||||
97
node_modules/playwright-core/lib/cli/driver.js
generated
vendored
97
node_modules/playwright-core/lib/cli/driver.js
generated
vendored
@@ -1,97 +0,0 @@
|
||||
"use strict";
|
||||
var __create = Object.create;
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __getProtoOf = Object.getPrototypeOf;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
||||
// If the importer is in node compatibility mode or this is not an ESM
|
||||
// file that has been converted to a CommonJS file using a Babel-
|
||||
// compatible transform (i.e. "__esModule" has not been set), then set
|
||||
// "default" to the CommonJS "module.exports" for node compatibility.
|
||||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
||||
mod
|
||||
));
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var driver_exports = {};
|
||||
__export(driver_exports, {
|
||||
launchBrowserServer: () => launchBrowserServer,
|
||||
printApiJson: () => printApiJson,
|
||||
runDriver: () => runDriver,
|
||||
runServer: () => runServer
|
||||
});
|
||||
module.exports = __toCommonJS(driver_exports);
|
||||
var import_fs = __toESM(require("fs"));
|
||||
var playwright = __toESM(require("../.."));
|
||||
var import_pipeTransport = require("../server/utils/pipeTransport");
|
||||
var import_playwrightServer = require("../remote/playwrightServer");
|
||||
var import_server = require("../server");
|
||||
var import_processLauncher = require("../server/utils/processLauncher");
|
||||
function printApiJson() {
|
||||
console.log(JSON.stringify(require("../../api.json")));
|
||||
}
|
||||
function runDriver() {
|
||||
const dispatcherConnection = new import_server.DispatcherConnection();
|
||||
new import_server.RootDispatcher(dispatcherConnection, async (rootScope, { sdkLanguage }) => {
|
||||
const playwright2 = (0, import_server.createPlaywright)({ sdkLanguage });
|
||||
return new import_server.PlaywrightDispatcher(rootScope, playwright2);
|
||||
});
|
||||
const transport = new import_pipeTransport.PipeTransport(process.stdout, process.stdin);
|
||||
transport.onmessage = (message) => dispatcherConnection.dispatch(JSON.parse(message));
|
||||
const isJavaScriptLanguageBinding = !process.env.PW_LANG_NAME || process.env.PW_LANG_NAME === "javascript";
|
||||
const replacer = !isJavaScriptLanguageBinding && String.prototype.toWellFormed ? (key, value) => {
|
||||
if (typeof value === "string")
|
||||
return value.toWellFormed();
|
||||
return value;
|
||||
} : void 0;
|
||||
dispatcherConnection.onmessage = (message) => transport.send(JSON.stringify(message, replacer));
|
||||
transport.onclose = () => {
|
||||
dispatcherConnection.onmessage = () => {
|
||||
};
|
||||
(0, import_processLauncher.gracefullyProcessExitDoNotHang)(0);
|
||||
};
|
||||
process.on("SIGINT", () => {
|
||||
});
|
||||
}
|
||||
async function runServer(options) {
|
||||
const {
|
||||
port,
|
||||
host,
|
||||
path = "/",
|
||||
maxConnections = Infinity,
|
||||
extension
|
||||
} = options;
|
||||
const server = new import_playwrightServer.PlaywrightServer({ mode: extension ? "extension" : "default", path, maxConnections });
|
||||
const wsEndpoint = await server.listen(port, host);
|
||||
process.on("exit", () => server.close().catch(console.error));
|
||||
console.log("Listening on " + wsEndpoint);
|
||||
process.stdin.on("close", () => (0, import_processLauncher.gracefullyProcessExitDoNotHang)(0));
|
||||
}
|
||||
async function launchBrowserServer(browserName, configFile) {
|
||||
let options = {};
|
||||
if (configFile)
|
||||
options = JSON.parse(import_fs.default.readFileSync(configFile).toString());
|
||||
const browserType = playwright[browserName];
|
||||
const server = await browserType.launchServer(options);
|
||||
console.log(server.wsEndpoint());
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
launchBrowserServer,
|
||||
printApiJson,
|
||||
runDriver,
|
||||
runServer
|
||||
});
|
||||
590
node_modules/playwright-core/lib/cli/program.js
generated
vendored
590
node_modules/playwright-core/lib/cli/program.js
generated
vendored
@@ -1,590 +0,0 @@
|
||||
"use strict";
|
||||
var __create = Object.create;
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __getProtoOf = Object.getPrototypeOf;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
||||
// If the importer is in node compatibility mode or this is not an ESM
|
||||
// file that has been converted to a CommonJS file using a Babel-
|
||||
// compatible transform (i.e. "__esModule" has not been set), then set
|
||||
// "default" to the CommonJS "module.exports" for node compatibility.
|
||||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
||||
mod
|
||||
));
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var program_exports = {};
|
||||
__export(program_exports, {
|
||||
program: () => import_utilsBundle2.program
|
||||
});
|
||||
module.exports = __toCommonJS(program_exports);
|
||||
var import_fs = __toESM(require("fs"));
|
||||
var import_os = __toESM(require("os"));
|
||||
var import_path = __toESM(require("path"));
|
||||
var playwright = __toESM(require("../.."));
|
||||
var import_driver = require("./driver");
|
||||
var import_server = require("../server");
|
||||
var import_utils = require("../utils");
|
||||
var import_traceViewer = require("../server/trace/viewer/traceViewer");
|
||||
var import_utils2 = require("../utils");
|
||||
var import_ascii = require("../server/utils/ascii");
|
||||
var import_utilsBundle = require("../utilsBundle");
|
||||
var import_utilsBundle2 = require("../utilsBundle");
|
||||
const packageJSON = require("../../package.json");
|
||||
import_utilsBundle.program.version("Version " + (process.env.PW_CLI_DISPLAY_VERSION || packageJSON.version)).name(buildBasePlaywrightCLICommand(process.env.PW_LANG_NAME));
|
||||
import_utilsBundle.program.command("mark-docker-image [dockerImageNameTemplate]", { hidden: true }).description("mark docker image").allowUnknownOption(true).action(function(dockerImageNameTemplate) {
|
||||
(0, import_utils2.assert)(dockerImageNameTemplate, "dockerImageNameTemplate is required");
|
||||
(0, import_server.writeDockerVersion)(dockerImageNameTemplate).catch(logErrorAndExit);
|
||||
});
|
||||
commandWithOpenOptions("open [url]", "open page in browser specified via -b, --browser", []).action(function(url, options) {
|
||||
open(options, url).catch(logErrorAndExit);
|
||||
}).addHelpText("afterAll", `
|
||||
Examples:
|
||||
|
||||
$ open
|
||||
$ open -b webkit https://example.com`);
|
||||
commandWithOpenOptions(
|
||||
"codegen [url]",
|
||||
"open page and generate code for user actions",
|
||||
[
|
||||
["-o, --output <file name>", "saves the generated script to a file"],
|
||||
["--target <language>", `language to generate, one of javascript, playwright-test, python, python-async, python-pytest, csharp, csharp-mstest, csharp-nunit, java, java-junit`, codegenId()],
|
||||
["--test-id-attribute <attributeName>", "use the specified attribute to generate data test ID selectors"]
|
||||
]
|
||||
).action(async function(url, options) {
|
||||
await codegen(options, url);
|
||||
}).addHelpText("afterAll", `
|
||||
Examples:
|
||||
|
||||
$ codegen
|
||||
$ codegen --target=python
|
||||
$ codegen -b webkit https://example.com`);
|
||||
function printInstalledBrowsers(browsers2) {
|
||||
const browserPaths = /* @__PURE__ */ new Set();
|
||||
for (const browser of browsers2)
|
||||
browserPaths.add(browser.browserPath);
|
||||
console.log(` Browsers:`);
|
||||
for (const browserPath of [...browserPaths].sort())
|
||||
console.log(` ${browserPath}`);
|
||||
console.log(` References:`);
|
||||
const references = /* @__PURE__ */ new Set();
|
||||
for (const browser of browsers2)
|
||||
references.add(browser.referenceDir);
|
||||
for (const reference of [...references].sort())
|
||||
console.log(` ${reference}`);
|
||||
}
|
||||
function printGroupedByPlaywrightVersion(browsers2) {
|
||||
const dirToVersion = /* @__PURE__ */ new Map();
|
||||
for (const browser of browsers2) {
|
||||
if (dirToVersion.has(browser.referenceDir))
|
||||
continue;
|
||||
const packageJSON2 = require(import_path.default.join(browser.referenceDir, "package.json"));
|
||||
const version = packageJSON2.version;
|
||||
dirToVersion.set(browser.referenceDir, version);
|
||||
}
|
||||
const groupedByPlaywrightMinorVersion = /* @__PURE__ */ new Map();
|
||||
for (const browser of browsers2) {
|
||||
const version = dirToVersion.get(browser.referenceDir);
|
||||
let entries = groupedByPlaywrightMinorVersion.get(version);
|
||||
if (!entries) {
|
||||
entries = [];
|
||||
groupedByPlaywrightMinorVersion.set(version, entries);
|
||||
}
|
||||
entries.push(browser);
|
||||
}
|
||||
const sortedVersions = [...groupedByPlaywrightMinorVersion.keys()].sort((a, b) => {
|
||||
const aComponents = a.split(".");
|
||||
const bComponents = b.split(".");
|
||||
const aMajor = parseInt(aComponents[0], 10);
|
||||
const bMajor = parseInt(bComponents[0], 10);
|
||||
if (aMajor !== bMajor)
|
||||
return aMajor - bMajor;
|
||||
const aMinor = parseInt(aComponents[1], 10);
|
||||
const bMinor = parseInt(bComponents[1], 10);
|
||||
if (aMinor !== bMinor)
|
||||
return aMinor - bMinor;
|
||||
return aComponents.slice(2).join(".").localeCompare(bComponents.slice(2).join("."));
|
||||
});
|
||||
for (const version of sortedVersions) {
|
||||
console.log(`
|
||||
Playwright version: ${version}`);
|
||||
printInstalledBrowsers(groupedByPlaywrightMinorVersion.get(version));
|
||||
}
|
||||
}
|
||||
import_utilsBundle.program.command("install [browser...]").description("ensure browsers necessary for this version of Playwright are installed").option("--with-deps", "install system dependencies for browsers").option("--dry-run", "do not execute installation, only print information").option("--list", "prints list of browsers from all playwright installations").option("--force", "force reinstall of stable browser channels").option("--only-shell", "only install headless shell when installing chromium").option("--no-shell", "do not install chromium headless shell").action(async function(args, options) {
|
||||
if ((0, import_utils.isLikelyNpxGlobal)()) {
|
||||
console.error((0, import_ascii.wrapInASCIIBox)([
|
||||
`WARNING: It looks like you are running 'npx playwright install' without first`,
|
||||
`installing your project's dependencies.`,
|
||||
``,
|
||||
`To avoid unexpected behavior, please install your dependencies first, and`,
|
||||
`then run Playwright's install command:`,
|
||||
``,
|
||||
` npm install`,
|
||||
` npx playwright install`,
|
||||
``,
|
||||
`If your project does not yet depend on Playwright, first install the`,
|
||||
`applicable npm package (most commonly @playwright/test), and`,
|
||||
`then run Playwright's install command to download the browsers:`,
|
||||
``,
|
||||
` npm install @playwright/test`,
|
||||
` npx playwright install`,
|
||||
``
|
||||
].join("\n"), 1));
|
||||
}
|
||||
try {
|
||||
if (options.shell === false && options.onlyShell)
|
||||
throw new Error(`Only one of --no-shell and --only-shell can be specified`);
|
||||
const shell = options.shell === false ? "no" : options.onlyShell ? "only" : void 0;
|
||||
const executables = import_server.registry.resolveBrowsers(args, { shell });
|
||||
if (options.withDeps)
|
||||
await import_server.registry.installDeps(executables, !!options.dryRun);
|
||||
if (options.dryRun && options.list)
|
||||
throw new Error(`Only one of --dry-run and --list can be specified`);
|
||||
if (options.dryRun) {
|
||||
for (const executable of executables) {
|
||||
const version = executable.browserVersion ? `version ` + executable.browserVersion : "";
|
||||
console.log(`browser: ${executable.name}${version ? " " + version : ""}`);
|
||||
console.log(` Install location: ${executable.directory ?? "<system>"}`);
|
||||
if (executable.downloadURLs?.length) {
|
||||
const [url, ...fallbacks] = executable.downloadURLs;
|
||||
console.log(` Download url: ${url}`);
|
||||
for (let i = 0; i < fallbacks.length; ++i)
|
||||
console.log(` Download fallback ${i + 1}: ${fallbacks[i]}`);
|
||||
}
|
||||
console.log(``);
|
||||
}
|
||||
} else if (options.list) {
|
||||
const browsers2 = await import_server.registry.listInstalledBrowsers();
|
||||
printGroupedByPlaywrightVersion(browsers2);
|
||||
} else {
|
||||
const force = args.length === 0 ? false : !!options.force;
|
||||
await import_server.registry.install(executables, { force });
|
||||
await import_server.registry.validateHostRequirementsForExecutablesIfNeeded(executables, process.env.PW_LANG_NAME || "javascript").catch((e) => {
|
||||
e.name = "Playwright Host validation warning";
|
||||
console.error(e);
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(`Failed to install browsers
|
||||
${e}`);
|
||||
(0, import_utils.gracefullyProcessExitDoNotHang)(1);
|
||||
}
|
||||
}).addHelpText("afterAll", `
|
||||
|
||||
Examples:
|
||||
- $ install
|
||||
Install default browsers.
|
||||
|
||||
- $ install chrome firefox
|
||||
Install custom browsers, supports ${import_server.registry.suggestedBrowsersToInstall()}.`);
|
||||
import_utilsBundle.program.command("uninstall").description("Removes browsers used by this installation of Playwright from the system (chromium, firefox, webkit, ffmpeg). This does not include branded channels.").option("--all", "Removes all browsers used by any Playwright installation from the system.").action(async (options) => {
|
||||
delete process.env.PLAYWRIGHT_SKIP_BROWSER_GC;
|
||||
await import_server.registry.uninstall(!!options.all).then(({ numberOfBrowsersLeft }) => {
|
||||
if (!options.all && numberOfBrowsersLeft > 0) {
|
||||
console.log("Successfully uninstalled Playwright browsers for the current Playwright installation.");
|
||||
console.log(`There are still ${numberOfBrowsersLeft} browsers left, used by other Playwright installations.
|
||||
To uninstall Playwright browsers for all installations, re-run with --all flag.`);
|
||||
}
|
||||
}).catch(logErrorAndExit);
|
||||
});
|
||||
import_utilsBundle.program.command("install-deps [browser...]").description("install dependencies necessary to run browsers (will ask for sudo permissions)").option("--dry-run", "Do not execute installation commands, only print them").action(async function(args, options) {
|
||||
try {
|
||||
await import_server.registry.installDeps(import_server.registry.resolveBrowsers(args, {}), !!options.dryRun);
|
||||
} catch (e) {
|
||||
console.log(`Failed to install browser dependencies
|
||||
${e}`);
|
||||
(0, import_utils.gracefullyProcessExitDoNotHang)(1);
|
||||
}
|
||||
}).addHelpText("afterAll", `
|
||||
Examples:
|
||||
- $ install-deps
|
||||
Install dependencies for default browsers.
|
||||
|
||||
- $ install-deps chrome firefox
|
||||
Install dependencies for specific browsers, supports ${import_server.registry.suggestedBrowsersToInstall()}.`);
|
||||
const browsers = [
|
||||
{ alias: "cr", name: "Chromium", type: "chromium" },
|
||||
{ alias: "ff", name: "Firefox", type: "firefox" },
|
||||
{ alias: "wk", name: "WebKit", type: "webkit" }
|
||||
];
|
||||
for (const { alias, name, type } of browsers) {
|
||||
commandWithOpenOptions(`${alias} [url]`, `open page in ${name}`, []).action(function(url, options) {
|
||||
open({ ...options, browser: type }, url).catch(logErrorAndExit);
|
||||
}).addHelpText("afterAll", `
|
||||
Examples:
|
||||
|
||||
$ ${alias} https://example.com`);
|
||||
}
|
||||
commandWithOpenOptions(
|
||||
"screenshot <url> <filename>",
|
||||
"capture a page screenshot",
|
||||
[
|
||||
["--wait-for-selector <selector>", "wait for selector before taking a screenshot"],
|
||||
["--wait-for-timeout <timeout>", "wait for timeout in milliseconds before taking a screenshot"],
|
||||
["--full-page", "whether to take a full page screenshot (entire scrollable area)"]
|
||||
]
|
||||
).action(function(url, filename, command) {
|
||||
screenshot(command, command, url, filename).catch(logErrorAndExit);
|
||||
}).addHelpText("afterAll", `
|
||||
Examples:
|
||||
|
||||
$ screenshot -b webkit https://example.com example.png`);
|
||||
commandWithOpenOptions(
|
||||
"pdf <url> <filename>",
|
||||
"save page as pdf",
|
||||
[
|
||||
["--paper-format <format>", "paper format: Letter, Legal, Tabloid, Ledger, A0, A1, A2, A3, A4, A5, A6"],
|
||||
["--wait-for-selector <selector>", "wait for given selector before saving as pdf"],
|
||||
["--wait-for-timeout <timeout>", "wait for given timeout in milliseconds before saving as pdf"]
|
||||
]
|
||||
).action(function(url, filename, options) {
|
||||
pdf(options, options, url, filename).catch(logErrorAndExit);
|
||||
}).addHelpText("afterAll", `
|
||||
Examples:
|
||||
|
||||
$ pdf https://example.com example.pdf`);
|
||||
import_utilsBundle.program.command("run-driver", { hidden: true }).action(function(options) {
|
||||
(0, import_driver.runDriver)();
|
||||
});
|
||||
import_utilsBundle.program.command("run-server", { hidden: true }).option("--port <port>", "Server port").option("--host <host>", "Server host").option("--path <path>", "Endpoint Path", "/").option("--max-clients <maxClients>", "Maximum clients").option("--mode <mode>", 'Server mode, either "default" or "extension"').action(function(options) {
|
||||
(0, import_driver.runServer)({
|
||||
port: options.port ? +options.port : void 0,
|
||||
host: options.host,
|
||||
path: options.path,
|
||||
maxConnections: options.maxClients ? +options.maxClients : Infinity,
|
||||
extension: options.mode === "extension" || !!process.env.PW_EXTENSION_MODE
|
||||
}).catch(logErrorAndExit);
|
||||
});
|
||||
import_utilsBundle.program.command("print-api-json", { hidden: true }).action(function(options) {
|
||||
(0, import_driver.printApiJson)();
|
||||
});
|
||||
import_utilsBundle.program.command("launch-server", { hidden: true }).requiredOption("--browser <browserName>", 'Browser name, one of "chromium", "firefox" or "webkit"').option("--config <path-to-config-file>", "JSON file with launchServer options").action(function(options) {
|
||||
(0, import_driver.launchBrowserServer)(options.browser, options.config);
|
||||
});
|
||||
import_utilsBundle.program.command("show-trace [trace]").option("-b, --browser <browserType>", "browser to use, one of cr, chromium, ff, firefox, wk, webkit", "chromium").option("-h, --host <host>", "Host to serve trace on; specifying this option opens trace in a browser tab").option("-p, --port <port>", "Port to serve trace on, 0 for any free port; specifying this option opens trace in a browser tab").option("--stdin", "Accept trace URLs over stdin to update the viewer").description("show trace viewer").action(function(trace, options) {
|
||||
if (options.browser === "cr")
|
||||
options.browser = "chromium";
|
||||
if (options.browser === "ff")
|
||||
options.browser = "firefox";
|
||||
if (options.browser === "wk")
|
||||
options.browser = "webkit";
|
||||
const openOptions = {
|
||||
host: options.host,
|
||||
port: +options.port,
|
||||
isServer: !!options.stdin
|
||||
};
|
||||
if (options.port !== void 0 || options.host !== void 0)
|
||||
(0, import_traceViewer.runTraceInBrowser)(trace, openOptions).catch(logErrorAndExit);
|
||||
else
|
||||
(0, import_traceViewer.runTraceViewerApp)(trace, options.browser, openOptions, true).catch(logErrorAndExit);
|
||||
}).addHelpText("afterAll", `
|
||||
Examples:
|
||||
|
||||
$ show-trace
|
||||
$ show-trace https://example.com/trace.zip`);
|
||||
async function launchContext(options, extraOptions) {
|
||||
validateOptions(options);
|
||||
const browserType = lookupBrowserType(options);
|
||||
const launchOptions = extraOptions;
|
||||
if (options.channel)
|
||||
launchOptions.channel = options.channel;
|
||||
launchOptions.handleSIGINT = false;
|
||||
const contextOptions = (
|
||||
// Copy the device descriptor since we have to compare and modify the options.
|
||||
options.device ? { ...playwright.devices[options.device] } : {}
|
||||
);
|
||||
if (!extraOptions.headless)
|
||||
contextOptions.deviceScaleFactor = import_os.default.platform() === "darwin" ? 2 : 1;
|
||||
if (browserType.name() === "webkit" && process.platform === "linux") {
|
||||
delete contextOptions.hasTouch;
|
||||
delete contextOptions.isMobile;
|
||||
}
|
||||
if (contextOptions.isMobile && browserType.name() === "firefox")
|
||||
contextOptions.isMobile = void 0;
|
||||
if (options.blockServiceWorkers)
|
||||
contextOptions.serviceWorkers = "block";
|
||||
if (options.proxyServer) {
|
||||
launchOptions.proxy = {
|
||||
server: options.proxyServer
|
||||
};
|
||||
if (options.proxyBypass)
|
||||
launchOptions.proxy.bypass = options.proxyBypass;
|
||||
}
|
||||
if (options.viewportSize) {
|
||||
try {
|
||||
const [width, height] = options.viewportSize.split(",").map((n) => +n);
|
||||
if (isNaN(width) || isNaN(height))
|
||||
throw new Error("bad values");
|
||||
contextOptions.viewport = { width, height };
|
||||
} catch (e) {
|
||||
throw new Error('Invalid viewport size format: use "width,height", for example --viewport-size="800,600"');
|
||||
}
|
||||
}
|
||||
if (options.geolocation) {
|
||||
try {
|
||||
const [latitude, longitude] = options.geolocation.split(",").map((n) => parseFloat(n.trim()));
|
||||
contextOptions.geolocation = {
|
||||
latitude,
|
||||
longitude
|
||||
};
|
||||
} catch (e) {
|
||||
throw new Error('Invalid geolocation format, should be "lat,long". For example --geolocation="37.819722,-122.478611"');
|
||||
}
|
||||
contextOptions.permissions = ["geolocation"];
|
||||
}
|
||||
if (options.userAgent)
|
||||
contextOptions.userAgent = options.userAgent;
|
||||
if (options.lang)
|
||||
contextOptions.locale = options.lang;
|
||||
if (options.colorScheme)
|
||||
contextOptions.colorScheme = options.colorScheme;
|
||||
if (options.timezone)
|
||||
contextOptions.timezoneId = options.timezone;
|
||||
if (options.loadStorage)
|
||||
contextOptions.storageState = options.loadStorage;
|
||||
if (options.ignoreHttpsErrors)
|
||||
contextOptions.ignoreHTTPSErrors = true;
|
||||
if (options.saveHar) {
|
||||
contextOptions.recordHar = { path: import_path.default.resolve(process.cwd(), options.saveHar), mode: "minimal" };
|
||||
if (options.saveHarGlob)
|
||||
contextOptions.recordHar.urlFilter = options.saveHarGlob;
|
||||
contextOptions.serviceWorkers = "block";
|
||||
}
|
||||
let browser;
|
||||
let context;
|
||||
if (options.userDataDir) {
|
||||
context = await browserType.launchPersistentContext(options.userDataDir, { ...launchOptions, ...contextOptions });
|
||||
browser = context.browser();
|
||||
} else {
|
||||
browser = await browserType.launch(launchOptions);
|
||||
context = await browser.newContext(contextOptions);
|
||||
}
|
||||
let closingBrowser = false;
|
||||
async function closeBrowser() {
|
||||
if (closingBrowser)
|
||||
return;
|
||||
closingBrowser = true;
|
||||
if (options.saveStorage)
|
||||
await context.storageState({ path: options.saveStorage }).catch((e) => null);
|
||||
if (options.saveHar)
|
||||
await context.close();
|
||||
await browser.close();
|
||||
}
|
||||
context.on("page", (page) => {
|
||||
page.on("dialog", () => {
|
||||
});
|
||||
page.on("close", () => {
|
||||
const hasPage = browser.contexts().some((context2) => context2.pages().length > 0);
|
||||
if (hasPage)
|
||||
return;
|
||||
closeBrowser().catch(() => {
|
||||
});
|
||||
});
|
||||
});
|
||||
process.on("SIGINT", async () => {
|
||||
await closeBrowser();
|
||||
(0, import_utils.gracefullyProcessExitDoNotHang)(130);
|
||||
});
|
||||
const timeout = options.timeout ? parseInt(options.timeout, 10) : 0;
|
||||
context.setDefaultTimeout(timeout);
|
||||
context.setDefaultNavigationTimeout(timeout);
|
||||
delete launchOptions.headless;
|
||||
delete launchOptions.executablePath;
|
||||
delete launchOptions.handleSIGINT;
|
||||
delete contextOptions.deviceScaleFactor;
|
||||
return { browser, browserName: browserType.name(), context, contextOptions, launchOptions, closeBrowser };
|
||||
}
|
||||
async function openPage(context, url) {
|
||||
let page = context.pages()[0];
|
||||
if (!page)
|
||||
page = await context.newPage();
|
||||
if (url) {
|
||||
if (import_fs.default.existsSync(url))
|
||||
url = "file://" + import_path.default.resolve(url);
|
||||
else if (!url.startsWith("http") && !url.startsWith("file://") && !url.startsWith("about:") && !url.startsWith("data:"))
|
||||
url = "http://" + url;
|
||||
await page.goto(url);
|
||||
}
|
||||
return page;
|
||||
}
|
||||
async function open(options, url) {
|
||||
const { context } = await launchContext(options, { headless: !!process.env.PWTEST_CLI_HEADLESS, executablePath: process.env.PWTEST_CLI_EXECUTABLE_PATH });
|
||||
await openPage(context, url);
|
||||
}
|
||||
async function codegen(options, url) {
|
||||
const { target: language, output: outputFile, testIdAttribute: testIdAttributeName } = options;
|
||||
const tracesDir = import_path.default.join(import_os.default.tmpdir(), `playwright-recorder-trace-${Date.now()}`);
|
||||
const { context, browser, launchOptions, contextOptions, closeBrowser } = await launchContext(options, {
|
||||
headless: !!process.env.PWTEST_CLI_HEADLESS,
|
||||
executablePath: process.env.PWTEST_CLI_EXECUTABLE_PATH,
|
||||
tracesDir
|
||||
});
|
||||
const donePromise = new import_utils.ManualPromise();
|
||||
maybeSetupTestHooks(browser, closeBrowser, donePromise);
|
||||
import_utilsBundle.dotenv.config({ path: "playwright.env" });
|
||||
await context._enableRecorder({
|
||||
language,
|
||||
launchOptions,
|
||||
contextOptions,
|
||||
device: options.device,
|
||||
saveStorage: options.saveStorage,
|
||||
mode: "recording",
|
||||
testIdAttributeName,
|
||||
outputFile: outputFile ? import_path.default.resolve(outputFile) : void 0,
|
||||
handleSIGINT: false
|
||||
});
|
||||
await openPage(context, url);
|
||||
donePromise.resolve();
|
||||
}
|
||||
async function maybeSetupTestHooks(browser, closeBrowser, donePromise) {
|
||||
if (!process.env.PWTEST_CLI_IS_UNDER_TEST)
|
||||
return;
|
||||
const logs = [];
|
||||
require("playwright-core/lib/utilsBundle").debug.log = (...args) => {
|
||||
const line = require("util").format(...args) + "\n";
|
||||
logs.push(line);
|
||||
process.stderr.write(line);
|
||||
};
|
||||
browser.on("disconnected", () => {
|
||||
const hasCrashLine = logs.some((line) => line.includes("process did exit:") && !line.includes("process did exit: exitCode=0, signal=null"));
|
||||
if (hasCrashLine) {
|
||||
process.stderr.write("Detected browser crash.\n");
|
||||
(0, import_utils.gracefullyProcessExitDoNotHang)(1);
|
||||
}
|
||||
});
|
||||
const close = async () => {
|
||||
await donePromise;
|
||||
await closeBrowser();
|
||||
};
|
||||
if (process.env.PWTEST_CLI_EXIT_AFTER_TIMEOUT) {
|
||||
setTimeout(close, +process.env.PWTEST_CLI_EXIT_AFTER_TIMEOUT);
|
||||
return;
|
||||
}
|
||||
let stdin = "";
|
||||
process.stdin.on("data", (data) => {
|
||||
stdin += data.toString();
|
||||
if (stdin.startsWith("exit")) {
|
||||
process.stdin.destroy();
|
||||
close();
|
||||
}
|
||||
});
|
||||
}
|
||||
async function waitForPage(page, captureOptions) {
|
||||
if (captureOptions.waitForSelector) {
|
||||
console.log(`Waiting for selector ${captureOptions.waitForSelector}...`);
|
||||
await page.waitForSelector(captureOptions.waitForSelector);
|
||||
}
|
||||
if (captureOptions.waitForTimeout) {
|
||||
console.log(`Waiting for timeout ${captureOptions.waitForTimeout}...`);
|
||||
await page.waitForTimeout(parseInt(captureOptions.waitForTimeout, 10));
|
||||
}
|
||||
}
|
||||
async function screenshot(options, captureOptions, url, path2) {
|
||||
const { context } = await launchContext(options, { headless: true });
|
||||
console.log("Navigating to " + url);
|
||||
const page = await openPage(context, url);
|
||||
await waitForPage(page, captureOptions);
|
||||
console.log("Capturing screenshot into " + path2);
|
||||
await page.screenshot({ path: path2, fullPage: !!captureOptions.fullPage });
|
||||
await page.close();
|
||||
}
|
||||
async function pdf(options, captureOptions, url, path2) {
|
||||
if (options.browser !== "chromium")
|
||||
throw new Error("PDF creation is only working with Chromium");
|
||||
const { context } = await launchContext({ ...options, browser: "chromium" }, { headless: true });
|
||||
console.log("Navigating to " + url);
|
||||
const page = await openPage(context, url);
|
||||
await waitForPage(page, captureOptions);
|
||||
console.log("Saving as pdf into " + path2);
|
||||
await page.pdf({ path: path2, format: captureOptions.paperFormat });
|
||||
await page.close();
|
||||
}
|
||||
function lookupBrowserType(options) {
|
||||
let name = options.browser;
|
||||
if (options.device) {
|
||||
const device = playwright.devices[options.device];
|
||||
name = device.defaultBrowserType;
|
||||
}
|
||||
let browserType;
|
||||
switch (name) {
|
||||
case "chromium":
|
||||
browserType = playwright.chromium;
|
||||
break;
|
||||
case "webkit":
|
||||
browserType = playwright.webkit;
|
||||
break;
|
||||
case "firefox":
|
||||
browserType = playwright.firefox;
|
||||
break;
|
||||
case "cr":
|
||||
browserType = playwright.chromium;
|
||||
break;
|
||||
case "wk":
|
||||
browserType = playwright.webkit;
|
||||
break;
|
||||
case "ff":
|
||||
browserType = playwright.firefox;
|
||||
break;
|
||||
}
|
||||
if (browserType)
|
||||
return browserType;
|
||||
import_utilsBundle.program.help();
|
||||
}
|
||||
function validateOptions(options) {
|
||||
if (options.device && !(options.device in playwright.devices)) {
|
||||
const lines = [`Device descriptor not found: '${options.device}', available devices are:`];
|
||||
for (const name in playwright.devices)
|
||||
lines.push(` "${name}"`);
|
||||
throw new Error(lines.join("\n"));
|
||||
}
|
||||
if (options.colorScheme && !["light", "dark"].includes(options.colorScheme))
|
||||
throw new Error('Invalid color scheme, should be one of "light", "dark"');
|
||||
}
|
||||
function logErrorAndExit(e) {
|
||||
if (process.env.PWDEBUGIMPL)
|
||||
console.error(e);
|
||||
else
|
||||
console.error(e.name + ": " + e.message);
|
||||
(0, import_utils.gracefullyProcessExitDoNotHang)(1);
|
||||
}
|
||||
function codegenId() {
|
||||
return process.env.PW_LANG_NAME || "playwright-test";
|
||||
}
|
||||
function commandWithOpenOptions(command, description, options) {
|
||||
let result = import_utilsBundle.program.command(command).description(description);
|
||||
for (const option of options)
|
||||
result = result.option(option[0], ...option.slice(1));
|
||||
return result.option("-b, --browser <browserType>", "browser to use, one of cr, chromium, ff, firefox, wk, webkit", "chromium").option("--block-service-workers", "block service workers").option("--channel <channel>", 'Chromium distribution channel, "chrome", "chrome-beta", "msedge-dev", etc').option("--color-scheme <scheme>", 'emulate preferred color scheme, "light" or "dark"').option("--device <deviceName>", 'emulate device, for example "iPhone 11"').option("--geolocation <coordinates>", 'specify geolocation coordinates, for example "37.819722,-122.478611"').option("--ignore-https-errors", "ignore https errors").option("--load-storage <filename>", "load context storage state from the file, previously saved with --save-storage").option("--lang <language>", 'specify language / locale, for example "en-GB"').option("--proxy-server <proxy>", 'specify proxy server, for example "http://myproxy:3128" or "socks5://myproxy:8080"').option("--proxy-bypass <bypass>", 'comma-separated domains to bypass proxy, for example ".com,chromium.org,.domain.com"').option("--save-har <filename>", "save HAR file with all network activity at the end").option("--save-har-glob <glob pattern>", "filter entries in the HAR by matching url against this glob pattern").option("--save-storage <filename>", "save context storage state at the end, for later use with --load-storage").option("--timezone <time zone>", 'time zone to emulate, for example "Europe/Rome"').option("--timeout <timeout>", "timeout for Playwright actions in milliseconds, no timeout by default").option("--user-agent <ua string>", "specify user agent string").option("--user-data-dir <directory>", "use the specified user data directory instead of a new context").option("--viewport-size <size>", 'specify browser viewport size in pixels, for example "1280, 720"');
|
||||
}
|
||||
function buildBasePlaywrightCLICommand(cliTargetLang) {
|
||||
switch (cliTargetLang) {
|
||||
case "python":
|
||||
return `playwright`;
|
||||
case "java":
|
||||
return `mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="...options.."`;
|
||||
case "csharp":
|
||||
return `pwsh bin/Debug/netX/playwright.ps1`;
|
||||
default: {
|
||||
const packageManagerCommand = (0, import_utils2.getPackageManagerExecCommand)();
|
||||
return `${packageManagerCommand} playwright`;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
program
|
||||
});
|
||||
74
node_modules/playwright-core/lib/cli/programWithTestStub.js
generated
vendored
74
node_modules/playwright-core/lib/cli/programWithTestStub.js
generated
vendored
@@ -1,74 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var programWithTestStub_exports = {};
|
||||
__export(programWithTestStub_exports, {
|
||||
program: () => import_program2.program
|
||||
});
|
||||
module.exports = __toCommonJS(programWithTestStub_exports);
|
||||
var import_processLauncher = require("../server/utils/processLauncher");
|
||||
var import_utils = require("../utils");
|
||||
var import_program = require("./program");
|
||||
var import_program2 = require("./program");
|
||||
function printPlaywrightTestError(command) {
|
||||
const packages = [];
|
||||
for (const pkg of ["playwright", "playwright-chromium", "playwright-firefox", "playwright-webkit"]) {
|
||||
try {
|
||||
require.resolve(pkg);
|
||||
packages.push(pkg);
|
||||
} catch (e) {
|
||||
}
|
||||
}
|
||||
if (!packages.length)
|
||||
packages.push("playwright");
|
||||
const packageManager = (0, import_utils.getPackageManager)();
|
||||
if (packageManager === "yarn") {
|
||||
console.error(`Please install @playwright/test package before running "yarn playwright ${command}"`);
|
||||
console.error(` yarn remove ${packages.join(" ")}`);
|
||||
console.error(" yarn add -D @playwright/test");
|
||||
} else if (packageManager === "pnpm") {
|
||||
console.error(`Please install @playwright/test package before running "pnpm exec playwright ${command}"`);
|
||||
console.error(` pnpm remove ${packages.join(" ")}`);
|
||||
console.error(" pnpm add -D @playwright/test");
|
||||
} else {
|
||||
console.error(`Please install @playwright/test package before running "npx playwright ${command}"`);
|
||||
console.error(` npm uninstall ${packages.join(" ")}`);
|
||||
console.error(" npm install -D @playwright/test");
|
||||
}
|
||||
}
|
||||
const kExternalPlaywrightTestCommands = [
|
||||
["test", "Run tests with Playwright Test."],
|
||||
["show-report", "Show Playwright Test HTML report."],
|
||||
["merge-reports", "Merge Playwright Test Blob reports"]
|
||||
];
|
||||
function addExternalPlaywrightTestCommands() {
|
||||
for (const [command, description] of kExternalPlaywrightTestCommands) {
|
||||
const playwrightTest = import_program.program.command(command).allowUnknownOption(true).allowExcessArguments(true);
|
||||
playwrightTest.description(`${description} Available in @playwright/test package.`);
|
||||
playwrightTest.action(async () => {
|
||||
printPlaywrightTestError(command);
|
||||
(0, import_processLauncher.gracefullyProcessExitDoNotHang)(1);
|
||||
});
|
||||
}
|
||||
}
|
||||
if (!process.env.PW_LANG_NAME)
|
||||
addExternalPlaywrightTestCommands();
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
program
|
||||
});
|
||||
361
node_modules/playwright-core/lib/client/android.js
generated
vendored
361
node_modules/playwright-core/lib/client/android.js
generated
vendored
@@ -1,361 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var android_exports = {};
|
||||
__export(android_exports, {
|
||||
Android: () => Android,
|
||||
AndroidDevice: () => AndroidDevice,
|
||||
AndroidInput: () => AndroidInput,
|
||||
AndroidSocket: () => AndroidSocket,
|
||||
AndroidWebView: () => AndroidWebView
|
||||
});
|
||||
module.exports = __toCommonJS(android_exports);
|
||||
var import_eventEmitter = require("./eventEmitter");
|
||||
var import_browserContext = require("./browserContext");
|
||||
var import_channelOwner = require("./channelOwner");
|
||||
var import_errors = require("./errors");
|
||||
var import_events = require("./events");
|
||||
var import_waiter = require("./waiter");
|
||||
var import_timeoutSettings = require("./timeoutSettings");
|
||||
var import_rtti = require("../utils/isomorphic/rtti");
|
||||
var import_time = require("../utils/isomorphic/time");
|
||||
var import_timeoutRunner = require("../utils/isomorphic/timeoutRunner");
|
||||
var import_webSocket = require("./webSocket");
|
||||
class Android extends import_channelOwner.ChannelOwner {
|
||||
static from(android) {
|
||||
return android._object;
|
||||
}
|
||||
constructor(parent, type, guid, initializer) {
|
||||
super(parent, type, guid, initializer);
|
||||
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings(this._platform);
|
||||
}
|
||||
setDefaultTimeout(timeout) {
|
||||
this._timeoutSettings.setDefaultTimeout(timeout);
|
||||
}
|
||||
async devices(options = {}) {
|
||||
const { devices } = await this._channel.devices(options);
|
||||
return devices.map((d) => AndroidDevice.from(d));
|
||||
}
|
||||
async launchServer(options = {}) {
|
||||
if (!this._serverLauncher)
|
||||
throw new Error("Launching server is not supported");
|
||||
return await this._serverLauncher.launchServer(options);
|
||||
}
|
||||
async connect(wsEndpoint, options = {}) {
|
||||
return await this._wrapApiCall(async () => {
|
||||
const deadline = options.timeout ? (0, import_time.monotonicTime)() + options.timeout : 0;
|
||||
const headers = { "x-playwright-browser": "android", ...options.headers };
|
||||
const connectParams = { wsEndpoint, headers, slowMo: options.slowMo, timeout: options.timeout || 0 };
|
||||
const connection = await (0, import_webSocket.connectOverWebSocket)(this._connection, connectParams);
|
||||
let device;
|
||||
connection.on("close", () => {
|
||||
device?._didClose();
|
||||
});
|
||||
const result = await (0, import_timeoutRunner.raceAgainstDeadline)(async () => {
|
||||
const playwright = await connection.initializePlaywright();
|
||||
if (!playwright._initializer.preConnectedAndroidDevice) {
|
||||
connection.close();
|
||||
throw new Error("Malformed endpoint. Did you use Android.launchServer method?");
|
||||
}
|
||||
device = AndroidDevice.from(playwright._initializer.preConnectedAndroidDevice);
|
||||
device._shouldCloseConnectionOnClose = true;
|
||||
device.on(import_events.Events.AndroidDevice.Close, () => connection.close());
|
||||
return device;
|
||||
}, deadline);
|
||||
if (!result.timedOut) {
|
||||
return result.result;
|
||||
} else {
|
||||
connection.close();
|
||||
throw new Error(`Timeout ${options.timeout}ms exceeded`);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
class AndroidDevice extends import_channelOwner.ChannelOwner {
|
||||
constructor(parent, type, guid, initializer) {
|
||||
super(parent, type, guid, initializer);
|
||||
this._webViews = /* @__PURE__ */ new Map();
|
||||
this._shouldCloseConnectionOnClose = false;
|
||||
this._android = parent;
|
||||
this.input = new AndroidInput(this);
|
||||
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings(this._platform, parent._timeoutSettings);
|
||||
this._channel.on("webViewAdded", ({ webView }) => this._onWebViewAdded(webView));
|
||||
this._channel.on("webViewRemoved", ({ socketName }) => this._onWebViewRemoved(socketName));
|
||||
this._channel.on("close", () => this._didClose());
|
||||
}
|
||||
static from(androidDevice) {
|
||||
return androidDevice._object;
|
||||
}
|
||||
_onWebViewAdded(webView) {
|
||||
const view = new AndroidWebView(this, webView);
|
||||
this._webViews.set(webView.socketName, view);
|
||||
this.emit(import_events.Events.AndroidDevice.WebView, view);
|
||||
}
|
||||
_onWebViewRemoved(socketName) {
|
||||
const view = this._webViews.get(socketName);
|
||||
this._webViews.delete(socketName);
|
||||
if (view)
|
||||
view.emit(import_events.Events.AndroidWebView.Close);
|
||||
}
|
||||
setDefaultTimeout(timeout) {
|
||||
this._timeoutSettings.setDefaultTimeout(timeout);
|
||||
}
|
||||
serial() {
|
||||
return this._initializer.serial;
|
||||
}
|
||||
model() {
|
||||
return this._initializer.model;
|
||||
}
|
||||
webViews() {
|
||||
return [...this._webViews.values()];
|
||||
}
|
||||
async webView(selector, options) {
|
||||
const predicate = (v) => {
|
||||
if (selector.pkg)
|
||||
return v.pkg() === selector.pkg;
|
||||
if (selector.socketName)
|
||||
return v._socketName() === selector.socketName;
|
||||
return false;
|
||||
};
|
||||
const webView = [...this._webViews.values()].find(predicate);
|
||||
if (webView)
|
||||
return webView;
|
||||
return await this.waitForEvent("webview", { ...options, predicate });
|
||||
}
|
||||
async wait(selector, options = {}) {
|
||||
await this._channel.wait({ androidSelector: toSelectorChannel(selector), ...options, timeout: this._timeoutSettings.timeout(options) });
|
||||
}
|
||||
async fill(selector, text, options = {}) {
|
||||
await this._channel.fill({ androidSelector: toSelectorChannel(selector), text, ...options, timeout: this._timeoutSettings.timeout(options) });
|
||||
}
|
||||
async press(selector, key, options = {}) {
|
||||
await this.tap(selector, options);
|
||||
await this.input.press(key);
|
||||
}
|
||||
async tap(selector, options = {}) {
|
||||
await this._channel.tap({ androidSelector: toSelectorChannel(selector), ...options, timeout: this._timeoutSettings.timeout(options) });
|
||||
}
|
||||
async drag(selector, dest, options = {}) {
|
||||
await this._channel.drag({ androidSelector: toSelectorChannel(selector), dest, ...options, timeout: this._timeoutSettings.timeout(options) });
|
||||
}
|
||||
async fling(selector, direction, options = {}) {
|
||||
await this._channel.fling({ androidSelector: toSelectorChannel(selector), direction, ...options, timeout: this._timeoutSettings.timeout(options) });
|
||||
}
|
||||
async longTap(selector, options = {}) {
|
||||
await this._channel.longTap({ androidSelector: toSelectorChannel(selector), ...options, timeout: this._timeoutSettings.timeout(options) });
|
||||
}
|
||||
async pinchClose(selector, percent, options = {}) {
|
||||
await this._channel.pinchClose({ androidSelector: toSelectorChannel(selector), percent, ...options, timeout: this._timeoutSettings.timeout(options) });
|
||||
}
|
||||
async pinchOpen(selector, percent, options = {}) {
|
||||
await this._channel.pinchOpen({ androidSelector: toSelectorChannel(selector), percent, ...options, timeout: this._timeoutSettings.timeout(options) });
|
||||
}
|
||||
async scroll(selector, direction, percent, options = {}) {
|
||||
await this._channel.scroll({ androidSelector: toSelectorChannel(selector), direction, percent, ...options, timeout: this._timeoutSettings.timeout(options) });
|
||||
}
|
||||
async swipe(selector, direction, percent, options = {}) {
|
||||
await this._channel.swipe({ androidSelector: toSelectorChannel(selector), direction, percent, ...options, timeout: this._timeoutSettings.timeout(options) });
|
||||
}
|
||||
async info(selector) {
|
||||
return (await this._channel.info({ androidSelector: toSelectorChannel(selector) })).info;
|
||||
}
|
||||
async screenshot(options = {}) {
|
||||
const { binary } = await this._channel.screenshot();
|
||||
if (options.path)
|
||||
await this._platform.fs().promises.writeFile(options.path, binary);
|
||||
return binary;
|
||||
}
|
||||
async [Symbol.asyncDispose]() {
|
||||
await this.close();
|
||||
}
|
||||
async close() {
|
||||
try {
|
||||
if (this._shouldCloseConnectionOnClose)
|
||||
this._connection.close();
|
||||
else
|
||||
await this._channel.close();
|
||||
} catch (e) {
|
||||
if ((0, import_errors.isTargetClosedError)(e))
|
||||
return;
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
_didClose() {
|
||||
this.emit(import_events.Events.AndroidDevice.Close, this);
|
||||
}
|
||||
async shell(command) {
|
||||
const { result } = await this._channel.shell({ command });
|
||||
return result;
|
||||
}
|
||||
async open(command) {
|
||||
return AndroidSocket.from((await this._channel.open({ command })).socket);
|
||||
}
|
||||
async installApk(file, options) {
|
||||
await this._channel.installApk({ file: await loadFile(this._platform, file), args: options && options.args });
|
||||
}
|
||||
async push(file, path, options) {
|
||||
await this._channel.push({ file: await loadFile(this._platform, file), path, mode: options ? options.mode : void 0 });
|
||||
}
|
||||
async launchBrowser(options = {}) {
|
||||
const contextOptions = await (0, import_browserContext.prepareBrowserContextParams)(this._platform, options);
|
||||
const result = await this._channel.launchBrowser(contextOptions);
|
||||
const context = import_browserContext.BrowserContext.from(result.context);
|
||||
const selectors = this._android._playwright.selectors;
|
||||
selectors._contextsForSelectors.add(context);
|
||||
context.once(import_events.Events.BrowserContext.Close, () => selectors._contextsForSelectors.delete(context));
|
||||
await context._initializeHarFromOptions(options.recordHar);
|
||||
return context;
|
||||
}
|
||||
async waitForEvent(event, optionsOrPredicate = {}) {
|
||||
return await this._wrapApiCall(async () => {
|
||||
const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate === "function" ? {} : optionsOrPredicate);
|
||||
const predicate = typeof optionsOrPredicate === "function" ? optionsOrPredicate : optionsOrPredicate.predicate;
|
||||
const waiter = import_waiter.Waiter.createForEvent(this, event);
|
||||
waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event "${event}"`);
|
||||
if (event !== import_events.Events.AndroidDevice.Close)
|
||||
waiter.rejectOnEvent(this, import_events.Events.AndroidDevice.Close, () => new import_errors.TargetClosedError());
|
||||
const result = await waiter.waitForEvent(this, event, predicate);
|
||||
waiter.dispose();
|
||||
return result;
|
||||
});
|
||||
}
|
||||
}
|
||||
class AndroidSocket extends import_channelOwner.ChannelOwner {
|
||||
static from(androidDevice) {
|
||||
return androidDevice._object;
|
||||
}
|
||||
constructor(parent, type, guid, initializer) {
|
||||
super(parent, type, guid, initializer);
|
||||
this._channel.on("data", ({ data }) => this.emit(import_events.Events.AndroidSocket.Data, data));
|
||||
this._channel.on("close", () => this.emit(import_events.Events.AndroidSocket.Close));
|
||||
}
|
||||
async write(data) {
|
||||
await this._channel.write({ data });
|
||||
}
|
||||
async close() {
|
||||
await this._channel.close();
|
||||
}
|
||||
async [Symbol.asyncDispose]() {
|
||||
await this.close();
|
||||
}
|
||||
}
|
||||
async function loadFile(platform, file) {
|
||||
if ((0, import_rtti.isString)(file))
|
||||
return await platform.fs().promises.readFile(file);
|
||||
return file;
|
||||
}
|
||||
class AndroidInput {
|
||||
constructor(device) {
|
||||
this._device = device;
|
||||
}
|
||||
async type(text) {
|
||||
await this._device._channel.inputType({ text });
|
||||
}
|
||||
async press(key) {
|
||||
await this._device._channel.inputPress({ key });
|
||||
}
|
||||
async tap(point) {
|
||||
await this._device._channel.inputTap({ point });
|
||||
}
|
||||
async swipe(from, segments, steps) {
|
||||
await this._device._channel.inputSwipe({ segments, steps });
|
||||
}
|
||||
async drag(from, to, steps) {
|
||||
await this._device._channel.inputDrag({ from, to, steps });
|
||||
}
|
||||
}
|
||||
function toSelectorChannel(selector) {
|
||||
const {
|
||||
checkable,
|
||||
checked,
|
||||
clazz,
|
||||
clickable,
|
||||
depth,
|
||||
desc,
|
||||
enabled,
|
||||
focusable,
|
||||
focused,
|
||||
hasChild,
|
||||
hasDescendant,
|
||||
longClickable,
|
||||
pkg,
|
||||
res,
|
||||
scrollable,
|
||||
selected,
|
||||
text
|
||||
} = selector;
|
||||
const toRegex = (value) => {
|
||||
if (value === void 0)
|
||||
return void 0;
|
||||
if ((0, import_rtti.isRegExp)(value))
|
||||
return value.source;
|
||||
return "^" + value.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d") + "$";
|
||||
};
|
||||
return {
|
||||
checkable,
|
||||
checked,
|
||||
clazz: toRegex(clazz),
|
||||
pkg: toRegex(pkg),
|
||||
desc: toRegex(desc),
|
||||
res: toRegex(res),
|
||||
text: toRegex(text),
|
||||
clickable,
|
||||
depth,
|
||||
enabled,
|
||||
focusable,
|
||||
focused,
|
||||
hasChild: hasChild ? { androidSelector: toSelectorChannel(hasChild.selector) } : void 0,
|
||||
hasDescendant: hasDescendant ? { androidSelector: toSelectorChannel(hasDescendant.selector), maxDepth: hasDescendant.maxDepth } : void 0,
|
||||
longClickable,
|
||||
scrollable,
|
||||
selected
|
||||
};
|
||||
}
|
||||
class AndroidWebView extends import_eventEmitter.EventEmitter {
|
||||
constructor(device, data) {
|
||||
super(device._platform);
|
||||
this._device = device;
|
||||
this._data = data;
|
||||
}
|
||||
pid() {
|
||||
return this._data.pid;
|
||||
}
|
||||
pkg() {
|
||||
return this._data.pkg;
|
||||
}
|
||||
_socketName() {
|
||||
return this._data.socketName;
|
||||
}
|
||||
async page() {
|
||||
if (!this._pagePromise)
|
||||
this._pagePromise = this._fetchPage();
|
||||
return await this._pagePromise;
|
||||
}
|
||||
async _fetchPage() {
|
||||
const { context } = await this._device._channel.connectToWebView({ socketName: this._data.socketName });
|
||||
return import_browserContext.BrowserContext.from(context).pages()[0];
|
||||
}
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
Android,
|
||||
AndroidDevice,
|
||||
AndroidInput,
|
||||
AndroidSocket,
|
||||
AndroidWebView
|
||||
});
|
||||
134
node_modules/playwright-core/lib/client/api.js
generated
vendored
134
node_modules/playwright-core/lib/client/api.js
generated
vendored
@@ -1,134 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var api_exports = {};
|
||||
__export(api_exports, {
|
||||
APIRequest: () => import_fetch.APIRequest,
|
||||
APIRequestContext: () => import_fetch.APIRequestContext,
|
||||
APIResponse: () => import_fetch.APIResponse,
|
||||
Android: () => import_android.Android,
|
||||
AndroidDevice: () => import_android.AndroidDevice,
|
||||
AndroidInput: () => import_android.AndroidInput,
|
||||
AndroidSocket: () => import_android.AndroidSocket,
|
||||
AndroidWebView: () => import_android.AndroidWebView,
|
||||
Browser: () => import_browser.Browser,
|
||||
BrowserContext: () => import_browserContext.BrowserContext,
|
||||
BrowserType: () => import_browserType.BrowserType,
|
||||
CDPSession: () => import_cdpSession.CDPSession,
|
||||
Clock: () => import_clock.Clock,
|
||||
ConsoleMessage: () => import_consoleMessage.ConsoleMessage,
|
||||
Coverage: () => import_coverage.Coverage,
|
||||
Dialog: () => import_dialog.Dialog,
|
||||
Download: () => import_download.Download,
|
||||
Electron: () => import_electron.Electron,
|
||||
ElectronApplication: () => import_electron.ElectronApplication,
|
||||
ElementHandle: () => import_elementHandle.ElementHandle,
|
||||
FileChooser: () => import_fileChooser.FileChooser,
|
||||
Frame: () => import_frame.Frame,
|
||||
FrameLocator: () => import_locator.FrameLocator,
|
||||
JSHandle: () => import_jsHandle.JSHandle,
|
||||
Keyboard: () => import_input.Keyboard,
|
||||
Locator: () => import_locator.Locator,
|
||||
Mouse: () => import_input.Mouse,
|
||||
Page: () => import_page.Page,
|
||||
Playwright: () => import_playwright.Playwright,
|
||||
Request: () => import_network.Request,
|
||||
Response: () => import_network.Response,
|
||||
Route: () => import_network.Route,
|
||||
Selectors: () => import_selectors.Selectors,
|
||||
TimeoutError: () => import_errors.TimeoutError,
|
||||
Touchscreen: () => import_input.Touchscreen,
|
||||
Tracing: () => import_tracing.Tracing,
|
||||
Video: () => import_video.Video,
|
||||
WebError: () => import_webError.WebError,
|
||||
WebSocket: () => import_network.WebSocket,
|
||||
WebSocketRoute: () => import_network.WebSocketRoute,
|
||||
Worker: () => import_worker.Worker
|
||||
});
|
||||
module.exports = __toCommonJS(api_exports);
|
||||
var import_android = require("./android");
|
||||
var import_browser = require("./browser");
|
||||
var import_browserContext = require("./browserContext");
|
||||
var import_browserType = require("./browserType");
|
||||
var import_clock = require("./clock");
|
||||
var import_consoleMessage = require("./consoleMessage");
|
||||
var import_coverage = require("./coverage");
|
||||
var import_dialog = require("./dialog");
|
||||
var import_download = require("./download");
|
||||
var import_electron = require("./electron");
|
||||
var import_locator = require("./locator");
|
||||
var import_elementHandle = require("./elementHandle");
|
||||
var import_fileChooser = require("./fileChooser");
|
||||
var import_errors = require("./errors");
|
||||
var import_frame = require("./frame");
|
||||
var import_input = require("./input");
|
||||
var import_jsHandle = require("./jsHandle");
|
||||
var import_network = require("./network");
|
||||
var import_fetch = require("./fetch");
|
||||
var import_page = require("./page");
|
||||
var import_selectors = require("./selectors");
|
||||
var import_tracing = require("./tracing");
|
||||
var import_video = require("./video");
|
||||
var import_worker = require("./worker");
|
||||
var import_cdpSession = require("./cdpSession");
|
||||
var import_playwright = require("./playwright");
|
||||
var import_webError = require("./webError");
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
APIRequest,
|
||||
APIRequestContext,
|
||||
APIResponse,
|
||||
Android,
|
||||
AndroidDevice,
|
||||
AndroidInput,
|
||||
AndroidSocket,
|
||||
AndroidWebView,
|
||||
Browser,
|
||||
BrowserContext,
|
||||
BrowserType,
|
||||
CDPSession,
|
||||
Clock,
|
||||
ConsoleMessage,
|
||||
Coverage,
|
||||
Dialog,
|
||||
Download,
|
||||
Electron,
|
||||
ElectronApplication,
|
||||
ElementHandle,
|
||||
FileChooser,
|
||||
Frame,
|
||||
FrameLocator,
|
||||
JSHandle,
|
||||
Keyboard,
|
||||
Locator,
|
||||
Mouse,
|
||||
Page,
|
||||
Playwright,
|
||||
Request,
|
||||
Response,
|
||||
Route,
|
||||
Selectors,
|
||||
TimeoutError,
|
||||
Touchscreen,
|
||||
Tracing,
|
||||
Video,
|
||||
WebError,
|
||||
WebSocket,
|
||||
WebSocketRoute,
|
||||
Worker
|
||||
});
|
||||
79
node_modules/playwright-core/lib/client/artifact.js
generated
vendored
79
node_modules/playwright-core/lib/client/artifact.js
generated
vendored
@@ -1,79 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var artifact_exports = {};
|
||||
__export(artifact_exports, {
|
||||
Artifact: () => Artifact
|
||||
});
|
||||
module.exports = __toCommonJS(artifact_exports);
|
||||
var import_channelOwner = require("./channelOwner");
|
||||
var import_stream = require("./stream");
|
||||
var import_fileUtils = require("./fileUtils");
|
||||
class Artifact extends import_channelOwner.ChannelOwner {
|
||||
static from(channel) {
|
||||
return channel._object;
|
||||
}
|
||||
async pathAfterFinished() {
|
||||
if (this._connection.isRemote())
|
||||
throw new Error(`Path is not available when connecting remotely. Use saveAs() to save a local copy.`);
|
||||
return (await this._channel.pathAfterFinished()).value;
|
||||
}
|
||||
async saveAs(path) {
|
||||
if (!this._connection.isRemote()) {
|
||||
await this._channel.saveAs({ path });
|
||||
return;
|
||||
}
|
||||
const result = await this._channel.saveAsStream();
|
||||
const stream = import_stream.Stream.from(result.stream);
|
||||
await (0, import_fileUtils.mkdirIfNeeded)(this._platform, path);
|
||||
await new Promise((resolve, reject) => {
|
||||
stream.stream().pipe(this._platform.fs().createWriteStream(path)).on("finish", resolve).on("error", reject);
|
||||
});
|
||||
}
|
||||
async failure() {
|
||||
return (await this._channel.failure()).error || null;
|
||||
}
|
||||
async createReadStream() {
|
||||
const result = await this._channel.stream();
|
||||
const stream = import_stream.Stream.from(result.stream);
|
||||
return stream.stream();
|
||||
}
|
||||
async readIntoBuffer() {
|
||||
const stream = await this.createReadStream();
|
||||
return await new Promise((resolve, reject) => {
|
||||
const chunks = [];
|
||||
stream.on("data", (chunk) => {
|
||||
chunks.push(chunk);
|
||||
});
|
||||
stream.on("end", () => {
|
||||
resolve(Buffer.concat(chunks));
|
||||
});
|
||||
stream.on("error", reject);
|
||||
});
|
||||
}
|
||||
async cancel() {
|
||||
return await this._channel.cancel();
|
||||
}
|
||||
async delete() {
|
||||
return await this._channel.delete();
|
||||
}
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
Artifact
|
||||
});
|
||||
163
node_modules/playwright-core/lib/client/browser.js
generated
vendored
163
node_modules/playwright-core/lib/client/browser.js
generated
vendored
@@ -1,163 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var browser_exports = {};
|
||||
__export(browser_exports, {
|
||||
Browser: () => Browser
|
||||
});
|
||||
module.exports = __toCommonJS(browser_exports);
|
||||
var import_artifact = require("./artifact");
|
||||
var import_browserContext = require("./browserContext");
|
||||
var import_cdpSession = require("./cdpSession");
|
||||
var import_channelOwner = require("./channelOwner");
|
||||
var import_errors = require("./errors");
|
||||
var import_events = require("./events");
|
||||
var import_fileUtils = require("./fileUtils");
|
||||
class Browser extends import_channelOwner.ChannelOwner {
|
||||
constructor(parent, type, guid, initializer) {
|
||||
super(parent, type, guid, initializer);
|
||||
this._contexts = /* @__PURE__ */ new Set();
|
||||
this._isConnected = true;
|
||||
this._shouldCloseConnectionOnClose = false;
|
||||
this._options = {};
|
||||
this._name = initializer.name;
|
||||
this._channel.on("context", ({ context }) => this._didCreateContext(import_browserContext.BrowserContext.from(context)));
|
||||
this._channel.on("close", () => this._didClose());
|
||||
this._closedPromise = new Promise((f) => this.once(import_events.Events.Browser.Disconnected, f));
|
||||
}
|
||||
static from(browser) {
|
||||
return browser._object;
|
||||
}
|
||||
browserType() {
|
||||
return this._browserType;
|
||||
}
|
||||
async newContext(options = {}) {
|
||||
return await this._innerNewContext(options, false);
|
||||
}
|
||||
async _newContextForReuse(options = {}) {
|
||||
return await this._innerNewContext(options, true);
|
||||
}
|
||||
async _disconnectFromReusedContext(reason) {
|
||||
const context = [...this._contexts].find((context2) => context2._forReuse);
|
||||
if (!context)
|
||||
return;
|
||||
await this._instrumentation.runBeforeCloseBrowserContext(context);
|
||||
for (const page of context.pages())
|
||||
page._onClose();
|
||||
context._onClose();
|
||||
await this._channel.disconnectFromReusedContext({ reason });
|
||||
}
|
||||
async _innerNewContext(options = {}, forReuse) {
|
||||
options = this._browserType._playwright.selectors._withSelectorOptions({
|
||||
...this._browserType._playwright._defaultContextOptions,
|
||||
...options
|
||||
});
|
||||
const contextOptions = await (0, import_browserContext.prepareBrowserContextParams)(this._platform, options);
|
||||
const response = forReuse ? await this._channel.newContextForReuse(contextOptions) : await this._channel.newContext(contextOptions);
|
||||
const context = import_browserContext.BrowserContext.from(response.context);
|
||||
if (forReuse)
|
||||
context._forReuse = true;
|
||||
if (options.logger)
|
||||
context._logger = options.logger;
|
||||
await context._initializeHarFromOptions(options.recordHar);
|
||||
await this._instrumentation.runAfterCreateBrowserContext(context);
|
||||
return context;
|
||||
}
|
||||
_connectToBrowserType(browserType, browserOptions, logger) {
|
||||
this._browserType = browserType;
|
||||
this._options = browserOptions;
|
||||
this._logger = logger;
|
||||
for (const context of this._contexts)
|
||||
this._setupBrowserContext(context);
|
||||
}
|
||||
_didCreateContext(context) {
|
||||
context._browser = this;
|
||||
this._contexts.add(context);
|
||||
if (this._browserType)
|
||||
this._setupBrowserContext(context);
|
||||
}
|
||||
_setupBrowserContext(context) {
|
||||
context._logger = this._logger;
|
||||
context.tracing._tracesDir = this._options.tracesDir;
|
||||
this._browserType._contexts.add(context);
|
||||
this._browserType._playwright.selectors._contextsForSelectors.add(context);
|
||||
context.setDefaultTimeout(this._browserType._playwright._defaultContextTimeout);
|
||||
context.setDefaultNavigationTimeout(this._browserType._playwright._defaultContextNavigationTimeout);
|
||||
}
|
||||
contexts() {
|
||||
return [...this._contexts];
|
||||
}
|
||||
version() {
|
||||
return this._initializer.version;
|
||||
}
|
||||
async newPage(options = {}) {
|
||||
return await this._wrapApiCall(async () => {
|
||||
const context = await this.newContext(options);
|
||||
const page = await context.newPage();
|
||||
page._ownedContext = context;
|
||||
context._ownerPage = page;
|
||||
return page;
|
||||
}, { title: "Create page" });
|
||||
}
|
||||
isConnected() {
|
||||
return this._isConnected;
|
||||
}
|
||||
async newBrowserCDPSession() {
|
||||
return import_cdpSession.CDPSession.from((await this._channel.newBrowserCDPSession()).session);
|
||||
}
|
||||
async startTracing(page, options = {}) {
|
||||
this._path = options.path;
|
||||
await this._channel.startTracing({ ...options, page: page ? page._channel : void 0 });
|
||||
}
|
||||
async stopTracing() {
|
||||
const artifact = import_artifact.Artifact.from((await this._channel.stopTracing()).artifact);
|
||||
const buffer = await artifact.readIntoBuffer();
|
||||
await artifact.delete();
|
||||
if (this._path) {
|
||||
await (0, import_fileUtils.mkdirIfNeeded)(this._platform, this._path);
|
||||
await this._platform.fs().promises.writeFile(this._path, buffer);
|
||||
this._path = void 0;
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
async [Symbol.asyncDispose]() {
|
||||
await this.close();
|
||||
}
|
||||
async close(options = {}) {
|
||||
this._closeReason = options.reason;
|
||||
try {
|
||||
if (this._shouldCloseConnectionOnClose)
|
||||
this._connection.close();
|
||||
else
|
||||
await this._channel.close(options);
|
||||
await this._closedPromise;
|
||||
} catch (e) {
|
||||
if ((0, import_errors.isTargetClosedError)(e))
|
||||
return;
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
_didClose() {
|
||||
this._isConnected = false;
|
||||
this.emit(import_events.Events.Browser.Disconnected, this);
|
||||
}
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
Browser
|
||||
});
|
||||
547
node_modules/playwright-core/lib/client/browserContext.js
generated
vendored
547
node_modules/playwright-core/lib/client/browserContext.js
generated
vendored
@@ -1,547 +0,0 @@
|
||||
"use strict";
|
||||
var __create = Object.create;
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __getProtoOf = Object.getPrototypeOf;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
||||
// If the importer is in node compatibility mode or this is not an ESM
|
||||
// file that has been converted to a CommonJS file using a Babel-
|
||||
// compatible transform (i.e. "__esModule" has not been set), then set
|
||||
// "default" to the CommonJS "module.exports" for node compatibility.
|
||||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
||||
mod
|
||||
));
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var browserContext_exports = {};
|
||||
__export(browserContext_exports, {
|
||||
BrowserContext: () => BrowserContext,
|
||||
prepareBrowserContextParams: () => prepareBrowserContextParams,
|
||||
toClientCertificatesProtocol: () => toClientCertificatesProtocol
|
||||
});
|
||||
module.exports = __toCommonJS(browserContext_exports);
|
||||
var import_artifact = require("./artifact");
|
||||
var import_cdpSession = require("./cdpSession");
|
||||
var import_channelOwner = require("./channelOwner");
|
||||
var import_clientHelper = require("./clientHelper");
|
||||
var import_clock = require("./clock");
|
||||
var import_consoleMessage = require("./consoleMessage");
|
||||
var import_dialog = require("./dialog");
|
||||
var import_errors = require("./errors");
|
||||
var import_events = require("./events");
|
||||
var import_fetch = require("./fetch");
|
||||
var import_frame = require("./frame");
|
||||
var import_harRouter = require("./harRouter");
|
||||
var network = __toESM(require("./network"));
|
||||
var import_page = require("./page");
|
||||
var import_tracing = require("./tracing");
|
||||
var import_waiter = require("./waiter");
|
||||
var import_webError = require("./webError");
|
||||
var import_worker = require("./worker");
|
||||
var import_timeoutSettings = require("./timeoutSettings");
|
||||
var import_fileUtils = require("./fileUtils");
|
||||
var import_headers = require("../utils/isomorphic/headers");
|
||||
var import_urlMatch = require("../utils/isomorphic/urlMatch");
|
||||
var import_rtti = require("../utils/isomorphic/rtti");
|
||||
var import_stackTrace = require("../utils/isomorphic/stackTrace");
|
||||
class BrowserContext extends import_channelOwner.ChannelOwner {
|
||||
constructor(parent, type, guid, initializer) {
|
||||
super(parent, type, guid, initializer);
|
||||
this._pages = /* @__PURE__ */ new Set();
|
||||
this._routes = [];
|
||||
this._webSocketRoutes = [];
|
||||
// Browser is null for browser contexts created outside of normal browser, e.g. android or electron.
|
||||
this._browser = null;
|
||||
this._bindings = /* @__PURE__ */ new Map();
|
||||
this._forReuse = false;
|
||||
this._serviceWorkers = /* @__PURE__ */ new Set();
|
||||
this._harRecorders = /* @__PURE__ */ new Map();
|
||||
this._closingStatus = "none";
|
||||
this._harRouters = [];
|
||||
this._options = initializer.options;
|
||||
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings(this._platform);
|
||||
this.tracing = import_tracing.Tracing.from(initializer.tracing);
|
||||
this.request = import_fetch.APIRequestContext.from(initializer.requestContext);
|
||||
this.request._timeoutSettings = this._timeoutSettings;
|
||||
this.clock = new import_clock.Clock(this);
|
||||
this._channel.on("bindingCall", ({ binding }) => this._onBinding(import_page.BindingCall.from(binding)));
|
||||
this._channel.on("close", () => this._onClose());
|
||||
this._channel.on("page", ({ page }) => this._onPage(import_page.Page.from(page)));
|
||||
this._channel.on("route", ({ route }) => this._onRoute(network.Route.from(route)));
|
||||
this._channel.on("webSocketRoute", ({ webSocketRoute }) => this._onWebSocketRoute(network.WebSocketRoute.from(webSocketRoute)));
|
||||
this._channel.on("serviceWorker", ({ worker }) => {
|
||||
const serviceWorker = import_worker.Worker.from(worker);
|
||||
serviceWorker._context = this;
|
||||
this._serviceWorkers.add(serviceWorker);
|
||||
this.emit(import_events.Events.BrowserContext.ServiceWorker, serviceWorker);
|
||||
});
|
||||
this._channel.on("console", (event) => {
|
||||
const worker = import_worker.Worker.fromNullable(event.worker);
|
||||
const page = import_page.Page.fromNullable(event.page);
|
||||
const consoleMessage = new import_consoleMessage.ConsoleMessage(this._platform, event, page, worker);
|
||||
worker?.emit(import_events.Events.Worker.Console, consoleMessage);
|
||||
page?.emit(import_events.Events.Page.Console, consoleMessage);
|
||||
if (worker && this._serviceWorkers.has(worker)) {
|
||||
const scope = this._serviceWorkerScope(worker);
|
||||
for (const page2 of this._pages) {
|
||||
if (scope && page2.url().startsWith(scope))
|
||||
page2.emit(import_events.Events.Page.Console, consoleMessage);
|
||||
}
|
||||
}
|
||||
this.emit(import_events.Events.BrowserContext.Console, consoleMessage);
|
||||
});
|
||||
this._channel.on("pageError", ({ error, page }) => {
|
||||
const pageObject = import_page.Page.from(page);
|
||||
const parsedError = (0, import_errors.parseError)(error);
|
||||
this.emit(import_events.Events.BrowserContext.WebError, new import_webError.WebError(pageObject, parsedError));
|
||||
if (pageObject)
|
||||
pageObject.emit(import_events.Events.Page.PageError, parsedError);
|
||||
});
|
||||
this._channel.on("dialog", ({ dialog }) => {
|
||||
const dialogObject = import_dialog.Dialog.from(dialog);
|
||||
let hasListeners = this.emit(import_events.Events.BrowserContext.Dialog, dialogObject);
|
||||
const page = dialogObject.page();
|
||||
if (page)
|
||||
hasListeners = page.emit(import_events.Events.Page.Dialog, dialogObject) || hasListeners;
|
||||
if (!hasListeners) {
|
||||
if (dialogObject.type() === "beforeunload")
|
||||
dialog.accept({}).catch(() => {
|
||||
});
|
||||
else
|
||||
dialog.dismiss().catch(() => {
|
||||
});
|
||||
}
|
||||
});
|
||||
this._channel.on("request", ({ request, page }) => this._onRequest(network.Request.from(request), import_page.Page.fromNullable(page)));
|
||||
this._channel.on("requestFailed", ({ request, failureText, responseEndTiming, page }) => this._onRequestFailed(network.Request.from(request), responseEndTiming, failureText, import_page.Page.fromNullable(page)));
|
||||
this._channel.on("requestFinished", (params) => this._onRequestFinished(params));
|
||||
this._channel.on("response", ({ response, page }) => this._onResponse(network.Response.from(response), import_page.Page.fromNullable(page)));
|
||||
this._channel.on("recorderEvent", ({ event, data, page, code }) => {
|
||||
if (event === "actionAdded")
|
||||
this._onRecorderEventSink?.actionAdded?.(import_page.Page.from(page), data, code);
|
||||
else if (event === "actionUpdated")
|
||||
this._onRecorderEventSink?.actionUpdated?.(import_page.Page.from(page), data, code);
|
||||
else if (event === "signalAdded")
|
||||
this._onRecorderEventSink?.signalAdded?.(import_page.Page.from(page), data);
|
||||
});
|
||||
this._closedPromise = new Promise((f) => this.once(import_events.Events.BrowserContext.Close, f));
|
||||
this._setEventToSubscriptionMapping(/* @__PURE__ */ new Map([
|
||||
[import_events.Events.BrowserContext.Console, "console"],
|
||||
[import_events.Events.BrowserContext.Dialog, "dialog"],
|
||||
[import_events.Events.BrowserContext.Request, "request"],
|
||||
[import_events.Events.BrowserContext.Response, "response"],
|
||||
[import_events.Events.BrowserContext.RequestFinished, "requestFinished"],
|
||||
[import_events.Events.BrowserContext.RequestFailed, "requestFailed"]
|
||||
]));
|
||||
}
|
||||
static from(context) {
|
||||
return context._object;
|
||||
}
|
||||
static fromNullable(context) {
|
||||
return context ? BrowserContext.from(context) : null;
|
||||
}
|
||||
async _initializeHarFromOptions(recordHar) {
|
||||
if (!recordHar)
|
||||
return;
|
||||
const defaultContent = recordHar.path.endsWith(".zip") ? "attach" : "embed";
|
||||
await this._recordIntoHAR(recordHar.path, null, {
|
||||
url: recordHar.urlFilter,
|
||||
updateContent: recordHar.content ?? (recordHar.omitContent ? "omit" : defaultContent),
|
||||
updateMode: recordHar.mode ?? "full"
|
||||
});
|
||||
}
|
||||
_onPage(page) {
|
||||
this._pages.add(page);
|
||||
this.emit(import_events.Events.BrowserContext.Page, page);
|
||||
if (page._opener && !page._opener.isClosed())
|
||||
page._opener.emit(import_events.Events.Page.Popup, page);
|
||||
}
|
||||
_onRequest(request, page) {
|
||||
this.emit(import_events.Events.BrowserContext.Request, request);
|
||||
if (page)
|
||||
page.emit(import_events.Events.Page.Request, request);
|
||||
}
|
||||
_onResponse(response, page) {
|
||||
this.emit(import_events.Events.BrowserContext.Response, response);
|
||||
if (page)
|
||||
page.emit(import_events.Events.Page.Response, response);
|
||||
}
|
||||
_onRequestFailed(request, responseEndTiming, failureText, page) {
|
||||
request._failureText = failureText || null;
|
||||
request._setResponseEndTiming(responseEndTiming);
|
||||
this.emit(import_events.Events.BrowserContext.RequestFailed, request);
|
||||
if (page)
|
||||
page.emit(import_events.Events.Page.RequestFailed, request);
|
||||
}
|
||||
_onRequestFinished(params) {
|
||||
const { responseEndTiming } = params;
|
||||
const request = network.Request.from(params.request);
|
||||
const response = network.Response.fromNullable(params.response);
|
||||
const page = import_page.Page.fromNullable(params.page);
|
||||
request._setResponseEndTiming(responseEndTiming);
|
||||
this.emit(import_events.Events.BrowserContext.RequestFinished, request);
|
||||
if (page)
|
||||
page.emit(import_events.Events.Page.RequestFinished, request);
|
||||
if (response)
|
||||
response._finishedPromise.resolve(null);
|
||||
}
|
||||
async _onRoute(route) {
|
||||
route._context = this;
|
||||
const page = route.request()._safePage();
|
||||
const routeHandlers = this._routes.slice();
|
||||
for (const routeHandler of routeHandlers) {
|
||||
if (page?._closeWasCalled || this._closingStatus !== "none")
|
||||
return;
|
||||
if (!routeHandler.matches(route.request().url()))
|
||||
continue;
|
||||
const index = this._routes.indexOf(routeHandler);
|
||||
if (index === -1)
|
||||
continue;
|
||||
if (routeHandler.willExpire())
|
||||
this._routes.splice(index, 1);
|
||||
const handled = await routeHandler.handle(route);
|
||||
if (!this._routes.length)
|
||||
this._updateInterceptionPatterns({ internal: true }).catch(() => {
|
||||
});
|
||||
if (handled)
|
||||
return;
|
||||
}
|
||||
await route._innerContinue(
|
||||
true
|
||||
/* isFallback */
|
||||
).catch(() => {
|
||||
});
|
||||
}
|
||||
async _onWebSocketRoute(webSocketRoute) {
|
||||
const routeHandler = this._webSocketRoutes.find((route) => route.matches(webSocketRoute.url()));
|
||||
if (routeHandler)
|
||||
await routeHandler.handle(webSocketRoute);
|
||||
else
|
||||
webSocketRoute.connectToServer();
|
||||
}
|
||||
async _onBinding(bindingCall) {
|
||||
const func = this._bindings.get(bindingCall._initializer.name);
|
||||
if (!func)
|
||||
return;
|
||||
await bindingCall.call(func);
|
||||
}
|
||||
_serviceWorkerScope(serviceWorker) {
|
||||
try {
|
||||
let url = new URL(".", serviceWorker.url()).href;
|
||||
if (!url.endsWith("/"))
|
||||
url += "/";
|
||||
return url;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
setDefaultNavigationTimeout(timeout) {
|
||||
this._timeoutSettings.setDefaultNavigationTimeout(timeout);
|
||||
}
|
||||
setDefaultTimeout(timeout) {
|
||||
this._timeoutSettings.setDefaultTimeout(timeout);
|
||||
}
|
||||
browser() {
|
||||
return this._browser;
|
||||
}
|
||||
pages() {
|
||||
return [...this._pages];
|
||||
}
|
||||
async newPage() {
|
||||
if (this._ownerPage)
|
||||
throw new Error("Please use browser.newContext()");
|
||||
return import_page.Page.from((await this._channel.newPage()).page);
|
||||
}
|
||||
async cookies(urls) {
|
||||
if (!urls)
|
||||
urls = [];
|
||||
if (urls && typeof urls === "string")
|
||||
urls = [urls];
|
||||
return (await this._channel.cookies({ urls })).cookies;
|
||||
}
|
||||
async addCookies(cookies) {
|
||||
await this._channel.addCookies({ cookies });
|
||||
}
|
||||
async clearCookies(options = {}) {
|
||||
await this._channel.clearCookies({
|
||||
name: (0, import_rtti.isString)(options.name) ? options.name : void 0,
|
||||
nameRegexSource: (0, import_rtti.isRegExp)(options.name) ? options.name.source : void 0,
|
||||
nameRegexFlags: (0, import_rtti.isRegExp)(options.name) ? options.name.flags : void 0,
|
||||
domain: (0, import_rtti.isString)(options.domain) ? options.domain : void 0,
|
||||
domainRegexSource: (0, import_rtti.isRegExp)(options.domain) ? options.domain.source : void 0,
|
||||
domainRegexFlags: (0, import_rtti.isRegExp)(options.domain) ? options.domain.flags : void 0,
|
||||
path: (0, import_rtti.isString)(options.path) ? options.path : void 0,
|
||||
pathRegexSource: (0, import_rtti.isRegExp)(options.path) ? options.path.source : void 0,
|
||||
pathRegexFlags: (0, import_rtti.isRegExp)(options.path) ? options.path.flags : void 0
|
||||
});
|
||||
}
|
||||
async grantPermissions(permissions, options) {
|
||||
await this._channel.grantPermissions({ permissions, ...options });
|
||||
}
|
||||
async clearPermissions() {
|
||||
await this._channel.clearPermissions();
|
||||
}
|
||||
async setGeolocation(geolocation) {
|
||||
await this._channel.setGeolocation({ geolocation: geolocation || void 0 });
|
||||
}
|
||||
async setExtraHTTPHeaders(headers) {
|
||||
network.validateHeaders(headers);
|
||||
await this._channel.setExtraHTTPHeaders({ headers: (0, import_headers.headersObjectToArray)(headers) });
|
||||
}
|
||||
async setOffline(offline) {
|
||||
await this._channel.setOffline({ offline });
|
||||
}
|
||||
async setHTTPCredentials(httpCredentials) {
|
||||
await this._channel.setHTTPCredentials({ httpCredentials: httpCredentials || void 0 });
|
||||
}
|
||||
async addInitScript(script, arg) {
|
||||
const source = await (0, import_clientHelper.evaluationScript)(this._platform, script, arg);
|
||||
await this._channel.addInitScript({ source });
|
||||
}
|
||||
async exposeBinding(name, callback, options = {}) {
|
||||
await this._channel.exposeBinding({ name, needsHandle: options.handle });
|
||||
this._bindings.set(name, callback);
|
||||
}
|
||||
async exposeFunction(name, callback) {
|
||||
await this._channel.exposeBinding({ name });
|
||||
const binding = (source, ...args) => callback(...args);
|
||||
this._bindings.set(name, binding);
|
||||
}
|
||||
async route(url, handler, options = {}) {
|
||||
this._routes.unshift(new network.RouteHandler(this._platform, this._options.baseURL, url, handler, options.times));
|
||||
await this._updateInterceptionPatterns({ title: "Route requests" });
|
||||
}
|
||||
async routeWebSocket(url, handler) {
|
||||
this._webSocketRoutes.unshift(new network.WebSocketRouteHandler(this._options.baseURL, url, handler));
|
||||
await this._updateWebSocketInterceptionPatterns({ title: "Route WebSockets" });
|
||||
}
|
||||
async _recordIntoHAR(har, page, options = {}) {
|
||||
const { harId } = await this._channel.harStart({
|
||||
page: page?._channel,
|
||||
options: {
|
||||
zip: har.endsWith(".zip"),
|
||||
content: options.updateContent ?? "attach",
|
||||
urlGlob: (0, import_rtti.isString)(options.url) ? options.url : void 0,
|
||||
urlRegexSource: (0, import_rtti.isRegExp)(options.url) ? options.url.source : void 0,
|
||||
urlRegexFlags: (0, import_rtti.isRegExp)(options.url) ? options.url.flags : void 0,
|
||||
mode: options.updateMode ?? "minimal"
|
||||
}
|
||||
});
|
||||
this._harRecorders.set(harId, { path: har, content: options.updateContent ?? "attach" });
|
||||
}
|
||||
async routeFromHAR(har, options = {}) {
|
||||
const localUtils = this._connection.localUtils();
|
||||
if (!localUtils)
|
||||
throw new Error("Route from har is not supported in thin clients");
|
||||
if (options.update) {
|
||||
await this._recordIntoHAR(har, null, options);
|
||||
return;
|
||||
}
|
||||
const harRouter = await import_harRouter.HarRouter.create(localUtils, har, options.notFound || "abort", { urlMatch: options.url });
|
||||
this._harRouters.push(harRouter);
|
||||
await harRouter.addContextRoute(this);
|
||||
}
|
||||
_disposeHarRouters() {
|
||||
this._harRouters.forEach((router) => router.dispose());
|
||||
this._harRouters = [];
|
||||
}
|
||||
async unrouteAll(options) {
|
||||
await this._unrouteInternal(this._routes, [], options?.behavior);
|
||||
this._disposeHarRouters();
|
||||
}
|
||||
async unroute(url, handler) {
|
||||
const removed = [];
|
||||
const remaining = [];
|
||||
for (const route of this._routes) {
|
||||
if ((0, import_urlMatch.urlMatchesEqual)(route.url, url) && (!handler || route.handler === handler))
|
||||
removed.push(route);
|
||||
else
|
||||
remaining.push(route);
|
||||
}
|
||||
await this._unrouteInternal(removed, remaining, "default");
|
||||
}
|
||||
async _unrouteInternal(removed, remaining, behavior) {
|
||||
this._routes = remaining;
|
||||
if (behavior && behavior !== "default") {
|
||||
const promises = removed.map((routeHandler) => routeHandler.stop(behavior));
|
||||
await Promise.all(promises);
|
||||
}
|
||||
await this._updateInterceptionPatterns({ title: "Unroute requests" });
|
||||
}
|
||||
async _updateInterceptionPatterns(options) {
|
||||
const patterns = network.RouteHandler.prepareInterceptionPatterns(this._routes);
|
||||
await this._wrapApiCall(() => this._channel.setNetworkInterceptionPatterns({ patterns }), options);
|
||||
}
|
||||
async _updateWebSocketInterceptionPatterns(options) {
|
||||
const patterns = network.WebSocketRouteHandler.prepareInterceptionPatterns(this._webSocketRoutes);
|
||||
await this._wrapApiCall(() => this._channel.setWebSocketInterceptionPatterns({ patterns }), options);
|
||||
}
|
||||
_effectiveCloseReason() {
|
||||
return this._closeReason || this._browser?._closeReason;
|
||||
}
|
||||
async waitForEvent(event, optionsOrPredicate = {}) {
|
||||
return await this._wrapApiCall(async () => {
|
||||
const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate === "function" ? {} : optionsOrPredicate);
|
||||
const predicate = typeof optionsOrPredicate === "function" ? optionsOrPredicate : optionsOrPredicate.predicate;
|
||||
const waiter = import_waiter.Waiter.createForEvent(this, event);
|
||||
waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event "${event}"`);
|
||||
if (event !== import_events.Events.BrowserContext.Close)
|
||||
waiter.rejectOnEvent(this, import_events.Events.BrowserContext.Close, () => new import_errors.TargetClosedError(this._effectiveCloseReason()));
|
||||
const result = await waiter.waitForEvent(this, event, predicate);
|
||||
waiter.dispose();
|
||||
return result;
|
||||
});
|
||||
}
|
||||
async storageState(options = {}) {
|
||||
const state = await this._channel.storageState({ indexedDB: options.indexedDB });
|
||||
if (options.path) {
|
||||
await (0, import_fileUtils.mkdirIfNeeded)(this._platform, options.path);
|
||||
await this._platform.fs().promises.writeFile(options.path, JSON.stringify(state, void 0, 2), "utf8");
|
||||
}
|
||||
return state;
|
||||
}
|
||||
backgroundPages() {
|
||||
return [];
|
||||
}
|
||||
serviceWorkers() {
|
||||
return [...this._serviceWorkers];
|
||||
}
|
||||
async newCDPSession(page) {
|
||||
if (!(page instanceof import_page.Page) && !(page instanceof import_frame.Frame))
|
||||
throw new Error("page: expected Page or Frame");
|
||||
const result = await this._channel.newCDPSession(page instanceof import_page.Page ? { page: page._channel } : { frame: page._channel });
|
||||
return import_cdpSession.CDPSession.from(result.session);
|
||||
}
|
||||
_onClose() {
|
||||
this._closingStatus = "closed";
|
||||
this._browser?._contexts.delete(this);
|
||||
this._browser?._browserType._contexts.delete(this);
|
||||
this._browser?._browserType._playwright.selectors._contextsForSelectors.delete(this);
|
||||
this._disposeHarRouters();
|
||||
this.tracing._resetStackCounter();
|
||||
this.emit(import_events.Events.BrowserContext.Close, this);
|
||||
}
|
||||
async [Symbol.asyncDispose]() {
|
||||
await this.close();
|
||||
}
|
||||
async close(options = {}) {
|
||||
if (this._closingStatus !== "none")
|
||||
return;
|
||||
this._closeReason = options.reason;
|
||||
this._closingStatus = "closing";
|
||||
await this.request.dispose(options);
|
||||
await this._instrumentation.runBeforeCloseBrowserContext(this);
|
||||
await this._wrapApiCall(async () => {
|
||||
for (const [harId, harParams] of this._harRecorders) {
|
||||
const har = await this._channel.harExport({ harId });
|
||||
const artifact = import_artifact.Artifact.from(har.artifact);
|
||||
const isCompressed = harParams.content === "attach" || harParams.path.endsWith(".zip");
|
||||
const needCompressed = harParams.path.endsWith(".zip");
|
||||
if (isCompressed && !needCompressed) {
|
||||
const localUtils = this._connection.localUtils();
|
||||
if (!localUtils)
|
||||
throw new Error("Uncompressed har is not supported in thin clients");
|
||||
await artifact.saveAs(harParams.path + ".tmp");
|
||||
await localUtils.harUnzip({ zipFile: harParams.path + ".tmp", harFile: harParams.path });
|
||||
} else {
|
||||
await artifact.saveAs(harParams.path);
|
||||
}
|
||||
await artifact.delete();
|
||||
}
|
||||
}, { internal: true });
|
||||
await this._channel.close(options);
|
||||
await this._closedPromise;
|
||||
}
|
||||
async _enableRecorder(params, eventSink) {
|
||||
if (eventSink)
|
||||
this._onRecorderEventSink = eventSink;
|
||||
await this._channel.enableRecorder(params);
|
||||
}
|
||||
async _disableRecorder() {
|
||||
this._onRecorderEventSink = void 0;
|
||||
await this._channel.disableRecorder();
|
||||
}
|
||||
}
|
||||
async function prepareStorageState(platform, storageState) {
|
||||
if (typeof storageState !== "string")
|
||||
return storageState;
|
||||
try {
|
||||
return JSON.parse(await platform.fs().promises.readFile(storageState, "utf8"));
|
||||
} catch (e) {
|
||||
(0, import_stackTrace.rewriteErrorMessage)(e, `Error reading storage state from ${storageState}:
|
||||
` + e.message);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
async function prepareBrowserContextParams(platform, options) {
|
||||
if (options.videoSize && !options.videosPath)
|
||||
throw new Error(`"videoSize" option requires "videosPath" to be specified`);
|
||||
if (options.extraHTTPHeaders)
|
||||
network.validateHeaders(options.extraHTTPHeaders);
|
||||
const contextParams = {
|
||||
...options,
|
||||
viewport: options.viewport === null ? void 0 : options.viewport,
|
||||
noDefaultViewport: options.viewport === null,
|
||||
extraHTTPHeaders: options.extraHTTPHeaders ? (0, import_headers.headersObjectToArray)(options.extraHTTPHeaders) : void 0,
|
||||
storageState: options.storageState ? await prepareStorageState(platform, options.storageState) : void 0,
|
||||
serviceWorkers: options.serviceWorkers,
|
||||
colorScheme: options.colorScheme === null ? "no-override" : options.colorScheme,
|
||||
reducedMotion: options.reducedMotion === null ? "no-override" : options.reducedMotion,
|
||||
forcedColors: options.forcedColors === null ? "no-override" : options.forcedColors,
|
||||
contrast: options.contrast === null ? "no-override" : options.contrast,
|
||||
acceptDownloads: toAcceptDownloadsProtocol(options.acceptDownloads),
|
||||
clientCertificates: await toClientCertificatesProtocol(platform, options.clientCertificates)
|
||||
};
|
||||
if (!contextParams.recordVideo && options.videosPath) {
|
||||
contextParams.recordVideo = {
|
||||
dir: options.videosPath,
|
||||
size: options.videoSize
|
||||
};
|
||||
}
|
||||
if (contextParams.recordVideo && contextParams.recordVideo.dir)
|
||||
contextParams.recordVideo.dir = platform.path().resolve(contextParams.recordVideo.dir);
|
||||
return contextParams;
|
||||
}
|
||||
function toAcceptDownloadsProtocol(acceptDownloads) {
|
||||
if (acceptDownloads === void 0)
|
||||
return void 0;
|
||||
if (acceptDownloads)
|
||||
return "accept";
|
||||
return "deny";
|
||||
}
|
||||
async function toClientCertificatesProtocol(platform, certs) {
|
||||
if (!certs)
|
||||
return void 0;
|
||||
const bufferizeContent = async (value, path) => {
|
||||
if (value)
|
||||
return value;
|
||||
if (path)
|
||||
return await platform.fs().promises.readFile(path);
|
||||
};
|
||||
return await Promise.all(certs.map(async (cert) => ({
|
||||
origin: cert.origin,
|
||||
cert: await bufferizeContent(cert.cert, cert.certPath),
|
||||
key: await bufferizeContent(cert.key, cert.keyPath),
|
||||
pfx: await bufferizeContent(cert.pfx, cert.pfxPath),
|
||||
passphrase: cert.passphrase
|
||||
})));
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
BrowserContext,
|
||||
prepareBrowserContextParams,
|
||||
toClientCertificatesProtocol
|
||||
});
|
||||
184
node_modules/playwright-core/lib/client/browserType.js
generated
vendored
184
node_modules/playwright-core/lib/client/browserType.js
generated
vendored
@@ -1,184 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var browserType_exports = {};
|
||||
__export(browserType_exports, {
|
||||
BrowserType: () => BrowserType
|
||||
});
|
||||
module.exports = __toCommonJS(browserType_exports);
|
||||
var import_browser = require("./browser");
|
||||
var import_browserContext = require("./browserContext");
|
||||
var import_channelOwner = require("./channelOwner");
|
||||
var import_clientHelper = require("./clientHelper");
|
||||
var import_events = require("./events");
|
||||
var import_assert = require("../utils/isomorphic/assert");
|
||||
var import_headers = require("../utils/isomorphic/headers");
|
||||
var import_time = require("../utils/isomorphic/time");
|
||||
var import_timeoutRunner = require("../utils/isomorphic/timeoutRunner");
|
||||
var import_webSocket = require("./webSocket");
|
||||
var import_timeoutSettings = require("./timeoutSettings");
|
||||
class BrowserType extends import_channelOwner.ChannelOwner {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
this._contexts = /* @__PURE__ */ new Set();
|
||||
}
|
||||
static from(browserType) {
|
||||
return browserType._object;
|
||||
}
|
||||
executablePath() {
|
||||
if (!this._initializer.executablePath)
|
||||
throw new Error("Browser is not supported on current platform");
|
||||
return this._initializer.executablePath;
|
||||
}
|
||||
name() {
|
||||
return this._initializer.name;
|
||||
}
|
||||
async launch(options = {}) {
|
||||
(0, import_assert.assert)(!options.userDataDir, "userDataDir option is not supported in `browserType.launch`. Use `browserType.launchPersistentContext` instead");
|
||||
(0, import_assert.assert)(!options.port, "Cannot specify a port without launching as a server.");
|
||||
const logger = options.logger || this._playwright._defaultLaunchOptions?.logger;
|
||||
options = { ...this._playwright._defaultLaunchOptions, ...options };
|
||||
const launchOptions = {
|
||||
...options,
|
||||
ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : void 0,
|
||||
ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),
|
||||
env: options.env ? (0, import_clientHelper.envObjectToArray)(options.env) : void 0,
|
||||
timeout: new import_timeoutSettings.TimeoutSettings(this._platform).launchTimeout(options)
|
||||
};
|
||||
return await this._wrapApiCall(async () => {
|
||||
const browser = import_browser.Browser.from((await this._channel.launch(launchOptions)).browser);
|
||||
browser._connectToBrowserType(this, options, logger);
|
||||
return browser;
|
||||
});
|
||||
}
|
||||
async launchServer(options = {}) {
|
||||
if (!this._serverLauncher)
|
||||
throw new Error("Launching server is not supported");
|
||||
options = { ...this._playwright._defaultLaunchOptions, ...options };
|
||||
return await this._serverLauncher.launchServer(options);
|
||||
}
|
||||
async launchPersistentContext(userDataDir, options = {}) {
|
||||
const logger = options.logger || this._playwright._defaultLaunchOptions?.logger;
|
||||
(0, import_assert.assert)(!options.port, "Cannot specify a port without launching as a server.");
|
||||
options = this._playwright.selectors._withSelectorOptions({
|
||||
...this._playwright._defaultLaunchOptions,
|
||||
...this._playwright._defaultContextOptions,
|
||||
...options
|
||||
});
|
||||
const contextParams = await (0, import_browserContext.prepareBrowserContextParams)(this._platform, options);
|
||||
const persistentParams = {
|
||||
...contextParams,
|
||||
ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : void 0,
|
||||
ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),
|
||||
env: options.env ? (0, import_clientHelper.envObjectToArray)(options.env) : void 0,
|
||||
channel: options.channel,
|
||||
userDataDir: this._platform.path().isAbsolute(userDataDir) || !userDataDir ? userDataDir : this._platform.path().resolve(userDataDir),
|
||||
timeout: new import_timeoutSettings.TimeoutSettings(this._platform).launchTimeout(options)
|
||||
};
|
||||
const context = await this._wrapApiCall(async () => {
|
||||
const result = await this._channel.launchPersistentContext(persistentParams);
|
||||
const browser = import_browser.Browser.from(result.browser);
|
||||
browser._connectToBrowserType(this, options, logger);
|
||||
const context2 = import_browserContext.BrowserContext.from(result.context);
|
||||
await context2._initializeHarFromOptions(options.recordHar);
|
||||
return context2;
|
||||
});
|
||||
await this._instrumentation.runAfterCreateBrowserContext(context);
|
||||
return context;
|
||||
}
|
||||
async connect(optionsOrWsEndpoint, options) {
|
||||
if (typeof optionsOrWsEndpoint === "string")
|
||||
return await this._connect({ ...options, wsEndpoint: optionsOrWsEndpoint });
|
||||
(0, import_assert.assert)(optionsOrWsEndpoint.wsEndpoint, "options.wsEndpoint is required");
|
||||
return await this._connect(optionsOrWsEndpoint);
|
||||
}
|
||||
async _connect(params) {
|
||||
const logger = params.logger;
|
||||
return await this._wrapApiCall(async () => {
|
||||
const deadline = params.timeout ? (0, import_time.monotonicTime)() + params.timeout : 0;
|
||||
const headers = { "x-playwright-browser": this.name(), ...params.headers };
|
||||
const connectParams = {
|
||||
wsEndpoint: params.wsEndpoint,
|
||||
headers,
|
||||
exposeNetwork: params.exposeNetwork ?? params._exposeNetwork,
|
||||
slowMo: params.slowMo,
|
||||
timeout: params.timeout || 0
|
||||
};
|
||||
if (params.__testHookRedirectPortForwarding)
|
||||
connectParams.socksProxyRedirectPortForTest = params.__testHookRedirectPortForwarding;
|
||||
const connection = await (0, import_webSocket.connectOverWebSocket)(this._connection, connectParams);
|
||||
let browser;
|
||||
connection.on("close", () => {
|
||||
for (const context of browser?.contexts() || []) {
|
||||
for (const page of context.pages())
|
||||
page._onClose();
|
||||
context._onClose();
|
||||
}
|
||||
setTimeout(() => browser?._didClose(), 0);
|
||||
});
|
||||
const result = await (0, import_timeoutRunner.raceAgainstDeadline)(async () => {
|
||||
if (params.__testHookBeforeCreateBrowser)
|
||||
await params.__testHookBeforeCreateBrowser();
|
||||
const playwright = await connection.initializePlaywright();
|
||||
if (!playwright._initializer.preLaunchedBrowser) {
|
||||
connection.close();
|
||||
throw new Error("Malformed endpoint. Did you use BrowserType.launchServer method?");
|
||||
}
|
||||
playwright.selectors = this._playwright.selectors;
|
||||
browser = import_browser.Browser.from(playwright._initializer.preLaunchedBrowser);
|
||||
browser._connectToBrowserType(this, {}, logger);
|
||||
browser._shouldCloseConnectionOnClose = true;
|
||||
browser.on(import_events.Events.Browser.Disconnected, () => connection.close());
|
||||
return browser;
|
||||
}, deadline);
|
||||
if (!result.timedOut) {
|
||||
return result.result;
|
||||
} else {
|
||||
connection.close();
|
||||
throw new Error(`Timeout ${params.timeout}ms exceeded`);
|
||||
}
|
||||
});
|
||||
}
|
||||
async connectOverCDP(endpointURLOrOptions, options) {
|
||||
if (typeof endpointURLOrOptions === "string")
|
||||
return await this._connectOverCDP(endpointURLOrOptions, options);
|
||||
const endpointURL = "endpointURL" in endpointURLOrOptions ? endpointURLOrOptions.endpointURL : endpointURLOrOptions.wsEndpoint;
|
||||
(0, import_assert.assert)(endpointURL, "Cannot connect over CDP without wsEndpoint.");
|
||||
return await this.connectOverCDP(endpointURL, endpointURLOrOptions);
|
||||
}
|
||||
async _connectOverCDP(endpointURL, params = {}) {
|
||||
if (this.name() !== "chromium")
|
||||
throw new Error("Connecting over CDP is only supported in Chromium.");
|
||||
const headers = params.headers ? (0, import_headers.headersObjectToArray)(params.headers) : void 0;
|
||||
const result = await this._channel.connectOverCDP({
|
||||
endpointURL,
|
||||
headers,
|
||||
slowMo: params.slowMo,
|
||||
timeout: new import_timeoutSettings.TimeoutSettings(this._platform).timeout(params)
|
||||
});
|
||||
const browser = import_browser.Browser.from(result.browser);
|
||||
browser._connectToBrowserType(this, {}, params.logger);
|
||||
if (result.defaultContext)
|
||||
await this._instrumentation.runAfterCreateBrowserContext(import_browserContext.BrowserContext.from(result.defaultContext));
|
||||
return browser;
|
||||
}
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
BrowserType
|
||||
});
|
||||
51
node_modules/playwright-core/lib/client/cdpSession.js
generated
vendored
51
node_modules/playwright-core/lib/client/cdpSession.js
generated
vendored
@@ -1,51 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var cdpSession_exports = {};
|
||||
__export(cdpSession_exports, {
|
||||
CDPSession: () => CDPSession
|
||||
});
|
||||
module.exports = __toCommonJS(cdpSession_exports);
|
||||
var import_channelOwner = require("./channelOwner");
|
||||
class CDPSession extends import_channelOwner.ChannelOwner {
|
||||
static from(cdpSession) {
|
||||
return cdpSession._object;
|
||||
}
|
||||
constructor(parent, type, guid, initializer) {
|
||||
super(parent, type, guid, initializer);
|
||||
this._channel.on("event", ({ method, params }) => {
|
||||
this.emit(method, params);
|
||||
});
|
||||
this.on = super.on;
|
||||
this.addListener = super.addListener;
|
||||
this.off = super.removeListener;
|
||||
this.removeListener = super.removeListener;
|
||||
this.once = super.once;
|
||||
}
|
||||
async send(method, params) {
|
||||
const result = await this._channel.send({ method, params });
|
||||
return result.result;
|
||||
}
|
||||
async detach() {
|
||||
return await this._channel.detach();
|
||||
}
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
CDPSession
|
||||
});
|
||||
194
node_modules/playwright-core/lib/client/channelOwner.js
generated
vendored
194
node_modules/playwright-core/lib/client/channelOwner.js
generated
vendored
@@ -1,194 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var channelOwner_exports = {};
|
||||
__export(channelOwner_exports, {
|
||||
ChannelOwner: () => ChannelOwner
|
||||
});
|
||||
module.exports = __toCommonJS(channelOwner_exports);
|
||||
var import_eventEmitter = require("./eventEmitter");
|
||||
var import_validator = require("../protocol/validator");
|
||||
var import_protocolMetainfo = require("../utils/isomorphic/protocolMetainfo");
|
||||
var import_clientStackTrace = require("./clientStackTrace");
|
||||
var import_stackTrace = require("../utils/isomorphic/stackTrace");
|
||||
class ChannelOwner extends import_eventEmitter.EventEmitter {
|
||||
constructor(parent, type, guid, initializer) {
|
||||
const connection = parent instanceof ChannelOwner ? parent._connection : parent;
|
||||
super(connection._platform);
|
||||
this._objects = /* @__PURE__ */ new Map();
|
||||
this._eventToSubscriptionMapping = /* @__PURE__ */ new Map();
|
||||
this._wasCollected = false;
|
||||
this.setMaxListeners(0);
|
||||
this._connection = connection;
|
||||
this._type = type;
|
||||
this._guid = guid;
|
||||
this._parent = parent instanceof ChannelOwner ? parent : void 0;
|
||||
this._instrumentation = this._connection._instrumentation;
|
||||
this._connection._objects.set(guid, this);
|
||||
if (this._parent) {
|
||||
this._parent._objects.set(guid, this);
|
||||
this._logger = this._parent._logger;
|
||||
}
|
||||
this._channel = this._createChannel(new import_eventEmitter.EventEmitter(connection._platform));
|
||||
this._initializer = initializer;
|
||||
}
|
||||
_setEventToSubscriptionMapping(mapping) {
|
||||
this._eventToSubscriptionMapping = mapping;
|
||||
}
|
||||
_updateSubscription(event, enabled) {
|
||||
const protocolEvent = this._eventToSubscriptionMapping.get(String(event));
|
||||
if (protocolEvent)
|
||||
this._channel.updateSubscription({ event: protocolEvent, enabled }).catch(() => {
|
||||
});
|
||||
}
|
||||
on(event, listener) {
|
||||
if (!this.listenerCount(event))
|
||||
this._updateSubscription(event, true);
|
||||
super.on(event, listener);
|
||||
return this;
|
||||
}
|
||||
addListener(event, listener) {
|
||||
if (!this.listenerCount(event))
|
||||
this._updateSubscription(event, true);
|
||||
super.addListener(event, listener);
|
||||
return this;
|
||||
}
|
||||
prependListener(event, listener) {
|
||||
if (!this.listenerCount(event))
|
||||
this._updateSubscription(event, true);
|
||||
super.prependListener(event, listener);
|
||||
return this;
|
||||
}
|
||||
off(event, listener) {
|
||||
super.off(event, listener);
|
||||
if (!this.listenerCount(event))
|
||||
this._updateSubscription(event, false);
|
||||
return this;
|
||||
}
|
||||
removeListener(event, listener) {
|
||||
super.removeListener(event, listener);
|
||||
if (!this.listenerCount(event))
|
||||
this._updateSubscription(event, false);
|
||||
return this;
|
||||
}
|
||||
_adopt(child) {
|
||||
child._parent._objects.delete(child._guid);
|
||||
this._objects.set(child._guid, child);
|
||||
child._parent = this;
|
||||
}
|
||||
_dispose(reason) {
|
||||
if (this._parent)
|
||||
this._parent._objects.delete(this._guid);
|
||||
this._connection._objects.delete(this._guid);
|
||||
this._wasCollected = reason === "gc";
|
||||
for (const object of [...this._objects.values()])
|
||||
object._dispose(reason);
|
||||
this._objects.clear();
|
||||
}
|
||||
_debugScopeState() {
|
||||
return {
|
||||
_guid: this._guid,
|
||||
objects: Array.from(this._objects.values()).map((o) => o._debugScopeState())
|
||||
};
|
||||
}
|
||||
_validatorToWireContext() {
|
||||
return {
|
||||
tChannelImpl: tChannelImplToWire,
|
||||
binary: this._connection.rawBuffers() ? "buffer" : "toBase64",
|
||||
isUnderTest: () => this._platform.isUnderTest()
|
||||
};
|
||||
}
|
||||
_createChannel(base) {
|
||||
const channel = new Proxy(base, {
|
||||
get: (obj, prop) => {
|
||||
if (typeof prop === "string") {
|
||||
const validator = (0, import_validator.maybeFindValidator)(this._type, prop, "Params");
|
||||
const { internal } = import_protocolMetainfo.methodMetainfo.get(this._type + "." + prop) || {};
|
||||
if (validator) {
|
||||
return async (params) => {
|
||||
return await this._wrapApiCall(async (apiZone) => {
|
||||
const validatedParams = validator(params, "", this._validatorToWireContext());
|
||||
if (!apiZone.internal && !apiZone.reported) {
|
||||
apiZone.reported = true;
|
||||
this._instrumentation.onApiCallBegin(apiZone, { type: this._type, method: prop, params });
|
||||
logApiCall(this._platform, this._logger, `=> ${apiZone.apiName} started`);
|
||||
return await this._connection.sendMessageToServer(this, prop, validatedParams, apiZone);
|
||||
}
|
||||
return await this._connection.sendMessageToServer(this, prop, validatedParams, { internal: true });
|
||||
}, { internal });
|
||||
};
|
||||
}
|
||||
}
|
||||
return obj[prop];
|
||||
}
|
||||
});
|
||||
channel._object = this;
|
||||
return channel;
|
||||
}
|
||||
async _wrapApiCall(func, options) {
|
||||
const logger = this._logger;
|
||||
const existingApiZone = this._platform.zones.current().data();
|
||||
if (existingApiZone)
|
||||
return await func(existingApiZone);
|
||||
const stackTrace = (0, import_clientStackTrace.captureLibraryStackTrace)(this._platform);
|
||||
const apiZone = { title: options?.title, apiName: stackTrace.apiName, frames: stackTrace.frames, internal: options?.internal ?? false, reported: false, userData: void 0, stepId: void 0 };
|
||||
try {
|
||||
const result = await this._platform.zones.current().push(apiZone).run(async () => await func(apiZone));
|
||||
if (!options?.internal) {
|
||||
logApiCall(this._platform, logger, `<= ${apiZone.apiName} succeeded`);
|
||||
this._instrumentation.onApiCallEnd(apiZone);
|
||||
}
|
||||
return result;
|
||||
} catch (e) {
|
||||
const innerError = (this._platform.showInternalStackFrames() || this._platform.isUnderTest()) && e.stack ? "\n<inner error>\n" + e.stack : "";
|
||||
if (apiZone.apiName && !apiZone.apiName.includes("<anonymous>"))
|
||||
e.message = apiZone.apiName + ": " + e.message;
|
||||
const stackFrames = "\n" + (0, import_stackTrace.stringifyStackFrames)(stackTrace.frames).join("\n") + innerError;
|
||||
if (stackFrames.trim())
|
||||
e.stack = e.message + stackFrames;
|
||||
else
|
||||
e.stack = "";
|
||||
if (!options?.internal) {
|
||||
apiZone.error = e;
|
||||
logApiCall(this._platform, logger, `<= ${apiZone.apiName} failed`);
|
||||
this._instrumentation.onApiCallEnd(apiZone);
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
toJSON() {
|
||||
return {
|
||||
_type: this._type,
|
||||
_guid: this._guid
|
||||
};
|
||||
}
|
||||
}
|
||||
function logApiCall(platform, logger, message) {
|
||||
if (logger && logger.isEnabled("api", "info"))
|
||||
logger.log("api", "info", message, [], { color: "cyan" });
|
||||
platform.log("api", message);
|
||||
}
|
||||
function tChannelImplToWire(names, arg, path, context) {
|
||||
if (arg._object instanceof ChannelOwner && (names === "*" || names.includes(arg._object._type)))
|
||||
return { guid: arg._object._guid };
|
||||
throw new import_validator.ValidationError(`${path}: expected channel ${names.toString()}`);
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
ChannelOwner
|
||||
});
|
||||
64
node_modules/playwright-core/lib/client/clientHelper.js
generated
vendored
64
node_modules/playwright-core/lib/client/clientHelper.js
generated
vendored
@@ -1,64 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var clientHelper_exports = {};
|
||||
__export(clientHelper_exports, {
|
||||
addSourceUrlToScript: () => addSourceUrlToScript,
|
||||
envObjectToArray: () => envObjectToArray,
|
||||
evaluationScript: () => evaluationScript
|
||||
});
|
||||
module.exports = __toCommonJS(clientHelper_exports);
|
||||
var import_rtti = require("../utils/isomorphic/rtti");
|
||||
function envObjectToArray(env) {
|
||||
const result = [];
|
||||
for (const name in env) {
|
||||
if (!Object.is(env[name], void 0))
|
||||
result.push({ name, value: String(env[name]) });
|
||||
}
|
||||
return result;
|
||||
}
|
||||
async function evaluationScript(platform, fun, arg, addSourceUrl = true) {
|
||||
if (typeof fun === "function") {
|
||||
const source = fun.toString();
|
||||
const argString = Object.is(arg, void 0) ? "undefined" : JSON.stringify(arg);
|
||||
return `(${source})(${argString})`;
|
||||
}
|
||||
if (arg !== void 0)
|
||||
throw new Error("Cannot evaluate a string with arguments");
|
||||
if ((0, import_rtti.isString)(fun))
|
||||
return fun;
|
||||
if (fun.content !== void 0)
|
||||
return fun.content;
|
||||
if (fun.path !== void 0) {
|
||||
let source = await platform.fs().promises.readFile(fun.path, "utf8");
|
||||
if (addSourceUrl)
|
||||
source = addSourceUrlToScript(source, fun.path);
|
||||
return source;
|
||||
}
|
||||
throw new Error("Either path or content property must be present");
|
||||
}
|
||||
function addSourceUrlToScript(source, path) {
|
||||
return `${source}
|
||||
//# sourceURL=${path.replace(/\n/g, "")}`;
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
addSourceUrlToScript,
|
||||
envObjectToArray,
|
||||
evaluationScript
|
||||
});
|
||||
55
node_modules/playwright-core/lib/client/clientInstrumentation.js
generated
vendored
55
node_modules/playwright-core/lib/client/clientInstrumentation.js
generated
vendored
@@ -1,55 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var clientInstrumentation_exports = {};
|
||||
__export(clientInstrumentation_exports, {
|
||||
createInstrumentation: () => createInstrumentation
|
||||
});
|
||||
module.exports = __toCommonJS(clientInstrumentation_exports);
|
||||
function createInstrumentation() {
|
||||
const listeners = [];
|
||||
return new Proxy({}, {
|
||||
get: (obj, prop) => {
|
||||
if (typeof prop !== "string")
|
||||
return obj[prop];
|
||||
if (prop === "addListener")
|
||||
return (listener) => listeners.push(listener);
|
||||
if (prop === "removeListener")
|
||||
return (listener) => listeners.splice(listeners.indexOf(listener), 1);
|
||||
if (prop === "removeAllListeners")
|
||||
return () => listeners.splice(0, listeners.length);
|
||||
if (prop.startsWith("run")) {
|
||||
return async (...params) => {
|
||||
for (const listener of listeners)
|
||||
await listener[prop]?.(...params);
|
||||
};
|
||||
}
|
||||
if (prop.startsWith("on")) {
|
||||
return (...params) => {
|
||||
for (const listener of listeners)
|
||||
listener[prop]?.(...params);
|
||||
};
|
||||
}
|
||||
return obj[prop];
|
||||
}
|
||||
});
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
createInstrumentation
|
||||
});
|
||||
69
node_modules/playwright-core/lib/client/clientStackTrace.js
generated
vendored
69
node_modules/playwright-core/lib/client/clientStackTrace.js
generated
vendored
@@ -1,69 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var clientStackTrace_exports = {};
|
||||
__export(clientStackTrace_exports, {
|
||||
captureLibraryStackTrace: () => captureLibraryStackTrace
|
||||
});
|
||||
module.exports = __toCommonJS(clientStackTrace_exports);
|
||||
var import_stackTrace = require("../utils/isomorphic/stackTrace");
|
||||
function captureLibraryStackTrace(platform) {
|
||||
const stack = (0, import_stackTrace.captureRawStack)();
|
||||
let parsedFrames = stack.map((line) => {
|
||||
const frame = (0, import_stackTrace.parseStackFrame)(line, platform.pathSeparator, platform.showInternalStackFrames());
|
||||
if (!frame || !frame.file)
|
||||
return null;
|
||||
const isPlaywrightLibrary = !!platform.coreDir && frame.file.startsWith(platform.coreDir);
|
||||
const parsed = {
|
||||
frame,
|
||||
frameText: line,
|
||||
isPlaywrightLibrary
|
||||
};
|
||||
return parsed;
|
||||
}).filter(Boolean);
|
||||
let apiName = "";
|
||||
for (let i = 0; i < parsedFrames.length - 1; i++) {
|
||||
const parsedFrame = parsedFrames[i];
|
||||
if (parsedFrame.isPlaywrightLibrary && !parsedFrames[i + 1].isPlaywrightLibrary) {
|
||||
apiName = apiName || normalizeAPIName(parsedFrame.frame.function);
|
||||
break;
|
||||
}
|
||||
}
|
||||
function normalizeAPIName(name) {
|
||||
if (!name)
|
||||
return "";
|
||||
const match = name.match(/(API|JS|CDP|[A-Z])(.*)/);
|
||||
if (!match)
|
||||
return name;
|
||||
return match[1].toLowerCase() + match[2];
|
||||
}
|
||||
const filterPrefixes = platform.boxedStackPrefixes();
|
||||
parsedFrames = parsedFrames.filter((f) => {
|
||||
if (filterPrefixes.some((prefix) => f.frame.file.startsWith(prefix)))
|
||||
return false;
|
||||
return true;
|
||||
});
|
||||
return {
|
||||
frames: parsedFrames.map((p) => p.frame),
|
||||
apiName
|
||||
};
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
captureLibraryStackTrace
|
||||
});
|
||||
68
node_modules/playwright-core/lib/client/clock.js
generated
vendored
68
node_modules/playwright-core/lib/client/clock.js
generated
vendored
@@ -1,68 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var clock_exports = {};
|
||||
__export(clock_exports, {
|
||||
Clock: () => Clock
|
||||
});
|
||||
module.exports = __toCommonJS(clock_exports);
|
||||
class Clock {
|
||||
constructor(browserContext) {
|
||||
this._browserContext = browserContext;
|
||||
}
|
||||
async install(options = {}) {
|
||||
await this._browserContext._channel.clockInstall(options.time !== void 0 ? parseTime(options.time) : {});
|
||||
}
|
||||
async fastForward(ticks) {
|
||||
await this._browserContext._channel.clockFastForward(parseTicks(ticks));
|
||||
}
|
||||
async pauseAt(time) {
|
||||
await this._browserContext._channel.clockPauseAt(parseTime(time));
|
||||
}
|
||||
async resume() {
|
||||
await this._browserContext._channel.clockResume({});
|
||||
}
|
||||
async runFor(ticks) {
|
||||
await this._browserContext._channel.clockRunFor(parseTicks(ticks));
|
||||
}
|
||||
async setFixedTime(time) {
|
||||
await this._browserContext._channel.clockSetFixedTime(parseTime(time));
|
||||
}
|
||||
async setSystemTime(time) {
|
||||
await this._browserContext._channel.clockSetSystemTime(parseTime(time));
|
||||
}
|
||||
}
|
||||
function parseTime(time) {
|
||||
if (typeof time === "number")
|
||||
return { timeNumber: time };
|
||||
if (typeof time === "string")
|
||||
return { timeString: time };
|
||||
if (!isFinite(time.getTime()))
|
||||
throw new Error(`Invalid date: ${time}`);
|
||||
return { timeNumber: time.getTime() };
|
||||
}
|
||||
function parseTicks(ticks) {
|
||||
return {
|
||||
ticksNumber: typeof ticks === "number" ? ticks : void 0,
|
||||
ticksString: typeof ticks === "string" ? ticks : void 0
|
||||
};
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
Clock
|
||||
});
|
||||
314
node_modules/playwright-core/lib/client/connection.js
generated
vendored
314
node_modules/playwright-core/lib/client/connection.js
generated
vendored
@@ -1,314 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var connection_exports = {};
|
||||
__export(connection_exports, {
|
||||
Connection: () => Connection
|
||||
});
|
||||
module.exports = __toCommonJS(connection_exports);
|
||||
var import_eventEmitter = require("./eventEmitter");
|
||||
var import_android = require("./android");
|
||||
var import_artifact = require("./artifact");
|
||||
var import_browser = require("./browser");
|
||||
var import_browserContext = require("./browserContext");
|
||||
var import_browserType = require("./browserType");
|
||||
var import_cdpSession = require("./cdpSession");
|
||||
var import_channelOwner = require("./channelOwner");
|
||||
var import_clientInstrumentation = require("./clientInstrumentation");
|
||||
var import_dialog = require("./dialog");
|
||||
var import_electron = require("./electron");
|
||||
var import_elementHandle = require("./elementHandle");
|
||||
var import_errors = require("./errors");
|
||||
var import_fetch = require("./fetch");
|
||||
var import_frame = require("./frame");
|
||||
var import_jsHandle = require("./jsHandle");
|
||||
var import_jsonPipe = require("./jsonPipe");
|
||||
var import_localUtils = require("./localUtils");
|
||||
var import_network = require("./network");
|
||||
var import_page = require("./page");
|
||||
var import_playwright = require("./playwright");
|
||||
var import_stream = require("./stream");
|
||||
var import_tracing = require("./tracing");
|
||||
var import_worker = require("./worker");
|
||||
var import_writableStream = require("./writableStream");
|
||||
var import_validator = require("../protocol/validator");
|
||||
var import_stackTrace = require("../utils/isomorphic/stackTrace");
|
||||
class Root extends import_channelOwner.ChannelOwner {
|
||||
constructor(connection) {
|
||||
super(connection, "Root", "", {});
|
||||
}
|
||||
async initialize() {
|
||||
return import_playwright.Playwright.from((await this._channel.initialize({
|
||||
sdkLanguage: "javascript"
|
||||
})).playwright);
|
||||
}
|
||||
}
|
||||
class DummyChannelOwner extends import_channelOwner.ChannelOwner {
|
||||
}
|
||||
class Connection extends import_eventEmitter.EventEmitter {
|
||||
constructor(platform, localUtils, instrumentation, headers = []) {
|
||||
super(platform);
|
||||
this._objects = /* @__PURE__ */ new Map();
|
||||
this.onmessage = (message) => {
|
||||
};
|
||||
this._lastId = 0;
|
||||
this._callbacks = /* @__PURE__ */ new Map();
|
||||
this._isRemote = false;
|
||||
this._rawBuffers = false;
|
||||
this._tracingCount = 0;
|
||||
this._instrumentation = instrumentation || (0, import_clientInstrumentation.createInstrumentation)();
|
||||
this._localUtils = localUtils;
|
||||
this._rootObject = new Root(this);
|
||||
this.headers = headers;
|
||||
}
|
||||
markAsRemote() {
|
||||
this._isRemote = true;
|
||||
}
|
||||
isRemote() {
|
||||
return this._isRemote;
|
||||
}
|
||||
useRawBuffers() {
|
||||
this._rawBuffers = true;
|
||||
}
|
||||
rawBuffers() {
|
||||
return this._rawBuffers;
|
||||
}
|
||||
localUtils() {
|
||||
return this._localUtils;
|
||||
}
|
||||
async initializePlaywright() {
|
||||
return await this._rootObject.initialize();
|
||||
}
|
||||
getObjectWithKnownName(guid) {
|
||||
return this._objects.get(guid);
|
||||
}
|
||||
setIsTracing(isTracing) {
|
||||
if (isTracing)
|
||||
this._tracingCount++;
|
||||
else
|
||||
this._tracingCount--;
|
||||
}
|
||||
async sendMessageToServer(object, method, params, options) {
|
||||
if (this._closedError)
|
||||
throw this._closedError;
|
||||
if (object._wasCollected)
|
||||
throw new Error("The object has been collected to prevent unbounded heap growth.");
|
||||
const guid = object._guid;
|
||||
const type = object._type;
|
||||
const id = ++this._lastId;
|
||||
const message = { id, guid, method, params };
|
||||
if (this._platform.isLogEnabled("channel")) {
|
||||
this._platform.log("channel", "SEND> " + JSON.stringify(message));
|
||||
}
|
||||
const location = options.frames?.[0] ? { file: options.frames[0].file, line: options.frames[0].line, column: options.frames[0].column } : void 0;
|
||||
const metadata = { title: options.title, location, internal: options.internal, stepId: options.stepId };
|
||||
if (this._tracingCount && options.frames && type !== "LocalUtils")
|
||||
this._localUtils?.addStackToTracingNoReply({ callData: { stack: options.frames ?? [], id } }).catch(() => {
|
||||
});
|
||||
this._platform.zones.empty.run(() => this.onmessage({ ...message, metadata }));
|
||||
return await new Promise((resolve, reject) => this._callbacks.set(id, { resolve, reject, title: options.title, type, method }));
|
||||
}
|
||||
_validatorFromWireContext() {
|
||||
return {
|
||||
tChannelImpl: this._tChannelImplFromWire.bind(this),
|
||||
binary: this._rawBuffers ? "buffer" : "fromBase64",
|
||||
isUnderTest: () => this._platform.isUnderTest()
|
||||
};
|
||||
}
|
||||
dispatch(message) {
|
||||
if (this._closedError)
|
||||
return;
|
||||
const { id, guid, method, params, result, error, log } = message;
|
||||
if (id) {
|
||||
if (this._platform.isLogEnabled("channel"))
|
||||
this._platform.log("channel", "<RECV " + JSON.stringify(message));
|
||||
const callback = this._callbacks.get(id);
|
||||
if (!callback)
|
||||
throw new Error(`Cannot find command to respond: ${id}`);
|
||||
this._callbacks.delete(id);
|
||||
if (error && !result) {
|
||||
const parsedError = (0, import_errors.parseError)(error);
|
||||
(0, import_stackTrace.rewriteErrorMessage)(parsedError, parsedError.message + formatCallLog(this._platform, log));
|
||||
callback.reject(parsedError);
|
||||
} else {
|
||||
const validator2 = (0, import_validator.findValidator)(callback.type, callback.method, "Result");
|
||||
callback.resolve(validator2(result, "", this._validatorFromWireContext()));
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (this._platform.isLogEnabled("channel"))
|
||||
this._platform.log("channel", "<EVENT " + JSON.stringify(message));
|
||||
if (method === "__create__") {
|
||||
this._createRemoteObject(guid, params.type, params.guid, params.initializer);
|
||||
return;
|
||||
}
|
||||
const object = this._objects.get(guid);
|
||||
if (!object)
|
||||
throw new Error(`Cannot find object to "${method}": ${guid}`);
|
||||
if (method === "__adopt__") {
|
||||
const child = this._objects.get(params.guid);
|
||||
if (!child)
|
||||
throw new Error(`Unknown new child: ${params.guid}`);
|
||||
object._adopt(child);
|
||||
return;
|
||||
}
|
||||
if (method === "__dispose__") {
|
||||
object._dispose(params.reason);
|
||||
return;
|
||||
}
|
||||
const validator = (0, import_validator.findValidator)(object._type, method, "Event");
|
||||
object._channel.emit(method, validator(params, "", this._validatorFromWireContext()));
|
||||
}
|
||||
close(cause) {
|
||||
if (this._closedError)
|
||||
return;
|
||||
this._closedError = new import_errors.TargetClosedError(cause);
|
||||
for (const callback of this._callbacks.values())
|
||||
callback.reject(this._closedError);
|
||||
this._callbacks.clear();
|
||||
this.emit("close");
|
||||
}
|
||||
_tChannelImplFromWire(names, arg, path, context) {
|
||||
if (arg && typeof arg === "object" && typeof arg.guid === "string") {
|
||||
const object = this._objects.get(arg.guid);
|
||||
if (!object)
|
||||
throw new Error(`Object with guid ${arg.guid} was not bound in the connection`);
|
||||
if (names !== "*" && !names.includes(object._type))
|
||||
throw new import_validator.ValidationError(`${path}: expected channel ${names.toString()}`);
|
||||
return object._channel;
|
||||
}
|
||||
throw new import_validator.ValidationError(`${path}: expected channel ${names.toString()}`);
|
||||
}
|
||||
_createRemoteObject(parentGuid, type, guid, initializer) {
|
||||
const parent = this._objects.get(parentGuid);
|
||||
if (!parent)
|
||||
throw new Error(`Cannot find parent object ${parentGuid} to create ${guid}`);
|
||||
let result;
|
||||
const validator = (0, import_validator.findValidator)(type, "", "Initializer");
|
||||
initializer = validator(initializer, "", this._validatorFromWireContext());
|
||||
switch (type) {
|
||||
case "Android":
|
||||
result = new import_android.Android(parent, type, guid, initializer);
|
||||
break;
|
||||
case "AndroidSocket":
|
||||
result = new import_android.AndroidSocket(parent, type, guid, initializer);
|
||||
break;
|
||||
case "AndroidDevice":
|
||||
result = new import_android.AndroidDevice(parent, type, guid, initializer);
|
||||
break;
|
||||
case "APIRequestContext":
|
||||
result = new import_fetch.APIRequestContext(parent, type, guid, initializer);
|
||||
break;
|
||||
case "Artifact":
|
||||
result = new import_artifact.Artifact(parent, type, guid, initializer);
|
||||
break;
|
||||
case "BindingCall":
|
||||
result = new import_page.BindingCall(parent, type, guid, initializer);
|
||||
break;
|
||||
case "Browser":
|
||||
result = new import_browser.Browser(parent, type, guid, initializer);
|
||||
break;
|
||||
case "BrowserContext":
|
||||
result = new import_browserContext.BrowserContext(parent, type, guid, initializer);
|
||||
break;
|
||||
case "BrowserType":
|
||||
result = new import_browserType.BrowserType(parent, type, guid, initializer);
|
||||
break;
|
||||
case "CDPSession":
|
||||
result = new import_cdpSession.CDPSession(parent, type, guid, initializer);
|
||||
break;
|
||||
case "Dialog":
|
||||
result = new import_dialog.Dialog(parent, type, guid, initializer);
|
||||
break;
|
||||
case "Electron":
|
||||
result = new import_electron.Electron(parent, type, guid, initializer);
|
||||
break;
|
||||
case "ElectronApplication":
|
||||
result = new import_electron.ElectronApplication(parent, type, guid, initializer);
|
||||
break;
|
||||
case "ElementHandle":
|
||||
result = new import_elementHandle.ElementHandle(parent, type, guid, initializer);
|
||||
break;
|
||||
case "Frame":
|
||||
result = new import_frame.Frame(parent, type, guid, initializer);
|
||||
break;
|
||||
case "JSHandle":
|
||||
result = new import_jsHandle.JSHandle(parent, type, guid, initializer);
|
||||
break;
|
||||
case "JsonPipe":
|
||||
result = new import_jsonPipe.JsonPipe(parent, type, guid, initializer);
|
||||
break;
|
||||
case "LocalUtils":
|
||||
result = new import_localUtils.LocalUtils(parent, type, guid, initializer);
|
||||
if (!this._localUtils)
|
||||
this._localUtils = result;
|
||||
break;
|
||||
case "Page":
|
||||
result = new import_page.Page(parent, type, guid, initializer);
|
||||
break;
|
||||
case "Playwright":
|
||||
result = new import_playwright.Playwright(parent, type, guid, initializer);
|
||||
break;
|
||||
case "Request":
|
||||
result = new import_network.Request(parent, type, guid, initializer);
|
||||
break;
|
||||
case "Response":
|
||||
result = new import_network.Response(parent, type, guid, initializer);
|
||||
break;
|
||||
case "Route":
|
||||
result = new import_network.Route(parent, type, guid, initializer);
|
||||
break;
|
||||
case "Stream":
|
||||
result = new import_stream.Stream(parent, type, guid, initializer);
|
||||
break;
|
||||
case "SocksSupport":
|
||||
result = new DummyChannelOwner(parent, type, guid, initializer);
|
||||
break;
|
||||
case "Tracing":
|
||||
result = new import_tracing.Tracing(parent, type, guid, initializer);
|
||||
break;
|
||||
case "WebSocket":
|
||||
result = new import_network.WebSocket(parent, type, guid, initializer);
|
||||
break;
|
||||
case "WebSocketRoute":
|
||||
result = new import_network.WebSocketRoute(parent, type, guid, initializer);
|
||||
break;
|
||||
case "Worker":
|
||||
result = new import_worker.Worker(parent, type, guid, initializer);
|
||||
break;
|
||||
case "WritableStream":
|
||||
result = new import_writableStream.WritableStream(parent, type, guid, initializer);
|
||||
break;
|
||||
default:
|
||||
throw new Error("Missing type " + type);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
function formatCallLog(platform, log) {
|
||||
if (!log || !log.some((l) => !!l))
|
||||
return "";
|
||||
return `
|
||||
Call log:
|
||||
${platform.colors.dim(log.join("\n"))}
|
||||
`;
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
Connection
|
||||
});
|
||||
58
node_modules/playwright-core/lib/client/consoleMessage.js
generated
vendored
58
node_modules/playwright-core/lib/client/consoleMessage.js
generated
vendored
@@ -1,58 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var consoleMessage_exports = {};
|
||||
__export(consoleMessage_exports, {
|
||||
ConsoleMessage: () => ConsoleMessage
|
||||
});
|
||||
module.exports = __toCommonJS(consoleMessage_exports);
|
||||
var import_jsHandle = require("./jsHandle");
|
||||
class ConsoleMessage {
|
||||
constructor(platform, event, page, worker) {
|
||||
this._page = page;
|
||||
this._worker = worker;
|
||||
this._event = event;
|
||||
if (platform.inspectCustom)
|
||||
this[platform.inspectCustom] = () => this._inspect();
|
||||
}
|
||||
worker() {
|
||||
return this._worker;
|
||||
}
|
||||
page() {
|
||||
return this._page;
|
||||
}
|
||||
type() {
|
||||
return this._event.type;
|
||||
}
|
||||
text() {
|
||||
return this._event.text;
|
||||
}
|
||||
args() {
|
||||
return this._event.args.map(import_jsHandle.JSHandle.from);
|
||||
}
|
||||
location() {
|
||||
return this._event.location;
|
||||
}
|
||||
_inspect() {
|
||||
return this.text();
|
||||
}
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
ConsoleMessage
|
||||
});
|
||||
44
node_modules/playwright-core/lib/client/coverage.js
generated
vendored
44
node_modules/playwright-core/lib/client/coverage.js
generated
vendored
@@ -1,44 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var coverage_exports = {};
|
||||
__export(coverage_exports, {
|
||||
Coverage: () => Coverage
|
||||
});
|
||||
module.exports = __toCommonJS(coverage_exports);
|
||||
class Coverage {
|
||||
constructor(channel) {
|
||||
this._channel = channel;
|
||||
}
|
||||
async startJSCoverage(options = {}) {
|
||||
await this._channel.startJSCoverage(options);
|
||||
}
|
||||
async stopJSCoverage() {
|
||||
return (await this._channel.stopJSCoverage()).entries;
|
||||
}
|
||||
async startCSSCoverage(options = {}) {
|
||||
await this._channel.startCSSCoverage(options);
|
||||
}
|
||||
async stopCSSCoverage() {
|
||||
return (await this._channel.stopCSSCoverage()).entries;
|
||||
}
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
Coverage
|
||||
});
|
||||
56
node_modules/playwright-core/lib/client/dialog.js
generated
vendored
56
node_modules/playwright-core/lib/client/dialog.js
generated
vendored
@@ -1,56 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var dialog_exports = {};
|
||||
__export(dialog_exports, {
|
||||
Dialog: () => Dialog
|
||||
});
|
||||
module.exports = __toCommonJS(dialog_exports);
|
||||
var import_channelOwner = require("./channelOwner");
|
||||
var import_page = require("./page");
|
||||
class Dialog extends import_channelOwner.ChannelOwner {
|
||||
static from(dialog) {
|
||||
return dialog._object;
|
||||
}
|
||||
constructor(parent, type, guid, initializer) {
|
||||
super(parent, type, guid, initializer);
|
||||
this._page = import_page.Page.fromNullable(initializer.page);
|
||||
}
|
||||
page() {
|
||||
return this._page;
|
||||
}
|
||||
type() {
|
||||
return this._initializer.type;
|
||||
}
|
||||
message() {
|
||||
return this._initializer.message;
|
||||
}
|
||||
defaultValue() {
|
||||
return this._initializer.defaultValue;
|
||||
}
|
||||
async accept(promptText) {
|
||||
await this._channel.accept({ promptText });
|
||||
}
|
||||
async dismiss() {
|
||||
await this._channel.dismiss();
|
||||
}
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
Dialog
|
||||
});
|
||||
62
node_modules/playwright-core/lib/client/download.js
generated
vendored
62
node_modules/playwright-core/lib/client/download.js
generated
vendored
@@ -1,62 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var download_exports = {};
|
||||
__export(download_exports, {
|
||||
Download: () => Download
|
||||
});
|
||||
module.exports = __toCommonJS(download_exports);
|
||||
class Download {
|
||||
constructor(page, url, suggestedFilename, artifact) {
|
||||
this._page = page;
|
||||
this._url = url;
|
||||
this._suggestedFilename = suggestedFilename;
|
||||
this._artifact = artifact;
|
||||
}
|
||||
page() {
|
||||
return this._page;
|
||||
}
|
||||
url() {
|
||||
return this._url;
|
||||
}
|
||||
suggestedFilename() {
|
||||
return this._suggestedFilename;
|
||||
}
|
||||
async path() {
|
||||
return await this._artifact.pathAfterFinished();
|
||||
}
|
||||
async saveAs(path) {
|
||||
return await this._artifact.saveAs(path);
|
||||
}
|
||||
async failure() {
|
||||
return await this._artifact.failure();
|
||||
}
|
||||
async createReadStream() {
|
||||
return await this._artifact.createReadStream();
|
||||
}
|
||||
async cancel() {
|
||||
return await this._artifact.cancel();
|
||||
}
|
||||
async delete() {
|
||||
return await this._artifact.delete();
|
||||
}
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
Download
|
||||
});
|
||||
138
node_modules/playwright-core/lib/client/electron.js
generated
vendored
138
node_modules/playwright-core/lib/client/electron.js
generated
vendored
@@ -1,138 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var electron_exports = {};
|
||||
__export(electron_exports, {
|
||||
Electron: () => Electron,
|
||||
ElectronApplication: () => ElectronApplication
|
||||
});
|
||||
module.exports = __toCommonJS(electron_exports);
|
||||
var import_browserContext = require("./browserContext");
|
||||
var import_channelOwner = require("./channelOwner");
|
||||
var import_clientHelper = require("./clientHelper");
|
||||
var import_consoleMessage = require("./consoleMessage");
|
||||
var import_errors = require("./errors");
|
||||
var import_events = require("./events");
|
||||
var import_jsHandle = require("./jsHandle");
|
||||
var import_waiter = require("./waiter");
|
||||
var import_timeoutSettings = require("./timeoutSettings");
|
||||
class Electron extends import_channelOwner.ChannelOwner {
|
||||
static from(electron) {
|
||||
return electron._object;
|
||||
}
|
||||
constructor(parent, type, guid, initializer) {
|
||||
super(parent, type, guid, initializer);
|
||||
}
|
||||
async launch(options = {}) {
|
||||
options = this._playwright.selectors._withSelectorOptions(options);
|
||||
const params = {
|
||||
...await (0, import_browserContext.prepareBrowserContextParams)(this._platform, options),
|
||||
env: (0, import_clientHelper.envObjectToArray)(options.env ? options.env : this._platform.env),
|
||||
tracesDir: options.tracesDir,
|
||||
timeout: new import_timeoutSettings.TimeoutSettings(this._platform).launchTimeout(options)
|
||||
};
|
||||
const app = ElectronApplication.from((await this._channel.launch(params)).electronApplication);
|
||||
this._playwright.selectors._contextsForSelectors.add(app._context);
|
||||
app.once(import_events.Events.ElectronApplication.Close, () => this._playwright.selectors._contextsForSelectors.delete(app._context));
|
||||
await app._context._initializeHarFromOptions(options.recordHar);
|
||||
app._context.tracing._tracesDir = options.tracesDir;
|
||||
return app;
|
||||
}
|
||||
}
|
||||
class ElectronApplication extends import_channelOwner.ChannelOwner {
|
||||
constructor(parent, type, guid, initializer) {
|
||||
super(parent, type, guid, initializer);
|
||||
this._windows = /* @__PURE__ */ new Set();
|
||||
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings(this._platform);
|
||||
this._context = import_browserContext.BrowserContext.from(initializer.context);
|
||||
for (const page of this._context._pages)
|
||||
this._onPage(page);
|
||||
this._context.on(import_events.Events.BrowserContext.Page, (page) => this._onPage(page));
|
||||
this._channel.on("close", () => {
|
||||
this.emit(import_events.Events.ElectronApplication.Close);
|
||||
});
|
||||
this._channel.on("console", (event) => this.emit(import_events.Events.ElectronApplication.Console, new import_consoleMessage.ConsoleMessage(this._platform, event, null, null)));
|
||||
this._setEventToSubscriptionMapping(/* @__PURE__ */ new Map([
|
||||
[import_events.Events.ElectronApplication.Console, "console"]
|
||||
]));
|
||||
}
|
||||
static from(electronApplication) {
|
||||
return electronApplication._object;
|
||||
}
|
||||
process() {
|
||||
return this._connection.toImpl?.(this)?.process();
|
||||
}
|
||||
_onPage(page) {
|
||||
this._windows.add(page);
|
||||
this.emit(import_events.Events.ElectronApplication.Window, page);
|
||||
page.once(import_events.Events.Page.Close, () => this._windows.delete(page));
|
||||
}
|
||||
windows() {
|
||||
return [...this._windows];
|
||||
}
|
||||
async firstWindow(options) {
|
||||
if (this._windows.size)
|
||||
return this._windows.values().next().value;
|
||||
return await this.waitForEvent("window", options);
|
||||
}
|
||||
context() {
|
||||
return this._context;
|
||||
}
|
||||
async [Symbol.asyncDispose]() {
|
||||
await this.close();
|
||||
}
|
||||
async close() {
|
||||
try {
|
||||
await this._context.close();
|
||||
} catch (e) {
|
||||
if ((0, import_errors.isTargetClosedError)(e))
|
||||
return;
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
async waitForEvent(event, optionsOrPredicate = {}) {
|
||||
return await this._wrapApiCall(async () => {
|
||||
const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate === "function" ? {} : optionsOrPredicate);
|
||||
const predicate = typeof optionsOrPredicate === "function" ? optionsOrPredicate : optionsOrPredicate.predicate;
|
||||
const waiter = import_waiter.Waiter.createForEvent(this, event);
|
||||
waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event "${event}"`);
|
||||
if (event !== import_events.Events.ElectronApplication.Close)
|
||||
waiter.rejectOnEvent(this, import_events.Events.ElectronApplication.Close, () => new import_errors.TargetClosedError());
|
||||
const result = await waiter.waitForEvent(this, event, predicate);
|
||||
waiter.dispose();
|
||||
return result;
|
||||
});
|
||||
}
|
||||
async browserWindow(page) {
|
||||
const result = await this._channel.browserWindow({ page: page._channel });
|
||||
return import_jsHandle.JSHandle.from(result.handle);
|
||||
}
|
||||
async evaluate(pageFunction, arg) {
|
||||
const result = await this._channel.evaluateExpression({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
||||
return (0, import_jsHandle.parseResult)(result.value);
|
||||
}
|
||||
async evaluateHandle(pageFunction, arg) {
|
||||
const result = await this._channel.evaluateExpressionHandle({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
||||
return import_jsHandle.JSHandle.from(result.handle);
|
||||
}
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
Electron,
|
||||
ElectronApplication
|
||||
});
|
||||
281
node_modules/playwright-core/lib/client/elementHandle.js
generated
vendored
281
node_modules/playwright-core/lib/client/elementHandle.js
generated
vendored
@@ -1,281 +0,0 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var elementHandle_exports = {};
|
||||
__export(elementHandle_exports, {
|
||||
ElementHandle: () => ElementHandle,
|
||||
convertInputFiles: () => convertInputFiles,
|
||||
convertSelectOptionValues: () => convertSelectOptionValues,
|
||||
determineScreenshotType: () => determineScreenshotType
|
||||
});
|
||||
module.exports = __toCommonJS(elementHandle_exports);
|
||||
var import_frame = require("./frame");
|
||||
var import_jsHandle = require("./jsHandle");
|
||||
var import_assert = require("../utils/isomorphic/assert");
|
||||
var import_fileUtils = require("./fileUtils");
|
||||
var import_rtti = require("../utils/isomorphic/rtti");
|
||||
var import_writableStream = require("./writableStream");
|
||||
var import_mimeType = require("../utils/isomorphic/mimeType");
|
||||
class ElementHandle extends import_jsHandle.JSHandle {
|
||||
static from(handle) {
|
||||
return handle._object;
|
||||
}
|
||||
static fromNullable(handle) {
|
||||
return handle ? ElementHandle.from(handle) : null;
|
||||
}
|
||||
constructor(parent, type, guid, initializer) {
|
||||
super(parent, type, guid, initializer);
|
||||
this._frame = parent;
|
||||
this._elementChannel = this._channel;
|
||||
}
|
||||
asElement() {
|
||||
return this;
|
||||
}
|
||||
async ownerFrame() {
|
||||
return import_frame.Frame.fromNullable((await this._elementChannel.ownerFrame()).frame);
|
||||
}
|
||||
async contentFrame() {
|
||||
return import_frame.Frame.fromNullable((await this._elementChannel.contentFrame()).frame);
|
||||
}
|
||||
async getAttribute(name) {
|
||||
const value = (await this._elementChannel.getAttribute({ name })).value;
|
||||
return value === void 0 ? null : value;
|
||||
}
|
||||
async inputValue() {
|
||||
return (await this._elementChannel.inputValue()).value;
|
||||
}
|
||||
async textContent() {
|
||||
const value = (await this._elementChannel.textContent()).value;
|
||||
return value === void 0 ? null : value;
|
||||
}
|
||||
async innerText() {
|
||||
return (await this._elementChannel.innerText()).value;
|
||||
}
|
||||
async innerHTML() {
|
||||
return (await this._elementChannel.innerHTML()).value;
|
||||
}
|
||||
async isChecked() {
|
||||
return (await this._elementChannel.isChecked()).value;
|
||||
}
|
||||
async isDisabled() {
|
||||
return (await this._elementChannel.isDisabled()).value;
|
||||
}
|
||||
async isEditable() {
|
||||
return (await this._elementChannel.isEditable()).value;
|
||||
}
|
||||
async isEnabled() {
|
||||
return (await this._elementChannel.isEnabled()).value;
|
||||
}
|
||||
async isHidden() {
|
||||
return (await this._elementChannel.isHidden()).value;
|
||||
}
|
||||
async isVisible() {
|
||||
return (await this._elementChannel.isVisible()).value;
|
||||
}
|
||||
async dispatchEvent(type, eventInit = {}) {
|
||||
await this._elementChannel.dispatchEvent({ type, eventInit: (0, import_jsHandle.serializeArgument)(eventInit) });
|
||||
}
|
||||
async scrollIntoViewIfNeeded(options = {}) {
|
||||
await this._elementChannel.scrollIntoViewIfNeeded({ ...options, timeout: this._frame._timeout(options) });
|
||||
}
|
||||
async hover(options = {}) {
|
||||
await this._elementChannel.hover({ ...options, timeout: this._frame._timeout(options) });
|
||||
}
|
||||
async click(options = {}) {
|
||||
return await this._elementChannel.click({ ...options, timeout: this._frame._timeout(options) });
|
||||
}
|
||||
async dblclick(options = {}) {
|
||||
return await this._elementChannel.dblclick({ ...options, timeout: this._frame._timeout(options) });
|
||||
}
|
||||
async tap(options = {}) {
|
||||
return await this._elementChannel.tap({ ...options, timeout: this._frame._timeout(options) });
|
||||
}
|
||||
async selectOption(values, options = {}) {
|
||||
const result = await this._elementChannel.selectOption({ ...convertSelectOptionValues(values), ...options, timeout: this._frame._timeout(options) });
|
||||
return result.values;
|
||||
}
|
||||
async fill(value, options = {}) {
|
||||
return await this._elementChannel.fill({ value, ...options, timeout: this._frame._timeout(options) });
|
||||
}
|
||||
async selectText(options = {}) {
|
||||
await this._elementChannel.selectText({ ...options, timeout: this._frame._timeout(options) });
|
||||
}
|
||||
async setInputFiles(files, options = {}) {
|
||||
const frame = await this.ownerFrame();
|
||||
if (!frame)
|
||||
throw new Error("Cannot set input files to detached element");
|
||||
const converted = await convertInputFiles(this._platform, files, frame.page().context());
|
||||
await this._elementChannel.setInputFiles({ ...converted, ...options, timeout: this._frame._timeout(options) });
|
||||
}
|
||||
async focus() {
|
||||
await this._elementChannel.focus();
|
||||
}
|
||||
async type(text, options = {}) {
|
||||
await this._elementChannel.type({ text, ...options, timeout: this._frame._timeout(options) });
|
||||
}
|
||||
async press(key, options = {}) {
|
||||
await this._elementChannel.press({ key, ...options, timeout: this._frame._timeout(options) });
|
||||
}
|
||||
async check(options = {}) {
|
||||
return await this._elementChannel.check({ ...options, timeout: this._frame._timeout(options) });
|
||||
}
|
||||
async uncheck(options = {}) {
|
||||
return await this._elementChannel.uncheck({ ...options, timeout: this._frame._timeout(options) });
|
||||
}
|
||||
async setChecked(checked, options) {
|
||||
if (checked)
|
||||
await this.check(options);
|
||||
else
|
||||
await this.uncheck(options);
|
||||
}
|
||||
async boundingBox() {
|
||||
const value = (await this._elementChannel.boundingBox()).value;
|
||||
return value === void 0 ? null : value;
|
||||
}
|
||||
async screenshot(options = {}) {
|
||||
const mask = options.mask;
|
||||
const copy = { ...options, mask: void 0, timeout: this._frame._timeout(options) };
|
||||
if (!copy.type)
|
||||
copy.type = determineScreenshotType(options);
|
||||
if (mask) {
|
||||
copy.mask = mask.map((locator) => ({
|
||||
frame: locator._frame._channel,
|
||||
selector: locator._selector
|
||||
}));
|
||||
}
|
||||
const result = await this._elementChannel.screenshot(copy);
|
||||
if (options.path) {
|
||||
await (0, import_fileUtils.mkdirIfNeeded)(this._platform, options.path);
|
||||
await this._platform.fs().promises.writeFile(options.path, result.binary);
|
||||
}
|
||||
return result.binary;
|
||||
}
|
||||
async $(selector) {
|
||||
return ElementHandle.fromNullable((await this._elementChannel.querySelector({ selector })).element);
|
||||
}
|
||||
async $$(selector) {
|
||||
const result = await this._elementChannel.querySelectorAll({ selector });
|
||||
return result.elements.map((h) => ElementHandle.from(h));
|
||||
}
|
||||
async $eval(selector, pageFunction, arg) {
|
||||
const result = await this._elementChannel.evalOnSelector({ selector, expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
||||
return (0, import_jsHandle.parseResult)(result.value);
|
||||
}
|
||||
async $$eval(selector, pageFunction, arg) {
|
||||
const result = await this._elementChannel.evalOnSelectorAll({ selector, expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
||||
return (0, import_jsHandle.parseResult)(result.value);
|
||||
}
|
||||
async waitForElementState(state, options = {}) {
|
||||
return await this._elementChannel.waitForElementState({ state, ...options, timeout: this._frame._timeout(options) });
|
||||
}
|
||||
async waitForSelector(selector, options = {}) {
|
||||
const result = await this._elementChannel.waitForSelector({ selector, ...options, timeout: this._frame._timeout(options) });
|
||||
return ElementHandle.fromNullable(result.element);
|
||||
}
|
||||
}
|
||||
function convertSelectOptionValues(values) {
|
||||
if (values === null)
|
||||
return {};
|
||||
if (!Array.isArray(values))
|
||||
values = [values];
|
||||
if (!values.length)
|
||||
return {};
|
||||
for (let i = 0; i < values.length; i++)
|
||||
(0, import_assert.assert)(values[i] !== null, `options[${i}]: expected object, got null`);
|
||||
if (values[0] instanceof ElementHandle)
|
||||
return { elements: values.map((v) => v._elementChannel) };
|
||||
if ((0, import_rtti.isString)(values[0]))
|
||||
return { options: values.map((valueOrLabel) => ({ valueOrLabel })) };
|
||||
return { options: values };
|
||||
}
|
||||
function filePayloadExceedsSizeLimit(payloads) {
|
||||
return payloads.reduce((size, item) => size + (item.buffer ? item.buffer.byteLength : 0), 0) >= import_fileUtils.fileUploadSizeLimit;
|
||||
}
|
||||
async function resolvePathsAndDirectoryForInputFiles(platform, items) {
|
||||
let localPaths;
|
||||
let localDirectory;
|
||||
for (const item of items) {
|
||||
const stat = await platform.fs().promises.stat(item);
|
||||
if (stat.isDirectory()) {
|
||||
if (localDirectory)
|
||||
throw new Error("Multiple directories are not supported");
|
||||
localDirectory = platform.path().resolve(item);
|
||||
} else {
|
||||
localPaths ??= [];
|
||||
localPaths.push(platform.path().resolve(item));
|
||||
}
|
||||
}
|
||||
if (localPaths?.length && localDirectory)
|
||||
throw new Error("File paths must be all files or a single directory");
|
||||
return [localPaths, localDirectory];
|
||||
}
|
||||
async function convertInputFiles(platform, files, context) {
|
||||
const items = Array.isArray(files) ? files.slice() : [files];
|
||||
if (items.some((item) => typeof item === "string")) {
|
||||
if (!items.every((item) => typeof item === "string"))
|
||||
throw new Error("File paths cannot be mixed with buffers");
|
||||
const [localPaths, localDirectory] = await resolvePathsAndDirectoryForInputFiles(platform, items);
|
||||
if (context._connection.isRemote()) {
|
||||
const files2 = localDirectory ? (await platform.fs().promises.readdir(localDirectory, { withFileTypes: true, recursive: true })).filter((f) => f.isFile()).map((f) => platform.path().join(f.path, f.name)) : localPaths;
|
||||
const { writableStreams, rootDir } = await context._wrapApiCall(async () => context._channel.createTempFiles({
|
||||
rootDirName: localDirectory ? platform.path().basename(localDirectory) : void 0,
|
||||
items: await Promise.all(files2.map(async (file) => {
|
||||
const lastModifiedMs = (await platform.fs().promises.stat(file)).mtimeMs;
|
||||
return {
|
||||
name: localDirectory ? platform.path().relative(localDirectory, file) : platform.path().basename(file),
|
||||
lastModifiedMs
|
||||
};
|
||||
}))
|
||||
}), { internal: true });
|
||||
for (let i = 0; i < files2.length; i++) {
|
||||
const writable = import_writableStream.WritableStream.from(writableStreams[i]);
|
||||
await platform.streamFile(files2[i], writable.stream());
|
||||
}
|
||||
return {
|
||||
directoryStream: rootDir,
|
||||
streams: localDirectory ? void 0 : writableStreams
|
||||
};
|
||||
}
|
||||
return {
|
||||
localPaths,
|
||||
localDirectory
|
||||
};
|
||||
}
|
||||
const payloads = items;
|
||||
if (filePayloadExceedsSizeLimit(payloads))
|
||||
throw new Error("Cannot set buffer larger than 50Mb, please write it to a file and pass its path instead.");
|
||||
return { payloads };
|
||||
}
|
||||
function determineScreenshotType(options) {
|
||||
if (options.path) {
|
||||
const mimeType = (0, import_mimeType.getMimeTypeForPath)(options.path);
|
||||
if (mimeType === "image/png")
|
||||
return "png";
|
||||
else if (mimeType === "image/jpeg")
|
||||
return "jpeg";
|
||||
throw new Error(`path: unsupported mime type "${mimeType}"`);
|
||||
}
|
||||
return options.type;
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
ElementHandle,
|
||||
convertInputFiles,
|
||||
convertSelectOptionValues,
|
||||
determineScreenshotType
|
||||
});
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user