chore: release SVR.JS 4.0.0
19
.github/workflows/main.yml
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# Sync repo to the Codeberg mirror
|
||||||
|
name: Repo sync GitHub -> SVR.JS Git server
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- '**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
svrjsgit:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- uses: spyoungtech/mirror-action@v0.5.1
|
||||||
|
with:
|
||||||
|
REMOTE: "https://git.svrjs.org/svrjs/svrjs.git"
|
||||||
|
GIT_USERNAME: github-mirror
|
||||||
|
GIT_PASSWORD: ${{ secrets.GIT_PASSWORD }}
|
27
.gitignore
vendored
|
@ -1,2 +1,25 @@
|
||||||
commit.sh
|
# Build output
|
||||||
log
|
/dist/
|
||||||
|
/out/
|
||||||
|
|
||||||
|
# Temporary files used by build script
|
||||||
|
/generatedAssets/
|
||||||
|
|
||||||
|
# Dependencies
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# Test coverage
|
||||||
|
/coverage/
|
||||||
|
|
||||||
|
# ESLint cache
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# OS-specific files
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
.Spotlight-V100
|
||||||
|
.Trashes
|
||||||
|
|
||||||
|
# Temporary files used by the editor
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
|
2
.husky/commit-msg
Executable file
|
@ -0,0 +1,2 @@
|
||||||
|
#!/bin/sh
|
||||||
|
npx --no -- commitlint --edit "$1"
|
2
.husky/pre-commit
Executable file
|
@ -0,0 +1,2 @@
|
||||||
|
#!/bin/sh
|
||||||
|
npx lint-staged
|
149
README.md
Normal file
|
@ -0,0 +1,149 @@
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://svrjs.org" target="_blank">
|
||||||
|
<img src="assets/logo.png" width="384">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
<p align="center">
|
||||||
|
<b>SVR.JS</b> - a web server running on Node.JS<br/>
|
||||||
|
It's free as in freedom, scalable, secure, and configurable.
|
||||||
|
</p>
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://svrjs.org/docs/tentative" target="_blank"><img alt="Static Badge" src="https://img.shields.io/badge/Documentation-green"></a>
|
||||||
|
<a href="https://svrjs.org" target="_blank"><img alt="Website" src="https://img.shields.io/website?url=https%3A%2F%2Fsvrjs.org"></a>
|
||||||
|
<a href="https://hub.docker.com/r/svrjs/svrjs" target="_blank"><img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/svrjs/svrjs"></a>
|
||||||
|
<a href="https://github.com/svr-js/svrjs/tree/next" target="_blank"><img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/svr-js/svrjs"></a>
|
||||||
|
<a href="https://x.com/SVR_JS" target="_blank"><img alt="X (formerly Twitter) Follow" src="https://img.shields.io/twitter/follow/SVR_JS"></a>
|
||||||
|
<a href="https://mastodon.social/@svrjs" target="_blank"><img alt="Mastodon Follow" src="https://img.shields.io/mastodon/follow/111643338718098121"></a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
* * *
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
### Static file handling
|
||||||
|
|
||||||
|
* Static file serving (even above 2GB)
|
||||||
|
* Directory listing serving
|
||||||
|
* Protection against path traversal
|
||||||
|
* Content-Range support (for non-HTML static files; also for HTML files from SVR.JS 3.15.1)
|
||||||
|
* Serving from web root different than SVR.JS installation directory
|
||||||
|
|
||||||
|
### Security
|
||||||
|
|
||||||
|
* HTTPS support
|
||||||
|
* HTTP/2 support
|
||||||
|
* Built-in block list
|
||||||
|
* Protection against HTTP authentication brute force attacks (from SVR.JS 3.4.8; enabled by default)
|
||||||
|
* Ability to hide server version
|
||||||
|
* OCSP stapling support (from SVR.JS 3.4.9)
|
||||||
|
|
||||||
|
### Configuration and customization
|
||||||
|
|
||||||
|
* Configurability via _config.json_ file
|
||||||
|
* Expandability via server-side JavaScript and mods
|
||||||
|
* Ability to serve non-standard error pages
|
||||||
|
* URL rewriting engine
|
||||||
|
* Event driven architecture powered by Node.JS, along with clustering.
|
||||||
|
|
||||||
|
### Compression and content delivery
|
||||||
|
|
||||||
|
* Brotli, gzip and Deflate HTTP compression (Brotli supported since SVR.JS 3.4.11)
|
||||||
|
* SNI (Server Name Indication) support
|
||||||
|
* ETag support (from SVR.JS 3.6.1)
|
||||||
|
* Reverse proxy functionality (requires reverse-proxy-mod SVR.JS mod)
|
||||||
|
* Forward proxy functionality (requires forward-proxy-mod SVR.JS mod)
|
||||||
|
|
||||||
|
### Authentication and access control
|
||||||
|
|
||||||
|
* HTTP basic authentication
|
||||||
|
|
||||||
|
### Gateway interfaces
|
||||||
|
|
||||||
|
* CGI (Common Gateway Interface) support (requires RedBrick mod)
|
||||||
|
* SCGI (Simple Common Gateway Interface) support (requires OrangeCircle mod)
|
||||||
|
* JSGI (JavaScript Gateway Interface) support (requires YellowSquare mod)
|
||||||
|
* PHP support (PHP-CGI with RedBrick mod or PHP-FPM with GreenRhombus mod)
|
||||||
|
|
||||||
|
### Additional functionality
|
||||||
|
|
||||||
|
* Logging
|
||||||
|
* Ability to display IP addresses, from which originally request was made (from reverse proxies; via X-Forwarded-For)
|
||||||
|
|
||||||
|
## Building SVR.JS
|
||||||
|
|
||||||
|
To build SVR.JS, you need Node.JS 18.0.0 or newer.
|
||||||
|
|
||||||
|
Before building SVR.JS, install the npm packages using this command:
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
After installing the packages, build SVR.JS with this command:
|
||||||
|
```bash
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
After running the command, you will get bundled SVR.JS script, around with built-in utilities and assets in the `dist` directory. You will also get a zip archive in `out` directory, that can be installed using SVR.JS installer
|
||||||
|
|
||||||
|
## Installation (built from source)
|
||||||
|
|
||||||
|
To install SVR.JS you just built from the source code, you can install it via SVR.JS installer for GNU/Linux or manually.
|
||||||
|
|
||||||
|
If you want to install SVR.JS manually, you can read the [server documentation](https://svrjs.org/docs/tentative).
|
||||||
|
|
||||||
|
If you want to install via SVR.JS installer for GNU/Linux, run this command:
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://downloads.svrjs.org/installer/svr.js.installer.linux.20240509.sh > /tmp/installer.sh && sudo bash /tmp/installer.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
You will be then prompted about the type of installation. Choose option “2” to install SVR.JS from the zip archive, and type in the path to the zip archive (hint: it is in the `out` directory).
|
||||||
|
|
||||||
|
After typing the path, you may be prompted to install dependencies via GNU/Linux distribution’s package manager. Proceed with the installation of dependencies.
|
||||||
|
|
||||||
|
After installation, SVR.JS should be listening at http://localhost.
|
||||||
|
|
||||||
|
## SVR.JS documentation
|
||||||
|
|
||||||
|
You can read the [SVR.JS documentation](https://svrjs.org/docs/tentative) to get information on how to use SVR.JS.
|
||||||
|
|
||||||
|
## npm scripts
|
||||||
|
|
||||||
|
- To build SVR.JS along with the zip archive, run `npm run build`.
|
||||||
|
- To check SVR.JS code for errors with ESLint, run `npm run lint`.
|
||||||
|
- To fix and beautify SVR.JS code with ESLint and Prettier, run `npm run lint:fix`.
|
||||||
|
- To run SVR.JS from the "dist" folder, run `npm start`.
|
||||||
|
- To test SVR.JS itself, run `npm run dev`. This removes existing configuration.
|
||||||
|
- To perform unit tests with Jest, run `npm test`.
|
||||||
|
|
||||||
|
## File structure
|
||||||
|
|
||||||
|
The file structure for SVR.JS source code looks like this:
|
||||||
|
- .husky - Git hooks
|
||||||
|
- assets - files to copy into dist folder and to the archive
|
||||||
|
- dist - contains SVR.JS, assets, and SVR.JS utiltiies
|
||||||
|
- generatedAssets - assets generated by the build script
|
||||||
|
- out - contains SVR.JS zip archive
|
||||||
|
- src - contains SVR.JS source code
|
||||||
|
- index.js - entry point
|
||||||
|
- handlers - handlers for servers
|
||||||
|
- middleware - built-in middleware for servers
|
||||||
|
- res - resources
|
||||||
|
- utils - utility functions
|
||||||
|
- templates - EJS templates for build script to use
|
||||||
|
- tests - Jest unit tests
|
||||||
|
- middleware - tests for middleware
|
||||||
|
- utils - unit tests for utility functions
|
||||||
|
- utils - SVR.JS utilities (each utility has a single file)
|
||||||
|
- commitlint.config.js - commitlint configuration
|
||||||
|
- esbuild.config.js - the build script
|
||||||
|
- eslint.config.js - ESLint configuration
|
||||||
|
- jest.config.js - Jest configuration
|
||||||
|
- lint-staged.config.js - lint-staged configuration
|
||||||
|
- prettier.config.js - Prettier configuration
|
||||||
|
- svrjs.json - SVR.JS version, name, documentation URL, and statistics server collection endpoint URL
|
||||||
|
|
||||||
|
## Contribute
|
||||||
|
|
||||||
|
See [SVR.JS contribution page](https://svrjs.org/contribute) for details.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This project is licensed under the MIT/X11 License - see the [LICENSE](LICENSE) file for details.
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 8 KiB After Width: | Height: | Size: 8 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 9.8 KiB |
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 7 KiB After Width: | Height: | Size: 7 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 9.8 KiB |
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
|
@ -1,6 +1,6 @@
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2022 Inspect JS
|
Copyright (c) 2018-2024 SVR.JS
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
BIN
assets/favicon.ico
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
assets/logo.png
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
assets/powered.png
Normal file
After Width: | Height: | Size: 19 KiB |
3
commitlint.config.js
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
module.exports = {
|
||||||
|
extends: ["@commitlint/config-conventional"]
|
||||||
|
};
|
250
esbuild.config.js
Normal file
|
@ -0,0 +1,250 @@
|
||||||
|
const esbuild = require("esbuild");
|
||||||
|
const esbuildCopyPlugin = require("esbuild-plugin-copy");
|
||||||
|
const fs = require("fs");
|
||||||
|
const zlib = require("zlib");
|
||||||
|
const ejs = require("ejs");
|
||||||
|
const archiver = require("archiver");
|
||||||
|
const dependencies =
|
||||||
|
JSON.parse(fs.readFileSync(__dirname + "/package.json")).dependencies || {};
|
||||||
|
const requiredDependencyList = Object.keys(dependencies);
|
||||||
|
let dependencyList = Object.keys(dependencies);
|
||||||
|
const svrjsInfo = JSON.parse(fs.readFileSync(__dirname + "/svrjs.json"));
|
||||||
|
const { name, version, documentationURL, changes } = svrjsInfo;
|
||||||
|
|
||||||
|
// Function to find and add all dependencies into the dependencyList array.
|
||||||
|
function findAllDependencies(curList) {
|
||||||
|
// If no curList parameter is specified, use dependencyList.
|
||||||
|
if (!curList) curList = dependencyList;
|
||||||
|
curList.forEach((dependency) => {
|
||||||
|
const newDeplist = Object.keys(
|
||||||
|
JSON.parse(
|
||||||
|
fs
|
||||||
|
.readFileSync(
|
||||||
|
__dirname +
|
||||||
|
"/node_modules/" +
|
||||||
|
dependency.replace(/\/\.\./g, "") +
|
||||||
|
"/package.json",
|
||||||
|
)
|
||||||
|
.toString(),
|
||||||
|
).dependencies || {},
|
||||||
|
);
|
||||||
|
let noDupNewDepList = [];
|
||||||
|
newDeplist.forEach((dep) => {
|
||||||
|
// Ignore duplicates
|
||||||
|
if (dependencyList.indexOf(dep) == -1) {
|
||||||
|
noDupNewDepList.push(dep);
|
||||||
|
dependencyList.push(dep);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// Call findAllDependencies for the dependency list.
|
||||||
|
findAllDependencies(noDupNewDepList);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get list of all dependencies
|
||||||
|
findAllDependencies();
|
||||||
|
dependencyList = dependencyList.sort();
|
||||||
|
|
||||||
|
// Create and populate an object, where whenever the dependencies are required are listed.
|
||||||
|
let dependenciesAreRequired = {};
|
||||||
|
dependencyList.forEach((dependency) => {
|
||||||
|
dependenciesAreRequired[dependency] = false;
|
||||||
|
});
|
||||||
|
requiredDependencyList.forEach((dependency) => {
|
||||||
|
dependenciesAreRequired[dependency] = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Create the template functions using EJS
|
||||||
|
const layoutTemplate = ejs.compile(
|
||||||
|
fs.readFileSync(__dirname + "/templates/layout.ejs").toString(),
|
||||||
|
);
|
||||||
|
const testsTemplate = ejs.compile(
|
||||||
|
fs.readFileSync(__dirname + "/templates/tests.ejs").toString(),
|
||||||
|
);
|
||||||
|
const indexTemplate = ejs.compile(
|
||||||
|
fs.readFileSync(__dirname + "/templates/index.ejs").toString(),
|
||||||
|
);
|
||||||
|
const licensesTemplate = ejs.compile(
|
||||||
|
fs.readFileSync(__dirname + "/templates/licenses.ejs").toString(),
|
||||||
|
);
|
||||||
|
const licenseElementTemplate = ejs.compile(
|
||||||
|
fs.readFileSync(__dirname + "/templates/licenseElement.ejs").toString(),
|
||||||
|
);
|
||||||
|
|
||||||
|
let licenseElements = "";
|
||||||
|
|
||||||
|
// Generate the licenses list in HTML
|
||||||
|
dependencyList.forEach((dependency) => {
|
||||||
|
const packageJSON = JSON.parse(
|
||||||
|
fs
|
||||||
|
.readFileSync(
|
||||||
|
__dirname +
|
||||||
|
"/node_modules/" +
|
||||||
|
dependency.replace(/\/\.\./g, "") +
|
||||||
|
"/package.json",
|
||||||
|
)
|
||||||
|
.toString(),
|
||||||
|
);
|
||||||
|
licenseElements += licenseElementTemplate({
|
||||||
|
moduleName: packageJSON.name,
|
||||||
|
name: name,
|
||||||
|
license: packageJSON.license,
|
||||||
|
description: packageJSON.description || "No description",
|
||||||
|
author: packageJSON.author ? packageJSON.author.name : packageJSON.author,
|
||||||
|
required: dependenciesAreRequired[dependency],
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Generate pages
|
||||||
|
const licensesPage = layoutTemplate({
|
||||||
|
title: name + " " + version + " Licenses",
|
||||||
|
content: licensesTemplate({
|
||||||
|
name: name,
|
||||||
|
version: version,
|
||||||
|
licenses: licenseElements,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
const testsPage = layoutTemplate({
|
||||||
|
title: name + " " + version + " Tests",
|
||||||
|
content: testsTemplate({
|
||||||
|
name: name,
|
||||||
|
version: version,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
const indexPage = layoutTemplate({
|
||||||
|
title: name + " " + version,
|
||||||
|
content: indexTemplate({
|
||||||
|
name: name,
|
||||||
|
version: version,
|
||||||
|
documentationURL: documentationURL,
|
||||||
|
changes: changes,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
// Remove the generated assets directory if exists, and create a new one.
|
||||||
|
if (fs.existsSync(__dirname + "/generatedAssets")) {
|
||||||
|
if (fs.rmSync) fs.rmSync(__dirname + "/generatedAssets", { recursive: true });
|
||||||
|
else fs.rmdirSync(__dirname + "/generatedAssets", { recursive: true });
|
||||||
|
}
|
||||||
|
fs.mkdirSync(__dirname + "/generatedAssets");
|
||||||
|
|
||||||
|
// Remove the dist directory if exists, and create a new one.
|
||||||
|
if (fs.existsSync(__dirname + "/dist")) {
|
||||||
|
if (fs.rmSync) fs.rmSync(__dirname + "/dist", { recursive: true });
|
||||||
|
else fs.rmdirSync(__dirname + "/dist", { recursive: true });
|
||||||
|
}
|
||||||
|
fs.mkdirSync(__dirname + "/dist");
|
||||||
|
fs.mkdirSync(__dirname + "/dist/log");
|
||||||
|
fs.mkdirSync(__dirname + "/dist/mods");
|
||||||
|
fs.mkdirSync(__dirname + "/dist/temp");
|
||||||
|
|
||||||
|
// Remove the out directory if exists, and create a new one.
|
||||||
|
if (fs.existsSync(__dirname + "/out")) {
|
||||||
|
if (fs.rmSync) fs.rmSync(__dirname + "/out", { recursive: true });
|
||||||
|
else fs.rmdirSync(__dirname + "/out", { recursive: true });
|
||||||
|
}
|
||||||
|
fs.mkdirSync(__dirname + "/out");
|
||||||
|
|
||||||
|
// Create a licenses directory
|
||||||
|
fs.mkdirSync(__dirname + "/generatedAssets/licenses");
|
||||||
|
|
||||||
|
// Write to HTML files
|
||||||
|
fs.writeFileSync(__dirname + "/generatedAssets/index.html", indexPage);
|
||||||
|
fs.writeFileSync(__dirname + "/generatedAssets/tests.html", testsPage);
|
||||||
|
fs.writeFileSync(
|
||||||
|
__dirname + "/generatedAssets/licenses/index.html",
|
||||||
|
licensesPage,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Bundle the source and copy the assets using esbuild and esbuild-plugin-copy
|
||||||
|
esbuild
|
||||||
|
.build({
|
||||||
|
entryPoints: ["src/index.js"],
|
||||||
|
bundle: true,
|
||||||
|
outfile: "dist/svr.js",
|
||||||
|
platform: "node",
|
||||||
|
target: "es2017",
|
||||||
|
plugins: [
|
||||||
|
esbuildCopyPlugin.copy({
|
||||||
|
resolveFrom: __dirname,
|
||||||
|
assets: {
|
||||||
|
from: ["./assets/**/*"],
|
||||||
|
to: ["./dist"],
|
||||||
|
},
|
||||||
|
globbyOptions: {
|
||||||
|
dot: true,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
esbuildCopyPlugin.copy({
|
||||||
|
resolveFrom: __dirname,
|
||||||
|
assets: {
|
||||||
|
from: ["./generatedAssets/**/*"],
|
||||||
|
to: ["./dist"],
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
const utilFilesAndDirectories = fs.existsSync(__dirname + "/utils")
|
||||||
|
? fs.readdirSync(__dirname + "/utils")
|
||||||
|
: [];
|
||||||
|
const utilFiles = [];
|
||||||
|
utilFilesAndDirectories.forEach((entry) => {
|
||||||
|
if (fs.statSync(__dirname + "/utils/" + entry).isFile())
|
||||||
|
utilFiles.push(entry);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Transpile utilities using esbuild
|
||||||
|
esbuild
|
||||||
|
.build({
|
||||||
|
entryPoints: utilFiles.map((filename) => "utils/" + filename),
|
||||||
|
bundle: false,
|
||||||
|
outdir: "dist",
|
||||||
|
platform: "node",
|
||||||
|
target: "es2017",
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
const archiveName =
|
||||||
|
"svr.js." +
|
||||||
|
version.toLowerCase().replace(/[^0-9a-z]+/g, ".") +
|
||||||
|
".zip";
|
||||||
|
const output = fs.createWriteStream(__dirname + "/out/" + archiveName);
|
||||||
|
const archive = archiver("zip", {
|
||||||
|
zlib: { level: 9 },
|
||||||
|
});
|
||||||
|
archive.pipe(output);
|
||||||
|
|
||||||
|
// Add everything in the "dist" directory except for "svr.js" and "svr.compressed"
|
||||||
|
archive.glob("**/*", {
|
||||||
|
cwd: __dirname + "/dist",
|
||||||
|
ignore: [
|
||||||
|
"svr.js",
|
||||||
|
"svr.compressed"
|
||||||
|
],
|
||||||
|
dot: true
|
||||||
|
});
|
||||||
|
|
||||||
|
// Create a stream for the "svr.compressed" file
|
||||||
|
const compressedSVRJSFileStream = fs
|
||||||
|
.createReadStream(__dirname + "/dist/svr.js")
|
||||||
|
.pipe(
|
||||||
|
zlib.createGzip({
|
||||||
|
level: 9,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
archive.append(compressedSVRJSFileStream, { name: "svr.compressed" });
|
||||||
|
archive.append(
|
||||||
|
'const zlib = require("zlib");\nconst fs = require("fs");\nconst tar = require("tar");\nconsole.log("Deleting SVR.JS stub...");\nfs.unlinkSync("svr.js");\nconsole.log("Decompressing SVR.JS...");\nconst script = zlib.gunzipSync(fs.readFileSync("svr.compressed"));\nfs.unlinkSync("svr.compressed");\nfs.writeFileSync("svr.js",script);\nconsole.log("Restart SVR.JS to get server interface.");',
|
||||||
|
{ name: "svr.js" },
|
||||||
|
);
|
||||||
|
archive.finalize();
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
throw err;
|
||||||
|
});
|
30
eslint.config.js
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
const globals = require("globals");
|
||||||
|
const pluginJs = require("@eslint/js");
|
||||||
|
const eslintPluginPrettierRecommended = require("eslint-plugin-prettier/recommended");
|
||||||
|
const jest = require("eslint-plugin-jest");
|
||||||
|
|
||||||
|
module.exports = [
|
||||||
|
{
|
||||||
|
files: ["**/*.js"],
|
||||||
|
languageOptions: {
|
||||||
|
sourceType: "commonjs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
files: ["tests/*.test.js", "tests/**/*.test.js"],
|
||||||
|
...jest.configs['flat/recommended'],
|
||||||
|
rules: {
|
||||||
|
...jest.configs['flat/recommended'].rules,
|
||||||
|
'jest/prefer-expect-assertions': 'off',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
languageOptions: {
|
||||||
|
globals: {
|
||||||
|
...globals.node
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
pluginJs.configs.recommended,
|
||||||
|
eslintPluginPrettierRecommended
|
||||||
|
];
|
BIN
favicon.ico
Before Width: | Height: | Size: 15 KiB |
171
index.html
|
@ -1,171 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>SVR.JS 3.15.7</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
background-color: #dfffdf;
|
|
||||||
color: #000000;
|
|
||||||
font-family: FreeSans, Helvetica, Tahoma, Verdana, Arial, sans-serif;
|
|
||||||
margin: 0.75em;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
background-color: #ffffff;
|
|
||||||
padding: 0.5em 0.5em 0.1em;
|
|
||||||
margin: 0.5em auto;
|
|
||||||
width: 90%;
|
|
||||||
max-width: 800px;
|
|
||||||
-webkit-box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.15);
|
|
||||||
-moz-box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.15);
|
|
||||||
box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.15)
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
text-align: center;
|
|
||||||
font-size: 2.25em;
|
|
||||||
margin: 0.3em 0 0.5em
|
|
||||||
}
|
|
||||||
|
|
||||||
pre,
|
|
||||||
code {
|
|
||||||
background-color: #dfffdf;
|
|
||||||
-webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1);
|
|
||||||
-moz-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1);
|
|
||||||
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1);
|
|
||||||
display: block;
|
|
||||||
padding: 0.2em;
|
|
||||||
font-family: "DejaVu Sans Mono", "Bitstream Vera Sans Mono", Hack, Menlo, Consolas, Monaco, monospace;
|
|
||||||
font-size: 0.85em;
|
|
||||||
margin: auto;
|
|
||||||
width: 95%;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (prefers-color-scheme: dark) {
|
|
||||||
html {
|
|
||||||
background-color: #002000;
|
|
||||||
color: #ffffff
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
background-color: #000f00;
|
|
||||||
-webkit-box-shadow: 0 5px 10px 0 rgba(127, 127, 127, 0.15);
|
|
||||||
-moz-box-shadow: 0 5px 10px 0 rgba(127, 127, 127, 0.15);
|
|
||||||
box-shadow: 0 5px 10px 0 rgba(127, 127, 127, 0.15)
|
|
||||||
}
|
|
||||||
|
|
||||||
pre,
|
|
||||||
code {
|
|
||||||
background-color: #002000;
|
|
||||||
-webkit-box-shadow: 0 2px 4px 0 rgba(127, 127, 127, 0.1);
|
|
||||||
-moz-box-shadow: 0 2px 4px 0 rgba(127, 127, 127, 0.1);
|
|
||||||
box-shadow: 0 2px 4px 0 rgba(127, 127, 127, 0.1)
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #ffffff
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
color: #00ff00
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>Welcome to SVR.JS 3.15.7</h1>
|
|
||||||
<br />
|
|
||||||
<img src="/logo.png" style="width: 224px; max-width: 100%;" />
|
|
||||||
<br />
|
|
||||||
<p>If you see this page that means that the server is working properly. You can further configure the server and replace <i>index.html</i> and <i>tests.html</i> pages with custom ones.</p>
|
|
||||||
<p>Default <i>config.json</i> looks like this:</p>
|
|
||||||
<code style="padding: 5px; text-align: left; display: block; display: inline-block;">
|
|
||||||
<pre style="margin: 0.2em; white-space: pre-wrap; overflow-wrap: break-word; word-wrap: break-word; word-break: break-all; word-break: break-word; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none;">{
|
|
||||||
"users": [],
|
|
||||||
"port": 80,
|
|
||||||
"pubport": 80,
|
|
||||||
"page404": "404.html",
|
|
||||||
"timestamp": 1709477722479,
|
|
||||||
"blacklist": [],
|
|
||||||
"nonStandardCodes": [],
|
|
||||||
"enableCompression": true,
|
|
||||||
"customHeaders": {},
|
|
||||||
"enableHTTP2": false,
|
|
||||||
"enableLogging": true,
|
|
||||||
"enableDirectoryListing": true,
|
|
||||||
"enableDirectoryListingWithDefaultHead": false,
|
|
||||||
"serverAdministratorEmail": "[no contact information]",
|
|
||||||
"stackHidden": false,
|
|
||||||
"enableRemoteLogBrowsing": false,
|
|
||||||
"exposeServerVersion": true,
|
|
||||||
"disableServerSideScriptExpose": true,
|
|
||||||
"rewriteMap": [
|
|
||||||
{
|
|
||||||
"definingRegex": "/^\\/serverSideScript\\.js(?:$|[#?])/",
|
|
||||||
"replacements": [
|
|
||||||
{
|
|
||||||
"regex": "/^\\/serverSideScript\\.js($|[#?])/",
|
|
||||||
"replacement": "/NONEXISTENT_PAGE$1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"definingRegex": "/^\\/testdir_rewritten(?:$|[\\/?#])/",
|
|
||||||
"replacements": [
|
|
||||||
{
|
|
||||||
"regex": "/^\\/testdir_rewritten($|[\\/?#])/",
|
|
||||||
"replacement": "/testdir$1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"allowStatus": true,
|
|
||||||
"dontCompress": [
|
|
||||||
"/.*\\.ipxe$/",
|
|
||||||
"/.*\\.(?:jpe?g|png|bmp|tiff|jfif|gif|webp)$/",
|
|
||||||
"/.*\\.(?:[id]mg|iso|flp)$/",
|
|
||||||
"/.*\\.(?:zip|rar|bz2|[gb7x]z|lzma|tar)$/",
|
|
||||||
"/.*\\.(?:mp[34]|mov|wm[av]|avi|webm|og[gv]|mk[va])$/"
|
|
||||||
],
|
|
||||||
"enableIPSpoofing": false,
|
|
||||||
"secure": false,
|
|
||||||
"sni": {},
|
|
||||||
"disableNonEncryptedServer": false,
|
|
||||||
"disableToHTTPSRedirect": false,
|
|
||||||
"enableETag": true,
|
|
||||||
"disableUnusedWorkerTermination": false,
|
|
||||||
"rewriteDirtyURLs": true,
|
|
||||||
"errorPages": [],
|
|
||||||
"useWebRootServerSideScript": true,
|
|
||||||
"exposeModsInErrorPages": true,
|
|
||||||
"disableTrailingSlashRedirects": false,
|
|
||||||
"environmentVariables": {},
|
|
||||||
"allowDoubleSlashes": false,
|
|
||||||
"optOutOfStatisticsServer": false
|
|
||||||
}</pre>
|
|
||||||
</code>
|
|
||||||
<p>Changes:</p>
|
|
||||||
<ul style="display: inline-block; margin: 0;">
|
|
||||||
<li>Fix bug in getting public IP address without crypto support.</li>
|
|
||||||
<li>Fix bug in partial content serving functionality.</li>
|
|
||||||
<li>Fix bug in the factory reset function.</li>
|
|
||||||
<li>Fix bug in the IP address match function.</li>
|
|
||||||
<li>Fix bug in the URL parser with href attribute of a parsed URL missing a port number.</li>
|
|
||||||
<li>Fix bug with config.json read errors being undefined.</li>
|
|
||||||
<li>Fix bugs in the block list.</li>
|
|
||||||
<li>Main process crashes no longer display as worker crashes.</li>
|
|
||||||
<li>Server crashes now results in exit code of 1 if no exit code is not specified.</li>
|
|
||||||
<li>Updated dependencies.</li>
|
|
||||||
</ul>
|
|
||||||
<p>
|
|
||||||
<a href="/tests.html">Tests</a><br />
|
|
||||||
<a href="/licenses/">Licenses</a><br />
|
|
||||||
<a href="/svrjsstatus.svr">SVR.JS status page</a><br />
|
|
||||||
<a href="https://svrjs.org/docs">SVR.JS documentation</a>
|
|
||||||
</p>
|
|
||||||
<img src="/powered.png" />
|
|
||||||
</body>
|
|
||||||
</html>
|
|
5
jest.config.js
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
module.exports = {
|
||||||
|
testEnvironment: 'node',
|
||||||
|
testMatch: ['**/tests/**/*.test.js'],
|
||||||
|
verbose: true,
|
||||||
|
};
|
|
@ -1,21 +0,0 @@
|
||||||
|
|
||||||
Copyright 2009–2014 Contributors. All rights reserved.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
Copyright (c) 2010-2014 Caolan McMahon
|
|
||||||
|
|
||||||
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.
|
|
|
@ -1,19 +0,0 @@
|
||||||
Copyright Fedor Indutny, 2015.
|
|
||||||
|
|
||||||
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.
|
|
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2020 Jordan Harband
|
|
||||||
|
|
||||||
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.
|
|
|
@ -1,15 +0,0 @@
|
||||||
The ISC License
|
|
||||||
|
|
||||||
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
||||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2023 Jordan Harband
|
|
||||||
|
|
||||||
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.
|
|
|
@ -1,15 +0,0 @@
|
||||||
The ISC License
|
|
||||||
|
|
||||||
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
||||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2024 Jordan Harband
|
|
||||||
|
|
||||||
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.
|
|
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2024 Jordan Harband
|
|
||||||
|
|
||||||
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.
|
|
|
@ -1,21 +0,0 @@
|
||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2011-present Felix Geisendörfer, and contributors.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
|
@ -1,15 +0,0 @@
|
||||||
The ISC License
|
|
||||||
|
|
||||||
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
||||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
@ -1,20 +0,0 @@
|
||||||
Copyright (c) 2013 Raynos.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2020 Jordan Harband
|
|
||||||
|
|
||||||
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.
|
|
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2022 Jordan Harband
|
|
||||||
|
|
||||||
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.
|
|
|
@ -1,15 +0,0 @@
|
||||||
The ISC License
|
|
||||||
|
|
||||||
Copyright (c) 2011-2022 Isaac Z. Schlueter, Ben Noordhuis, and Contributors
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
||||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2022 Inspect JS
|
|
||||||
|
|
||||||
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.
|
|
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2022 Inspect JS
|
|
||||||
|
|
||||||
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.
|
|
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2016 Jordan Harband
|
|
||||||
|
|
||||||
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.
|
|
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) Jordan Harband and contributors
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
|
@ -1,9 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
@ -1,476 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>SVR.JS 3.15.7 Licenses</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
background-color: #dfffdf;
|
|
||||||
color: #000000;
|
|
||||||
font-family: FreeSans, Helvetica, Tahoma, Verdana, Arial, sans-serif;
|
|
||||||
margin: 0.75em;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
background-color: #ffffff;
|
|
||||||
padding: 0.5em 0.5em 0.1em;
|
|
||||||
margin: 0.5em auto;
|
|
||||||
width: 90%;
|
|
||||||
max-width: 800px;
|
|
||||||
-webkit-box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.15);
|
|
||||||
-moz-box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.15);
|
|
||||||
box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.15)
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
text-align: center;
|
|
||||||
font-size: 2.25em;
|
|
||||||
margin: 0.3em 0 0.5em
|
|
||||||
}
|
|
||||||
|
|
||||||
pre,
|
|
||||||
code {
|
|
||||||
background-color: #dfffdf;
|
|
||||||
-webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1);
|
|
||||||
-moz-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1);
|
|
||||||
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1);
|
|
||||||
display: block;
|
|
||||||
padding: 0.2em;
|
|
||||||
font-family: "DejaVu Sans Mono", "Bitstream Vera Sans Mono", Hack, Menlo, Consolas, Monaco, monospace;
|
|
||||||
font-size: 0.85em;
|
|
||||||
margin: auto;
|
|
||||||
width: 95%;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (prefers-color-scheme: dark) {
|
|
||||||
html {
|
|
||||||
background-color: #002000;
|
|
||||||
color: #ffffff
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
background-color: #000f00;
|
|
||||||
-webkit-box-shadow: 0 5px 10px 0 rgba(127, 127, 127, 0.15);
|
|
||||||
-moz-box-shadow: 0 5px 10px 0 rgba(127, 127, 127, 0.15);
|
|
||||||
box-shadow: 0 5px 10px 0 rgba(127, 127, 127, 0.15)
|
|
||||||
}
|
|
||||||
|
|
||||||
pre,
|
|
||||||
code {
|
|
||||||
background-color: #002000;
|
|
||||||
-webkit-box-shadow: 0 2px 4px 0 rgba(127, 127, 127, 0.1);
|
|
||||||
-moz-box-shadow: 0 2px 4px 0 rgba(127, 127, 127, 0.1);
|
|
||||||
box-shadow: 0 2px 4px 0 rgba(127, 127, 127, 0.1)
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #ffffff
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
color: #00ff00
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>SVR.JS 3.15.7 Licenses</h1>
|
|
||||||
<h2>SVR.JS 3.15.7</h2>
|
|
||||||
<div style="display: inline-block; text-align: left; border-width: 2px; border-style: solid; border-color: gray; padding: 8px;">
|
|
||||||
MIT License<br/>
|
|
||||||
<br/>
|
|
||||||
Copyright (c) 2018-2024 SVR.JS<br/>
|
|
||||||
<br/>
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy<br/>
|
|
||||||
of this software and associated documentation files (the "Software"), to deal<br/>
|
|
||||||
in the Software without restriction, including without limitation the rights<br/>
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell<br/>
|
|
||||||
copies of the Software, and to permit persons to whom the Software is<br/>
|
|
||||||
furnished to do so, subject to the following conditions:<br/>
|
|
||||||
<br/>
|
|
||||||
The above copyright notice and this permission notice shall be included in all<br/>
|
|
||||||
copies or substantial portions of the Software.<br/>
|
|
||||||
<br/>
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<br/>
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<br/>
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE<br/>
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER<br/>
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,<br/>
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE<br/>
|
|
||||||
SOFTWARE.<br/>
|
|
||||||
</div>
|
|
||||||
<h2>Packages used by SVR.JS 3.15.7</h2>
|
|
||||||
<div style="width: 100%; max-width: 1280px; margin: auto">
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/asap.txt"><b>asap</b></a>
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
High-priority task queue for Node.js and browsers
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/asn1.js.txt"><b>asn1.js</b></a> (by Fedor Indutny)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
ASN.1 encoder and decoder
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/asn1.js-rfc2560.txt"><b>asn1.js-rfc2560</b></a> (by Fedor Indutny)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
RFC2560 structures for asn1.js
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/asn1.js-rfc5280.txt"><b>asn1.js-rfc5280</b></a> (by Felix Hanley)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
RFC5280 extension structures for asn1.js
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/async.txt"><b>async</b></a> (by Caolan McMahon)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Higher-order functions and common patterns for asynchronous code
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/bn.js.txt"><b>bn.js</b></a> (by Fedor Indutny)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Big number implementation in pure javascript
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/call-bind.txt"><b>call-bind</b></a> (by Jordan Harband)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Robustly `.call.bind()` a function
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: ISC</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/chownr.txt"><b>chownr</b></a> (by Isaac Z. Schlueter)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
like `chown -R`
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/define-data-property.txt"><b>define-data-property</b></a> (by Jordan Harband)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Define a data property on an object. Will fall back to assignment in an engine without descriptors.
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: ISC</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/dezalgo.txt"><b>dezalgo</b></a> (by Isaac Z. Schlueter)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Contain async insanity so that the dark pony lord doesn't eat souls
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/es-define-property.txt"><b>es-define-property</b></a> (by Jordan Harband)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
`Object.defineProperty`, but not IE 8's broken one.
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/es-errors.txt"><b>es-errors</b></a> (by Jordan Harband)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
A simple cache for a few of the JS Error constructors.
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/formidable.txt"><b>formidable</b></a>
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
A node.js module for parsing form data, especially file uploads.<br/>
|
|
||||||
<b>Required by SVR.JS</b>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: ISC</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/fs-minipass.txt"><b>fs-minipass</b></a> (by Isaac Z. Schlueter)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
fs read and write streams based on minipass<br/>
|
|
||||||
<b>Patched to work with Bun</b>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/function-bind.txt"><b>function-bind</b></a> (by Raynos)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Implementation of Function.prototype.bind
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/get-intrinsic.txt"><b>get-intrinsic</b></a> (by Jordan Harband)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Get and robustly cache all JS language-level intrinsics at first require time
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/gopd.txt"><b>gopd</b></a> (by Jordan Harband)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
`Object.getOwnPropertyDescriptor`, but accounts for IE's broken implementation.
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: ISC</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/graceful-fs.txt"><b>graceful-fs</b></a>
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
A drop-in replacement for fs, making various improvements.<br/>
|
|
||||||
<b>Required by SVR.JS.</b>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/has-property-descriptors.txt"><b>has-property-descriptors</b></a> (by Jordan Harband)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Does the environment have full property descriptor support? Handles IE 8's broken defineProperty/gOPD.
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/has-proto.txt"><b>has-proto</b></a> (by Jordan Harband)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Does this environment have the ability to get the [[Prototype]] of an object on creation with <code>__proto__</code>?
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/has-symbols.txt"><b>has-symbols</b></a> (by Jordan Harband)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Determine if the JS environment has Symbol support. Supports spec, or shams.
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/hasown.txt"><b>hasown</b></a> (by Jordan Harband)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
A robust, ES3 compatible, "has own property" predicate.
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/hexoid.txt"><b>hexoid</b></a> (by Luke Edwards)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
A tiny (190B) and extremely fast utility to generate random IDs of fixed length
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: ISC</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/inherits.txt"><b>inherits</b></a>
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Browser-friendly inheritance fully compatible with standard node.js inherits()
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/mime-db.txt"><b>mime-db</b></a>
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Media Type Database
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/mime-types.txt"><b>mime-types</b></a>
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
The ultimate javascript content-type utility.<br/>
|
|
||||||
<b>Required by SVR.JS.</b>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: ISC</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/minimalistic-assert.txt"><b>minimalistic-assert</b></a>
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
minimalistic-assert ===
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: ISC</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/minipass.txt"><b>minipass</b></a> (by Isaac Z. Schlueter)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
minimal implementation of a PassThrough stream
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/minizlib.txt"><b>minizlib</b></a> (by Isaac Z. Schlueter)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
A small fast zlib stream built on <a href="http://npm.im/minipass">minipass</a> and Node.js's zlib binding.
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/mkdirp.txt"><b>mkdirp</b></a>
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Recursively mkdir, like `mkdir -p`
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/object-inspect.txt"><b>object-inspect</b></a> (by James Halliday)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
string representations of objects in node and the browser
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/ocsp.txt"><b>ocsp</b></a> (by Fedor Indutny)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
OCSP Stapling implementation<br/>
|
|
||||||
<b>Required by SVR.JS.</b>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: ISC</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/once.txt"><b>once</b></a> (by Isaac Z. Schlueter)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Run a function exactly one time
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: BSD-3</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/qs.txt"><b>qs</b></a>
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
A querystring parser that supports nesting and arrays, with a depth limit
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/set-function-length.txt"><b>set-function-length</b></a> (by Jordan Harband)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Set a function's length property
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/side-channel.txt"><b>side-channel</b></a> (by Jordan Harband)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Store information about any JS value in a side channel. Uses WeakMap if available.
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: MIT</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/simple-lru-cache.txt"><b>simple-lru-cache</b></a> (by Gabriel Eisbruch)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
node-simple-lru-cache =====================
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: ISC</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/tar.txt"><b>tar</b></a> (by GitHub Inc.)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
tar for node<br/>
|
|
||||||
<b>Required by SVR.JS.</b>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: ISC</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/wrappy.txt"><b>wrappy</b></a> (by Isaac Z. Schlueter)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Callback wrapping utility
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%; background-color: #ccc; background-color: rgba(200, 200, 200, 0.3); border: 1px solid green; text-align: left; margin: 10px 0;">
|
|
||||||
<div style="float: right;">License: ISC</div>
|
|
||||||
<div style="font-size: 20px;">
|
|
||||||
<a href="/licenses/yallist.txt"><b>yallist</b></a> (by Isaac Z. Schlueter)
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 12px;">
|
|
||||||
Yet Another Linked List
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<br/>
|
|
||||||
<img src="/powered.png" />
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,16 +0,0 @@
|
||||||
The ISC License
|
|
||||||
|
|
||||||
Copyright (c) Isaac Z. Schlueter
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
||||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
||||||
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
||||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
||||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
(The MIT License)
|
|
||||||
|
|
||||||
Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
|
|
||||||
Copyright (c) 2015-2022 Douglas Christopher Wilson <doug@somethingdoug.com>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
'Software'), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
||||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
||||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
||||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
@ -1,23 +0,0 @@
|
||||||
(The MIT License)
|
|
||||||
|
|
||||||
Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
|
|
||||||
Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
'Software'), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
||||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
||||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
||||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
@ -1,13 +0,0 @@
|
||||||
Copyright 2015 Calvin Metcalf
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any purpose
|
|
||||||
with or without fee is hereby granted, provided that the above copyright notice
|
|
||||||
and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
||||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
||||||
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
||||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
||||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
|
||||||
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
PERFORMANCE OF THIS SOFTWARE.
|
|
|
@ -1,15 +0,0 @@
|
||||||
The ISC License
|
|
||||||
|
|
||||||
Copyright (c) 2017-2023 npm, Inc., Isaac Z. Schlueter, and Contributors
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
||||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
@ -1,26 +0,0 @@
|
||||||
Minizlib was created by Isaac Z. Schlueter.
|
|
||||||
It is a derivative work of the Node.js project.
|
|
||||||
|
|
||||||
"""
|
|
||||||
Copyright Isaac Z. Schlueter and Contributors
|
|
||||||
Copyright Node.js contributors. All rights reserved.
|
|
||||||
Copyright Joyent, Inc. and other Node contributors. All rights reserved.
|
|
||||||
|
|
||||||
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.
|
|
||||||
"""
|
|
|
@ -1,21 +0,0 @@
|
||||||
Copyright James Halliday (mail@substack.net) and Isaac Z. Schlueter (i@izs.me)
|
|
||||||
|
|
||||||
This project is free software released under the MIT license:
|
|
||||||
|
|
||||||
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.
|
|
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2013 James Halliday
|
|
||||||
|
|
||||||
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.
|
|
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) [year] [fullname]
|
|
||||||
|
|
||||||
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.
|
|
|
@ -1,15 +0,0 @@
|
||||||
The ISC License
|
|
||||||
|
|
||||||
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
||||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
@ -1,29 +0,0 @@
|
||||||
BSD 3-Clause License
|
|
||||||
|
|
||||||
Copyright (c) 2014, Nathan LaFreniere and other [contributors](https://github.com/ljharb/qs/graphs/contributors)
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer in the documentation
|
|
||||||
and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
3. Neither the name of the copyright holder nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
||||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) Jordan Harband and contributors
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2019 Jordan Harband
|
|
||||||
|
|
||||||
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.
|
|
|
@ -1,19 +0,0 @@
|
||||||
Copyright (c) 2013 Mercadolibre.com
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
|
@ -1,15 +0,0 @@
|
||||||
The ISC License
|
|
||||||
|
|
||||||
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
||||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
@ -1,15 +0,0 @@
|
||||||
The ISC License
|
|
||||||
|
|
||||||
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
||||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
@ -1,15 +0,0 @@
|
||||||
The ISC License
|
|
||||||
|
|
||||||
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
||||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
5
lint-staged.config.js
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
module.exports = {
|
||||||
|
"tests/**/*.js": "eslint --cache --fix",
|
||||||
|
"src/**/*.js": "eslint --cache --fix",
|
||||||
|
"utils/**/*.js": "eslint --cache --fix"
|
||||||
|
};
|
|
@ -1,52 +0,0 @@
|
||||||
//SVR.JS LOG HIGHLIGHTER
|
|
||||||
|
|
||||||
var readline = require("readline");
|
|
||||||
var process = require("process");
|
|
||||||
|
|
||||||
var args = process.argv;
|
|
||||||
for (var i = (process.argv[0].indexOf("node") > -1 || process.argv[0].indexOf("bun") > -1 ? 2 : 1); i < args.length; i++) {
|
|
||||||
if (args[i] == "-h" || args[i] == "--help" || args[i] == "-?" || args[i] == "/h" || args[i] == "/?") {
|
|
||||||
console.log("SVR.JS log highlighter usage:");
|
|
||||||
console.log("<some process> | node loghighlight.js [-h] [--help] [-?] [/h] [/?]");
|
|
||||||
console.log("-h -? /h /? --help -- Displays help");
|
|
||||||
process.exit(0);
|
|
||||||
} else {
|
|
||||||
console.log("Unrecognized argument: " + args[i]);
|
|
||||||
console.log("SVR.JS log highlighter usage:");
|
|
||||||
console.log("<some process> | node loghighlight.js [-h] [--help] [-?] [/h] [/?]");
|
|
||||||
console.log("-h -? /h /? --help -- Displays help");
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var rl = readline.createInterface({
|
|
||||||
input: process.stdin,
|
|
||||||
output: process.stdout,
|
|
||||||
terminal: false,
|
|
||||||
prompt: ''
|
|
||||||
});
|
|
||||||
rl.prompt();
|
|
||||||
rl.on('line', (line) => {
|
|
||||||
viewLog([line]);
|
|
||||||
});
|
|
||||||
|
|
||||||
function viewLog(log) {
|
|
||||||
if(log[log.length-1] == "") log.pop();
|
|
||||||
if(log[0] == "") log.shift();
|
|
||||||
for(var i=0;i<log.length;i++) {
|
|
||||||
if(log[i].indexOf("SERVER REQUEST MESSAGE") != -1) {
|
|
||||||
log[i] = log[i].replace("SERVER REQUEST MESSAGE","\x1b[34m\x1b[1mSERVER REQUEST MESSAGE\x1b[22m") + "\x1b[37m\x1b[0m";
|
|
||||||
} else if(log[i].indexOf("SERVER RESPONSE MESSAGE") != -1) {
|
|
||||||
log[i] = log[i].replace("SERVER RESPONSE MESSAGE","\x1b[32m\x1b[1mSERVER RESPONSE MESSAGE\x1b[22m") + "\x1b[37m\x1b[0m";
|
|
||||||
} else if(log[i].indexOf("SERVER RESPONSE ERROR MESSAGE") != -1) {
|
|
||||||
log[i] = log[i].replace("SERVER RESPONSE ERROR MESSAGE","\x1b[31m\x1b[1mSERVER RESPONSE ERROR MESSAGE\x1b[22m") + "\x1b[37m\x1b[0m";
|
|
||||||
} else if(log[i].indexOf("SERVER ERROR MESSAGE") != -1) {
|
|
||||||
log[i] = log[i].replace("SERVER ERROR MESSAGE","\x1b[41m\x1b[1mSERVER ERROR MESSAGE\x1b[22m") + "\x1b[40m\x1b[0m";
|
|
||||||
} else if(log[i].indexOf("SERVER WARNING MESSAGE") != -1) {
|
|
||||||
log[i] = log[i].replace("SERVER WARNING MESSAGE","\x1b[43m\x1b[1mSERVER WARNING MESSAGE\x1b[22m") + "\x1b[40m\x1b[0m";
|
|
||||||
} else if(log[i].indexOf("SERVER MESSAGE") != -1) {
|
|
||||||
log[i] = log[i].replace("SERVER MESSAGE","\x1b[1mSERVER MESSAGE\x1b[22m");
|
|
||||||
}
|
|
||||||
console.log(log[i]);
|
|
||||||
}
|
|
||||||
}
|
|
BIN
logo.png
Before Width: | Height: | Size: 44 KiB |
177
logviewer.js
1
node_modules/.bin/mkdirp
generated
vendored
|
@ -1 +0,0 @@
|
||||||
../mkdirp/bin/cmd.js
|
|
70
node_modules/asap/CHANGES.md
generated
vendored
|
@ -1,70 +0,0 @@
|
||||||
|
|
||||||
## 2.0.6
|
|
||||||
|
|
||||||
Version 2.0.4 adds support for React Native by clarifying in package.json that
|
|
||||||
the browser environment does not support Node.js domains.
|
|
||||||
Why this is necessary, we leave as an exercise for the user.
|
|
||||||
|
|
||||||
## 2.0.3
|
|
||||||
|
|
||||||
Version 2.0.3 fixes a bug when adjusting the capacity of the task queue.
|
|
||||||
|
|
||||||
## 2.0.1-2.02
|
|
||||||
|
|
||||||
Version 2.0.1 fixes a bug in the way redirects were expressed that affected the
|
|
||||||
function of Browserify, but which Mr would tolerate.
|
|
||||||
|
|
||||||
## 2.0.0
|
|
||||||
|
|
||||||
Version 2 of ASAP is a full rewrite with a few salient changes.
|
|
||||||
First, the ASAP source is CommonJS only and designed with [Browserify][] and
|
|
||||||
[Browserify-compatible][Mr] module loaders in mind.
|
|
||||||
|
|
||||||
[Browserify]: https://github.com/substack/node-browserify
|
|
||||||
[Mr]: https://github.com/montagejs/mr
|
|
||||||
|
|
||||||
The new version has been refactored in two dimensions.
|
|
||||||
Support for Node.js and browsers have been separated, using Browserify
|
|
||||||
redirects and ASAP has been divided into two modules.
|
|
||||||
The "raw" layer depends on the tasks to catch thrown exceptions and unravel
|
|
||||||
Node.js domains.
|
|
||||||
|
|
||||||
The full implementation of ASAP is loadable as `require("asap")` in both Node.js
|
|
||||||
and browsers.
|
|
||||||
|
|
||||||
The raw layer that lacks exception handling overhead is loadable as
|
|
||||||
`require("asap/raw")`.
|
|
||||||
The interface is the same for both layers.
|
|
||||||
|
|
||||||
Tasks are no longer required to be functions, but can rather be any object that
|
|
||||||
implements `task.call()`.
|
|
||||||
With this feature you can recycle task objects to avoid garbage collector churn
|
|
||||||
and avoid closures in general.
|
|
||||||
|
|
||||||
The implementation has been rigorously documented so that our successors can
|
|
||||||
understand the scope of the problem that this module solves and all of its
|
|
||||||
nuances, ensuring that the next generation of implementations know what details
|
|
||||||
are essential.
|
|
||||||
|
|
||||||
- [asap.js](https://github.com/kriskowal/asap/blob/master/asap.js)
|
|
||||||
- [raw.js](https://github.com/kriskowal/asap/blob/master/raw.js)
|
|
||||||
- [browser-asap.js](https://github.com/kriskowal/asap/blob/master/browser-asap.js)
|
|
||||||
- [browser-raw.js](https://github.com/kriskowal/asap/blob/master/browser-raw.js)
|
|
||||||
|
|
||||||
The new version has also been rigorously tested across a broad spectrum of
|
|
||||||
browsers, in both the window and worker context.
|
|
||||||
The following charts capture the browser test results for the most recent
|
|
||||||
release.
|
|
||||||
The first chart shows test results for ASAP running in the main window context.
|
|
||||||
The second chart shows test results for ASAP running in a web worker context.
|
|
||||||
Test results are inconclusive (grey) on browsers that do not support web
|
|
||||||
workers.
|
|
||||||
These data are captured automatically by [Continuous
|
|
||||||
Integration][].
|
|
||||||
|
|
||||||
![Browser Compatibility](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-results-matrix.svg)
|
|
||||||
|
|
||||||
![Compatibility in Web Workers](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-worker-results-matrix.svg)
|
|
||||||
|
|
||||||
[Continuous Integration]: https://github.com/kriskowal/asap/blob/master/CONTRIBUTING.md
|
|
||||||
|
|
21
node_modules/asap/LICENSE.md
generated
vendored
|
@ -1,21 +0,0 @@
|
||||||
|
|
||||||
Copyright 2009–2014 Contributors. All rights reserved.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
237
node_modules/asap/README.md
generated
vendored
|
@ -1,237 +0,0 @@
|
||||||
# ASAP
|
|
||||||
|
|
||||||
[![Build Status](https://travis-ci.org/kriskowal/asap.png?branch=master)](https://travis-ci.org/kriskowal/asap)
|
|
||||||
|
|
||||||
Promise and asynchronous observer libraries, as well as hand-rolled callback
|
|
||||||
programs and libraries, often need a mechanism to postpone the execution of a
|
|
||||||
callback until the next available event.
|
|
||||||
(See [Designing API’s for Asynchrony][Zalgo].)
|
|
||||||
The `asap` function executes a task **as soon as possible** but not before it
|
|
||||||
returns, waiting only for the completion of the current event and previously
|
|
||||||
scheduled tasks.
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
asap(function () {
|
|
||||||
// ...
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
[Zalgo]: http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony
|
|
||||||
|
|
||||||
This CommonJS package provides an `asap` module that exports a function that
|
|
||||||
executes a task function *as soon as possible*.
|
|
||||||
|
|
||||||
ASAP strives to schedule events to occur before yielding for IO, reflow,
|
|
||||||
or redrawing.
|
|
||||||
Each event receives an independent stack, with only platform code in parent
|
|
||||||
frames and the events run in the order they are scheduled.
|
|
||||||
|
|
||||||
ASAP provides a fast event queue that will execute tasks until it is
|
|
||||||
empty before yielding to the JavaScript engine's underlying event-loop.
|
|
||||||
When a task gets added to a previously empty event queue, ASAP schedules a flush
|
|
||||||
event, preferring for that event to occur before the JavaScript engine has an
|
|
||||||
opportunity to perform IO tasks or rendering, thus making the first task and
|
|
||||||
subsequent tasks semantically indistinguishable.
|
|
||||||
ASAP uses a variety of techniques to preserve this invariant on different
|
|
||||||
versions of browsers and Node.js.
|
|
||||||
|
|
||||||
By design, ASAP prevents input events from being handled until the task
|
|
||||||
queue is empty.
|
|
||||||
If the process is busy enough, this may cause incoming connection requests to be
|
|
||||||
dropped, and may cause existing connections to inform the sender to reduce the
|
|
||||||
transmission rate or stall.
|
|
||||||
ASAP allows this on the theory that, if there is enough work to do, there is no
|
|
||||||
sense in looking for trouble.
|
|
||||||
As a consequence, ASAP can interfere with smooth animation.
|
|
||||||
If your task should be tied to the rendering loop, consider using
|
|
||||||
`requestAnimationFrame` instead.
|
|
||||||
A long sequence of tasks can also effect the long running script dialog.
|
|
||||||
If this is a problem, you may be able to use ASAP’s cousin `setImmediate` to
|
|
||||||
break long processes into shorter intervals and periodically allow the browser
|
|
||||||
to breathe.
|
|
||||||
`setImmediate` will yield for IO, reflow, and repaint events.
|
|
||||||
It also returns a handler and can be canceled.
|
|
||||||
For a `setImmediate` shim, consider [YuzuJS setImmediate][setImmediate].
|
|
||||||
|
|
||||||
[setImmediate]: https://github.com/YuzuJS/setImmediate
|
|
||||||
|
|
||||||
Take care.
|
|
||||||
ASAP can sustain infinite recursive calls without warning.
|
|
||||||
It will not halt from a stack overflow, and it will not consume unbounded
|
|
||||||
memory.
|
|
||||||
This is behaviorally equivalent to an infinite loop.
|
|
||||||
Just as with infinite loops, you can monitor a Node.js process for this behavior
|
|
||||||
with a heart-beat signal.
|
|
||||||
As with infinite loops, a very small amount of caution goes a long way to
|
|
||||||
avoiding problems.
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
function loop() {
|
|
||||||
asap(loop);
|
|
||||||
}
|
|
||||||
loop();
|
|
||||||
```
|
|
||||||
|
|
||||||
In browsers, if a task throws an exception, it will not interrupt the flushing
|
|
||||||
of high-priority tasks.
|
|
||||||
The exception will be postponed to a later, low-priority event to avoid
|
|
||||||
slow-downs.
|
|
||||||
In Node.js, if a task throws an exception, ASAP will resume flushing only if—and
|
|
||||||
only after—the error is handled by `domain.on("error")` or
|
|
||||||
`process.on("uncaughtException")`.
|
|
||||||
|
|
||||||
## Raw ASAP
|
|
||||||
|
|
||||||
Checking for exceptions comes at a cost.
|
|
||||||
The package also provides an `asap/raw` module that exports the underlying
|
|
||||||
implementation which is faster but stalls if a task throws an exception.
|
|
||||||
This internal version of the ASAP function does not check for errors.
|
|
||||||
If a task does throw an error, it will stall the event queue unless you manually
|
|
||||||
call `rawAsap.requestFlush()` before throwing the error, or any time after.
|
|
||||||
|
|
||||||
In Node.js, `asap/raw` also runs all tasks outside any domain.
|
|
||||||
If you need a task to be bound to your domain, you will have to do it manually.
|
|
||||||
|
|
||||||
```js
|
|
||||||
if (process.domain) {
|
|
||||||
task = process.domain.bind(task);
|
|
||||||
}
|
|
||||||
rawAsap(task);
|
|
||||||
```
|
|
||||||
|
|
||||||
## Tasks
|
|
||||||
|
|
||||||
A task may be any object that implements `call()`.
|
|
||||||
A function will suffice, but closures tend not to be reusable and can cause
|
|
||||||
garbage collector churn.
|
|
||||||
Both `asap` and `rawAsap` accept task objects to give you the option of
|
|
||||||
recycling task objects or using higher callable object abstractions.
|
|
||||||
See the `asap` source for an illustration.
|
|
||||||
|
|
||||||
|
|
||||||
## Compatibility
|
|
||||||
|
|
||||||
ASAP is tested on Node.js v0.10 and in a broad spectrum of web browsers.
|
|
||||||
The following charts capture the browser test results for the most recent
|
|
||||||
release.
|
|
||||||
The first chart shows test results for ASAP running in the main window context.
|
|
||||||
The second chart shows test results for ASAP running in a web worker context.
|
|
||||||
Test results are inconclusive (grey) on browsers that do not support web
|
|
||||||
workers.
|
|
||||||
These data are captured automatically by [Continuous
|
|
||||||
Integration][].
|
|
||||||
|
|
||||||
[Continuous Integration]: https://github.com/kriskowal/asap/blob/master/CONTRIBUTING.md
|
|
||||||
|
|
||||||
![Browser Compatibility](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-results-matrix.svg)
|
|
||||||
|
|
||||||
![Compatibility in Web Workers](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-worker-results-matrix.svg)
|
|
||||||
|
|
||||||
## Caveats
|
|
||||||
|
|
||||||
When a task is added to an empty event queue, it is not always possible to
|
|
||||||
guarantee that the task queue will begin flushing immediately after the current
|
|
||||||
event.
|
|
||||||
However, once the task queue begins flushing, it will not yield until the queue
|
|
||||||
is empty, even if the queue grows while executing tasks.
|
|
||||||
|
|
||||||
The following browsers allow the use of [DOM mutation observers][] to access
|
|
||||||
the HTML [microtask queue][], and thus begin flushing ASAP's task queue
|
|
||||||
immediately at the end of the current event loop turn, before any rendering or
|
|
||||||
IO:
|
|
||||||
|
|
||||||
[microtask queue]: http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#microtask-queue
|
|
||||||
[DOM mutation observers]: http://dom.spec.whatwg.org/#mutation-observers
|
|
||||||
|
|
||||||
- Android 4–4.3
|
|
||||||
- Chrome 26–34
|
|
||||||
- Firefox 14–29
|
|
||||||
- Internet Explorer 11
|
|
||||||
- iPad Safari 6–7.1
|
|
||||||
- iPhone Safari 7–7.1
|
|
||||||
- Safari 6–7
|
|
||||||
|
|
||||||
In the absense of mutation observers, there are a few browsers, and situations
|
|
||||||
like web workers in some of the above browsers, where [message channels][]
|
|
||||||
would be a useful way to avoid falling back to timers.
|
|
||||||
Message channels give direct access to the HTML [task queue][], so the ASAP
|
|
||||||
task queue would flush after any already queued rendering and IO tasks, but
|
|
||||||
without having the minimum delay imposed by timers.
|
|
||||||
However, among these browsers, Internet Explorer 10 and Safari do not reliably
|
|
||||||
dispatch messages, so they are not worth the trouble to implement.
|
|
||||||
|
|
||||||
[message channels]: http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#message-channels
|
|
||||||
[task queue]: http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#concept-task
|
|
||||||
|
|
||||||
- Internet Explorer 10
|
|
||||||
- Safair 5.0-1
|
|
||||||
- Opera 11-12
|
|
||||||
|
|
||||||
In the absense of mutation observers, these browsers and the following browsers
|
|
||||||
all fall back to using `setTimeout` and `setInterval` to ensure that a `flush`
|
|
||||||
occurs.
|
|
||||||
The implementation uses both and cancels whatever handler loses the race, since
|
|
||||||
`setTimeout` tends to occasionally skip tasks in unisolated circumstances.
|
|
||||||
Timers generally delay the flushing of ASAP's task queue for four milliseconds.
|
|
||||||
|
|
||||||
- Firefox 3–13
|
|
||||||
- Internet Explorer 6–10
|
|
||||||
- iPad Safari 4.3
|
|
||||||
- Lynx 2.8.7
|
|
||||||
|
|
||||||
|
|
||||||
## Heritage
|
|
||||||
|
|
||||||
ASAP has been factored out of the [Q][] asynchronous promise library.
|
|
||||||
It originally had a naïve implementation in terms of `setTimeout`, but
|
|
||||||
[Malte Ubl][NonBlocking] provided an insight that `postMessage` might be
|
|
||||||
useful for creating a high-priority, no-delay event dispatch hack.
|
|
||||||
Since then, Internet Explorer proposed and implemented `setImmediate`.
|
|
||||||
Robert Katić began contributing to Q by measuring the performance of
|
|
||||||
the internal implementation of `asap`, paying particular attention to
|
|
||||||
error recovery.
|
|
||||||
Domenic, Robert, and Kris Kowal collectively settled on the current strategy of
|
|
||||||
unrolling the high-priority event queue internally regardless of what strategy
|
|
||||||
we used to dispatch the potentially lower-priority flush event.
|
|
||||||
Domenic went on to make ASAP cooperate with Node.js domains.
|
|
||||||
|
|
||||||
[Q]: https://github.com/kriskowal/q
|
|
||||||
[NonBlocking]: http://www.nonblocking.io/2011/06/windownexttick.html
|
|
||||||
|
|
||||||
For further reading, Nicholas Zakas provided a thorough article on [The
|
|
||||||
Case for setImmediate][NCZ].
|
|
||||||
|
|
||||||
[NCZ]: http://www.nczonline.net/blog/2013/07/09/the-case-for-setimmediate/
|
|
||||||
|
|
||||||
Ember’s RSVP promise implementation later [adopted][RSVP ASAP] the name ASAP but
|
|
||||||
further developed the implentation.
|
|
||||||
Particularly, The `MessagePort` implementation was abandoned due to interaction
|
|
||||||
[problems with Mobile Internet Explorer][IE Problems] in favor of an
|
|
||||||
implementation backed on the newer and more reliable DOM `MutationObserver`
|
|
||||||
interface.
|
|
||||||
These changes were back-ported into this library.
|
|
||||||
|
|
||||||
[IE Problems]: https://github.com/cujojs/when/issues/197
|
|
||||||
[RSVP ASAP]: https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js
|
|
||||||
|
|
||||||
In addition, ASAP factored into `asap` and `asap/raw`, such that `asap` remained
|
|
||||||
exception-safe, but `asap/raw` provided a tight kernel that could be used for
|
|
||||||
tasks that guaranteed that they would not throw exceptions.
|
|
||||||
This core is useful for promise implementations that capture thrown errors in
|
|
||||||
rejected promises and do not need a second safety net.
|
|
||||||
At the same time, the exception handling in `asap` was factored into separate
|
|
||||||
implementations for Node.js and browsers, using the the [Browserify][Browser
|
|
||||||
Config] `browser` property in `package.json` to instruct browser module loaders
|
|
||||||
and bundlers, including [Browserify][], [Mr][], and [Mop][], to use the
|
|
||||||
browser-only implementation.
|
|
||||||
|
|
||||||
[Browser Config]: https://gist.github.com/defunctzombie/4339901
|
|
||||||
[Browserify]: https://github.com/substack/node-browserify
|
|
||||||
[Mr]: https://github.com/montagejs/mr
|
|
||||||
[Mop]: https://github.com/montagejs/mop
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
Copyright 2009-2014 by Contributors
|
|
||||||
MIT License (enclosed)
|
|
||||||
|
|
65
node_modules/asap/asap.js
generated
vendored
|
@ -1,65 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var rawAsap = require("./raw");
|
|
||||||
var freeTasks = [];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calls a task as soon as possible after returning, in its own event, with
|
|
||||||
* priority over IO events. An exception thrown in a task can be handled by
|
|
||||||
* `process.on("uncaughtException") or `domain.on("error")`, but will otherwise
|
|
||||||
* crash the process. If the error is handled, all subsequent tasks will
|
|
||||||
* resume.
|
|
||||||
*
|
|
||||||
* @param {{call}} task A callable object, typically a function that takes no
|
|
||||||
* arguments.
|
|
||||||
*/
|
|
||||||
module.exports = asap;
|
|
||||||
function asap(task) {
|
|
||||||
var rawTask;
|
|
||||||
if (freeTasks.length) {
|
|
||||||
rawTask = freeTasks.pop();
|
|
||||||
} else {
|
|
||||||
rawTask = new RawTask();
|
|
||||||
}
|
|
||||||
rawTask.task = task;
|
|
||||||
rawTask.domain = process.domain;
|
|
||||||
rawAsap(rawTask);
|
|
||||||
}
|
|
||||||
|
|
||||||
function RawTask() {
|
|
||||||
this.task = null;
|
|
||||||
this.domain = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
RawTask.prototype.call = function () {
|
|
||||||
if (this.domain) {
|
|
||||||
this.domain.enter();
|
|
||||||
}
|
|
||||||
var threw = true;
|
|
||||||
try {
|
|
||||||
this.task.call();
|
|
||||||
threw = false;
|
|
||||||
// If the task throws an exception (presumably) Node.js restores the
|
|
||||||
// domain stack for the next event.
|
|
||||||
if (this.domain) {
|
|
||||||
this.domain.exit();
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
// We use try/finally and a threw flag to avoid messing up stack traces
|
|
||||||
// when we catch and release errors.
|
|
||||||
if (threw) {
|
|
||||||
// In Node.js, uncaught exceptions are considered fatal errors.
|
|
||||||
// Re-throw them to interrupt flushing!
|
|
||||||
// Ensure that flushing continues if an uncaught exception is
|
|
||||||
// suppressed listening process.on("uncaughtException") or
|
|
||||||
// domain.on("error").
|
|
||||||
rawAsap.requestFlush();
|
|
||||||
}
|
|
||||||
// If the task threw an error, we do not want to exit the domain here.
|
|
||||||
// Exiting the domain would prevent the domain from catching the error.
|
|
||||||
this.task = null;
|
|
||||||
this.domain = null;
|
|
||||||
freeTasks.push(this);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
66
node_modules/asap/browser-asap.js
generated
vendored
|
@ -1,66 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
// rawAsap provides everything we need except exception management.
|
|
||||||
var rawAsap = require("./raw");
|
|
||||||
// RawTasks are recycled to reduce GC churn.
|
|
||||||
var freeTasks = [];
|
|
||||||
// We queue errors to ensure they are thrown in right order (FIFO).
|
|
||||||
// Array-as-queue is good enough here, since we are just dealing with exceptions.
|
|
||||||
var pendingErrors = [];
|
|
||||||
var requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError);
|
|
||||||
|
|
||||||
function throwFirstError() {
|
|
||||||
if (pendingErrors.length) {
|
|
||||||
throw pendingErrors.shift();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calls a task as soon as possible after returning, in its own event, with priority
|
|
||||||
* over other events like animation, reflow, and repaint. An error thrown from an
|
|
||||||
* event will not interrupt, nor even substantially slow down the processing of
|
|
||||||
* other events, but will be rather postponed to a lower priority event.
|
|
||||||
* @param {{call}} task A callable object, typically a function that takes no
|
|
||||||
* arguments.
|
|
||||||
*/
|
|
||||||
module.exports = asap;
|
|
||||||
function asap(task) {
|
|
||||||
var rawTask;
|
|
||||||
if (freeTasks.length) {
|
|
||||||
rawTask = freeTasks.pop();
|
|
||||||
} else {
|
|
||||||
rawTask = new RawTask();
|
|
||||||
}
|
|
||||||
rawTask.task = task;
|
|
||||||
rawAsap(rawTask);
|
|
||||||
}
|
|
||||||
|
|
||||||
// We wrap tasks with recyclable task objects. A task object implements
|
|
||||||
// `call`, just like a function.
|
|
||||||
function RawTask() {
|
|
||||||
this.task = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The sole purpose of wrapping the task is to catch the exception and recycle
|
|
||||||
// the task object after its single use.
|
|
||||||
RawTask.prototype.call = function () {
|
|
||||||
try {
|
|
||||||
this.task.call();
|
|
||||||
} catch (error) {
|
|
||||||
if (asap.onerror) {
|
|
||||||
// This hook exists purely for testing purposes.
|
|
||||||
// Its name will be periodically randomized to break any code that
|
|
||||||
// depends on its existence.
|
|
||||||
asap.onerror(error);
|
|
||||||
} else {
|
|
||||||
// In a web browser, exceptions are not fatal. However, to avoid
|
|
||||||
// slowing down the queue of pending tasks, we rethrow the error in a
|
|
||||||
// lower priority turn.
|
|
||||||
pendingErrors.push(error);
|
|
||||||
requestErrorThrow();
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
this.task = null;
|
|
||||||
freeTasks[freeTasks.length] = this;
|
|
||||||
}
|
|
||||||
};
|
|
223
node_modules/asap/browser-raw.js
generated
vendored
|
@ -1,223 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
// Use the fastest means possible to execute a task in its own turn, with
|
|
||||||
// priority over other events including IO, animation, reflow, and redraw
|
|
||||||
// events in browsers.
|
|
||||||
//
|
|
||||||
// An exception thrown by a task will permanently interrupt the processing of
|
|
||||||
// subsequent tasks. The higher level `asap` function ensures that if an
|
|
||||||
// exception is thrown by a task, that the task queue will continue flushing as
|
|
||||||
// soon as possible, but if you use `rawAsap` directly, you are responsible to
|
|
||||||
// either ensure that no exceptions are thrown from your task, or to manually
|
|
||||||
// call `rawAsap.requestFlush` if an exception is thrown.
|
|
||||||
module.exports = rawAsap;
|
|
||||||
function rawAsap(task) {
|
|
||||||
if (!queue.length) {
|
|
||||||
requestFlush();
|
|
||||||
flushing = true;
|
|
||||||
}
|
|
||||||
// Equivalent to push, but avoids a function call.
|
|
||||||
queue[queue.length] = task;
|
|
||||||
}
|
|
||||||
|
|
||||||
var queue = [];
|
|
||||||
// Once a flush has been requested, no further calls to `requestFlush` are
|
|
||||||
// necessary until the next `flush` completes.
|
|
||||||
var flushing = false;
|
|
||||||
// `requestFlush` is an implementation-specific method that attempts to kick
|
|
||||||
// off a `flush` event as quickly as possible. `flush` will attempt to exhaust
|
|
||||||
// the event queue before yielding to the browser's own event loop.
|
|
||||||
var requestFlush;
|
|
||||||
// The position of the next task to execute in the task queue. This is
|
|
||||||
// preserved between calls to `flush` so that it can be resumed if
|
|
||||||
// a task throws an exception.
|
|
||||||
var index = 0;
|
|
||||||
// If a task schedules additional tasks recursively, the task queue can grow
|
|
||||||
// unbounded. To prevent memory exhaustion, the task queue will periodically
|
|
||||||
// truncate already-completed tasks.
|
|
||||||
var capacity = 1024;
|
|
||||||
|
|
||||||
// The flush function processes all tasks that have been scheduled with
|
|
||||||
// `rawAsap` unless and until one of those tasks throws an exception.
|
|
||||||
// If a task throws an exception, `flush` ensures that its state will remain
|
|
||||||
// consistent and will resume where it left off when called again.
|
|
||||||
// However, `flush` does not make any arrangements to be called again if an
|
|
||||||
// exception is thrown.
|
|
||||||
function flush() {
|
|
||||||
while (index < queue.length) {
|
|
||||||
var currentIndex = index;
|
|
||||||
// Advance the index before calling the task. This ensures that we will
|
|
||||||
// begin flushing on the next task the task throws an error.
|
|
||||||
index = index + 1;
|
|
||||||
queue[currentIndex].call();
|
|
||||||
// Prevent leaking memory for long chains of recursive calls to `asap`.
|
|
||||||
// If we call `asap` within tasks scheduled by `asap`, the queue will
|
|
||||||
// grow, but to avoid an O(n) walk for every task we execute, we don't
|
|
||||||
// shift tasks off the queue after they have been executed.
|
|
||||||
// Instead, we periodically shift 1024 tasks off the queue.
|
|
||||||
if (index > capacity) {
|
|
||||||
// Manually shift all values starting at the index back to the
|
|
||||||
// beginning of the queue.
|
|
||||||
for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {
|
|
||||||
queue[scan] = queue[scan + index];
|
|
||||||
}
|
|
||||||
queue.length -= index;
|
|
||||||
index = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
queue.length = 0;
|
|
||||||
index = 0;
|
|
||||||
flushing = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// `requestFlush` is implemented using a strategy based on data collected from
|
|
||||||
// every available SauceLabs Selenium web driver worker at time of writing.
|
|
||||||
// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593
|
|
||||||
|
|
||||||
// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that
|
|
||||||
// have WebKitMutationObserver but not un-prefixed MutationObserver.
|
|
||||||
// Must use `global` or `self` instead of `window` to work in both frames and web
|
|
||||||
// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.
|
|
||||||
|
|
||||||
/* globals self */
|
|
||||||
var scope = typeof global !== "undefined" ? global : self;
|
|
||||||
var BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;
|
|
||||||
|
|
||||||
// MutationObservers are desirable because they have high priority and work
|
|
||||||
// reliably everywhere they are implemented.
|
|
||||||
// They are implemented in all modern browsers.
|
|
||||||
//
|
|
||||||
// - Android 4-4.3
|
|
||||||
// - Chrome 26-34
|
|
||||||
// - Firefox 14-29
|
|
||||||
// - Internet Explorer 11
|
|
||||||
// - iPad Safari 6-7.1
|
|
||||||
// - iPhone Safari 7-7.1
|
|
||||||
// - Safari 6-7
|
|
||||||
if (typeof BrowserMutationObserver === "function") {
|
|
||||||
requestFlush = makeRequestCallFromMutationObserver(flush);
|
|
||||||
|
|
||||||
// MessageChannels are desirable because they give direct access to the HTML
|
|
||||||
// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera
|
|
||||||
// 11-12, and in web workers in many engines.
|
|
||||||
// Although message channels yield to any queued rendering and IO tasks, they
|
|
||||||
// would be better than imposing the 4ms delay of timers.
|
|
||||||
// However, they do not work reliably in Internet Explorer or Safari.
|
|
||||||
|
|
||||||
// Internet Explorer 10 is the only browser that has setImmediate but does
|
|
||||||
// not have MutationObservers.
|
|
||||||
// Although setImmediate yields to the browser's renderer, it would be
|
|
||||||
// preferrable to falling back to setTimeout since it does not have
|
|
||||||
// the minimum 4ms penalty.
|
|
||||||
// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and
|
|
||||||
// Desktop to a lesser extent) that renders both setImmediate and
|
|
||||||
// MessageChannel useless for the purposes of ASAP.
|
|
||||||
// https://github.com/kriskowal/q/issues/396
|
|
||||||
|
|
||||||
// Timers are implemented universally.
|
|
||||||
// We fall back to timers in workers in most engines, and in foreground
|
|
||||||
// contexts in the following browsers.
|
|
||||||
// However, note that even this simple case requires nuances to operate in a
|
|
||||||
// broad spectrum of browsers.
|
|
||||||
//
|
|
||||||
// - Firefox 3-13
|
|
||||||
// - Internet Explorer 6-9
|
|
||||||
// - iPad Safari 4.3
|
|
||||||
// - Lynx 2.8.7
|
|
||||||
} else {
|
|
||||||
requestFlush = makeRequestCallFromTimer(flush);
|
|
||||||
}
|
|
||||||
|
|
||||||
// `requestFlush` requests that the high priority event queue be flushed as
|
|
||||||
// soon as possible.
|
|
||||||
// This is useful to prevent an error thrown in a task from stalling the event
|
|
||||||
// queue if the exception handled by Node.js’s
|
|
||||||
// `process.on("uncaughtException")` or by a domain.
|
|
||||||
rawAsap.requestFlush = requestFlush;
|
|
||||||
|
|
||||||
// To request a high priority event, we induce a mutation observer by toggling
|
|
||||||
// the text of a text node between "1" and "-1".
|
|
||||||
function makeRequestCallFromMutationObserver(callback) {
|
|
||||||
var toggle = 1;
|
|
||||||
var observer = new BrowserMutationObserver(callback);
|
|
||||||
var node = document.createTextNode("");
|
|
||||||
observer.observe(node, {characterData: true});
|
|
||||||
return function requestCall() {
|
|
||||||
toggle = -toggle;
|
|
||||||
node.data = toggle;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// The message channel technique was discovered by Malte Ubl and was the
|
|
||||||
// original foundation for this library.
|
|
||||||
// http://www.nonblocking.io/2011/06/windownexttick.html
|
|
||||||
|
|
||||||
// Safari 6.0.5 (at least) intermittently fails to create message ports on a
|
|
||||||
// page's first load. Thankfully, this version of Safari supports
|
|
||||||
// MutationObservers, so we don't need to fall back in that case.
|
|
||||||
|
|
||||||
// function makeRequestCallFromMessageChannel(callback) {
|
|
||||||
// var channel = new MessageChannel();
|
|
||||||
// channel.port1.onmessage = callback;
|
|
||||||
// return function requestCall() {
|
|
||||||
// channel.port2.postMessage(0);
|
|
||||||
// };
|
|
||||||
// }
|
|
||||||
|
|
||||||
// For reasons explained above, we are also unable to use `setImmediate`
|
|
||||||
// under any circumstances.
|
|
||||||
// Even if we were, there is another bug in Internet Explorer 10.
|
|
||||||
// It is not sufficient to assign `setImmediate` to `requestFlush` because
|
|
||||||
// `setImmediate` must be called *by name* and therefore must be wrapped in a
|
|
||||||
// closure.
|
|
||||||
// Never forget.
|
|
||||||
|
|
||||||
// function makeRequestCallFromSetImmediate(callback) {
|
|
||||||
// return function requestCall() {
|
|
||||||
// setImmediate(callback);
|
|
||||||
// };
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Safari 6.0 has a problem where timers will get lost while the user is
|
|
||||||
// scrolling. This problem does not impact ASAP because Safari 6.0 supports
|
|
||||||
// mutation observers, so that implementation is used instead.
|
|
||||||
// However, if we ever elect to use timers in Safari, the prevalent work-around
|
|
||||||
// is to add a scroll event listener that calls for a flush.
|
|
||||||
|
|
||||||
// `setTimeout` does not call the passed callback if the delay is less than
|
|
||||||
// approximately 7 in web workers in Firefox 8 through 18, and sometimes not
|
|
||||||
// even then.
|
|
||||||
|
|
||||||
function makeRequestCallFromTimer(callback) {
|
|
||||||
return function requestCall() {
|
|
||||||
// We dispatch a timeout with a specified delay of 0 for engines that
|
|
||||||
// can reliably accommodate that request. This will usually be snapped
|
|
||||||
// to a 4 milisecond delay, but once we're flushing, there's no delay
|
|
||||||
// between events.
|
|
||||||
var timeoutHandle = setTimeout(handleTimer, 0);
|
|
||||||
// However, since this timer gets frequently dropped in Firefox
|
|
||||||
// workers, we enlist an interval handle that will try to fire
|
|
||||||
// an event 20 times per second until it succeeds.
|
|
||||||
var intervalHandle = setInterval(handleTimer, 50);
|
|
||||||
|
|
||||||
function handleTimer() {
|
|
||||||
// Whichever timer succeeds will cancel both timers and
|
|
||||||
// execute the callback.
|
|
||||||
clearTimeout(timeoutHandle);
|
|
||||||
clearInterval(intervalHandle);
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is for `asap.js` only.
|
|
||||||
// Its name will be periodically randomized to break any code that depends on
|
|
||||||
// its existence.
|
|
||||||
rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer;
|
|
||||||
|
|
||||||
// ASAP was originally a nextTick shim included in Q. This was factored out
|
|
||||||
// into this ASAP package. It was later adapted to RSVP which made further
|
|
||||||
// amendments. These decisions, particularly to marginalize MessageChannel and
|
|
||||||
// to capture the MutationObserver implementation in a closure, were integrated
|
|
||||||
// back into ASAP proper.
|
|
||||||
// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js
|
|
58
node_modules/asap/package.json
generated
vendored
|
@ -1,58 +0,0 @@
|
||||||
{
|
|
||||||
"name": "asap",
|
|
||||||
"version": "2.0.6",
|
|
||||||
"description": "High-priority task queue for Node.js and browsers",
|
|
||||||
"keywords": [
|
|
||||||
"event",
|
|
||||||
"task",
|
|
||||||
"queue"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/kriskowal/asap.git"
|
|
||||||
},
|
|
||||||
"main": "./asap.js",
|
|
||||||
"browser": {
|
|
||||||
"./asap": "./browser-asap.js",
|
|
||||||
"./asap.js": "./browser-asap.js",
|
|
||||||
"./raw": "./browser-raw.js",
|
|
||||||
"./raw.js": "./browser-raw.js",
|
|
||||||
"./test/domain.js": "./test/browser-domain.js"
|
|
||||||
},
|
|
||||||
"react-native": {
|
|
||||||
"domain": false
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"raw.js",
|
|
||||||
"asap.js",
|
|
||||||
"browser-raw.js",
|
|
||||||
"browser-asap.js"
|
|
||||||
],
|
|
||||||
"scripts": {
|
|
||||||
"test": "npm run lint && npm run test-node",
|
|
||||||
"test-travis": "npm run lint && npm run test-node && npm run test-saucelabs && npm run test-saucelabs-worker",
|
|
||||||
"test-node": "node test/asap-test.js",
|
|
||||||
"test-publish": "node scripts/publish-bundle.js test/asap-test.js | pbcopy",
|
|
||||||
"test-browser": "node scripts/publish-bundle.js test/asap-test.js | xargs opener",
|
|
||||||
"test-saucelabs": "node scripts/saucelabs.js test/asap-test.js scripts/saucelabs-spot-configurations.json",
|
|
||||||
"test-saucelabs-all": "node scripts/saucelabs.js test/asap-test.js scripts/saucelabs-all-configurations.json",
|
|
||||||
"test-saucelabs-worker": "node scripts/saucelabs-worker-test.js scripts/saucelabs-spot-configurations.json",
|
|
||||||
"test-saucelabs-worker-all": "node scripts/saucelabs-worker-test.js scripts/saucelabs-all-configurations.json",
|
|
||||||
"lint": "jshint raw.js asap.js browser-raw.js browser-asap.js $(find scripts -name '*.js' | grep -v gauntlet)",
|
|
||||||
"benchmarks": "node benchmarks"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"events": "^1.0.1",
|
|
||||||
"jshint": "^2.5.1",
|
|
||||||
"knox": "^0.8.10",
|
|
||||||
"mr": "^2.0.5",
|
|
||||||
"opener": "^1.3.0",
|
|
||||||
"q": "^2.0.3",
|
|
||||||
"q-io": "^2.0.3",
|
|
||||||
"saucelabs": "^0.1.1",
|
|
||||||
"wd": "^0.2.21",
|
|
||||||
"weak-map": "^1.0.5",
|
|
||||||
"benchmark": "^1.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
101
node_modules/asap/raw.js
generated
vendored
|
@ -1,101 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var domain; // The domain module is executed on demand
|
|
||||||
var hasSetImmediate = typeof setImmediate === "function";
|
|
||||||
|
|
||||||
// Use the fastest means possible to execute a task in its own turn, with
|
|
||||||
// priority over other events including network IO events in Node.js.
|
|
||||||
//
|
|
||||||
// An exception thrown by a task will permanently interrupt the processing of
|
|
||||||
// subsequent tasks. The higher level `asap` function ensures that if an
|
|
||||||
// exception is thrown by a task, that the task queue will continue flushing as
|
|
||||||
// soon as possible, but if you use `rawAsap` directly, you are responsible to
|
|
||||||
// either ensure that no exceptions are thrown from your task, or to manually
|
|
||||||
// call `rawAsap.requestFlush` if an exception is thrown.
|
|
||||||
module.exports = rawAsap;
|
|
||||||
function rawAsap(task) {
|
|
||||||
if (!queue.length) {
|
|
||||||
requestFlush();
|
|
||||||
flushing = true;
|
|
||||||
}
|
|
||||||
// Avoids a function call
|
|
||||||
queue[queue.length] = task;
|
|
||||||
}
|
|
||||||
|
|
||||||
var queue = [];
|
|
||||||
// Once a flush has been requested, no further calls to `requestFlush` are
|
|
||||||
// necessary until the next `flush` completes.
|
|
||||||
var flushing = false;
|
|
||||||
// The position of the next task to execute in the task queue. This is
|
|
||||||
// preserved between calls to `flush` so that it can be resumed if
|
|
||||||
// a task throws an exception.
|
|
||||||
var index = 0;
|
|
||||||
// If a task schedules additional tasks recursively, the task queue can grow
|
|
||||||
// unbounded. To prevent memory excaustion, the task queue will periodically
|
|
||||||
// truncate already-completed tasks.
|
|
||||||
var capacity = 1024;
|
|
||||||
|
|
||||||
// The flush function processes all tasks that have been scheduled with
|
|
||||||
// `rawAsap` unless and until one of those tasks throws an exception.
|
|
||||||
// If a task throws an exception, `flush` ensures that its state will remain
|
|
||||||
// consistent and will resume where it left off when called again.
|
|
||||||
// However, `flush` does not make any arrangements to be called again if an
|
|
||||||
// exception is thrown.
|
|
||||||
function flush() {
|
|
||||||
while (index < queue.length) {
|
|
||||||
var currentIndex = index;
|
|
||||||
// Advance the index before calling the task. This ensures that we will
|
|
||||||
// begin flushing on the next task the task throws an error.
|
|
||||||
index = index + 1;
|
|
||||||
queue[currentIndex].call();
|
|
||||||
// Prevent leaking memory for long chains of recursive calls to `asap`.
|
|
||||||
// If we call `asap` within tasks scheduled by `asap`, the queue will
|
|
||||||
// grow, but to avoid an O(n) walk for every task we execute, we don't
|
|
||||||
// shift tasks off the queue after they have been executed.
|
|
||||||
// Instead, we periodically shift 1024 tasks off the queue.
|
|
||||||
if (index > capacity) {
|
|
||||||
// Manually shift all values starting at the index back to the
|
|
||||||
// beginning of the queue.
|
|
||||||
for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {
|
|
||||||
queue[scan] = queue[scan + index];
|
|
||||||
}
|
|
||||||
queue.length -= index;
|
|
||||||
index = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
queue.length = 0;
|
|
||||||
index = 0;
|
|
||||||
flushing = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
rawAsap.requestFlush = requestFlush;
|
|
||||||
function requestFlush() {
|
|
||||||
// Ensure flushing is not bound to any domain.
|
|
||||||
// It is not sufficient to exit the domain, because domains exist on a stack.
|
|
||||||
// To execute code outside of any domain, the following dance is necessary.
|
|
||||||
var parentDomain = process.domain;
|
|
||||||
if (parentDomain) {
|
|
||||||
if (!domain) {
|
|
||||||
// Lazy execute the domain module.
|
|
||||||
// Only employed if the user elects to use domains.
|
|
||||||
domain = require("domain");
|
|
||||||
}
|
|
||||||
domain.active = process.domain = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// `setImmediate` is slower that `process.nextTick`, but `process.nextTick`
|
|
||||||
// cannot handle recursion.
|
|
||||||
// `requestFlush` will only be called recursively from `asap.js`, to resume
|
|
||||||
// flushing after an error is thrown into a domain.
|
|
||||||
// Conveniently, `setImmediate` was introduced in the same version
|
|
||||||
// `process.nextTick` started throwing recursion errors.
|
|
||||||
if (flushing && hasSetImmediate) {
|
|
||||||
setImmediate(flush);
|
|
||||||
} else {
|
|
||||||
process.nextTick(flush);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (parentDomain) {
|
|
||||||
domain.active = process.domain = parentDomain;
|
|
||||||
}
|
|
||||||
}
|
|