From 57c3f14fb2aa3c1755204c4687a5e77c3e0855c0 Mon Sep 17 00:00:00 2001 From: Jochen Schalanda Date: Tue, 10 Mar 2020 10:21:16 +0100 Subject: [PATCH] Migrate to AdoptOpenJDK API v3 (#2) https://api.adoptopenjdk.net/swagger-ui/ https://github.com/AdoptOpenJDK/openjdk-api-v3 --- .github/workflows/test-nightly.yml | 2 +- .github/workflows/test.yml | 4 +- lib/installer.js | 38 +- lib/setup-jdk.js | 8 +- node_modules/@actions/core/README.md | 192 +- node_modules/@actions/core/lib/command.d.ts | 32 +- node_modules/@actions/core/lib/command.js | 130 +- node_modules/@actions/core/lib/core.d.ts | 198 +- node_modules/@actions/core/lib/core.js | 352 +- node_modules/@actions/core/package.json | 74 +- .../tool-cache/scripts/externals/7zdec.exe | Bin 0 -> 42496 bytes node_modules/@types/babel__core/LICENSE | 42 +- node_modules/@types/babel__core/README.md | 32 +- node_modules/@types/babel__generator/LICENSE | 42 +- .../@types/babel__generator/README.md | 32 +- node_modules/@types/babel__template/LICENSE | 42 +- node_modules/@types/babel__template/README.md | 32 +- node_modules/@types/babel__traverse/LICENSE | 42 +- node_modules/@types/babel__traverse/README.md | 32 +- .../@types/istanbul-lib-coverage/LICENSE | 42 +- .../@types/istanbul-lib-coverage/README.md | 32 +- .../@types/istanbul-lib-report/LICENSE | 42 +- .../@types/istanbul-lib-report/README.md | 32 +- node_modules/@types/istanbul-reports/LICENSE | 42 +- .../@types/istanbul-reports/README.md | 32 +- node_modules/@types/jest-diff/LICENSE | 42 +- node_modules/@types/jest-diff/README.md | 32 +- node_modules/@types/jest/LICENSE | 42 +- node_modules/@types/jest/README.md | 32 +- node_modules/@types/node/LICENSE | 42 +- node_modules/@types/node/README.md | 32 +- .../@types/normalize-package-data/README.md | 32 +- node_modules/@types/semver/LICENSE | 42 +- node_modules/@types/semver/README.md | 32 +- node_modules/@types/stack-utils/LICENSE | 42 +- node_modules/@types/stack-utils/README.md | 32 +- node_modules/@types/stack-utils/index.d.ts | 128 +- node_modules/@types/yargs-parser/LICENSE | 42 +- node_modules/@types/yargs-parser/README.md | 32 +- node_modules/@types/yargs/LICENSE | 42 +- node_modules/@types/yargs/README.md | 32 +- node_modules/color-name/.npmignore | 212 +- node_modules/color-name/LICENSE | 14 +- node_modules/color-name/README.md | 22 +- node_modules/color-name/index.js | 304 +- node_modules/color-name/test.js | 14 +- node_modules/component-emitter/History.md | 150 +- node_modules/component-emitter/LICENSE | 48 +- node_modules/component-emitter/Readme.md | 148 +- node_modules/component-emitter/index.js | 350 +- node_modules/expect/build-es5/index.js | 212 +- .../Release/node-v64-darwin-x64/fse.node | Bin 0 -> 38144 bytes .../Release/node-v72-darwin-x64/fse.node | Bin 37992 -> 0 bytes .../needle/examples/parsed-stream2.js | 42 +- .../needle/test/compression_spec.js | 188 +- node_modules/json-schema/README.md | 8 +- .../json-schema/draft-00/hyper-schema | 134 +- node_modules/json-schema/draft-00/json-ref | 50 +- node_modules/json-schema/draft-00/links | 64 +- node_modules/json-schema/draft-00/schema | 308 +- .../json-schema/draft-01/hyper-schema | 134 +- node_modules/json-schema/draft-01/json-ref | 50 +- node_modules/json-schema/draft-01/links | 64 +- node_modules/json-schema/draft-01/schema | 308 +- .../json-schema/draft-02/hyper-schema | 134 +- node_modules/json-schema/draft-02/json-ref | 50 +- node_modules/json-schema/draft-02/links | 68 +- node_modules/json-schema/draft-02/schema | 330 +- .../json-schema/draft-03/examples/address | 38 +- .../json-schema/draft-03/examples/calendar | 106 +- .../json-schema/draft-03/examples/card | 208 +- .../json-schema/draft-03/examples/geo | 14 +- .../json-schema/draft-03/examples/interfaces | 46 +- .../json-schema/draft-03/hyper-schema | 120 +- node_modules/json-schema/draft-03/json-ref | 50 +- node_modules/json-schema/draft-03/links | 68 +- node_modules/json-schema/draft-03/schema | 346 +- .../json-schema/draft-04/hyper-schema | 120 +- node_modules/json-schema/draft-04/links | 80 +- node_modules/json-schema/draft-04/schema | 376 +- .../json-schema/draft-zyp-json-schema-03.xml | 2240 ++--- .../json-schema/draft-zyp-json-schema-04.xml | 2144 ++-- node_modules/json-schema/lib/links.js | 130 +- node_modules/json-schema/lib/validate.js | 546 +- node_modules/json-schema/package.json | 62 +- node_modules/json-schema/test/tests.js | 190 +- node_modules/left-pad/COPYING | 28 +- .../needle/examples/parsed-stream2.js | 42 +- node_modules/needle/test/compression_spec.js | 188 +- .../node-notifier/vendor/notifu/notifu.exe | Bin 0 -> 242176 bytes .../node-notifier/vendor/notifu/notifu64.exe | Bin 0 -> 293376 bytes .../vendor/snoreToast/SnoreToast.exe | Bin 0 -> 281600 bytes node_modules/prettier/bin-prettier.js | 42 +- node_modules/prettier/index.js | 42 +- node_modules/prettier/parser-postcss.js | 130 +- node_modules/prettier/standalone.js | 26 +- node_modules/resolve-url/.jshintrc | 88 +- node_modules/resolve-url/readme.md | 166 +- node_modules/resolve-url/resolve-url.js | 94 +- node_modules/resolve-url/test/resolve-url.js | 140 +- node_modules/typescript/AUTHORS.md | 694 +- node_modules/typescript/LICENSE.txt | 110 +- node_modules/typescript/README.md | 198 +- .../typescript/ThirdPartyNoticeText.txt | 386 +- node_modules/typescript/lib/lib.d.ts | 10 +- node_modules/typescript/lib/lib.dom.d.ts | 2 +- .../typescript/lib/lib.dom.iterable.d.ts | 2 +- .../typescript/lib/lib.es2015.collection.d.ts | 140 +- .../typescript/lib/lib.es2015.core.d.ts | 1000 +- node_modules/typescript/lib/lib.es2015.d.ts | 22 +- .../typescript/lib/lib.es2015.generator.d.ts | 120 +- .../typescript/lib/lib.es2015.iterable.d.ts | 968 +- .../typescript/lib/lib.es2015.promise.d.ts | 270 +- .../typescript/lib/lib.es2015.proxy.d.ts | 46 +- .../typescript/lib/lib.es2015.reflect.d.ts | 32 +- .../typescript/lib/lib.es2015.symbol.d.ts | 60 +- .../lib/lib.es2015.symbol.wellknown.d.ts | 600 +- .../lib/lib.es2016.array.include.d.ts | 196 +- node_modules/typescript/lib/lib.es2016.d.ts | 4 +- .../typescript/lib/lib.es2016.full.d.ts | 10 +- node_modules/typescript/lib/lib.es2017.d.ts | 14 +- .../typescript/lib/lib.es2017.full.d.ts | 10 +- .../typescript/lib/lib.es2017.intl.d.ts | 26 +- .../typescript/lib/lib.es2017.object.d.ts | 68 +- .../lib/lib.es2017.sharedmemory.d.ts | 242 +- .../typescript/lib/lib.es2017.string.d.ts | 56 +- .../lib/lib.es2017.typedarrays.d.ts | 76 +- .../lib/lib.es2018.asyncgenerator.d.ts | 120 +- .../lib/lib.es2018.asynciterable.d.ts | 54 +- node_modules/typescript/lib/lib.es2018.d.ts | 14 +- .../typescript/lib/lib.es2018.full.d.ts | 10 +- .../typescript/lib/lib.es2018.intl.d.ts | 68 +- .../typescript/lib/lib.es2018.promise.d.ts | 26 +- .../typescript/lib/lib.es2018.regexp.d.ts | 38 +- .../typescript/lib/lib.es2019.array.d.ts | 412 +- node_modules/typescript/lib/lib.es2019.d.ts | 12 +- .../typescript/lib/lib.es2019.full.d.ts | 12 +- .../typescript/lib/lib.es2019.object.d.ts | 32 +- .../typescript/lib/lib.es2019.string.d.ts | 32 +- .../typescript/lib/lib.es2019.symbol.d.ts | 2 +- node_modules/typescript/lib/lib.es2020.d.ts | 8 +- .../typescript/lib/lib.es2020.full.d.ts | 12 +- .../typescript/lib/lib.es2020.string.d.ts | 22 +- .../lib/lib.es2020.symbol.wellknown.d.ts | 40 +- node_modules/typescript/lib/lib.es5.d.ts | 8590 ++++++++--------- node_modules/typescript/lib/lib.es6.d.ts | 12 +- .../typescript/lib/lib.esnext.bigint.d.ts | 1224 +-- node_modules/typescript/lib/lib.esnext.d.ts | 8 +- .../typescript/lib/lib.esnext.full.d.ts | 10 +- .../typescript/lib/lib.esnext.intl.d.ts | 26 +- .../typescript/lib/lib.scripthost.d.ts | 620 +- .../typescript/lib/lib.webworker.d.ts | 2 +- .../lib/lib.webworker.importscripts.d.ts | 14 +- node_modules/uri-js/dist/es5/uri.all.d.ts | 118 +- node_modules/uri-js/dist/es5/uri.all.min.d.ts | 118 +- node_modules/uri-js/dist/esnext/index.d.ts | 2 +- node_modules/uri-js/dist/esnext/index.js | 24 +- .../uri-js/dist/esnext/regexps-iri.d.ts | 6 +- .../uri-js/dist/esnext/regexps-iri.js | 4 +- .../uri-js/dist/esnext/regexps-uri.d.ts | 8 +- .../uri-js/dist/esnext/regexps-uri.js | 82 +- .../uri-js/dist/esnext/schemes/http.d.ts | 6 +- .../uri-js/dist/esnext/schemes/http.js | 52 +- .../uri-js/dist/esnext/schemes/https.d.ts | 6 +- .../uri-js/dist/esnext/schemes/https.js | 16 +- .../uri-js/dist/esnext/schemes/mailto.d.ts | 24 +- .../uri-js/dist/esnext/schemes/urn-uuid.d.ts | 14 +- .../uri-js/dist/esnext/schemes/urn-uuid.js | 44 +- .../uri-js/dist/esnext/schemes/urn.d.ts | 20 +- .../uri-js/dist/esnext/schemes/urn.js | 96 +- node_modules/uri-js/dist/esnext/uri.d.ts | 118 +- node_modules/uri-js/dist/esnext/util.d.ts | 12 +- node_modules/uri-js/dist/esnext/util.js | 70 +- node_modules/uri-js/tests/qunit.css | 234 +- node_modules/uri-js/tests/qunit.js | 2084 ++-- node_modules/urix/.jshintrc | 84 +- node_modules/urix/index.js | 34 +- node_modules/urix/package.json | 50 +- node_modules/urix/readme.md | 92 +- node_modules/urix/test/index.js | 86 +- src/installer.ts | 56 +- src/setup-jdk.ts | 8 +- 182 files changed, 16958 insertions(+), 16894 deletions(-) create mode 100644 node_modules/@actions/tool-cache/scripts/externals/7zdec.exe create mode 100755 node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64/fse.node delete mode 100755 node_modules/fsevents/lib/binding/Release/node-v72-darwin-x64/fse.node create mode 100755 node_modules/node-notifier/vendor/notifu/notifu.exe create mode 100755 node_modules/node-notifier/vendor/notifu/notifu64.exe create mode 100755 node_modules/node-notifier/vendor/snoreToast/SnoreToast.exe diff --git a/.github/workflows/test-nightly.yml b/.github/workflows/test-nightly.yml index e5005888..66582cdd 100644 --- a/.github/workflows/test-nightly.yml +++ b/.github/workflows/test-nightly.yml @@ -9,7 +9,7 @@ jobs: strategy: matrix: operating-system: [ubuntu-latest, macOS-latest, windows-latest] - jdk-version: [openjdk8, openjdk11, openjdk13] + jdk-version: [8, 11, 13] steps: - name: Checkout uses: actions/checkout@v2 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d58d7bc6..797399dc 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -3,11 +3,9 @@ on: pull_request: branches: - 'master' - - 'releases/*' push: branches: - 'master' - - 'releases/*' jobs: run: name: Run @@ -35,5 +33,5 @@ jobs: - name: Smoke Test uses: ./ with: - java-version: openjdk11 + java-version: 11 - run: java -version diff --git a/lib/installer.js b/lib/installer.js index 1cd45641..baf792a2 100644 --- a/lib/installer.js +++ b/lib/installer.js @@ -47,12 +47,36 @@ function getOsString(platform) { return 'linux'; } } -async function getJava(release_type, version, openjdk_impl, arch, heap_size, release) { - return downloadJavaBinary(release_type, version, openjdk_impl, os, arch, heap_size, release); +function getFeatureVersion(version) { + return version.replace('openjdk', ''); +} +function getReleaseType(release_type) { + switch (release_type) { + case 'releases': + return 'ga'; + case 'nightly': + return 'ea'; + default: + return release_type; + } +} +function getAdoptOpenJdkUrl(release_type, version, jvm_impl, os, arch, heap_size, release) { + const feature_version = getFeatureVersion(version); + const release_type_parsed = getReleaseType(release_type); + if (release == 'latest') { + return `https://api.adoptopenjdk.net/v3/binary/latest/${feature_version}/${release_type_parsed}/${os}/${arch}/jdk/${jvm_impl}/${heap_size}/adoptopenjdk`; + } + else { + const release_name = encodeURIComponent(release); + return `https://api.adoptopenjdk.net/v3/binary/version/${release_name}/${os}/${arch}/jdk/${jvm_impl}/${heap_size}/adoptopenjdk`; + } +} +async function getJava(release_type, version, jvm_impl, arch, heap_size, release) { + return downloadJavaBinary(release_type, version, jvm_impl, os, arch, heap_size, release); } exports.getJava = getJava; -async function downloadJavaBinary(release_type, version, openjdk_impl, os, arch, heap_size, release) { - const versionSpec = getCacheVersionSpec(release_type, version, openjdk_impl, os, heap_size, release); +async function downloadJavaBinary(release_type, version, jvm_impl, os, arch, heap_size, release) { + const versionSpec = getCacheVersionSpec(release_type, version, jvm_impl, os, heap_size, release); let toolPath = tc.find(toolName, versionSpec, arch); if (toolPath) { core.debug(`Tool found in cache ${toolPath}`); @@ -60,7 +84,7 @@ async function downloadJavaBinary(release_type, version, openjdk_impl, os, arch, else { core.debug('Downloading JDK from AdoptOpenJDK'); const release_encoded = encodeURIComponent(release); - const url = `https://api.adoptopenjdk.net/v2/binary/${release_type}/${version}?type=jdk&openjdk_impl=${openjdk_impl}&os=${os}&arch=${arch}&release=${release_encoded}&heap_size=${heap_size}`; + const url = getAdoptOpenJdkUrl(release_type, version, jvm_impl, os, arch, heap_size, release); const jdkFile = await tc.downloadTool(url); const compressedFileExtension = IS_WINDOWS ? '.zip' : '.tar.gz'; const tempDir = path.join(tempDirectory, 'adoptopenjdk_' + Math.floor(Math.random() * 2000000000)); @@ -73,8 +97,8 @@ async function downloadJavaBinary(release_type, version, openjdk_impl, os, arch, core.exportVariable(extendedJavaHome, toolPath); core.addPath(path.join(toolPath, 'bin')); } -function getCacheVersionSpec(release_type, version, openjdk_impl, os, heap_size, release) { - return `1.0.0-${release_type}-${version}-${openjdk_impl}-${heap_size}-${release}`; +function getCacheVersionSpec(release_type, version, jvm_impl, os, heap_size, release) { + return `1.0.0-${release_type}-${version}-${jvm_impl}-${heap_size}-${release}`; } async function extractFiles(file, fileEnding, destinationFolder) { const stats = fs.statSync(file); diff --git a/lib/setup-jdk.js b/lib/setup-jdk.js index c85904bc..a082df69 100644 --- a/lib/setup-jdk.js +++ b/lib/setup-jdk.js @@ -12,13 +12,13 @@ const installer = __importStar(require("./installer")); const path = __importStar(require("path")); async function run() { try { - // Type of release, i. e. "releases" for stable builds or "nightly" for the most recent build. - const release_type = core.getInput('release_type') || 'releases'; - // OpenJDK version, example: "openjdk8", "openjdk11", "openjdk13". + // Type of release. Either a release version, known as General Availability ("ga") or an Early Access ("ea") + const release_type = core.getInput('release_type') || 'ga'; + // OpenJDK feature release version, example: "8", "11", "13". const javaVersion = core.getInput('java-version', { required: true }); // OpenJDK implementation, example: "hotspot", "openj9". const openjdk_impl = core.getInput('openjdk_impl') || 'hotspot'; - // Architecture of the JDK, example: "x64", "x32", "ppc64", "s390x", "ppc64le", "aarch64". + // Architecture of the JDK, example: "x64", "x32", "arm", "ppc64", "s390x", "ppc64le", "aarch64", "sparcv9". const arch = core.getInput('architecture', { required: false }) || 'x64'; // Heap size for OpenJ9, example: "normal", "large" (for heaps >=57 GiB). const heap_size = core.getInput('heap_size', { required: false }) || 'normal'; diff --git a/node_modules/@actions/core/README.md b/node_modules/@actions/core/README.md index 58a8287f..ad09718a 100644 --- a/node_modules/@actions/core/README.md +++ b/node_modules/@actions/core/README.md @@ -1,97 +1,97 @@ -# `@actions/core` - -> Core functions for setting results, logging, registering secrets and exporting variables across actions - -## Usage - -#### Inputs/Outputs - -You can use this library to get inputs or set outputs: - -```js -const core = require('@actions/core'); - -const myInput = core.getInput('inputName', { required: true }); - -// Do stuff - -core.setOutput('outputKey', 'outputVal'); -``` - -#### Exporting variables - -You can also export variables for future steps. Variables get set in the environment. - -```js -const core = require('@actions/core'); - -// Do stuff - -core.exportVariable('envVar', 'Val'); -``` - -#### PATH Manipulation - -You can explicitly add items to the path for all remaining steps in a workflow: - -```js -const core = require('@actions/core'); - -core.addPath('pathToTool'); -``` - -#### Exit codes - -You should use this library to set the failing exit code for your action: - -```js -const core = require('@actions/core'); - -try { - // Do stuff -} -catch (err) { - // setFailed logs the message and sets a failing exit code - core.setFailed(`Action failed with error ${err}`); -} - -``` - -#### Logging - -Finally, this library provides some utilities for logging. Note that debug logging is hidden from the logs by default. This behavior can be toggled by enabling the [Step Debug Logs](../../docs/action-debugging.md#step-debug-logs). - -```js -const core = require('@actions/core'); - -const myInput = core.getInput('input'); -try { - core.debug('Inside try block'); - - if (!myInput) { - core.warning('myInput was not set'); - } - - // Do stuff -} -catch (err) { - core.error(`Error ${err}, action may still succeed though`); -} -``` - -This library can also wrap chunks of output in foldable groups. - -```js -const core = require('@actions/core') - -// Manually wrap output -core.startGroup('Do some function') -doSomeFunction() -core.endGroup() - -// Wrap an asynchronous function call -const result = await core.group('Do something async', async () => { - const response = await doSomeHTTPRequest() - return response -}) +# `@actions/core` + +> Core functions for setting results, logging, registering secrets and exporting variables across actions + +## Usage + +#### Inputs/Outputs + +You can use this library to get inputs or set outputs: + +```js +const core = require('@actions/core'); + +const myInput = core.getInput('inputName', { required: true }); + +// Do stuff + +core.setOutput('outputKey', 'outputVal'); +``` + +#### Exporting variables + +You can also export variables for future steps. Variables get set in the environment. + +```js +const core = require('@actions/core'); + +// Do stuff + +core.exportVariable('envVar', 'Val'); +``` + +#### PATH Manipulation + +You can explicitly add items to the path for all remaining steps in a workflow: + +```js +const core = require('@actions/core'); + +core.addPath('pathToTool'); +``` + +#### Exit codes + +You should use this library to set the failing exit code for your action: + +```js +const core = require('@actions/core'); + +try { + // Do stuff +} +catch (err) { + // setFailed logs the message and sets a failing exit code + core.setFailed(`Action failed with error ${err}`); +} + +``` + +#### Logging + +Finally, this library provides some utilities for logging. Note that debug logging is hidden from the logs by default. This behavior can be toggled by enabling the [Step Debug Logs](../../docs/action-debugging.md#step-debug-logs). + +```js +const core = require('@actions/core'); + +const myInput = core.getInput('input'); +try { + core.debug('Inside try block'); + + if (!myInput) { + core.warning('myInput was not set'); + } + + // Do stuff +} +catch (err) { + core.error(`Error ${err}, action may still succeed though`); +} +``` + +This library can also wrap chunks of output in foldable groups. + +```js +const core = require('@actions/core') + +// Manually wrap output +core.startGroup('Do some function') +doSomeFunction() +core.endGroup() + +// Wrap an asynchronous function call +const result = await core.group('Do something async', async () => { + const response = await doSomeHTTPRequest() + return response +}) ``` \ No newline at end of file diff --git a/node_modules/@actions/core/lib/command.d.ts b/node_modules/@actions/core/lib/command.d.ts index 7f6fecbe..7cdfb74b 100644 --- a/node_modules/@actions/core/lib/command.d.ts +++ b/node_modules/@actions/core/lib/command.d.ts @@ -1,16 +1,16 @@ -interface CommandProperties { - [key: string]: string; -} -/** - * Commands - * - * Command Format: - * ##[name key=value;key=value]message - * - * Examples: - * ##[warning]This is the user warning message - * ##[set-secret name=mypassword]definitelyNotAPassword! - */ -export declare function issueCommand(command: string, properties: CommandProperties, message: string): void; -export declare function issue(name: string, message?: string): void; -export {}; +interface CommandProperties { + [key: string]: string; +} +/** + * Commands + * + * Command Format: + * ##[name key=value;key=value]message + * + * Examples: + * ##[warning]This is the user warning message + * ##[set-secret name=mypassword]definitelyNotAPassword! + */ +export declare function issueCommand(command: string, properties: CommandProperties, message: string): void; +export declare function issue(name: string, message?: string): void; +export {}; diff --git a/node_modules/@actions/core/lib/command.js b/node_modules/@actions/core/lib/command.js index b0ea009a..afad2f68 100644 --- a/node_modules/@actions/core/lib/command.js +++ b/node_modules/@actions/core/lib/command.js @@ -1,66 +1,66 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const os = require("os"); -/** - * Commands - * - * Command Format: - * ##[name key=value;key=value]message - * - * Examples: - * ##[warning]This is the user warning message - * ##[set-secret name=mypassword]definitelyNotAPassword! - */ -function issueCommand(command, properties, message) { - const cmd = new Command(command, properties, message); - process.stdout.write(cmd.toString() + os.EOL); -} -exports.issueCommand = issueCommand; -function issue(name, message = '') { - issueCommand(name, {}, message); -} -exports.issue = issue; -const CMD_STRING = '::'; -class Command { - constructor(command, properties, message) { - if (!command) { - command = 'missing.command'; - } - this.command = command; - this.properties = properties; - this.message = message; - } - toString() { - let cmdStr = CMD_STRING + this.command; - if (this.properties && Object.keys(this.properties).length > 0) { - cmdStr += ' '; - for (const key in this.properties) { - if (this.properties.hasOwnProperty(key)) { - const val = this.properties[key]; - if (val) { - // safely append the val - avoid blowing up when attempting to - // call .replace() if message is not a string for some reason - cmdStr += `${key}=${escape(`${val || ''}`)},`; - } - } - } - } - cmdStr += CMD_STRING; - // safely append the message - avoid blowing up when attempting to - // call .replace() if message is not a string for some reason - const message = `${this.message || ''}`; - cmdStr += escapeData(message); - return cmdStr; - } -} -function escapeData(s) { - return s.replace(/\r/g, '%0D').replace(/\n/g, '%0A'); -} -function escape(s) { - return s - .replace(/\r/g, '%0D') - .replace(/\n/g, '%0A') - .replace(/]/g, '%5D') - .replace(/;/g, '%3B'); -} +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const os = require("os"); +/** + * Commands + * + * Command Format: + * ##[name key=value;key=value]message + * + * Examples: + * ##[warning]This is the user warning message + * ##[set-secret name=mypassword]definitelyNotAPassword! + */ +function issueCommand(command, properties, message) { + const cmd = new Command(command, properties, message); + process.stdout.write(cmd.toString() + os.EOL); +} +exports.issueCommand = issueCommand; +function issue(name, message = '') { + issueCommand(name, {}, message); +} +exports.issue = issue; +const CMD_STRING = '::'; +class Command { + constructor(command, properties, message) { + if (!command) { + command = 'missing.command'; + } + this.command = command; + this.properties = properties; + this.message = message; + } + toString() { + let cmdStr = CMD_STRING + this.command; + if (this.properties && Object.keys(this.properties).length > 0) { + cmdStr += ' '; + for (const key in this.properties) { + if (this.properties.hasOwnProperty(key)) { + const val = this.properties[key]; + if (val) { + // safely append the val - avoid blowing up when attempting to + // call .replace() if message is not a string for some reason + cmdStr += `${key}=${escape(`${val || ''}`)},`; + } + } + } + } + cmdStr += CMD_STRING; + // safely append the message - avoid blowing up when attempting to + // call .replace() if message is not a string for some reason + const message = `${this.message || ''}`; + cmdStr += escapeData(message); + return cmdStr; + } +} +function escapeData(s) { + return s.replace(/\r/g, '%0D').replace(/\n/g, '%0A'); +} +function escape(s) { + return s + .replace(/\r/g, '%0D') + .replace(/\n/g, '%0A') + .replace(/]/g, '%5D') + .replace(/;/g, '%3B'); +} //# sourceMappingURL=command.js.map \ No newline at end of file diff --git a/node_modules/@actions/core/lib/core.d.ts b/node_modules/@actions/core/lib/core.d.ts index 116b0480..3e63dc3a 100644 --- a/node_modules/@actions/core/lib/core.d.ts +++ b/node_modules/@actions/core/lib/core.d.ts @@ -1,99 +1,99 @@ -/** - * Interface for getInput options - */ -export interface InputOptions { - /** Optional. Whether the input is required. If required and not present, will throw. Defaults to false */ - required?: boolean; -} -/** - * The code to exit an action - */ -export declare enum ExitCode { - /** - * A code indicating that the action was successful - */ - Success = 0, - /** - * A code indicating that the action was a failure - */ - Failure = 1 -} -/** - * sets env variable for this action and future actions in the job - * @param name the name of the variable to set - * @param val the value of the variable - */ -export declare function exportVariable(name: string, val: string): void; -/** - * exports the variable and registers a secret which will get masked from logs - * @param name the name of the variable to set - * @param val value of the secret - */ -export declare function exportSecret(name: string, val: string): void; -/** - * Prepends inputPath to the PATH (for this action and future actions) - * @param inputPath - */ -export declare function addPath(inputPath: string): void; -/** - * Gets the value of an input. The value is also trimmed. - * - * @param name name of the input to get - * @param options optional. See InputOptions. - * @returns string - */ -export declare function getInput(name: string, options?: InputOptions): string; -/** - * Sets the value of an output. - * - * @param name name of the output to set - * @param value value to store - */ -export declare function setOutput(name: string, value: string): void; -/** - * Sets the action status to failed. - * When the action exits it will be with an exit code of 1 - * @param message add error issue message - */ -export declare function setFailed(message: string): void; -/** - * Writes debug message to user log - * @param message debug message - */ -export declare function debug(message: string): void; -/** - * Adds an error issue - * @param message error issue message - */ -export declare function error(message: string): void; -/** - * Adds an warning issue - * @param message warning issue message - */ -export declare function warning(message: string): void; -/** - * Writes info to log with console.log. - * @param message info message - */ -export declare function info(message: string): void; -/** - * Begin an output group. - * - * Output until the next `groupEnd` will be foldable in this group - * - * @param name The name of the output group - */ -export declare function startGroup(name: string): void; -/** - * End an output group. - */ -export declare function endGroup(): void; -/** - * Wrap an asynchronous function call in a group. - * - * Returns the same type as the function itself. - * - * @param name The name of the group - * @param fn The function to wrap in the group - */ -export declare function group(name: string, fn: () => Promise): Promise; +/** + * Interface for getInput options + */ +export interface InputOptions { + /** Optional. Whether the input is required. If required and not present, will throw. Defaults to false */ + required?: boolean; +} +/** + * The code to exit an action + */ +export declare enum ExitCode { + /** + * A code indicating that the action was successful + */ + Success = 0, + /** + * A code indicating that the action was a failure + */ + Failure = 1 +} +/** + * sets env variable for this action and future actions in the job + * @param name the name of the variable to set + * @param val the value of the variable + */ +export declare function exportVariable(name: string, val: string): void; +/** + * exports the variable and registers a secret which will get masked from logs + * @param name the name of the variable to set + * @param val value of the secret + */ +export declare function exportSecret(name: string, val: string): void; +/** + * Prepends inputPath to the PATH (for this action and future actions) + * @param inputPath + */ +export declare function addPath(inputPath: string): void; +/** + * Gets the value of an input. The value is also trimmed. + * + * @param name name of the input to get + * @param options optional. See InputOptions. + * @returns string + */ +export declare function getInput(name: string, options?: InputOptions): string; +/** + * Sets the value of an output. + * + * @param name name of the output to set + * @param value value to store + */ +export declare function setOutput(name: string, value: string): void; +/** + * Sets the action status to failed. + * When the action exits it will be with an exit code of 1 + * @param message add error issue message + */ +export declare function setFailed(message: string): void; +/** + * Writes debug message to user log + * @param message debug message + */ +export declare function debug(message: string): void; +/** + * Adds an error issue + * @param message error issue message + */ +export declare function error(message: string): void; +/** + * Adds an warning issue + * @param message warning issue message + */ +export declare function warning(message: string): void; +/** + * Writes info to log with console.log. + * @param message info message + */ +export declare function info(message: string): void; +/** + * Begin an output group. + * + * Output until the next `groupEnd` will be foldable in this group + * + * @param name The name of the output group + */ +export declare function startGroup(name: string): void; +/** + * End an output group. + */ +export declare function endGroup(): void; +/** + * Wrap an asynchronous function call in a group. + * + * Returns the same type as the function itself. + * + * @param name The name of the group + * @param fn The function to wrap in the group + */ +export declare function group(name: string, fn: () => Promise): Promise; diff --git a/node_modules/@actions/core/lib/core.js b/node_modules/@actions/core/lib/core.js index 7029f88f..5e5f51f6 100644 --- a/node_modules/@actions/core/lib/core.js +++ b/node_modules/@actions/core/lib/core.js @@ -1,177 +1,177 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const command_1 = require("./command"); -const os = require("os"); -const path = require("path"); -/** - * The code to exit an action - */ -var ExitCode; -(function (ExitCode) { - /** - * A code indicating that the action was successful - */ - ExitCode[ExitCode["Success"] = 0] = "Success"; - /** - * A code indicating that the action was a failure - */ - ExitCode[ExitCode["Failure"] = 1] = "Failure"; -})(ExitCode = exports.ExitCode || (exports.ExitCode = {})); -//----------------------------------------------------------------------- -// Variables -//----------------------------------------------------------------------- -/** - * sets env variable for this action and future actions in the job - * @param name the name of the variable to set - * @param val the value of the variable - */ -function exportVariable(name, val) { - process.env[name] = val; - command_1.issueCommand('set-env', { name }, val); -} -exports.exportVariable = exportVariable; -/** - * exports the variable and registers a secret which will get masked from logs - * @param name the name of the variable to set - * @param val value of the secret - */ -function exportSecret(name, val) { - exportVariable(name, val); - // the runner will error with not implemented - // leaving the function but raising the error earlier - command_1.issueCommand('set-secret', {}, val); - throw new Error('Not implemented.'); -} -exports.exportSecret = exportSecret; -/** - * Prepends inputPath to the PATH (for this action and future actions) - * @param inputPath - */ -function addPath(inputPath) { - command_1.issueCommand('add-path', {}, inputPath); - process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`; -} -exports.addPath = addPath; -/** - * Gets the value of an input. The value is also trimmed. - * - * @param name name of the input to get - * @param options optional. See InputOptions. - * @returns string - */ -function getInput(name, options) { - const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || ''; - if (options && options.required && !val) { - throw new Error(`Input required and not supplied: ${name}`); - } - return val.trim(); -} -exports.getInput = getInput; -/** - * Sets the value of an output. - * - * @param name name of the output to set - * @param value value to store - */ -function setOutput(name, value) { - command_1.issueCommand('set-output', { name }, value); -} -exports.setOutput = setOutput; -//----------------------------------------------------------------------- -// Results -//----------------------------------------------------------------------- -/** - * Sets the action status to failed. - * When the action exits it will be with an exit code of 1 - * @param message add error issue message - */ -function setFailed(message) { - process.exitCode = ExitCode.Failure; - error(message); -} -exports.setFailed = setFailed; -//----------------------------------------------------------------------- -// Logging Commands -//----------------------------------------------------------------------- -/** - * Writes debug message to user log - * @param message debug message - */ -function debug(message) { - command_1.issueCommand('debug', {}, message); -} -exports.debug = debug; -/** - * Adds an error issue - * @param message error issue message - */ -function error(message) { - command_1.issue('error', message); -} -exports.error = error; -/** - * Adds an warning issue - * @param message warning issue message - */ -function warning(message) { - command_1.issue('warning', message); -} -exports.warning = warning; -/** - * Writes info to log with console.log. - * @param message info message - */ -function info(message) { - process.stdout.write(message + os.EOL); -} -exports.info = info; -/** - * Begin an output group. - * - * Output until the next `groupEnd` will be foldable in this group - * - * @param name The name of the output group - */ -function startGroup(name) { - command_1.issue('group', name); -} -exports.startGroup = startGroup; -/** - * End an output group. - */ -function endGroup() { - command_1.issue('endgroup'); -} -exports.endGroup = endGroup; -/** - * Wrap an asynchronous function call in a group. - * - * Returns the same type as the function itself. - * - * @param name The name of the group - * @param fn The function to wrap in the group - */ -function group(name, fn) { - return __awaiter(this, void 0, void 0, function* () { - startGroup(name); - let result; - try { - result = yield fn(); - } - finally { - endGroup(); - } - return result; - }); -} -exports.group = group; +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const command_1 = require("./command"); +const os = require("os"); +const path = require("path"); +/** + * The code to exit an action + */ +var ExitCode; +(function (ExitCode) { + /** + * A code indicating that the action was successful + */ + ExitCode[ExitCode["Success"] = 0] = "Success"; + /** + * A code indicating that the action was a failure + */ + ExitCode[ExitCode["Failure"] = 1] = "Failure"; +})(ExitCode = exports.ExitCode || (exports.ExitCode = {})); +//----------------------------------------------------------------------- +// Variables +//----------------------------------------------------------------------- +/** + * sets env variable for this action and future actions in the job + * @param name the name of the variable to set + * @param val the value of the variable + */ +function exportVariable(name, val) { + process.env[name] = val; + command_1.issueCommand('set-env', { name }, val); +} +exports.exportVariable = exportVariable; +/** + * exports the variable and registers a secret which will get masked from logs + * @param name the name of the variable to set + * @param val value of the secret + */ +function exportSecret(name, val) { + exportVariable(name, val); + // the runner will error with not implemented + // leaving the function but raising the error earlier + command_1.issueCommand('set-secret', {}, val); + throw new Error('Not implemented.'); +} +exports.exportSecret = exportSecret; +/** + * Prepends inputPath to the PATH (for this action and future actions) + * @param inputPath + */ +function addPath(inputPath) { + command_1.issueCommand('add-path', {}, inputPath); + process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`; +} +exports.addPath = addPath; +/** + * Gets the value of an input. The value is also trimmed. + * + * @param name name of the input to get + * @param options optional. See InputOptions. + * @returns string + */ +function getInput(name, options) { + const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || ''; + if (options && options.required && !val) { + throw new Error(`Input required and not supplied: ${name}`); + } + return val.trim(); +} +exports.getInput = getInput; +/** + * Sets the value of an output. + * + * @param name name of the output to set + * @param value value to store + */ +function setOutput(name, value) { + command_1.issueCommand('set-output', { name }, value); +} +exports.setOutput = setOutput; +//----------------------------------------------------------------------- +// Results +//----------------------------------------------------------------------- +/** + * Sets the action status to failed. + * When the action exits it will be with an exit code of 1 + * @param message add error issue message + */ +function setFailed(message) { + process.exitCode = ExitCode.Failure; + error(message); +} +exports.setFailed = setFailed; +//----------------------------------------------------------------------- +// Logging Commands +//----------------------------------------------------------------------- +/** + * Writes debug message to user log + * @param message debug message + */ +function debug(message) { + command_1.issueCommand('debug', {}, message); +} +exports.debug = debug; +/** + * Adds an error issue + * @param message error issue message + */ +function error(message) { + command_1.issue('error', message); +} +exports.error = error; +/** + * Adds an warning issue + * @param message warning issue message + */ +function warning(message) { + command_1.issue('warning', message); +} +exports.warning = warning; +/** + * Writes info to log with console.log. + * @param message info message + */ +function info(message) { + process.stdout.write(message + os.EOL); +} +exports.info = info; +/** + * Begin an output group. + * + * Output until the next `groupEnd` will be foldable in this group + * + * @param name The name of the output group + */ +function startGroup(name) { + command_1.issue('group', name); +} +exports.startGroup = startGroup; +/** + * End an output group. + */ +function endGroup() { + command_1.issue('endgroup'); +} +exports.endGroup = endGroup; +/** + * Wrap an asynchronous function call in a group. + * + * Returns the same type as the function itself. + * + * @param name The name of the group + * @param fn The function to wrap in the group + */ +function group(name, fn) { + return __awaiter(this, void 0, void 0, function* () { + startGroup(name); + let result; + try { + result = yield fn(); + } + finally { + endGroup(); + } + return result; + }); +} +exports.group = group; //# sourceMappingURL=core.js.map \ No newline at end of file diff --git a/node_modules/@actions/core/package.json b/node_modules/@actions/core/package.json index da520049..e2dbb82f 100644 --- a/node_modules/@actions/core/package.json +++ b/node_modules/@actions/core/package.json @@ -1,37 +1,37 @@ -{ - "name": "@actions/core", - "version": "1.1.1", - "description": "Actions core lib", - "keywords": [ - "github", - "actions", - "core" - ], - "homepage": "https://github.com/actions/toolkit/tree/master/packages/core", - "license": "MIT", - "main": "lib/core.js", - "directories": { - "lib": "lib", - "test": "__tests__" - }, - "files": [ - "lib" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/actions/toolkit.git" - }, - "scripts": { - "test": "echo \"Error: run tests from root\" && exit 1", - "tsc": "tsc" - }, - "bugs": { - "url": "https://github.com/actions/toolkit/issues" - }, - "devDependencies": { - "@types/node": "^12.0.2" - } -} +{ + "name": "@actions/core", + "version": "1.1.1", + "description": "Actions core lib", + "keywords": [ + "github", + "actions", + "core" + ], + "homepage": "https://github.com/actions/toolkit/tree/master/packages/core", + "license": "MIT", + "main": "lib/core.js", + "directories": { + "lib": "lib", + "test": "__tests__" + }, + "files": [ + "lib" + ], + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/actions/toolkit.git" + }, + "scripts": { + "test": "echo \"Error: run tests from root\" && exit 1", + "tsc": "tsc" + }, + "bugs": { + "url": "https://github.com/actions/toolkit/issues" + }, + "devDependencies": { + "@types/node": "^12.0.2" + } +} diff --git a/node_modules/@actions/tool-cache/scripts/externals/7zdec.exe b/node_modules/@actions/tool-cache/scripts/externals/7zdec.exe new file mode 100644 index 0000000000000000000000000000000000000000..1106aa0e4414c31f73e779ae7f2ee28084909006 GIT binary patch literal 42496 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 MGWhiRKc>LH0L->Eu>b%7 literal 0 HcmV?d00001 diff --git a/node_modules/@types/babel__core/LICENSE b/node_modules/@types/babel__core/LICENSE index 21071075..4b1ad51b 100644 --- a/node_modules/@types/babel__core/LICENSE +++ b/node_modules/@types/babel__core/LICENSE @@ -1,21 +1,21 @@ - MIT License - - Copyright (c) Microsoft Corporation. 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 + MIT License + + Copyright (c) Microsoft Corporation. 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 diff --git a/node_modules/@types/babel__core/README.md b/node_modules/@types/babel__core/README.md index 6b14573b..a078f49e 100644 --- a/node_modules/@types/babel__core/README.md +++ b/node_modules/@types/babel__core/README.md @@ -1,16 +1,16 @@ -# Installation -> `npm install --save @types/babel__core` - -# Summary -This package contains type definitions for @babel/core (https://github.com/babel/babel/tree/master/packages/babel-core). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__core - -Additional Details - * Last updated: Wed, 04 Sep 2019 17:40:11 GMT - * Dependencies: @types/babel__generator, @types/babel__traverse, @types/babel__template, @types/babel__types, @types/babel__parser - * Global values: babel - -# Credits -These definitions were written by Troy Gerwien , Marvin Hagemeister , Melvin Groenhoff , and Jessica Franco . +# Installation +> `npm install --save @types/babel__core` + +# Summary +This package contains type definitions for @babel/core (https://github.com/babel/babel/tree/master/packages/babel-core). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__core + +Additional Details + * Last updated: Wed, 04 Sep 2019 17:40:11 GMT + * Dependencies: @types/babel__generator, @types/babel__traverse, @types/babel__template, @types/babel__types, @types/babel__parser + * Global values: babel + +# Credits +These definitions were written by Troy Gerwien , Marvin Hagemeister , Melvin Groenhoff , and Jessica Franco . diff --git a/node_modules/@types/babel__generator/LICENSE b/node_modules/@types/babel__generator/LICENSE index 21071075..4b1ad51b 100644 --- a/node_modules/@types/babel__generator/LICENSE +++ b/node_modules/@types/babel__generator/LICENSE @@ -1,21 +1,21 @@ - MIT License - - Copyright (c) Microsoft Corporation. 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 + MIT License + + Copyright (c) Microsoft Corporation. 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 diff --git a/node_modules/@types/babel__generator/README.md b/node_modules/@types/babel__generator/README.md index 4e15c496..3c33a27c 100644 --- a/node_modules/@types/babel__generator/README.md +++ b/node_modules/@types/babel__generator/README.md @@ -1,16 +1,16 @@ -# Installation -> `npm install --save @types/babel__generator` - -# Summary -This package contains type definitions for @babel/generator (https://github.com/babel/babel/tree/master/packages/babel-generator). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__generator - -Additional Details - * Last updated: Tue, 24 Sep 2019 17:18:01 GMT - * Dependencies: @types/babel__types - * Global values: none - -# Credits -These definitions were written by Troy Gerwien , Johnny Estilles , Melvin Groenhoff , and Cameron Yan . +# Installation +> `npm install --save @types/babel__generator` + +# Summary +This package contains type definitions for @babel/generator (https://github.com/babel/babel/tree/master/packages/babel-generator). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__generator + +Additional Details + * Last updated: Tue, 24 Sep 2019 17:18:01 GMT + * Dependencies: @types/babel__types + * Global values: none + +# Credits +These definitions were written by Troy Gerwien , Johnny Estilles , Melvin Groenhoff , and Cameron Yan . diff --git a/node_modules/@types/babel__template/LICENSE b/node_modules/@types/babel__template/LICENSE index 21071075..4b1ad51b 100644 --- a/node_modules/@types/babel__template/LICENSE +++ b/node_modules/@types/babel__template/LICENSE @@ -1,21 +1,21 @@ - MIT License - - Copyright (c) Microsoft Corporation. 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 + MIT License + + Copyright (c) Microsoft Corporation. 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 diff --git a/node_modules/@types/babel__template/README.md b/node_modules/@types/babel__template/README.md index 99f75cd7..b2d642a4 100644 --- a/node_modules/@types/babel__template/README.md +++ b/node_modules/@types/babel__template/README.md @@ -1,16 +1,16 @@ -# Installation -> `npm install --save @types/babel__template` - -# Summary -This package contains type definitions for @babel/template ( https://github.com/babel/babel/tree/master/packages/babel-template ). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__template - -Additional Details - * Last updated: Wed, 13 Feb 2019 21:04:23 GMT - * Dependencies: @types/babel__parser, @types/babel__types - * Global values: none - -# Credits -These definitions were written by Troy Gerwien , Marvin Hagemeister , Melvin Groenhoff . +# Installation +> `npm install --save @types/babel__template` + +# Summary +This package contains type definitions for @babel/template ( https://github.com/babel/babel/tree/master/packages/babel-template ). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__template + +Additional Details + * Last updated: Wed, 13 Feb 2019 21:04:23 GMT + * Dependencies: @types/babel__parser, @types/babel__types + * Global values: none + +# Credits +These definitions were written by Troy Gerwien , Marvin Hagemeister , Melvin Groenhoff . diff --git a/node_modules/@types/babel__traverse/LICENSE b/node_modules/@types/babel__traverse/LICENSE index 21071075..4b1ad51b 100644 --- a/node_modules/@types/babel__traverse/LICENSE +++ b/node_modules/@types/babel__traverse/LICENSE @@ -1,21 +1,21 @@ - MIT License - - Copyright (c) Microsoft Corporation. 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 + MIT License + + Copyright (c) Microsoft Corporation. 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 diff --git a/node_modules/@types/babel__traverse/README.md b/node_modules/@types/babel__traverse/README.md index 6d780595..f2e1c54c 100644 --- a/node_modules/@types/babel__traverse/README.md +++ b/node_modules/@types/babel__traverse/README.md @@ -1,16 +1,16 @@ -# Installation -> `npm install --save @types/babel__traverse` - -# Summary -This package contains type definitions for @babel/traverse ( https://github.com/babel/babel/tree/master/packages/babel-traverse ). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__traverse - -Additional Details - * Last updated: Tue, 11 Jun 2019 02:00:21 GMT - * Dependencies: @types/babel__types - * Global values: none - -# Credits -These definitions were written by Troy Gerwien , Marvin Hagemeister , Ryan Petrich , Melvin Groenhoff . +# Installation +> `npm install --save @types/babel__traverse` + +# Summary +This package contains type definitions for @babel/traverse ( https://github.com/babel/babel/tree/master/packages/babel-traverse ). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__traverse + +Additional Details + * Last updated: Tue, 11 Jun 2019 02:00:21 GMT + * Dependencies: @types/babel__types + * Global values: none + +# Credits +These definitions were written by Troy Gerwien , Marvin Hagemeister , Ryan Petrich , Melvin Groenhoff . diff --git a/node_modules/@types/istanbul-lib-coverage/LICENSE b/node_modules/@types/istanbul-lib-coverage/LICENSE index 21071075..4b1ad51b 100644 --- a/node_modules/@types/istanbul-lib-coverage/LICENSE +++ b/node_modules/@types/istanbul-lib-coverage/LICENSE @@ -1,21 +1,21 @@ - MIT License - - Copyright (c) Microsoft Corporation. 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 + MIT License + + Copyright (c) Microsoft Corporation. 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 diff --git a/node_modules/@types/istanbul-lib-coverage/README.md b/node_modules/@types/istanbul-lib-coverage/README.md index dc9fbbc7..5afb16ed 100644 --- a/node_modules/@types/istanbul-lib-coverage/README.md +++ b/node_modules/@types/istanbul-lib-coverage/README.md @@ -1,16 +1,16 @@ -# Installation -> `npm install --save @types/istanbul-lib-coverage` - -# Summary -This package contains type definitions for istanbul-lib-coverage ( https://istanbul.js.org ). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/istanbul-lib-coverage - -Additional Details - * Last updated: Thu, 25 Apr 2019 23:07:43 GMT - * Dependencies: none - * Global values: none - -# Credits -These definitions were written by Jason Cheatham , Lorenzo Rapetti . +# Installation +> `npm install --save @types/istanbul-lib-coverage` + +# Summary +This package contains type definitions for istanbul-lib-coverage ( https://istanbul.js.org ). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/istanbul-lib-coverage + +Additional Details + * Last updated: Thu, 25 Apr 2019 23:07:43 GMT + * Dependencies: none + * Global values: none + +# Credits +These definitions were written by Jason Cheatham , Lorenzo Rapetti . diff --git a/node_modules/@types/istanbul-lib-report/LICENSE b/node_modules/@types/istanbul-lib-report/LICENSE index 21071075..4b1ad51b 100644 --- a/node_modules/@types/istanbul-lib-report/LICENSE +++ b/node_modules/@types/istanbul-lib-report/LICENSE @@ -1,21 +1,21 @@ - MIT License - - Copyright (c) Microsoft Corporation. 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 + MIT License + + Copyright (c) Microsoft Corporation. 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 diff --git a/node_modules/@types/istanbul-lib-report/README.md b/node_modules/@types/istanbul-lib-report/README.md index 77556639..70d7e8c6 100644 --- a/node_modules/@types/istanbul-lib-report/README.md +++ b/node_modules/@types/istanbul-lib-report/README.md @@ -1,16 +1,16 @@ -# Installation -> `npm install --save @types/istanbul-lib-report` - -# Summary -This package contains type definitions for istanbul-lib-report ( https://istanbul.js.org ). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/istanbul-lib-report - -Additional Details - * Last updated: Thu, 25 Apr 2019 23:07:44 GMT - * Dependencies: @types/istanbul-lib-coverage - * Global values: none - -# Credits -These definitions were written by Jason Cheatham . +# Installation +> `npm install --save @types/istanbul-lib-report` + +# Summary +This package contains type definitions for istanbul-lib-report ( https://istanbul.js.org ). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/istanbul-lib-report + +Additional Details + * Last updated: Thu, 25 Apr 2019 23:07:44 GMT + * Dependencies: @types/istanbul-lib-coverage + * Global values: none + +# Credits +These definitions were written by Jason Cheatham . diff --git a/node_modules/@types/istanbul-reports/LICENSE b/node_modules/@types/istanbul-reports/LICENSE index 21071075..4b1ad51b 100644 --- a/node_modules/@types/istanbul-reports/LICENSE +++ b/node_modules/@types/istanbul-reports/LICENSE @@ -1,21 +1,21 @@ - MIT License - - Copyright (c) Microsoft Corporation. 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 + MIT License + + Copyright (c) Microsoft Corporation. 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 diff --git a/node_modules/@types/istanbul-reports/README.md b/node_modules/@types/istanbul-reports/README.md index fddc1e35..f691afc8 100644 --- a/node_modules/@types/istanbul-reports/README.md +++ b/node_modules/@types/istanbul-reports/README.md @@ -1,16 +1,16 @@ -# Installation -> `npm install --save @types/istanbul-reports` - -# Summary -This package contains type definitions for istanbul-reports ( https://github.com/istanbuljs/istanbuljs ). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/istanbul-reports - -Additional Details - * Last updated: Wed, 17 Apr 2019 17:14:08 GMT - * Dependencies: @types/istanbul-lib-report, @types/istanbul-lib-coverage - * Global values: none - -# Credits -These definitions were written by Jason Cheatham . +# Installation +> `npm install --save @types/istanbul-reports` + +# Summary +This package contains type definitions for istanbul-reports ( https://github.com/istanbuljs/istanbuljs ). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/istanbul-reports + +Additional Details + * Last updated: Wed, 17 Apr 2019 17:14:08 GMT + * Dependencies: @types/istanbul-lib-report, @types/istanbul-lib-coverage + * Global values: none + +# Credits +These definitions were written by Jason Cheatham . diff --git a/node_modules/@types/jest-diff/LICENSE b/node_modules/@types/jest-diff/LICENSE index 21071075..4b1ad51b 100644 --- a/node_modules/@types/jest-diff/LICENSE +++ b/node_modules/@types/jest-diff/LICENSE @@ -1,21 +1,21 @@ - MIT License - - Copyright (c) Microsoft Corporation. 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 + MIT License + + Copyright (c) Microsoft Corporation. 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 diff --git a/node_modules/@types/jest-diff/README.md b/node_modules/@types/jest-diff/README.md index 3a05c7de..7b68c307 100644 --- a/node_modules/@types/jest-diff/README.md +++ b/node_modules/@types/jest-diff/README.md @@ -1,16 +1,16 @@ -# Installation -> `npm install --save @types/jest-diff` - -# Summary -This package contains type definitions for jest-diff ( https://github.com/facebook/jest/tree/master/packages/jest-diff ). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/jest-diff - -Additional Details - * Last updated: Wed, 13 Feb 2019 18:42:15 GMT - * Dependencies: none - * Global values: none - -# Credits -These definitions were written by Alex Coles . +# Installation +> `npm install --save @types/jest-diff` + +# Summary +This package contains type definitions for jest-diff ( https://github.com/facebook/jest/tree/master/packages/jest-diff ). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/jest-diff + +Additional Details + * Last updated: Wed, 13 Feb 2019 18:42:15 GMT + * Dependencies: none + * Global values: none + +# Credits +These definitions were written by Alex Coles . diff --git a/node_modules/@types/jest/LICENSE b/node_modules/@types/jest/LICENSE index 21071075..4b1ad51b 100644 --- a/node_modules/@types/jest/LICENSE +++ b/node_modules/@types/jest/LICENSE @@ -1,21 +1,21 @@ - MIT License - - Copyright (c) Microsoft Corporation. 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 + MIT License + + Copyright (c) Microsoft Corporation. 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 diff --git a/node_modules/@types/jest/README.md b/node_modules/@types/jest/README.md index 8764708c..6eae3fe1 100644 --- a/node_modules/@types/jest/README.md +++ b/node_modules/@types/jest/README.md @@ -1,17 +1,17 @@ -# Installation -> `npm install --save @types/jest` - -# Summary -This package contains type definitions for Jest (https://jestjs.io/). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/jest - -Additional Details - * Last updated: Mon, 19 Aug 2019 17:36:40 GMT - * Dependencies: @types/jest-diff - * Global values: afterAll, afterEach, beforeAll, beforeEach, describe, expect, fail, fdescribe, fit, it, jasmine, jest, pending, spyOn, test, xdescribe, xit, xtest - -# Credits +# Installation +> `npm install --save @types/jest` + +# Summary +This package contains type definitions for Jest (https://jestjs.io/). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/jest + +Additional Details + * Last updated: Mon, 19 Aug 2019 17:36:40 GMT + * Dependencies: @types/jest-diff + * Global values: afterAll, afterEach, beforeAll, beforeEach, describe, expect, fail, fdescribe, fit, it, jasmine, jest, pending, spyOn, test, xdescribe, xit, xtest + +# Credits These definitions were written by Asana (https://asana.com) -// Ivo Stratev , jwbay , Alexey Svetliakov , Alex Jover Morales , Allan Lukwago , Ika , Waseem Dahman , Jamie Mason , Douglas Duteil , Ahn , Josh Goldberg , Jeff Lau , Andrew Makarov , Martin Hochel , Sebastian Sebald , Andy , Antoine Brault , Jeroen Claassens , Gregor Stamać , ExE Boss , Alex Bolenok , and Mario Beltrán Alarcón . +// Ivo Stratev , jwbay , Alexey Svetliakov , Alex Jover Morales , Allan Lukwago , Ika , Waseem Dahman , Jamie Mason , Douglas Duteil , Ahn , Josh Goldberg , Jeff Lau , Andrew Makarov , Martin Hochel , Sebastian Sebald , Andy , Antoine Brault , Jeroen Claassens , Gregor Stamać , ExE Boss , Alex Bolenok , and Mario Beltrán Alarcón . diff --git a/node_modules/@types/node/LICENSE b/node_modules/@types/node/LICENSE index 21071075..4b1ad51b 100644 --- a/node_modules/@types/node/LICENSE +++ b/node_modules/@types/node/LICENSE @@ -1,21 +1,21 @@ - MIT License - - Copyright (c) Microsoft Corporation. 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 + MIT License + + Copyright (c) Microsoft Corporation. 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 diff --git a/node_modules/@types/node/README.md b/node_modules/@types/node/README.md index e3f3d7f3..9cb5510c 100644 --- a/node_modules/@types/node/README.md +++ b/node_modules/@types/node/README.md @@ -1,16 +1,16 @@ -# Installation -> `npm install --save @types/node` - -# Summary -This package contains type definitions for Node.js (http://nodejs.org/). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node - -Additional Details - * Last updated: Wed, 25 Sep 2019 23:07:57 GMT - * Dependencies: none - * Global values: Buffer, NodeJS, Symbol, __dirname, __filename, clearImmediate, clearInterval, clearTimeout, console, exports, global, module, process, queueMicrotask, require, setImmediate, setInterval, setTimeout - -# Credits -These definitions were written by Microsoft TypeScript , DefinitelyTyped , Alberto Schiabel , Alexander T. , Alvis HT Tang , Andrew Makarov , Benjamin Toueg , Bruno Scheufler , Chigozirim C. , Christian Vaagland Tellnes , David Junger , Deividas Bakanas , Eugene Y. Q. Shen , Flarna , Hannes Magnusson , Hoàng Văn Khải , Huw , Kelvin Jin , Klaus Meinhardt , Lishude , Mariusz Wiktorczyk , Matthieu Sieben , Mohsen Azimi , Nicolas Even , Nicolas Voigt , Parambir Singh , Sebastian Silbermann , Simon Schick , Thomas den Hollander , Wilco Bakker , wwwy3y3 , Zane Hannan AU , Samuel Ainsworth , Kyle Uehlein , Jordi Oliveras Rovira , Thanik Bhongbhibhat , Marcin Kopacz , Trivikram Kamat , and Minh Son Nguyen . +# Installation +> `npm install --save @types/node` + +# Summary +This package contains type definitions for Node.js (http://nodejs.org/). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node + +Additional Details + * Last updated: Wed, 25 Sep 2019 23:07:57 GMT + * Dependencies: none + * Global values: Buffer, NodeJS, Symbol, __dirname, __filename, clearImmediate, clearInterval, clearTimeout, console, exports, global, module, process, queueMicrotask, require, setImmediate, setInterval, setTimeout + +# Credits +These definitions were written by Microsoft TypeScript , DefinitelyTyped , Alberto Schiabel , Alexander T. , Alvis HT Tang , Andrew Makarov , Benjamin Toueg , Bruno Scheufler , Chigozirim C. , Christian Vaagland Tellnes , David Junger , Deividas Bakanas , Eugene Y. Q. Shen , Flarna , Hannes Magnusson , Hoàng Văn Khải , Huw , Kelvin Jin , Klaus Meinhardt , Lishude , Mariusz Wiktorczyk , Matthieu Sieben , Mohsen Azimi , Nicolas Even , Nicolas Voigt , Parambir Singh , Sebastian Silbermann , Simon Schick , Thomas den Hollander , Wilco Bakker , wwwy3y3 , Zane Hannan AU , Samuel Ainsworth , Kyle Uehlein , Jordi Oliveras Rovira , Thanik Bhongbhibhat , Marcin Kopacz , Trivikram Kamat , and Minh Son Nguyen . diff --git a/node_modules/@types/normalize-package-data/README.md b/node_modules/@types/normalize-package-data/README.md index 781a75dc..e24ae276 100755 --- a/node_modules/@types/normalize-package-data/README.md +++ b/node_modules/@types/normalize-package-data/README.md @@ -1,16 +1,16 @@ -# Installation -> `npm install --save @types/normalize-package-data` - -# Summary -This package contains type definitions for normalize-package-data (https://github.com/npm/normalize-package-data#readme). - -# Details -Files were exported from https://www.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/normalize-package-data - -Additional Details - * Last updated: Sun, 07 Jan 2018 07:34:38 GMT - * Dependencies: none - * Global values: none - -# Credits -These definitions were written by Jeff Dickey . +# Installation +> `npm install --save @types/normalize-package-data` + +# Summary +This package contains type definitions for normalize-package-data (https://github.com/npm/normalize-package-data#readme). + +# Details +Files were exported from https://www.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/normalize-package-data + +Additional Details + * Last updated: Sun, 07 Jan 2018 07:34:38 GMT + * Dependencies: none + * Global values: none + +# Credits +These definitions were written by Jeff Dickey . diff --git a/node_modules/@types/semver/LICENSE b/node_modules/@types/semver/LICENSE index 21071075..4b1ad51b 100644 --- a/node_modules/@types/semver/LICENSE +++ b/node_modules/@types/semver/LICENSE @@ -1,21 +1,21 @@ - MIT License - - Copyright (c) Microsoft Corporation. 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 + MIT License + + Copyright (c) Microsoft Corporation. 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 diff --git a/node_modules/@types/semver/README.md b/node_modules/@types/semver/README.md index 164e30c1..47db7e72 100644 --- a/node_modules/@types/semver/README.md +++ b/node_modules/@types/semver/README.md @@ -1,16 +1,16 @@ -# Installation -> `npm install --save @types/semver` - -# Summary -This package contains type definitions for semver (https://github.com/npm/node-semver). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/semver - -Additional Details - * Last updated: Thu, 05 Sep 2019 18:12:22 GMT - * Dependencies: none - * Global values: none - -# Credits -These definitions were written by Bart van der Schoor , BendingBender , Lucian Buzzo , and Klaus Meinhardt . +# Installation +> `npm install --save @types/semver` + +# Summary +This package contains type definitions for semver (https://github.com/npm/node-semver). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/semver + +Additional Details + * Last updated: Thu, 05 Sep 2019 18:12:22 GMT + * Dependencies: none + * Global values: none + +# Credits +These definitions were written by Bart van der Schoor , BendingBender , Lucian Buzzo , and Klaus Meinhardt . diff --git a/node_modules/@types/stack-utils/LICENSE b/node_modules/@types/stack-utils/LICENSE index 21071075..4b1ad51b 100644 --- a/node_modules/@types/stack-utils/LICENSE +++ b/node_modules/@types/stack-utils/LICENSE @@ -1,21 +1,21 @@ - MIT License - - Copyright (c) Microsoft Corporation. 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 + MIT License + + Copyright (c) Microsoft Corporation. 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 diff --git a/node_modules/@types/stack-utils/README.md b/node_modules/@types/stack-utils/README.md index b6905468..5d1fdb45 100644 --- a/node_modules/@types/stack-utils/README.md +++ b/node_modules/@types/stack-utils/README.md @@ -1,16 +1,16 @@ -# Installation -> `npm install --save @types/stack-utils` - -# Summary -This package contains type definitions for stack-utils (https://github.com/tapjs/stack-utils#readme). - -# Details -Files were exported from https://www.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/stack-utils - -Additional Details - * Last updated: Tue, 07 Nov 2017 17:49:01 GMT - * Dependencies: none - * Global values: none - -# Credits -These definitions were written by BendingBender . +# Installation +> `npm install --save @types/stack-utils` + +# Summary +This package contains type definitions for stack-utils (https://github.com/tapjs/stack-utils#readme). + +# Details +Files were exported from https://www.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/stack-utils + +Additional Details + * Last updated: Tue, 07 Nov 2017 17:49:01 GMT + * Dependencies: none + * Global values: none + +# Credits +These definitions were written by BendingBender . diff --git a/node_modules/@types/stack-utils/index.d.ts b/node_modules/@types/stack-utils/index.d.ts index f29a4229..a2e890b3 100644 --- a/node_modules/@types/stack-utils/index.d.ts +++ b/node_modules/@types/stack-utils/index.d.ts @@ -1,64 +1,64 @@ -// Type definitions for stack-utils 1.0 -// Project: https://github.com/tapjs/stack-utils#readme -// Definitions by: BendingBender -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -// TypeScript Version: 2.2 - -export = StackUtils; - -declare class StackUtils { - static nodeInternals(): RegExp[]; - constructor(options?: StackUtils.Options); - clean(stack: string | string[]): string; - capture(limit?: number, startStackFunction?: Function): StackUtils.CallSite[]; - capture(startStackFunction: Function): StackUtils.CallSite[]; - captureString(limit?: number, startStackFunction?: Function): string; - captureString(startStackFunction: Function): string; - at(startStackFunction?: Function): StackUtils.CallSiteLike; - parseLine(line: string): StackUtils.StackLineData | null; -} - -declare namespace StackUtils { - interface Options { - internals?: RegExp[]; - cwd?: string; - wrapCallSite?(callSite: CallSite): CallSite; - } - - interface CallSite { - getThis(): object | undefined; - getTypeName(): string; - getFunction(): Function | undefined; - getFunctionName(): string; - getMethodName(): string | null; - getFileName(): string | undefined; - getLineNumber(): number; - getColumnNumber(): number; - getEvalOrigin(): CallSite | string; - isToplevel(): boolean; - isEval(): boolean; - isNative(): boolean; - isConstructor(): boolean; - } - - interface CallSiteLike extends StackData { - type?: string; - } - - interface StackLineData extends StackData { - evalLine?: number; - evalColumn?: number; - evalFile?: string; - } - - interface StackData { - line?: number; - column?: number; - file?: string; - constructor?: boolean; - evalOrigin?: string; - native?: boolean; - function?: string; - method?: string; - } -} +// Type definitions for stack-utils 1.0 +// Project: https://github.com/tapjs/stack-utils#readme +// Definitions by: BendingBender +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.2 + +export = StackUtils; + +declare class StackUtils { + static nodeInternals(): RegExp[]; + constructor(options?: StackUtils.Options); + clean(stack: string | string[]): string; + capture(limit?: number, startStackFunction?: Function): StackUtils.CallSite[]; + capture(startStackFunction: Function): StackUtils.CallSite[]; + captureString(limit?: number, startStackFunction?: Function): string; + captureString(startStackFunction: Function): string; + at(startStackFunction?: Function): StackUtils.CallSiteLike; + parseLine(line: string): StackUtils.StackLineData | null; +} + +declare namespace StackUtils { + interface Options { + internals?: RegExp[]; + cwd?: string; + wrapCallSite?(callSite: CallSite): CallSite; + } + + interface CallSite { + getThis(): object | undefined; + getTypeName(): string; + getFunction(): Function | undefined; + getFunctionName(): string; + getMethodName(): string | null; + getFileName(): string | undefined; + getLineNumber(): number; + getColumnNumber(): number; + getEvalOrigin(): CallSite | string; + isToplevel(): boolean; + isEval(): boolean; + isNative(): boolean; + isConstructor(): boolean; + } + + interface CallSiteLike extends StackData { + type?: string; + } + + interface StackLineData extends StackData { + evalLine?: number; + evalColumn?: number; + evalFile?: string; + } + + interface StackData { + line?: number; + column?: number; + file?: string; + constructor?: boolean; + evalOrigin?: string; + native?: boolean; + function?: string; + method?: string; + } +} diff --git a/node_modules/@types/yargs-parser/LICENSE b/node_modules/@types/yargs-parser/LICENSE index 21071075..4b1ad51b 100644 --- a/node_modules/@types/yargs-parser/LICENSE +++ b/node_modules/@types/yargs-parser/LICENSE @@ -1,21 +1,21 @@ - MIT License - - Copyright (c) Microsoft Corporation. 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 + MIT License + + Copyright (c) Microsoft Corporation. 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 diff --git a/node_modules/@types/yargs-parser/README.md b/node_modules/@types/yargs-parser/README.md index 4e438f0f..0900ead0 100644 --- a/node_modules/@types/yargs-parser/README.md +++ b/node_modules/@types/yargs-parser/README.md @@ -1,16 +1,16 @@ -# Installation -> `npm install --save @types/yargs-parser` - -# Summary -This package contains type definitions for yargs-parser (https://github.com/yargs/yargs-parser#readme). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/yargs-parser - -Additional Details - * Last updated: Thu, 05 Sep 2019 18:22:48 GMT - * Dependencies: none - * Global values: none - -# Credits -These definitions were written by Miles Johnson . +# Installation +> `npm install --save @types/yargs-parser` + +# Summary +This package contains type definitions for yargs-parser (https://github.com/yargs/yargs-parser#readme). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/yargs-parser + +Additional Details + * Last updated: Thu, 05 Sep 2019 18:22:48 GMT + * Dependencies: none + * Global values: none + +# Credits +These definitions were written by Miles Johnson . diff --git a/node_modules/@types/yargs/LICENSE b/node_modules/@types/yargs/LICENSE index 21071075..4b1ad51b 100644 --- a/node_modules/@types/yargs/LICENSE +++ b/node_modules/@types/yargs/LICENSE @@ -1,21 +1,21 @@ - MIT License - - Copyright (c) Microsoft Corporation. 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 + MIT License + + Copyright (c) Microsoft Corporation. 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 diff --git a/node_modules/@types/yargs/README.md b/node_modules/@types/yargs/README.md index 4b36466e..11520c7b 100644 --- a/node_modules/@types/yargs/README.md +++ b/node_modules/@types/yargs/README.md @@ -1,16 +1,16 @@ -# Installation -> `npm install --save @types/yargs` - -# Summary -This package contains type definitions for yargs (https://github.com/chevex/yargs). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/yargs - -Additional Details - * Last updated: Wed, 25 Sep 2019 16:10:32 GMT - * Dependencies: @types/yargs-parser - * Global values: none - -# Credits -These definitions were written by Martin Poelstra , Mizunashi Mana , Jeffery Grajkowski , Jeff Kenney , Jimi (Dimitris) Charalampidis , Steffen Viken Valvåg , Emily Marigold Klassen , and ExE Boss . +# Installation +> `npm install --save @types/yargs` + +# Summary +This package contains type definitions for yargs (https://github.com/chevex/yargs). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/yargs + +Additional Details + * Last updated: Wed, 25 Sep 2019 16:10:32 GMT + * Dependencies: @types/yargs-parser + * Global values: none + +# Credits +These definitions were written by Martin Poelstra , Mizunashi Mana , Jeffery Grajkowski , Jeff Kenney , Jimi (Dimitris) Charalampidis , Steffen Viken Valvåg , Emily Marigold Klassen , and ExE Boss . diff --git a/node_modules/color-name/.npmignore b/node_modules/color-name/.npmignore index 3854c07d..f9f28164 100644 --- a/node_modules/color-name/.npmignore +++ b/node_modules/color-name/.npmignore @@ -1,107 +1,107 @@ -//this will affect all the git repos -git config --global core.excludesfile ~/.gitignore - - -//update files since .ignore won't if already tracked -git rm --cached - -# Compiled source # -################### -*.com -*.class -*.dll -*.exe -*.o -*.so - -# Packages # -############ -# it's better to unpack these files and commit the raw source -# git has its own built in compression methods -*.7z -*.dmg -*.gz -*.iso -*.jar -*.rar -*.tar -*.zip - -# Logs and databases # -###################### -*.log -*.sql -*.sqlite - -# OS generated files # -###################### -.DS_Store -.DS_Store? -._* -.Spotlight-V100 -.Trashes -# Icon? -ehthumbs.db -Thumbs.db -.cache -.project -.settings -.tmproj -*.esproj -nbproject - -# Numerous always-ignore extensions # -##################################### -*.diff -*.err -*.orig -*.rej -*.swn -*.swo -*.swp -*.vi -*~ -*.sass-cache -*.grunt -*.tmp - -# Dreamweaver added files # -########################### -_notes -dwsync.xml - -# Komodo # -########################### -*.komodoproject -.komodotools - -# Node # -##################### -node_modules - -# Bower # -##################### -bower_components - -# Folders to ignore # -##################### -.hg -.svn -.CVS -intermediate -publish -.idea -.graphics -_test -_archive -uploads -tmp - -# Vim files to ignore # -####################### -.VimballRecord -.netrwhist - -bundle.* - +//this will affect all the git repos +git config --global core.excludesfile ~/.gitignore + + +//update files since .ignore won't if already tracked +git rm --cached + +# Compiled source # +################### +*.com +*.class +*.dll +*.exe +*.o +*.so + +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip + +# Logs and databases # +###################### +*.log +*.sql +*.sqlite + +# OS generated files # +###################### +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +# Icon? +ehthumbs.db +Thumbs.db +.cache +.project +.settings +.tmproj +*.esproj +nbproject + +# Numerous always-ignore extensions # +##################################### +*.diff +*.err +*.orig +*.rej +*.swn +*.swo +*.swp +*.vi +*~ +*.sass-cache +*.grunt +*.tmp + +# Dreamweaver added files # +########################### +_notes +dwsync.xml + +# Komodo # +########################### +*.komodoproject +.komodotools + +# Node # +##################### +node_modules + +# Bower # +##################### +bower_components + +# Folders to ignore # +##################### +.hg +.svn +.CVS +intermediate +publish +.idea +.graphics +_test +_archive +uploads +tmp + +# Vim files to ignore # +####################### +.VimballRecord +.netrwhist + +bundle.* + _demo \ No newline at end of file diff --git a/node_modules/color-name/LICENSE b/node_modules/color-name/LICENSE index 4d9802a8..c6b10012 100644 --- a/node_modules/color-name/LICENSE +++ b/node_modules/color-name/LICENSE @@ -1,8 +1,8 @@ -The MIT License (MIT) -Copyright (c) 2015 Dmitry Ivanov - -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 MIT License (MIT) +Copyright (c) 2015 Dmitry Ivanov + +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. \ No newline at end of file diff --git a/node_modules/color-name/README.md b/node_modules/color-name/README.md index 3611a6b5..932b9791 100644 --- a/node_modules/color-name/README.md +++ b/node_modules/color-name/README.md @@ -1,11 +1,11 @@ -A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors. - -[![NPM](https://nodei.co/npm/color-name.png?mini=true)](https://nodei.co/npm/color-name/) - - -```js -var colors = require('color-name'); -colors.red //[255,0,0] -``` - - +A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors. + +[![NPM](https://nodei.co/npm/color-name.png?mini=true)](https://nodei.co/npm/color-name/) + + +```js +var colors = require('color-name'); +colors.red //[255,0,0] +``` + + diff --git a/node_modules/color-name/index.js b/node_modules/color-name/index.js index e42aa68a..b7c198a6 100644 --- a/node_modules/color-name/index.js +++ b/node_modules/color-name/index.js @@ -1,152 +1,152 @@ -'use strict' - -module.exports = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; +'use strict' + +module.exports = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; diff --git a/node_modules/color-name/test.js b/node_modules/color-name/test.js index 7a087462..6e6bf30b 100644 --- a/node_modules/color-name/test.js +++ b/node_modules/color-name/test.js @@ -1,7 +1,7 @@ -'use strict' - -var names = require('./'); -var assert = require('assert'); - -assert.deepEqual(names.red, [255,0,0]); -assert.deepEqual(names.aliceblue, [240,248,255]); +'use strict' + +var names = require('./'); +var assert = require('assert'); + +assert.deepEqual(names.red, [255,0,0]); +assert.deepEqual(names.aliceblue, [240,248,255]); diff --git a/node_modules/component-emitter/History.md b/node_modules/component-emitter/History.md index e9fb4bc5..30d07d69 100644 --- a/node_modules/component-emitter/History.md +++ b/node_modules/component-emitter/History.md @@ -1,75 +1,75 @@ - -1.3.0 / 2018-04-15 -================== - - * removed bower support - * expose emitter on `exports` - * prevent de-optimization from using `arguments` - -1.2.1 / 2016-04-18 -================== - - * enable client side use - -1.2.0 / 2014-02-12 -================== - - * prefix events with `$` to support object prototype method names - -1.1.3 / 2014-06-20 -================== - - * republish for npm - * add LICENSE file - -1.1.2 / 2014-02-10 -================== - - * package: rename to "component-emitter" - * package: update "main" and "component" fields - * Add license to Readme (same format as the other components) - * created .npmignore - * travis stuff - -1.1.1 / 2013-12-01 -================== - - * fix .once adding .on to the listener - * docs: Emitter#off() - * component: add `.repo` prop - -1.1.0 / 2013-10-20 -================== - - * add `.addEventListener()` and `.removeEventListener()` aliases - -1.0.1 / 2013-06-27 -================== - - * add support for legacy ie - -1.0.0 / 2013-02-26 -================== - - * add `.off()` support for removing all listeners - -0.0.6 / 2012-10-08 -================== - - * add `this._callbacks` initialization to prevent funky gotcha - -0.0.5 / 2012-09-07 -================== - - * fix `Emitter.call(this)` usage - -0.0.3 / 2012-07-11 -================== - - * add `.listeners()` - * rename `.has()` to `.hasListeners()` - -0.0.2 / 2012-06-28 -================== - - * fix `.off()` with `.once()`-registered callbacks + +1.3.0 / 2018-04-15 +================== + + * removed bower support + * expose emitter on `exports` + * prevent de-optimization from using `arguments` + +1.2.1 / 2016-04-18 +================== + + * enable client side use + +1.2.0 / 2014-02-12 +================== + + * prefix events with `$` to support object prototype method names + +1.1.3 / 2014-06-20 +================== + + * republish for npm + * add LICENSE file + +1.1.2 / 2014-02-10 +================== + + * package: rename to "component-emitter" + * package: update "main" and "component" fields + * Add license to Readme (same format as the other components) + * created .npmignore + * travis stuff + +1.1.1 / 2013-12-01 +================== + + * fix .once adding .on to the listener + * docs: Emitter#off() + * component: add `.repo` prop + +1.1.0 / 2013-10-20 +================== + + * add `.addEventListener()` and `.removeEventListener()` aliases + +1.0.1 / 2013-06-27 +================== + + * add support for legacy ie + +1.0.0 / 2013-02-26 +================== + + * add `.off()` support for removing all listeners + +0.0.6 / 2012-10-08 +================== + + * add `this._callbacks` initialization to prevent funky gotcha + +0.0.5 / 2012-09-07 +================== + + * fix `Emitter.call(this)` usage + +0.0.3 / 2012-07-11 +================== + + * add `.listeners()` + * rename `.has()` to `.hasListeners()` + +0.0.2 / 2012-06-28 +================== + + * fix `.off()` with `.once()`-registered callbacks diff --git a/node_modules/component-emitter/LICENSE b/node_modules/component-emitter/LICENSE index de516927..d6e43f2b 100644 --- a/node_modules/component-emitter/LICENSE +++ b/node_modules/component-emitter/LICENSE @@ -1,24 +1,24 @@ -(The MIT License) - -Copyright (c) 2014 Component 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. +(The MIT License) + +Copyright (c) 2014 Component 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. diff --git a/node_modules/component-emitter/Readme.md b/node_modules/component-emitter/Readme.md index 0f3f9b9f..04664111 100644 --- a/node_modules/component-emitter/Readme.md +++ b/node_modules/component-emitter/Readme.md @@ -1,74 +1,74 @@ -# Emitter [![Build Status](https://travis-ci.org/component/emitter.png)](https://travis-ci.org/component/emitter) - - Event emitter component. - -## Installation - -``` -$ component install component/emitter -``` - -## API - -### Emitter(obj) - - The `Emitter` may also be used as a mixin. For example - a "plain" object may become an emitter, or you may - extend an existing prototype. - - As an `Emitter` instance: - -```js -var Emitter = require('emitter'); -var emitter = new Emitter; -emitter.emit('something'); -``` - - As a mixin: - -```js -var Emitter = require('emitter'); -var user = { name: 'tobi' }; -Emitter(user); - -user.emit('im a user'); -``` - - As a prototype mixin: - -```js -var Emitter = require('emitter'); -Emitter(User.prototype); -``` - -### Emitter#on(event, fn) - - Register an `event` handler `fn`. - -### Emitter#once(event, fn) - - Register a single-shot `event` handler `fn`, - removed immediately after it is invoked the - first time. - -### Emitter#off(event, fn) - - * Pass `event` and `fn` to remove a listener. - * Pass `event` to remove all listeners on that event. - * Pass nothing to remove all listeners on all events. - -### Emitter#emit(event, ...) - - Emit an `event` with variable option args. - -### Emitter#listeners(event) - - Return an array of callbacks, or an empty array. - -### Emitter#hasListeners(event) - - Check if this emitter has `event` handlers. - -## License - -MIT +# Emitter [![Build Status](https://travis-ci.org/component/emitter.png)](https://travis-ci.org/component/emitter) + + Event emitter component. + +## Installation + +``` +$ component install component/emitter +``` + +## API + +### Emitter(obj) + + The `Emitter` may also be used as a mixin. For example + a "plain" object may become an emitter, or you may + extend an existing prototype. + + As an `Emitter` instance: + +```js +var Emitter = require('emitter'); +var emitter = new Emitter; +emitter.emit('something'); +``` + + As a mixin: + +```js +var Emitter = require('emitter'); +var user = { name: 'tobi' }; +Emitter(user); + +user.emit('im a user'); +``` + + As a prototype mixin: + +```js +var Emitter = require('emitter'); +Emitter(User.prototype); +``` + +### Emitter#on(event, fn) + + Register an `event` handler `fn`. + +### Emitter#once(event, fn) + + Register a single-shot `event` handler `fn`, + removed immediately after it is invoked the + first time. + +### Emitter#off(event, fn) + + * Pass `event` and `fn` to remove a listener. + * Pass `event` to remove all listeners on that event. + * Pass nothing to remove all listeners on all events. + +### Emitter#emit(event, ...) + + Emit an `event` with variable option args. + +### Emitter#listeners(event) + + Return an array of callbacks, or an empty array. + +### Emitter#hasListeners(event) + + Check if this emitter has `event` handlers. + +## License + +MIT diff --git a/node_modules/component-emitter/index.js b/node_modules/component-emitter/index.js index 6d7ed0ab..7e375c25 100644 --- a/node_modules/component-emitter/index.js +++ b/node_modules/component-emitter/index.js @@ -1,175 +1,175 @@ - -/** - * Expose `Emitter`. - */ - -if (typeof module !== 'undefined') { - module.exports = Emitter; -} - -/** - * Initialize a new `Emitter`. - * - * @api public - */ - -function Emitter(obj) { - if (obj) return mixin(obj); -}; - -/** - * Mixin the emitter properties. - * - * @param {Object} obj - * @return {Object} - * @api private - */ - -function mixin(obj) { - for (var key in Emitter.prototype) { - obj[key] = Emitter.prototype[key]; - } - return obj; -} - -/** - * Listen on the given `event` with `fn`. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public - */ - -Emitter.prototype.on = -Emitter.prototype.addEventListener = function(event, fn){ - this._callbacks = this._callbacks || {}; - (this._callbacks['$' + event] = this._callbacks['$' + event] || []) - .push(fn); - return this; -}; - -/** - * Adds an `event` listener that will be invoked a single - * time then automatically removed. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public - */ - -Emitter.prototype.once = function(event, fn){ - function on() { - this.off(event, on); - fn.apply(this, arguments); - } - - on.fn = fn; - this.on(event, on); - return this; -}; - -/** - * Remove the given callback for `event` or all - * registered callbacks. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public - */ - -Emitter.prototype.off = -Emitter.prototype.removeListener = -Emitter.prototype.removeAllListeners = -Emitter.prototype.removeEventListener = function(event, fn){ - this._callbacks = this._callbacks || {}; - - // all - if (0 == arguments.length) { - this._callbacks = {}; - return this; - } - - // specific event - var callbacks = this._callbacks['$' + event]; - if (!callbacks) return this; - - // remove all handlers - if (1 == arguments.length) { - delete this._callbacks['$' + event]; - return this; - } - - // remove specific handler - var cb; - for (var i = 0; i < callbacks.length; i++) { - cb = callbacks[i]; - if (cb === fn || cb.fn === fn) { - callbacks.splice(i, 1); - break; - } - } - - // Remove event specific arrays for event types that no - // one is subscribed for to avoid memory leak. - if (callbacks.length === 0) { - delete this._callbacks['$' + event]; - } - - return this; -}; - -/** - * Emit `event` with the given args. - * - * @param {String} event - * @param {Mixed} ... - * @return {Emitter} - */ - -Emitter.prototype.emit = function(event){ - this._callbacks = this._callbacks || {}; - - var args = new Array(arguments.length - 1) - , callbacks = this._callbacks['$' + event]; - - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - - if (callbacks) { - callbacks = callbacks.slice(0); - for (var i = 0, len = callbacks.length; i < len; ++i) { - callbacks[i].apply(this, args); - } - } - - return this; -}; - -/** - * Return array of callbacks for `event`. - * - * @param {String} event - * @return {Array} - * @api public - */ - -Emitter.prototype.listeners = function(event){ - this._callbacks = this._callbacks || {}; - return this._callbacks['$' + event] || []; -}; - -/** - * Check if this emitter has `event` handlers. - * - * @param {String} event - * @return {Boolean} - * @api public - */ - -Emitter.prototype.hasListeners = function(event){ - return !! this.listeners(event).length; -}; + +/** + * Expose `Emitter`. + */ + +if (typeof module !== 'undefined') { + module.exports = Emitter; +} + +/** + * Initialize a new `Emitter`. + * + * @api public + */ + +function Emitter(obj) { + if (obj) return mixin(obj); +}; + +/** + * Mixin the emitter properties. + * + * @param {Object} obj + * @return {Object} + * @api private + */ + +function mixin(obj) { + for (var key in Emitter.prototype) { + obj[key] = Emitter.prototype[key]; + } + return obj; +} + +/** + * Listen on the given `event` with `fn`. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + +Emitter.prototype.on = +Emitter.prototype.addEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + (this._callbacks['$' + event] = this._callbacks['$' + event] || []) + .push(fn); + return this; +}; + +/** + * Adds an `event` listener that will be invoked a single + * time then automatically removed. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + +Emitter.prototype.once = function(event, fn){ + function on() { + this.off(event, on); + fn.apply(this, arguments); + } + + on.fn = fn; + this.on(event, on); + return this; +}; + +/** + * Remove the given callback for `event` or all + * registered callbacks. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + +Emitter.prototype.off = +Emitter.prototype.removeListener = +Emitter.prototype.removeAllListeners = +Emitter.prototype.removeEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + + // all + if (0 == arguments.length) { + this._callbacks = {}; + return this; + } + + // specific event + var callbacks = this._callbacks['$' + event]; + if (!callbacks) return this; + + // remove all handlers + if (1 == arguments.length) { + delete this._callbacks['$' + event]; + return this; + } + + // remove specific handler + var cb; + for (var i = 0; i < callbacks.length; i++) { + cb = callbacks[i]; + if (cb === fn || cb.fn === fn) { + callbacks.splice(i, 1); + break; + } + } + + // Remove event specific arrays for event types that no + // one is subscribed for to avoid memory leak. + if (callbacks.length === 0) { + delete this._callbacks['$' + event]; + } + + return this; +}; + +/** + * Emit `event` with the given args. + * + * @param {String} event + * @param {Mixed} ... + * @return {Emitter} + */ + +Emitter.prototype.emit = function(event){ + this._callbacks = this._callbacks || {}; + + var args = new Array(arguments.length - 1) + , callbacks = this._callbacks['$' + event]; + + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + + if (callbacks) { + callbacks = callbacks.slice(0); + for (var i = 0, len = callbacks.length; i < len; ++i) { + callbacks[i].apply(this, args); + } + } + + return this; +}; + +/** + * Return array of callbacks for `event`. + * + * @param {String} event + * @return {Array} + * @api public + */ + +Emitter.prototype.listeners = function(event){ + this._callbacks = this._callbacks || {}; + return this._callbacks['$' + event] || []; +}; + +/** + * Check if this emitter has `event` handlers. + * + * @param {String} event + * @return {Boolean} + * @api public + */ + +Emitter.prototype.hasListeners = function(event){ + return !! this.listeners(event).length; +}; diff --git a/node_modules/expect/build-es5/index.js b/node_modules/expect/build-es5/index.js index c00721f3..77945851 100644 --- a/node_modules/expect/build-es5/index.js +++ b/node_modules/expect/build-es5/index.js @@ -1419,16 +1419,16 @@ module.exports.namespace = namespace; "use strict"; -/** - * Expose `Emitter`. +/** + * Expose `Emitter`. */ if (true) { module.exports = Emitter; } -/** - * Initialize a new `Emitter`. - * - * @api public +/** + * Initialize a new `Emitter`. + * + * @api public */ @@ -1437,12 +1437,12 @@ function Emitter(obj) { } ; -/** - * Mixin the emitter properties. - * - * @param {Object} obj - * @return {Object} - * @api private +/** + * Mixin the emitter properties. + * + * @param {Object} obj + * @return {Object} + * @api private */ function mixin(obj) { @@ -1452,13 +1452,13 @@ function mixin(obj) { return obj; } -/** - * Listen on the given `event` with `fn`. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public +/** + * Listen on the given `event` with `fn`. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public */ @@ -1467,14 +1467,14 @@ Emitter.prototype.on = Emitter.prototype.addEventListener = function (event, fn) (this._callbacks['$' + event] = this._callbacks['$' + event] || []).push(fn); return this; }; -/** - * Adds an `event` listener that will be invoked a single - * time then automatically removed. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public +/** + * Adds an `event` listener that will be invoked a single + * time then automatically removed. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public */ @@ -1488,14 +1488,14 @@ Emitter.prototype.once = function (event, fn) { this.on(event, on); return this; }; -/** - * Remove the given callback for `event` or all - * registered callbacks. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public +/** + * Remove the given callback for `event` or all + * registered callbacks. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public */ @@ -1536,12 +1536,12 @@ Emitter.prototype.off = Emitter.prototype.removeListener = Emitter.prototype.rem return this; }; -/** - * Emit `event` with the given args. - * - * @param {String} event - * @param {Mixed} ... - * @return {Emitter} +/** + * Emit `event` with the given args. + * + * @param {String} event + * @param {Mixed} ... + * @return {Emitter} */ @@ -1564,12 +1564,12 @@ Emitter.prototype.emit = function (event) { return this; }; -/** - * Return array of callbacks for `event`. - * - * @param {String} event - * @return {Array} - * @api public +/** + * Return array of callbacks for `event`. + * + * @param {String} event + * @return {Array} + * @api public */ @@ -1577,12 +1577,12 @@ Emitter.prototype.listeners = function (event) { this._callbacks = this._callbacks || {}; return this._callbacks['$' + event] || []; }; -/** - * Check if this emitter has `event` handlers. - * - * @param {String} event - * @return {Boolean} - * @api public +/** + * Check if this emitter has `event` handlers. + * + * @param {String} event + * @return {Boolean} + * @api public */ @@ -3392,16 +3392,16 @@ module.exports.namespace = namespace; "use strict"; -/** - * Expose `Emitter`. +/** + * Expose `Emitter`. */ if (true) { module.exports = Emitter; } -/** - * Initialize a new `Emitter`. - * - * @api public +/** + * Initialize a new `Emitter`. + * + * @api public */ @@ -3410,12 +3410,12 @@ function Emitter(obj) { } ; -/** - * Mixin the emitter properties. - * - * @param {Object} obj - * @return {Object} - * @api private +/** + * Mixin the emitter properties. + * + * @param {Object} obj + * @return {Object} + * @api private */ function mixin(obj) { @@ -3425,13 +3425,13 @@ function mixin(obj) { return obj; } -/** - * Listen on the given `event` with `fn`. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public +/** + * Listen on the given `event` with `fn`. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public */ @@ -3440,14 +3440,14 @@ Emitter.prototype.on = Emitter.prototype.addEventListener = function (event, fn) (this._callbacks['$' + event] = this._callbacks['$' + event] || []).push(fn); return this; }; -/** - * Adds an `event` listener that will be invoked a single - * time then automatically removed. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public +/** + * Adds an `event` listener that will be invoked a single + * time then automatically removed. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public */ @@ -3461,14 +3461,14 @@ Emitter.prototype.once = function (event, fn) { this.on(event, on); return this; }; -/** - * Remove the given callback for `event` or all - * registered callbacks. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public +/** + * Remove the given callback for `event` or all + * registered callbacks. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public */ @@ -3509,12 +3509,12 @@ Emitter.prototype.off = Emitter.prototype.removeListener = Emitter.prototype.rem return this; }; -/** - * Emit `event` with the given args. - * - * @param {String} event - * @param {Mixed} ... - * @return {Emitter} +/** + * Emit `event` with the given args. + * + * @param {String} event + * @param {Mixed} ... + * @return {Emitter} */ @@ -3537,12 +3537,12 @@ Emitter.prototype.emit = function (event) { return this; }; -/** - * Return array of callbacks for `event`. - * - * @param {String} event - * @return {Array} - * @api public +/** + * Return array of callbacks for `event`. + * + * @param {String} event + * @return {Array} + * @api public */ @@ -3550,12 +3550,12 @@ Emitter.prototype.listeners = function (event) { this._callbacks = this._callbacks || {}; return this._callbacks['$' + event] || []; }; -/** - * Check if this emitter has `event` handlers. - * - * @param {String} event - * @return {Boolean} - * @api public +/** + * Check if this emitter has `event` handlers. + * + * @param {String} event + * @return {Boolean} + * @api public */ diff --git a/node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64/fse.node b/node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64/fse.node new file mode 100755 index 0000000000000000000000000000000000000000..6065b053f318d17432148c42882af29ba97cc7c1 GIT binary patch literal 38144 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⁣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 I&Lj2z3-VVT4*&oF diff --git a/node_modules/fsevents/node_modules/needle/examples/parsed-stream2.js b/node_modules/fsevents/node_modules/needle/examples/parsed-stream2.js index f325ec10..5d9b79af 100644 --- a/node_modules/fsevents/node_modules/needle/examples/parsed-stream2.js +++ b/node_modules/fsevents/node_modules/needle/examples/parsed-stream2.js @@ -1,21 +1,21 @@ -////////////////////////////////////////// -// This example illustrates a more complex -// example of parsing a JSON stream. -////////////////////////////////////////// - -var needle = require('./../'), - JSONStream = require('JSONStream'); - -var url = 'http://jsonplaceholder.typicode.com/db'; - -// Initialize our GET request with our default (JSON) -// parsers disabled. - -var json = new needle.get(url, {parse: false}) - // And now interpret the stream as JSON, returning only the - // title of all the posts. - .pipe(new JSONStream.parse('posts.*.title')); - -json.on('data', function (obj) { - console.log('got title: \'' + obj + '\''); -}) +////////////////////////////////////////// +// This example illustrates a more complex +// example of parsing a JSON stream. +////////////////////////////////////////// + +var needle = require('./../'), + JSONStream = require('JSONStream'); + +var url = 'http://jsonplaceholder.typicode.com/db'; + +// Initialize our GET request with our default (JSON) +// parsers disabled. + +var json = new needle.get(url, {parse: false}) + // And now interpret the stream as JSON, returning only the + // title of all the posts. + .pipe(new JSONStream.parse('posts.*.title')); + +json.on('data', function (obj) { + console.log('got title: \'' + obj + '\''); +}) diff --git a/node_modules/fsevents/node_modules/needle/test/compression_spec.js b/node_modules/fsevents/node_modules/needle/test/compression_spec.js index 115b2b95..ea5f3b19 100644 --- a/node_modules/fsevents/node_modules/needle/test/compression_spec.js +++ b/node_modules/fsevents/node_modules/needle/test/compression_spec.js @@ -1,94 +1,94 @@ -var should = require('should'), - needle = require('./../'), - http = require('http'), - zlib = require('zlib'), - stream = require('stream'), - port = 11123, - server; - -describe('compression', function(){ - - require.bind(null, 'zlib').should.not.throw() - - var jsonData = '{"foo":"bar"}'; - - describe('when server supports compression', function(){ - - before(function(){ - server = http.createServer(function(req, res) { - var raw = new stream.PassThrough(); - - var acceptEncoding = req.headers['accept-encoding']; - if (!acceptEncoding) { - acceptEncoding = ''; - } - - if (acceptEncoding.match(/\bdeflate\b/)) { - res.setHeader('Content-Encoding', 'deflate'); - raw.pipe(zlib.createDeflate()).pipe(res); - } else if (acceptEncoding.match(/\bgzip\b/)) { - res.setHeader('Content-Encoding', 'gzip'); - raw.pipe(zlib.createGzip()).pipe(res); - } else { - raw.pipe(res); - } - - res.setHeader('Content-Type', 'application/json') - if (req.headers['with-bad']) { - res.end('foo'); // end, no deflate data - } else { - raw.end(jsonData) - } - - }) - - server.listen(port); - }); - - after(function(done){ - server.close(done); - }) - - describe('and client requests no compression', function() { - it('should have the body decompressed', function(done){ - needle.get('localhost:' + port, function(err, response, body){ - should.ifError(err); - body.should.have.property('foo', 'bar'); - response.bytes.should.equal(jsonData.length); - done(); - }) - }) - }) - - describe('and client requests gzip compression', function() { - it('should have the body decompressed', function(done){ - needle.get('localhost:' + port, {headers: {'Accept-Encoding': 'gzip'}}, function(err, response, body){ - should.ifError(err); - body.should.have.property('foo', 'bar'); - response.bytes.should.not.equal(jsonData.length); - done(); - }) - }) - }) - - describe('and client requests deflate compression', function() { - it('should have the body decompressed', function(done){ - needle.get('localhost:' + port, {headers: {'Accept-Encoding': 'deflate'}}, function(err, response, body){ - should.ifError(err); - body.should.have.property('foo', 'bar'); - response.bytes.should.not.equal(jsonData.length); - done(); - }) - }) - - it('should rethrow errors from decompressors', function(done){ - needle.get('localhost:' + port, {headers: {'Accept-Encoding': 'deflate', 'With-Bad': 'true'}}, function(err, response, body) { - should.exist(err); - err.message.should.equal("incorrect header check"); - err.code.should.equal("Z_DATA_ERROR") - done(); - }) - }) - }) - }) -}) +var should = require('should'), + needle = require('./../'), + http = require('http'), + zlib = require('zlib'), + stream = require('stream'), + port = 11123, + server; + +describe('compression', function(){ + + require.bind(null, 'zlib').should.not.throw() + + var jsonData = '{"foo":"bar"}'; + + describe('when server supports compression', function(){ + + before(function(){ + server = http.createServer(function(req, res) { + var raw = new stream.PassThrough(); + + var acceptEncoding = req.headers['accept-encoding']; + if (!acceptEncoding) { + acceptEncoding = ''; + } + + if (acceptEncoding.match(/\bdeflate\b/)) { + res.setHeader('Content-Encoding', 'deflate'); + raw.pipe(zlib.createDeflate()).pipe(res); + } else if (acceptEncoding.match(/\bgzip\b/)) { + res.setHeader('Content-Encoding', 'gzip'); + raw.pipe(zlib.createGzip()).pipe(res); + } else { + raw.pipe(res); + } + + res.setHeader('Content-Type', 'application/json') + if (req.headers['with-bad']) { + res.end('foo'); // end, no deflate data + } else { + raw.end(jsonData) + } + + }) + + server.listen(port); + }); + + after(function(done){ + server.close(done); + }) + + describe('and client requests no compression', function() { + it('should have the body decompressed', function(done){ + needle.get('localhost:' + port, function(err, response, body){ + should.ifError(err); + body.should.have.property('foo', 'bar'); + response.bytes.should.equal(jsonData.length); + done(); + }) + }) + }) + + describe('and client requests gzip compression', function() { + it('should have the body decompressed', function(done){ + needle.get('localhost:' + port, {headers: {'Accept-Encoding': 'gzip'}}, function(err, response, body){ + should.ifError(err); + body.should.have.property('foo', 'bar'); + response.bytes.should.not.equal(jsonData.length); + done(); + }) + }) + }) + + describe('and client requests deflate compression', function() { + it('should have the body decompressed', function(done){ + needle.get('localhost:' + port, {headers: {'Accept-Encoding': 'deflate'}}, function(err, response, body){ + should.ifError(err); + body.should.have.property('foo', 'bar'); + response.bytes.should.not.equal(jsonData.length); + done(); + }) + }) + + it('should rethrow errors from decompressors', function(done){ + needle.get('localhost:' + port, {headers: {'Accept-Encoding': 'deflate', 'With-Bad': 'true'}}, function(err, response, body) { + should.exist(err); + err.message.should.equal("incorrect header check"); + err.code.should.equal("Z_DATA_ERROR") + done(); + }) + }) + }) + }) +}) diff --git a/node_modules/json-schema/README.md b/node_modules/json-schema/README.md index 4de01244..ccc591b6 100644 --- a/node_modules/json-schema/README.md +++ b/node_modules/json-schema/README.md @@ -1,5 +1,5 @@ -JSON Schema is a repository for the JSON Schema specification, reference schemas and a CommonJS implementation of JSON Schema (not the only JavaScript implementation of JSON Schema, JSV is another excellent JavaScript validator). - -Code is licensed under the AFL or BSD license as part of the Persevere -project which is administered under the Dojo foundation, +JSON Schema is a repository for the JSON Schema specification, reference schemas and a CommonJS implementation of JSON Schema (not the only JavaScript implementation of JSON Schema, JSV is another excellent JavaScript validator). + +Code is licensed under the AFL or BSD license as part of the Persevere +project which is administered under the Dojo foundation, and all contributions require a Dojo CLA. \ No newline at end of file diff --git a/node_modules/json-schema/draft-00/hyper-schema b/node_modules/json-schema/draft-00/hyper-schema index de80b918..12fe26b6 100644 --- a/node_modules/json-schema/draft-00/hyper-schema +++ b/node_modules/json-schema/draft-00/hyper-schema @@ -1,68 +1,68 @@ -{ - "$schema" : "http://json-schema.org/draft-00/hyper-schema#", - "id" : "http://json-schema.org/draft-00/hyper-schema#", - - "properties" : { - "links" : { - "type" : "array", - "items" : {"$ref" : "http://json-schema.org/draft-00/links#"}, - "optional" : true - }, - - "fragmentResolution" : { - "type" : "string", - "optional" : true, - "default" : "dot-delimited" - }, - - "root" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "readonly" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "pathStart" : { - "type" : "string", - "optional" : true, - "format" : "uri" - }, - - "mediaType" : { - "type" : "string", - "optional" : true, - "format" : "media-type" - }, - - "alternate" : { - "type" : "array", - "items" : {"$ref" : "#"}, - "optional" : true - } - }, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "dot-delimited", - "extends" : {"$ref" : "http://json-schema.org/draft-00/schema#"} +{ + "$schema" : "http://json-schema.org/draft-00/hyper-schema#", + "id" : "http://json-schema.org/draft-00/hyper-schema#", + + "properties" : { + "links" : { + "type" : "array", + "items" : {"$ref" : "http://json-schema.org/draft-00/links#"}, + "optional" : true + }, + + "fragmentResolution" : { + "type" : "string", + "optional" : true, + "default" : "dot-delimited" + }, + + "root" : { + "type" : "boolean", + "optional" : true, + "default" : false + }, + + "readonly" : { + "type" : "boolean", + "optional" : true, + "default" : false + }, + + "pathStart" : { + "type" : "string", + "optional" : true, + "format" : "uri" + }, + + "mediaType" : { + "type" : "string", + "optional" : true, + "format" : "media-type" + }, + + "alternate" : { + "type" : "array", + "items" : {"$ref" : "#"}, + "optional" : true + } + }, + + "links" : [ + { + "href" : "{$ref}", + "rel" : "full" + }, + + { + "href" : "{$schema}", + "rel" : "describedby" + }, + + { + "href" : "{id}", + "rel" : "self" + } + ], + + "fragmentResolution" : "dot-delimited", + "extends" : {"$ref" : "http://json-schema.org/draft-00/schema#"} } \ No newline at end of file diff --git a/node_modules/json-schema/draft-00/json-ref b/node_modules/json-schema/draft-00/json-ref index 3a872a71..0c825bce 100644 --- a/node_modules/json-schema/draft-00/json-ref +++ b/node_modules/json-schema/draft-00/json-ref @@ -1,26 +1,26 @@ -{ - "$schema" : "http://json-schema.org/draft-00/hyper-schema#", - "id" : "http://json-schema.org/draft-00/json-ref#", - - "items" : {"$ref" : "#"}, - "additionalProperties" : {"$ref" : "#"}, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "dot-delimited" +{ + "$schema" : "http://json-schema.org/draft-00/hyper-schema#", + "id" : "http://json-schema.org/draft-00/json-ref#", + + "items" : {"$ref" : "#"}, + "additionalProperties" : {"$ref" : "#"}, + + "links" : [ + { + "href" : "{$ref}", + "rel" : "full" + }, + + { + "href" : "{$schema}", + "rel" : "describedby" + }, + + { + "href" : "{id}", + "rel" : "self" + } + ], + + "fragmentResolution" : "dot-delimited" } \ No newline at end of file diff --git a/node_modules/json-schema/draft-00/links b/node_modules/json-schema/draft-00/links index 8a5e7807..c9b55177 100644 --- a/node_modules/json-schema/draft-00/links +++ b/node_modules/json-schema/draft-00/links @@ -1,33 +1,33 @@ -{ - "$schema" : "http://json-schema.org/draft-00/hyper-schema#", - "id" : "http://json-schema.org/draft-00/links#", - "type" : "object", - - "properties" : { - "href" : { - "type" : "string" - }, - - "rel" : { - "type" : "string" - }, - - "method" : { - "type" : "string", - "default" : "GET", - "optional" : true - }, - - "enctype" : { - "type" : "string", - "requires" : "method", - "optional" : true - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "http://json-schema.org/draft-00/hyper-schema#"}, - "optional" : true - } - } +{ + "$schema" : "http://json-schema.org/draft-00/hyper-schema#", + "id" : "http://json-schema.org/draft-00/links#", + "type" : "object", + + "properties" : { + "href" : { + "type" : "string" + }, + + "rel" : { + "type" : "string" + }, + + "method" : { + "type" : "string", + "default" : "GET", + "optional" : true + }, + + "enctype" : { + "type" : "string", + "requires" : "method", + "optional" : true + }, + + "properties" : { + "type" : "object", + "additionalProperties" : {"$ref" : "http://json-schema.org/draft-00/hyper-schema#"}, + "optional" : true + } + } } \ No newline at end of file diff --git a/node_modules/json-schema/draft-00/schema b/node_modules/json-schema/draft-00/schema index 9aa2fbc5..a3a21443 100644 --- a/node_modules/json-schema/draft-00/schema +++ b/node_modules/json-schema/draft-00/schema @@ -1,155 +1,155 @@ -{ - "$schema" : "http://json-schema.org/draft-00/hyper-schema#", - "id" : "http://json-schema.org/draft-00/schema#", - "type" : "object", - - "properties" : { - "type" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "optional" : true, - "default" : "any" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "items" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "optional" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "additionalProperties" : { - "type" : [{"$ref" : "#"}, "boolean"], - "optional" : true, - "default" : {} - }, - - "requires" : { - "type" : ["string", {"$ref" : "#"}], - "optional" : true - }, - - "minimum" : { - "type" : "number", - "optional" : true - }, - - "maximum" : { - "type" : "number", - "optional" : true - }, - - "minimumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "minimum", - "default" : true - }, - - "maximumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "maximum", - "default" : true - }, - - "minItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0 - }, - - "pattern" : { - "type" : "string", - "optional" : true, - "format" : "regex" - }, - - "minLength" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxLength" : { - "type" : "integer", - "optional" : true - }, - - "enum" : { - "type" : "array", - "optional" : true, - "minItems" : 1 - }, - - "title" : { - "type" : "string", - "optional" : true - }, - - "description" : { - "type" : "string", - "optional" : true - }, - - "format" : { - "type" : "string", - "optional" : true - }, - - "contentEncoding" : { - "type" : "string", - "optional" : true - }, - - "default" : { - "type" : "any", - "optional" : true - }, - - "maxDecimal" : { - "type" : "integer", - "optional" : true, - "minimum" : 0 - }, - - "disallow" : { - "type" : ["string", "array"], - "items" : {"type" : "string"}, - "optional" : true - }, - - "extends" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - } - }, - - "optional" : true, - "default" : {} +{ + "$schema" : "http://json-schema.org/draft-00/hyper-schema#", + "id" : "http://json-schema.org/draft-00/schema#", + "type" : "object", + + "properties" : { + "type" : { + "type" : ["string", "array"], + "items" : { + "type" : ["string", {"$ref" : "#"}] + }, + "optional" : true, + "default" : "any" + }, + + "properties" : { + "type" : "object", + "additionalProperties" : {"$ref" : "#"}, + "optional" : true, + "default" : {} + }, + + "items" : { + "type" : [{"$ref" : "#"}, "array"], + "items" : {"$ref" : "#"}, + "optional" : true, + "default" : {} + }, + + "optional" : { + "type" : "boolean", + "optional" : true, + "default" : false + }, + + "additionalProperties" : { + "type" : [{"$ref" : "#"}, "boolean"], + "optional" : true, + "default" : {} + }, + + "requires" : { + "type" : ["string", {"$ref" : "#"}], + "optional" : true + }, + + "minimum" : { + "type" : "number", + "optional" : true + }, + + "maximum" : { + "type" : "number", + "optional" : true + }, + + "minimumCanEqual" : { + "type" : "boolean", + "optional" : true, + "requires" : "minimum", + "default" : true + }, + + "maximumCanEqual" : { + "type" : "boolean", + "optional" : true, + "requires" : "maximum", + "default" : true + }, + + "minItems" : { + "type" : "integer", + "optional" : true, + "minimum" : 0, + "default" : 0 + }, + + "maxItems" : { + "type" : "integer", + "optional" : true, + "minimum" : 0 + }, + + "pattern" : { + "type" : "string", + "optional" : true, + "format" : "regex" + }, + + "minLength" : { + "type" : "integer", + "optional" : true, + "minimum" : 0, + "default" : 0 + }, + + "maxLength" : { + "type" : "integer", + "optional" : true + }, + + "enum" : { + "type" : "array", + "optional" : true, + "minItems" : 1 + }, + + "title" : { + "type" : "string", + "optional" : true + }, + + "description" : { + "type" : "string", + "optional" : true + }, + + "format" : { + "type" : "string", + "optional" : true + }, + + "contentEncoding" : { + "type" : "string", + "optional" : true + }, + + "default" : { + "type" : "any", + "optional" : true + }, + + "maxDecimal" : { + "type" : "integer", + "optional" : true, + "minimum" : 0 + }, + + "disallow" : { + "type" : ["string", "array"], + "items" : {"type" : "string"}, + "optional" : true + }, + + "extends" : { + "type" : [{"$ref" : "#"}, "array"], + "items" : {"$ref" : "#"}, + "optional" : true, + "default" : {} + } + }, + + "optional" : true, + "default" : {} } \ No newline at end of file diff --git a/node_modules/json-schema/draft-01/hyper-schema b/node_modules/json-schema/draft-01/hyper-schema index 3f6c6cc2..66e835b6 100644 --- a/node_modules/json-schema/draft-01/hyper-schema +++ b/node_modules/json-schema/draft-01/hyper-schema @@ -1,68 +1,68 @@ -{ - "$schema" : "http://json-schema.org/draft-01/hyper-schema#", - "id" : "http://json-schema.org/draft-01/hyper-schema#", - - "properties" : { - "links" : { - "type" : "array", - "items" : {"$ref" : "http://json-schema.org/draft-01/links#"}, - "optional" : true - }, - - "fragmentResolution" : { - "type" : "string", - "optional" : true, - "default" : "dot-delimited" - }, - - "root" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "readonly" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "pathStart" : { - "type" : "string", - "optional" : true, - "format" : "uri" - }, - - "mediaType" : { - "type" : "string", - "optional" : true, - "format" : "media-type" - }, - - "alternate" : { - "type" : "array", - "items" : {"$ref" : "#"}, - "optional" : true - } - }, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "dot-delimited", - "extends" : {"$ref" : "http://json-schema.org/draft-01/schema#"} +{ + "$schema" : "http://json-schema.org/draft-01/hyper-schema#", + "id" : "http://json-schema.org/draft-01/hyper-schema#", + + "properties" : { + "links" : { + "type" : "array", + "items" : {"$ref" : "http://json-schema.org/draft-01/links#"}, + "optional" : true + }, + + "fragmentResolution" : { + "type" : "string", + "optional" : true, + "default" : "dot-delimited" + }, + + "root" : { + "type" : "boolean", + "optional" : true, + "default" : false + }, + + "readonly" : { + "type" : "boolean", + "optional" : true, + "default" : false + }, + + "pathStart" : { + "type" : "string", + "optional" : true, + "format" : "uri" + }, + + "mediaType" : { + "type" : "string", + "optional" : true, + "format" : "media-type" + }, + + "alternate" : { + "type" : "array", + "items" : {"$ref" : "#"}, + "optional" : true + } + }, + + "links" : [ + { + "href" : "{$ref}", + "rel" : "full" + }, + + { + "href" : "{$schema}", + "rel" : "describedby" + }, + + { + "href" : "{id}", + "rel" : "self" + } + ], + + "fragmentResolution" : "dot-delimited", + "extends" : {"$ref" : "http://json-schema.org/draft-01/schema#"} } \ No newline at end of file diff --git a/node_modules/json-schema/draft-01/json-ref b/node_modules/json-schema/draft-01/json-ref index 4d26174e..f2ad55b1 100644 --- a/node_modules/json-schema/draft-01/json-ref +++ b/node_modules/json-schema/draft-01/json-ref @@ -1,26 +1,26 @@ -{ - "$schema" : "http://json-schema.org/draft-01/hyper-schema#", - "id" : "http://json-schema.org/draft-01/json-ref#", - - "items" : {"$ref" : "#"}, - "additionalProperties" : {"$ref" : "#"}, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "dot-delimited" +{ + "$schema" : "http://json-schema.org/draft-01/hyper-schema#", + "id" : "http://json-schema.org/draft-01/json-ref#", + + "items" : {"$ref" : "#"}, + "additionalProperties" : {"$ref" : "#"}, + + "links" : [ + { + "href" : "{$ref}", + "rel" : "full" + }, + + { + "href" : "{$schema}", + "rel" : "describedby" + }, + + { + "href" : "{id}", + "rel" : "self" + } + ], + + "fragmentResolution" : "dot-delimited" } \ No newline at end of file diff --git a/node_modules/json-schema/draft-01/links b/node_modules/json-schema/draft-01/links index 52430a5d..cb183c4d 100644 --- a/node_modules/json-schema/draft-01/links +++ b/node_modules/json-schema/draft-01/links @@ -1,33 +1,33 @@ -{ - "$schema" : "http://json-schema.org/draft-01/hyper-schema#", - "id" : "http://json-schema.org/draft-01/links#", - "type" : "object", - - "properties" : { - "href" : { - "type" : "string" - }, - - "rel" : { - "type" : "string" - }, - - "method" : { - "type" : "string", - "default" : "GET", - "optional" : true - }, - - "enctype" : { - "type" : "string", - "requires" : "method", - "optional" : true - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "http://json-schema.org/draft-01/hyper-schema#"}, - "optional" : true - } - } +{ + "$schema" : "http://json-schema.org/draft-01/hyper-schema#", + "id" : "http://json-schema.org/draft-01/links#", + "type" : "object", + + "properties" : { + "href" : { + "type" : "string" + }, + + "rel" : { + "type" : "string" + }, + + "method" : { + "type" : "string", + "default" : "GET", + "optional" : true + }, + + "enctype" : { + "type" : "string", + "requires" : "method", + "optional" : true + }, + + "properties" : { + "type" : "object", + "additionalProperties" : {"$ref" : "http://json-schema.org/draft-01/hyper-schema#"}, + "optional" : true + } + } } \ No newline at end of file diff --git a/node_modules/json-schema/draft-01/schema b/node_modules/json-schema/draft-01/schema index 7a208e68..e6b6aea4 100644 --- a/node_modules/json-schema/draft-01/schema +++ b/node_modules/json-schema/draft-01/schema @@ -1,155 +1,155 @@ -{ - "$schema" : "http://json-schema.org/draft-01/hyper-schema#", - "id" : "http://json-schema.org/draft-01/schema#", - "type" : "object", - - "properties" : { - "type" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "optional" : true, - "default" : "any" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "items" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "optional" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "additionalProperties" : { - "type" : [{"$ref" : "#"}, "boolean"], - "optional" : true, - "default" : {} - }, - - "requires" : { - "type" : ["string", {"$ref" : "#"}], - "optional" : true - }, - - "minimum" : { - "type" : "number", - "optional" : true - }, - - "maximum" : { - "type" : "number", - "optional" : true - }, - - "minimumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "minimum", - "default" : true - }, - - "maximumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "maximum", - "default" : true - }, - - "minItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0 - }, - - "pattern" : { - "type" : "string", - "optional" : true, - "format" : "regex" - }, - - "minLength" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxLength" : { - "type" : "integer", - "optional" : true - }, - - "enum" : { - "type" : "array", - "optional" : true, - "minItems" : 1 - }, - - "title" : { - "type" : "string", - "optional" : true - }, - - "description" : { - "type" : "string", - "optional" : true - }, - - "format" : { - "type" : "string", - "optional" : true - }, - - "contentEncoding" : { - "type" : "string", - "optional" : true - }, - - "default" : { - "type" : "any", - "optional" : true - }, - - "maxDecimal" : { - "type" : "integer", - "optional" : true, - "minimum" : 0 - }, - - "disallow" : { - "type" : ["string", "array"], - "items" : {"type" : "string"}, - "optional" : true - }, - - "extends" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - } - }, - - "optional" : true, - "default" : {} +{ + "$schema" : "http://json-schema.org/draft-01/hyper-schema#", + "id" : "http://json-schema.org/draft-01/schema#", + "type" : "object", + + "properties" : { + "type" : { + "type" : ["string", "array"], + "items" : { + "type" : ["string", {"$ref" : "#"}] + }, + "optional" : true, + "default" : "any" + }, + + "properties" : { + "type" : "object", + "additionalProperties" : {"$ref" : "#"}, + "optional" : true, + "default" : {} + }, + + "items" : { + "type" : [{"$ref" : "#"}, "array"], + "items" : {"$ref" : "#"}, + "optional" : true, + "default" : {} + }, + + "optional" : { + "type" : "boolean", + "optional" : true, + "default" : false + }, + + "additionalProperties" : { + "type" : [{"$ref" : "#"}, "boolean"], + "optional" : true, + "default" : {} + }, + + "requires" : { + "type" : ["string", {"$ref" : "#"}], + "optional" : true + }, + + "minimum" : { + "type" : "number", + "optional" : true + }, + + "maximum" : { + "type" : "number", + "optional" : true + }, + + "minimumCanEqual" : { + "type" : "boolean", + "optional" : true, + "requires" : "minimum", + "default" : true + }, + + "maximumCanEqual" : { + "type" : "boolean", + "optional" : true, + "requires" : "maximum", + "default" : true + }, + + "minItems" : { + "type" : "integer", + "optional" : true, + "minimum" : 0, + "default" : 0 + }, + + "maxItems" : { + "type" : "integer", + "optional" : true, + "minimum" : 0 + }, + + "pattern" : { + "type" : "string", + "optional" : true, + "format" : "regex" + }, + + "minLength" : { + "type" : "integer", + "optional" : true, + "minimum" : 0, + "default" : 0 + }, + + "maxLength" : { + "type" : "integer", + "optional" : true + }, + + "enum" : { + "type" : "array", + "optional" : true, + "minItems" : 1 + }, + + "title" : { + "type" : "string", + "optional" : true + }, + + "description" : { + "type" : "string", + "optional" : true + }, + + "format" : { + "type" : "string", + "optional" : true + }, + + "contentEncoding" : { + "type" : "string", + "optional" : true + }, + + "default" : { + "type" : "any", + "optional" : true + }, + + "maxDecimal" : { + "type" : "integer", + "optional" : true, + "minimum" : 0 + }, + + "disallow" : { + "type" : ["string", "array"], + "items" : {"type" : "string"}, + "optional" : true + }, + + "extends" : { + "type" : [{"$ref" : "#"}, "array"], + "items" : {"$ref" : "#"}, + "optional" : true, + "default" : {} + } + }, + + "optional" : true, + "default" : {} } \ No newline at end of file diff --git a/node_modules/json-schema/draft-02/hyper-schema b/node_modules/json-schema/draft-02/hyper-schema index 4ec1b756..2d2bc685 100644 --- a/node_modules/json-schema/draft-02/hyper-schema +++ b/node_modules/json-schema/draft-02/hyper-schema @@ -1,68 +1,68 @@ -{ - "$schema" : "http://json-schema.org/draft-02/hyper-schema#", - "id" : "http://json-schema.org/draft-02/hyper-schema#", - - "properties" : { - "links" : { - "type" : "array", - "items" : {"$ref" : "http://json-schema.org/draft-02/links#"}, - "optional" : true - }, - - "fragmentResolution" : { - "type" : "string", - "optional" : true, - "default" : "slash-delimited" - }, - - "root" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "readonly" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "pathStart" : { - "type" : "string", - "optional" : true, - "format" : "uri" - }, - - "mediaType" : { - "type" : "string", - "optional" : true, - "format" : "media-type" - }, - - "alternate" : { - "type" : "array", - "items" : {"$ref" : "#"}, - "optional" : true - } - }, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "slash-delimited", - "extends" : {"$ref" : "http://json-schema.org/draft-02/schema#"} +{ + "$schema" : "http://json-schema.org/draft-02/hyper-schema#", + "id" : "http://json-schema.org/draft-02/hyper-schema#", + + "properties" : { + "links" : { + "type" : "array", + "items" : {"$ref" : "http://json-schema.org/draft-02/links#"}, + "optional" : true + }, + + "fragmentResolution" : { + "type" : "string", + "optional" : true, + "default" : "slash-delimited" + }, + + "root" : { + "type" : "boolean", + "optional" : true, + "default" : false + }, + + "readonly" : { + "type" : "boolean", + "optional" : true, + "default" : false + }, + + "pathStart" : { + "type" : "string", + "optional" : true, + "format" : "uri" + }, + + "mediaType" : { + "type" : "string", + "optional" : true, + "format" : "media-type" + }, + + "alternate" : { + "type" : "array", + "items" : {"$ref" : "#"}, + "optional" : true + } + }, + + "links" : [ + { + "href" : "{$ref}", + "rel" : "full" + }, + + { + "href" : "{$schema}", + "rel" : "describedby" + }, + + { + "href" : "{id}", + "rel" : "self" + } + ], + + "fragmentResolution" : "slash-delimited", + "extends" : {"$ref" : "http://json-schema.org/draft-02/schema#"} } \ No newline at end of file diff --git a/node_modules/json-schema/draft-02/json-ref b/node_modules/json-schema/draft-02/json-ref index 6526c394..2b23fcdc 100644 --- a/node_modules/json-schema/draft-02/json-ref +++ b/node_modules/json-schema/draft-02/json-ref @@ -1,26 +1,26 @@ -{ - "$schema" : "http://json-schema.org/draft-02/hyper-schema#", - "id" : "http://json-schema.org/draft-02/json-ref#", - - "items" : {"$ref" : "#"}, - "additionalProperties" : {"$ref" : "#"}, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "dot-delimited" +{ + "$schema" : "http://json-schema.org/draft-02/hyper-schema#", + "id" : "http://json-schema.org/draft-02/json-ref#", + + "items" : {"$ref" : "#"}, + "additionalProperties" : {"$ref" : "#"}, + + "links" : [ + { + "href" : "{$ref}", + "rel" : "full" + }, + + { + "href" : "{$schema}", + "rel" : "describedby" + }, + + { + "href" : "{id}", + "rel" : "self" + } + ], + + "fragmentResolution" : "dot-delimited" } \ No newline at end of file diff --git a/node_modules/json-schema/draft-02/links b/node_modules/json-schema/draft-02/links index 1b176178..ab971b7c 100644 --- a/node_modules/json-schema/draft-02/links +++ b/node_modules/json-schema/draft-02/links @@ -1,35 +1,35 @@ -{ - "$schema" : "http://json-schema.org/draft-02/hyper-schema#", - "id" : "http://json-schema.org/draft-02/links#", - "type" : "object", - - "properties" : { - "href" : { - "type" : "string" - }, - - "rel" : { - "type" : "string" - }, - - "targetSchema" : {"$ref" : "http://json-schema.org/draft-02/hyper-schema#"}, - - "method" : { - "type" : "string", - "default" : "GET", - "optional" : true - }, - - "enctype" : { - "type" : "string", - "requires" : "method", - "optional" : true - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "http://json-schema.org/draft-02/hyper-schema#"}, - "optional" : true - } - } +{ + "$schema" : "http://json-schema.org/draft-02/hyper-schema#", + "id" : "http://json-schema.org/draft-02/links#", + "type" : "object", + + "properties" : { + "href" : { + "type" : "string" + }, + + "rel" : { + "type" : "string" + }, + + "targetSchema" : {"$ref" : "http://json-schema.org/draft-02/hyper-schema#"}, + + "method" : { + "type" : "string", + "default" : "GET", + "optional" : true + }, + + "enctype" : { + "type" : "string", + "requires" : "method", + "optional" : true + }, + + "properties" : { + "type" : "object", + "additionalProperties" : {"$ref" : "http://json-schema.org/draft-02/hyper-schema#"}, + "optional" : true + } + } } \ No newline at end of file diff --git a/node_modules/json-schema/draft-02/schema b/node_modules/json-schema/draft-02/schema index 61b8de15..cc2b6693 100644 --- a/node_modules/json-schema/draft-02/schema +++ b/node_modules/json-schema/draft-02/schema @@ -1,166 +1,166 @@ -{ - "$schema" : "http://json-schema.org/draft-02/hyper-schema#", - "id" : "http://json-schema.org/draft-02/schema#", - "type" : "object", - - "properties" : { - "type" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "optional" : true, - "uniqueItems" : true, - "default" : "any" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "items" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "optional" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "additionalProperties" : { - "type" : [{"$ref" : "#"}, "boolean"], - "optional" : true, - "default" : {} - }, - - "requires" : { - "type" : ["string", {"$ref" : "#"}], - "optional" : true - }, - - "minimum" : { - "type" : "number", - "optional" : true - }, - - "maximum" : { - "type" : "number", - "optional" : true - }, - - "minimumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "minimum", - "default" : true - }, - - "maximumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "maximum", - "default" : true - }, - - "minItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0 - }, - - "uniqueItems" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "pattern" : { - "type" : "string", - "optional" : true, - "format" : "regex" - }, - - "minLength" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxLength" : { - "type" : "integer", - "optional" : true - }, - - "enum" : { - "type" : "array", - "optional" : true, - "minItems" : 1, - "uniqueItems" : true - }, - - "title" : { - "type" : "string", - "optional" : true - }, - - "description" : { - "type" : "string", - "optional" : true - }, - - "format" : { - "type" : "string", - "optional" : true - }, - - "contentEncoding" : { - "type" : "string", - "optional" : true - }, - - "default" : { - "type" : "any", - "optional" : true - }, - - "divisibleBy" : { - "type" : "number", - "minimum" : 0, - "minimumCanEqual" : false, - "optional" : true, - "default" : 1 - }, - - "disallow" : { - "type" : ["string", "array"], - "items" : {"type" : "string"}, - "optional" : true, - "uniqueItems" : true - }, - - "extends" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - } - }, - - "optional" : true, - "default" : {} +{ + "$schema" : "http://json-schema.org/draft-02/hyper-schema#", + "id" : "http://json-schema.org/draft-02/schema#", + "type" : "object", + + "properties" : { + "type" : { + "type" : ["string", "array"], + "items" : { + "type" : ["string", {"$ref" : "#"}] + }, + "optional" : true, + "uniqueItems" : true, + "default" : "any" + }, + + "properties" : { + "type" : "object", + "additionalProperties" : {"$ref" : "#"}, + "optional" : true, + "default" : {} + }, + + "items" : { + "type" : [{"$ref" : "#"}, "array"], + "items" : {"$ref" : "#"}, + "optional" : true, + "default" : {} + }, + + "optional" : { + "type" : "boolean", + "optional" : true, + "default" : false + }, + + "additionalProperties" : { + "type" : [{"$ref" : "#"}, "boolean"], + "optional" : true, + "default" : {} + }, + + "requires" : { + "type" : ["string", {"$ref" : "#"}], + "optional" : true + }, + + "minimum" : { + "type" : "number", + "optional" : true + }, + + "maximum" : { + "type" : "number", + "optional" : true + }, + + "minimumCanEqual" : { + "type" : "boolean", + "optional" : true, + "requires" : "minimum", + "default" : true + }, + + "maximumCanEqual" : { + "type" : "boolean", + "optional" : true, + "requires" : "maximum", + "default" : true + }, + + "minItems" : { + "type" : "integer", + "optional" : true, + "minimum" : 0, + "default" : 0 + }, + + "maxItems" : { + "type" : "integer", + "optional" : true, + "minimum" : 0 + }, + + "uniqueItems" : { + "type" : "boolean", + "optional" : true, + "default" : false + }, + + "pattern" : { + "type" : "string", + "optional" : true, + "format" : "regex" + }, + + "minLength" : { + "type" : "integer", + "optional" : true, + "minimum" : 0, + "default" : 0 + }, + + "maxLength" : { + "type" : "integer", + "optional" : true + }, + + "enum" : { + "type" : "array", + "optional" : true, + "minItems" : 1, + "uniqueItems" : true + }, + + "title" : { + "type" : "string", + "optional" : true + }, + + "description" : { + "type" : "string", + "optional" : true + }, + + "format" : { + "type" : "string", + "optional" : true + }, + + "contentEncoding" : { + "type" : "string", + "optional" : true + }, + + "default" : { + "type" : "any", + "optional" : true + }, + + "divisibleBy" : { + "type" : "number", + "minimum" : 0, + "minimumCanEqual" : false, + "optional" : true, + "default" : 1 + }, + + "disallow" : { + "type" : ["string", "array"], + "items" : {"type" : "string"}, + "optional" : true, + "uniqueItems" : true + }, + + "extends" : { + "type" : [{"$ref" : "#"}, "array"], + "items" : {"$ref" : "#"}, + "optional" : true, + "default" : {} + } + }, + + "optional" : true, + "default" : {} } \ No newline at end of file diff --git a/node_modules/json-schema/draft-03/examples/address b/node_modules/json-schema/draft-03/examples/address index 074d34e8..401f20f1 100644 --- a/node_modules/json-schema/draft-03/examples/address +++ b/node_modules/json-schema/draft-03/examples/address @@ -1,20 +1,20 @@ -{ - "description" : "An Address following the convention of http://microformats.org/wiki/hcard", - "type" : "object", - "properties" : { - "post-office-box" : { "type" : "string" }, - "extended-address" : { "type" : "string" }, - "street-address" : { "type":"string" }, - "locality" : { "type" : "string", "required" : true }, - "region" : { "type" : "string", "required" : true }, - "postal-code" : { "type" : "string" }, - "country-name" : { "type" : "string", "required" : true } - }, - "dependencies" : { - "post-office-box" : "street-address", - "extended-address" : "street-address", - "street-address" : "region", - "locality" : "region", - "region" : "country-name" - } +{ + "description" : "An Address following the convention of http://microformats.org/wiki/hcard", + "type" : "object", + "properties" : { + "post-office-box" : { "type" : "string" }, + "extended-address" : { "type" : "string" }, + "street-address" : { "type":"string" }, + "locality" : { "type" : "string", "required" : true }, + "region" : { "type" : "string", "required" : true }, + "postal-code" : { "type" : "string" }, + "country-name" : { "type" : "string", "required" : true } + }, + "dependencies" : { + "post-office-box" : "street-address", + "extended-address" : "street-address", + "street-address" : "region", + "locality" : "region", + "region" : "country-name" + } } \ No newline at end of file diff --git a/node_modules/json-schema/draft-03/examples/calendar b/node_modules/json-schema/draft-03/examples/calendar index 463cfb31..0ec47c23 100644 --- a/node_modules/json-schema/draft-03/examples/calendar +++ b/node_modules/json-schema/draft-03/examples/calendar @@ -1,53 +1,53 @@ -{ - "description" : "A representation of an event", - "type" : "object", - "properties" : { - "dtstart" : { - "format" : "date-time", - "type" : "string", - "description" : "Event starting time", - "required":true - }, - "summary" : { - "type":"string", - "required":true - }, - "location" : { - "type" : "string" - }, - "url" : { - "type" : "string", - "format" : "url" - }, - "dtend" : { - "format" : "date-time", - "type" : "string", - "description" : "Event ending time" - }, - "duration" : { - "format" : "date", - "type" : "string", - "description" : "Event duration" - }, - "rdate" : { - "format" : "date-time", - "type" : "string", - "description" : "Recurrence date" - }, - "rrule" : { - "type" : "string", - "description" : "Recurrence rule" - }, - "category" : { - "type" : "string" - }, - "description" : { - "type" : "string" - }, - "geo" : { "$ref" : "http://json-schema.org/draft-03/geo" } - } -} - - - - +{ + "description" : "A representation of an event", + "type" : "object", + "properties" : { + "dtstart" : { + "format" : "date-time", + "type" : "string", + "description" : "Event starting time", + "required":true + }, + "summary" : { + "type":"string", + "required":true + }, + "location" : { + "type" : "string" + }, + "url" : { + "type" : "string", + "format" : "url" + }, + "dtend" : { + "format" : "date-time", + "type" : "string", + "description" : "Event ending time" + }, + "duration" : { + "format" : "date", + "type" : "string", + "description" : "Event duration" + }, + "rdate" : { + "format" : "date-time", + "type" : "string", + "description" : "Recurrence date" + }, + "rrule" : { + "type" : "string", + "description" : "Recurrence rule" + }, + "category" : { + "type" : "string" + }, + "description" : { + "type" : "string" + }, + "geo" : { "$ref" : "http://json-schema.org/draft-03/geo" } + } +} + + + + diff --git a/node_modules/json-schema/draft-03/examples/card b/node_modules/json-schema/draft-03/examples/card index 89287a40..a5667ffd 100644 --- a/node_modules/json-schema/draft-03/examples/card +++ b/node_modules/json-schema/draft-03/examples/card @@ -1,105 +1,105 @@ -{ - "description":"A representation of a person, company, organization, or place", - "type":"object", - "properties":{ - "fn":{ - "description":"Formatted Name", - "type":"string" - }, - "familyName":{ - "type":"string", - "required":true - }, - "givenName":{ - "type":"string", - "required":true - }, - "additionalName":{ - "type":"array", - "items":{ - "type":"string" - } - }, - "honorificPrefix":{ - "type":"array", - "items":{ - "type":"string" - } - }, - "honorificSuffix":{ - "type":"array", - "items":{ - "type":"string" - } - }, - "nickname":{ - "type":"string" - }, - "url":{ - "type":"string", - "format":"url" - }, - "email":{ - "type":"object", - "properties":{ - "type":{ - "type":"string" - }, - "value":{ - "type":"string", - "format":"email" - } - } - }, - "tel":{ - "type":"object", - "properties":{ - "type":{ - "type":"string" - }, - "value":{ - "type":"string", - "format":"phone" - } - } - }, - "adr":{"$ref" : "http://json-schema.org/address"}, - "geo":{"$ref" : "http://json-schema.org/geo"}, - "tz":{ - "type":"string" - }, - "photo":{ - "format":"image", - "type":"string" - }, - "logo":{ - "format":"image", - "type":"string" - }, - "sound":{ - "format":"attachment", - "type":"string" - }, - "bday":{ - "type":"string", - "format":"date" - }, - "title":{ - "type":"string" - }, - "role":{ - "type":"string" - }, - "org":{ - "type":"object", - "properties":{ - "organizationName":{ - "type":"string" - }, - "organizationUnit":{ - "type":"string" - } - } - } - } +{ + "description":"A representation of a person, company, organization, or place", + "type":"object", + "properties":{ + "fn":{ + "description":"Formatted Name", + "type":"string" + }, + "familyName":{ + "type":"string", + "required":true + }, + "givenName":{ + "type":"string", + "required":true + }, + "additionalName":{ + "type":"array", + "items":{ + "type":"string" + } + }, + "honorificPrefix":{ + "type":"array", + "items":{ + "type":"string" + } + }, + "honorificSuffix":{ + "type":"array", + "items":{ + "type":"string" + } + }, + "nickname":{ + "type":"string" + }, + "url":{ + "type":"string", + "format":"url" + }, + "email":{ + "type":"object", + "properties":{ + "type":{ + "type":"string" + }, + "value":{ + "type":"string", + "format":"email" + } + } + }, + "tel":{ + "type":"object", + "properties":{ + "type":{ + "type":"string" + }, + "value":{ + "type":"string", + "format":"phone" + } + } + }, + "adr":{"$ref" : "http://json-schema.org/address"}, + "geo":{"$ref" : "http://json-schema.org/geo"}, + "tz":{ + "type":"string" + }, + "photo":{ + "format":"image", + "type":"string" + }, + "logo":{ + "format":"image", + "type":"string" + }, + "sound":{ + "format":"attachment", + "type":"string" + }, + "bday":{ + "type":"string", + "format":"date" + }, + "title":{ + "type":"string" + }, + "role":{ + "type":"string" + }, + "org":{ + "type":"object", + "properties":{ + "organizationName":{ + "type":"string" + }, + "organizationUnit":{ + "type":"string" + } + } + } + } } \ No newline at end of file diff --git a/node_modules/json-schema/draft-03/examples/geo b/node_modules/json-schema/draft-03/examples/geo index 73ac7e53..4357a909 100644 --- a/node_modules/json-schema/draft-03/examples/geo +++ b/node_modules/json-schema/draft-03/examples/geo @@ -1,8 +1,8 @@ -{ - "description" : "A geographical coordinate", - "type" : "object", - "properties" : { - "latitude" : { "type" : "number" }, - "longitude" : { "type" : "number" } - } +{ + "description" : "A geographical coordinate", + "type" : "object", + "properties" : { + "latitude" : { "type" : "number" }, + "longitude" : { "type" : "number" } + } } \ No newline at end of file diff --git a/node_modules/json-schema/draft-03/examples/interfaces b/node_modules/json-schema/draft-03/examples/interfaces index 288a1985..b8532f29 100644 --- a/node_modules/json-schema/draft-03/examples/interfaces +++ b/node_modules/json-schema/draft-03/examples/interfaces @@ -1,23 +1,23 @@ -{ - "extends":"http://json-schema.org/hyper-schema", - "description":"A schema for schema interface definitions that describe programmatic class structures using JSON schema syntax", - "properties":{ - "methods":{ - "type":"object", - "description":"This defines the set of methods available to the class instances", - "additionalProperties":{ - "type":"object", - "description":"The definition of the method", - "properties":{ - "parameters":{ - "type":"array", - "description":"The set of parameters that should be passed to the method when it is called", - "items":{"$ref":"#"}, - "required": true - }, - "returns":{"$ref":"#"} - } - } - } - } -} +{ + "extends":"http://json-schema.org/hyper-schema", + "description":"A schema for schema interface definitions that describe programmatic class structures using JSON schema syntax", + "properties":{ + "methods":{ + "type":"object", + "description":"This defines the set of methods available to the class instances", + "additionalProperties":{ + "type":"object", + "description":"The definition of the method", + "properties":{ + "parameters":{ + "type":"array", + "description":"The set of parameters that should be passed to the method when it is called", + "items":{"$ref":"#"}, + "required": true + }, + "returns":{"$ref":"#"} + } + } + } + } +} diff --git a/node_modules/json-schema/draft-03/hyper-schema b/node_modules/json-schema/draft-03/hyper-schema index 623055c3..38ca2e10 100644 --- a/node_modules/json-schema/draft-03/hyper-schema +++ b/node_modules/json-schema/draft-03/hyper-schema @@ -1,60 +1,60 @@ -{ - "$schema" : "http://json-schema.org/draft-03/hyper-schema#", - "extends" : {"$ref" : "http://json-schema.org/draft-03/schema#"}, - "id" : "http://json-schema.org/draft-03/hyper-schema#", - - "properties" : { - "links" : { - "type" : "array", - "items" : {"$ref" : "http://json-schema.org/draft-03/links#"} - }, - - "fragmentResolution" : { - "type" : "string", - "default" : "slash-delimited" - }, - - "root" : { - "type" : "boolean", - "default" : false - }, - - "readonly" : { - "type" : "boolean", - "default" : false - }, - - "contentEncoding" : { - "type" : "string" - }, - - "pathStart" : { - "type" : "string", - "format" : "uri" - }, - - "mediaType" : { - "type" : "string", - "format" : "media-type" - } - }, - - "links" : [ - { - "href" : "{id}", - "rel" : "self" - }, - - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - } - ], - - "fragmentResolution" : "slash-delimited" -} +{ + "$schema" : "http://json-schema.org/draft-03/hyper-schema#", + "extends" : {"$ref" : "http://json-schema.org/draft-03/schema#"}, + "id" : "http://json-schema.org/draft-03/hyper-schema#", + + "properties" : { + "links" : { + "type" : "array", + "items" : {"$ref" : "http://json-schema.org/draft-03/links#"} + }, + + "fragmentResolution" : { + "type" : "string", + "default" : "slash-delimited" + }, + + "root" : { + "type" : "boolean", + "default" : false + }, + + "readonly" : { + "type" : "boolean", + "default" : false + }, + + "contentEncoding" : { + "type" : "string" + }, + + "pathStart" : { + "type" : "string", + "format" : "uri" + }, + + "mediaType" : { + "type" : "string", + "format" : "media-type" + } + }, + + "links" : [ + { + "href" : "{id}", + "rel" : "self" + }, + + { + "href" : "{$ref}", + "rel" : "full" + }, + + { + "href" : "{$schema}", + "rel" : "describedby" + } + ], + + "fragmentResolution" : "slash-delimited" +} diff --git a/node_modules/json-schema/draft-03/json-ref b/node_modules/json-schema/draft-03/json-ref index 7e491a8e..66e08f26 100644 --- a/node_modules/json-schema/draft-03/json-ref +++ b/node_modules/json-schema/draft-03/json-ref @@ -1,26 +1,26 @@ -{ - "$schema" : "http://json-schema.org/draft-03/hyper-schema#", - "id" : "http://json-schema.org/draft-03/json-ref#", - - "additionalItems" : {"$ref" : "#"}, - "additionalProperties" : {"$ref" : "#"}, - - "links" : [ - { - "href" : "{id}", - "rel" : "self" - }, - - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - } - ], - - "fragmentResolution" : "dot-delimited" +{ + "$schema" : "http://json-schema.org/draft-03/hyper-schema#", + "id" : "http://json-schema.org/draft-03/json-ref#", + + "additionalItems" : {"$ref" : "#"}, + "additionalProperties" : {"$ref" : "#"}, + + "links" : [ + { + "href" : "{id}", + "rel" : "self" + }, + + { + "href" : "{$ref}", + "rel" : "full" + }, + + { + "href" : "{$schema}", + "rel" : "describedby" + } + ], + + "fragmentResolution" : "dot-delimited" } \ No newline at end of file diff --git a/node_modules/json-schema/draft-03/links b/node_modules/json-schema/draft-03/links index 6b0a85a6..9fa63f98 100644 --- a/node_modules/json-schema/draft-03/links +++ b/node_modules/json-schema/draft-03/links @@ -1,35 +1,35 @@ -{ - "$schema" : "http://json-schema.org/draft-03/hyper-schema#", - "id" : "http://json-schema.org/draft-03/links#", - "type" : "object", - - "properties" : { - "href" : { - "type" : "string", - "required" : true, - "format" : "link-description-object-template" - }, - - "rel" : { - "type" : "string", - "required" : true - }, - - "targetSchema" : {"$ref" : "http://json-schema.org/draft-03/hyper-schema#"}, - - "method" : { - "type" : "string", - "default" : "GET" - }, - - "enctype" : { - "type" : "string", - "requires" : "method" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "http://json-schema.org/draft-03/hyper-schema#"} - } - } +{ + "$schema" : "http://json-schema.org/draft-03/hyper-schema#", + "id" : "http://json-schema.org/draft-03/links#", + "type" : "object", + + "properties" : { + "href" : { + "type" : "string", + "required" : true, + "format" : "link-description-object-template" + }, + + "rel" : { + "type" : "string", + "required" : true + }, + + "targetSchema" : {"$ref" : "http://json-schema.org/draft-03/hyper-schema#"}, + + "method" : { + "type" : "string", + "default" : "GET" + }, + + "enctype" : { + "type" : "string", + "requires" : "method" + }, + + "properties" : { + "type" : "object", + "additionalProperties" : {"$ref" : "http://json-schema.org/draft-03/hyper-schema#"} + } + } } \ No newline at end of file diff --git a/node_modules/json-schema/draft-03/schema b/node_modules/json-schema/draft-03/schema index 55ae47d8..29d9469f 100644 --- a/node_modules/json-schema/draft-03/schema +++ b/node_modules/json-schema/draft-03/schema @@ -1,174 +1,174 @@ -{ - "$schema" : "http://json-schema.org/draft-03/schema#", - "id" : "http://json-schema.org/draft-03/schema#", - "type" : "object", - - "properties" : { - "type" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "uniqueItems" : true, - "default" : "any" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "default" : {} - }, - - "patternProperties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "default" : {} - }, - - "additionalProperties" : { - "type" : [{"$ref" : "#"}, "boolean"], - "default" : {} - }, - - "items" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "default" : {} - }, - - "additionalItems" : { - "type" : [{"$ref" : "#"}, "boolean"], - "default" : {} - }, - - "required" : { - "type" : "boolean", - "default" : false - }, - - "dependencies" : { - "type" : "object", - "additionalProperties" : { - "type" : ["string", "array", {"$ref" : "#"}], - "items" : { - "type" : "string" - } - }, - "default" : {} - }, - - "minimum" : { - "type" : "number" - }, - - "maximum" : { - "type" : "number" - }, - - "exclusiveMinimum" : { - "type" : "boolean", - "default" : false - }, - - "exclusiveMaximum" : { - "type" : "boolean", - "default" : false - }, - - "minItems" : { - "type" : "integer", - "minimum" : 0, - "default" : 0 - }, - - "maxItems" : { - "type" : "integer", - "minimum" : 0 - }, - - "uniqueItems" : { - "type" : "boolean", - "default" : false - }, - - "pattern" : { - "type" : "string", - "format" : "regex" - }, - - "minLength" : { - "type" : "integer", - "minimum" : 0, - "default" : 0 - }, - - "maxLength" : { - "type" : "integer" - }, - - "enum" : { - "type" : "array", - "minItems" : 1, - "uniqueItems" : true - }, - - "default" : { - "type" : "any" - }, - - "title" : { - "type" : "string" - }, - - "description" : { - "type" : "string" - }, - - "format" : { - "type" : "string" - }, - - "divisibleBy" : { - "type" : "number", - "minimum" : 0, - "exclusiveMinimum" : true, - "default" : 1 - }, - - "disallow" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "uniqueItems" : true - }, - - "extends" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "default" : {} - }, - - "id" : { - "type" : "string", - "format" : "uri" - }, - - "$ref" : { - "type" : "string", - "format" : "uri" - }, - - "$schema" : { - "type" : "string", - "format" : "uri" - } - }, - - "dependencies" : { - "exclusiveMinimum" : "minimum", - "exclusiveMaximum" : "maximum" - }, - - "default" : {} +{ + "$schema" : "http://json-schema.org/draft-03/schema#", + "id" : "http://json-schema.org/draft-03/schema#", + "type" : "object", + + "properties" : { + "type" : { + "type" : ["string", "array"], + "items" : { + "type" : ["string", {"$ref" : "#"}] + }, + "uniqueItems" : true, + "default" : "any" + }, + + "properties" : { + "type" : "object", + "additionalProperties" : {"$ref" : "#"}, + "default" : {} + }, + + "patternProperties" : { + "type" : "object", + "additionalProperties" : {"$ref" : "#"}, + "default" : {} + }, + + "additionalProperties" : { + "type" : [{"$ref" : "#"}, "boolean"], + "default" : {} + }, + + "items" : { + "type" : [{"$ref" : "#"}, "array"], + "items" : {"$ref" : "#"}, + "default" : {} + }, + + "additionalItems" : { + "type" : [{"$ref" : "#"}, "boolean"], + "default" : {} + }, + + "required" : { + "type" : "boolean", + "default" : false + }, + + "dependencies" : { + "type" : "object", + "additionalProperties" : { + "type" : ["string", "array", {"$ref" : "#"}], + "items" : { + "type" : "string" + } + }, + "default" : {} + }, + + "minimum" : { + "type" : "number" + }, + + "maximum" : { + "type" : "number" + }, + + "exclusiveMinimum" : { + "type" : "boolean", + "default" : false + }, + + "exclusiveMaximum" : { + "type" : "boolean", + "default" : false + }, + + "minItems" : { + "type" : "integer", + "minimum" : 0, + "default" : 0 + }, + + "maxItems" : { + "type" : "integer", + "minimum" : 0 + }, + + "uniqueItems" : { + "type" : "boolean", + "default" : false + }, + + "pattern" : { + "type" : "string", + "format" : "regex" + }, + + "minLength" : { + "type" : "integer", + "minimum" : 0, + "default" : 0 + }, + + "maxLength" : { + "type" : "integer" + }, + + "enum" : { + "type" : "array", + "minItems" : 1, + "uniqueItems" : true + }, + + "default" : { + "type" : "any" + }, + + "title" : { + "type" : "string" + }, + + "description" : { + "type" : "string" + }, + + "format" : { + "type" : "string" + }, + + "divisibleBy" : { + "type" : "number", + "minimum" : 0, + "exclusiveMinimum" : true, + "default" : 1 + }, + + "disallow" : { + "type" : ["string", "array"], + "items" : { + "type" : ["string", {"$ref" : "#"}] + }, + "uniqueItems" : true + }, + + "extends" : { + "type" : [{"$ref" : "#"}, "array"], + "items" : {"$ref" : "#"}, + "default" : {} + }, + + "id" : { + "type" : "string", + "format" : "uri" + }, + + "$ref" : { + "type" : "string", + "format" : "uri" + }, + + "$schema" : { + "type" : "string", + "format" : "uri" + } + }, + + "dependencies" : { + "exclusiveMinimum" : "minimum", + "exclusiveMaximum" : "maximum" + }, + + "default" : {} } \ No newline at end of file diff --git a/node_modules/json-schema/draft-04/hyper-schema b/node_modules/json-schema/draft-04/hyper-schema index f96d1ac6..63fb34d9 100644 --- a/node_modules/json-schema/draft-04/hyper-schema +++ b/node_modules/json-schema/draft-04/hyper-schema @@ -1,60 +1,60 @@ -{ - "$schema" : "http://json-schema.org/draft-04/hyper-schema#", - "extends" : {"$ref" : "http://json-schema.org/draft-04/schema#"}, - "id" : "http://json-schema.org/draft-04/hyper-schema#", - - "properties" : { - "links" : { - "type" : "array", - "items" : {"$ref" : "http://json-schema.org/draft-04/links#"} - }, - - "fragmentResolution" : { - "type" : "string", - "default" : "json-pointer" - }, - - "root" : { - "type" : "boolean", - "default" : false - }, - - "readonly" : { - "type" : "boolean", - "default" : false - }, - - "contentEncoding" : { - "type" : "string" - }, - - "pathStart" : { - "type" : "string", - "format" : "uri" - }, - - "mediaType" : { - "type" : "string", - "format" : "media-type" - } - }, - - "links" : [ - { - "href" : "{id}", - "rel" : "self" - }, - - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - } - ], - - "fragmentResolution" : "json-pointer" -} +{ + "$schema" : "http://json-schema.org/draft-04/hyper-schema#", + "extends" : {"$ref" : "http://json-schema.org/draft-04/schema#"}, + "id" : "http://json-schema.org/draft-04/hyper-schema#", + + "properties" : { + "links" : { + "type" : "array", + "items" : {"$ref" : "http://json-schema.org/draft-04/links#"} + }, + + "fragmentResolution" : { + "type" : "string", + "default" : "json-pointer" + }, + + "root" : { + "type" : "boolean", + "default" : false + }, + + "readonly" : { + "type" : "boolean", + "default" : false + }, + + "contentEncoding" : { + "type" : "string" + }, + + "pathStart" : { + "type" : "string", + "format" : "uri" + }, + + "mediaType" : { + "type" : "string", + "format" : "media-type" + } + }, + + "links" : [ + { + "href" : "{id}", + "rel" : "self" + }, + + { + "href" : "{$ref}", + "rel" : "full" + }, + + { + "href" : "{$schema}", + "rel" : "describedby" + } + ], + + "fragmentResolution" : "json-pointer" +} diff --git a/node_modules/json-schema/draft-04/links b/node_modules/json-schema/draft-04/links index de272cc4..6c06d293 100644 --- a/node_modules/json-schema/draft-04/links +++ b/node_modules/json-schema/draft-04/links @@ -1,41 +1,41 @@ -{ - "$schema" : "http://json-schema.org/draft-04/hyper-schema#", - "id" : "http://json-schema.org/draft-04/links#", - "type" : "object", - - "properties" : { - "rel" : { - "type" : "string" - }, - - "href" : { - "type" : "string" - }, - - "template" : { - "type" : "string" - }, - - "targetSchema" : {"$ref" : "http://json-schema.org/draft-04/hyper-schema#"}, - - "method" : { - "type" : "string", - "default" : "GET" - }, - - "enctype" : { - "type" : "string" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "http://json-schema.org/draft-04/hyper-schema#"} - } - }, - - "required" : ["rel", "href"], - - "dependencies" : { - "enctype" : "method" - } +{ + "$schema" : "http://json-schema.org/draft-04/hyper-schema#", + "id" : "http://json-schema.org/draft-04/links#", + "type" : "object", + + "properties" : { + "rel" : { + "type" : "string" + }, + + "href" : { + "type" : "string" + }, + + "template" : { + "type" : "string" + }, + + "targetSchema" : {"$ref" : "http://json-schema.org/draft-04/hyper-schema#"}, + + "method" : { + "type" : "string", + "default" : "GET" + }, + + "enctype" : { + "type" : "string" + }, + + "properties" : { + "type" : "object", + "additionalProperties" : {"$ref" : "http://json-schema.org/draft-04/hyper-schema#"} + } + }, + + "required" : ["rel", "href"], + + "dependencies" : { + "enctype" : "method" + } } \ No newline at end of file diff --git a/node_modules/json-schema/draft-04/schema b/node_modules/json-schema/draft-04/schema index 598951e5..4231b169 100644 --- a/node_modules/json-schema/draft-04/schema +++ b/node_modules/json-schema/draft-04/schema @@ -1,189 +1,189 @@ -{ - "$schema" : "http://json-schema.org/draft-04/schema#", - "id" : "http://json-schema.org/draft-04/schema#", - "type" : "object", - - "properties" : { - "type" : { - "type" : [ - { - "id" : "#simple-type", - "type" : "string", - "enum" : ["object", "array", "string", "number", "boolean", "null", "any"] - }, - "array" - ], - "items" : { - "type" : [ - {"$ref" : "#simple-type"}, - {"$ref" : "#"} - ] - }, - "uniqueItems" : true, - "default" : "any" - }, - - "disallow" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "uniqueItems" : true - }, - - "extends" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "default" : {} - }, - - "enum" : { - "type" : "array", - "minItems" : 1, - "uniqueItems" : true - }, - - "minimum" : { - "type" : "number" - }, - - "maximum" : { - "type" : "number" - }, - - "exclusiveMinimum" : { - "type" : "boolean", - "default" : false - }, - - "exclusiveMaximum" : { - "type" : "boolean", - "default" : false - }, - - "divisibleBy" : { - "type" : "number", - "minimum" : 0, - "exclusiveMinimum" : true, - "default" : 1 - }, - - "minLength" : { - "type" : "integer", - "minimum" : 0, - "default" : 0 - }, - - "maxLength" : { - "type" : "integer" - }, - - "pattern" : { - "type" : "string" - }, - - "items" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "default" : {} - }, - - "additionalItems" : { - "type" : [{"$ref" : "#"}, "boolean"], - "default" : {} - }, - - "minItems" : { - "type" : "integer", - "minimum" : 0, - "default" : 0 - }, - - "maxItems" : { - "type" : "integer", - "minimum" : 0 - }, - - "uniqueItems" : { - "type" : "boolean", - "default" : false - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "default" : {} - }, - - "patternProperties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "default" : {} - }, - - "additionalProperties" : { - "type" : [{"$ref" : "#"}, "boolean"], - "default" : {} - }, - - "minProperties" : { - "type" : "integer", - "minimum" : 0, - "default" : 0 - }, - - "maxProperties" : { - "type" : "integer", - "minimum" : 0 - }, - - "required" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - - "dependencies" : { - "type" : "object", - "additionalProperties" : { - "type" : ["string", "array", {"$ref" : "#"}], - "items" : { - "type" : "string" - } - }, - "default" : {} - }, - - "id" : { - "type" : "string" - }, - - "$ref" : { - "type" : "string" - }, - - "$schema" : { - "type" : "string" - }, - - "title" : { - "type" : "string" - }, - - "description" : { - "type" : "string" - }, - - "default" : { - "type" : "any" - } - }, - - "dependencies" : { - "exclusiveMinimum" : "minimum", - "exclusiveMaximum" : "maximum" - }, - - "default" : {} +{ + "$schema" : "http://json-schema.org/draft-04/schema#", + "id" : "http://json-schema.org/draft-04/schema#", + "type" : "object", + + "properties" : { + "type" : { + "type" : [ + { + "id" : "#simple-type", + "type" : "string", + "enum" : ["object", "array", "string", "number", "boolean", "null", "any"] + }, + "array" + ], + "items" : { + "type" : [ + {"$ref" : "#simple-type"}, + {"$ref" : "#"} + ] + }, + "uniqueItems" : true, + "default" : "any" + }, + + "disallow" : { + "type" : ["string", "array"], + "items" : { + "type" : ["string", {"$ref" : "#"}] + }, + "uniqueItems" : true + }, + + "extends" : { + "type" : [{"$ref" : "#"}, "array"], + "items" : {"$ref" : "#"}, + "default" : {} + }, + + "enum" : { + "type" : "array", + "minItems" : 1, + "uniqueItems" : true + }, + + "minimum" : { + "type" : "number" + }, + + "maximum" : { + "type" : "number" + }, + + "exclusiveMinimum" : { + "type" : "boolean", + "default" : false + }, + + "exclusiveMaximum" : { + "type" : "boolean", + "default" : false + }, + + "divisibleBy" : { + "type" : "number", + "minimum" : 0, + "exclusiveMinimum" : true, + "default" : 1 + }, + + "minLength" : { + "type" : "integer", + "minimum" : 0, + "default" : 0 + }, + + "maxLength" : { + "type" : "integer" + }, + + "pattern" : { + "type" : "string" + }, + + "items" : { + "type" : [{"$ref" : "#"}, "array"], + "items" : {"$ref" : "#"}, + "default" : {} + }, + + "additionalItems" : { + "type" : [{"$ref" : "#"}, "boolean"], + "default" : {} + }, + + "minItems" : { + "type" : "integer", + "minimum" : 0, + "default" : 0 + }, + + "maxItems" : { + "type" : "integer", + "minimum" : 0 + }, + + "uniqueItems" : { + "type" : "boolean", + "default" : false + }, + + "properties" : { + "type" : "object", + "additionalProperties" : {"$ref" : "#"}, + "default" : {} + }, + + "patternProperties" : { + "type" : "object", + "additionalProperties" : {"$ref" : "#"}, + "default" : {} + }, + + "additionalProperties" : { + "type" : [{"$ref" : "#"}, "boolean"], + "default" : {} + }, + + "minProperties" : { + "type" : "integer", + "minimum" : 0, + "default" : 0 + }, + + "maxProperties" : { + "type" : "integer", + "minimum" : 0 + }, + + "required" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + + "dependencies" : { + "type" : "object", + "additionalProperties" : { + "type" : ["string", "array", {"$ref" : "#"}], + "items" : { + "type" : "string" + } + }, + "default" : {} + }, + + "id" : { + "type" : "string" + }, + + "$ref" : { + "type" : "string" + }, + + "$schema" : { + "type" : "string" + }, + + "title" : { + "type" : "string" + }, + + "description" : { + "type" : "string" + }, + + "default" : { + "type" : "any" + } + }, + + "dependencies" : { + "exclusiveMinimum" : "minimum", + "exclusiveMaximum" : "maximum" + }, + + "default" : {} } \ No newline at end of file diff --git a/node_modules/json-schema/draft-zyp-json-schema-03.xml b/node_modules/json-schema/draft-zyp-json-schema-03.xml index c28f40dc..cf606208 100644 --- a/node_modules/json-schema/draft-zyp-json-schema-03.xml +++ b/node_modules/json-schema/draft-zyp-json-schema-03.xml @@ -1,1120 +1,1120 @@ - - - - - - - - - - - - - - - -]> - - - - - - - - - A JSON Media Type for Describing the Structure and Meaning of JSON Documents - - - SitePen (USA) -

- - 530 Lytton Avenue - Palo Alto, CA 94301 - USA - - +1 650 968 8787 - kris@sitepen.com -
- - - -
- - - Calgary, AB - Canada - - gary.court@gmail.com -
-
- - - Internet Engineering Task Force - JSON - Schema - JavaScript - Object - Notation - Hyper Schema - Hypermedia - - - - JSON (JavaScript Object Notation) Schema defines the media type "application/schema+json", - a JSON based format for defining - the structure of JSON data. JSON Schema provides a contract for what JSON - data is required for a given application and how to interact with it. JSON - Schema is intended to define validation, documentation, hyperlink - navigation, and interaction control of JSON data. - - - - - -
- - JSON (JavaScript Object Notation) Schema is a JSON media type for defining - the structure of JSON data. JSON Schema provides a contract for what JSON - data is required for a given application and how to interact with it. JSON - Schema is intended to define validation, documentation, hyperlink - navigation, and interaction control of JSON data. - -
- -
- - - - The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", - "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be - interpreted as described in RFC 2119. - -
- - - -
- - JSON Schema defines the media type "application/schema+json" for - describing the structure of other - JSON documents. JSON Schema is JSON-based and includes facilities - for describing the structure of JSON documents in terms of - allowable values, descriptions, and interpreting relations with other resources. - - - JSON Schema format is organized into several separate definitions. The first - definition is the core schema specification. This definition is primary - concerned with describing a JSON structure and specifying valid elements - in the structure. The second definition is the Hyper Schema specification - which is intended define elements in a structure that can be interpreted as - hyperlinks. - Hyper Schema builds on JSON Schema to describe the hyperlink structure of - other JSON documents and elements of interaction. This allows user agents to be able to successfully navigate - JSON documents based on their schemas. - - - Cumulatively JSON Schema acts as a meta-document that can be used to define the required type and constraints on - property values, as well as define the meaning of the property values - for the purpose of describing a resource and determining hyperlinks - within the representation. - -
- An example JSON Schema that describes products might look like: - - - - - This schema defines the properties of the instance JSON documents, - the required properties (id, name, and price), as well as an optional - property (tags). This also defines the link relations of the instance - JSON documents. - -
- -
- - For this specification, schema will be used to denote a JSON Schema - definition, and an instance refers to a JSON value that the schema - will be describing and validating. - -
- -
- - The JSON Schema media type does not attempt to dictate the structure of JSON - representations that contain data, but rather provides a separate format - for flexibly communicating how a JSON representation should be - interpreted and validated, such that user agents can properly understand - acceptable structures and extrapolate hyperlink information - with the JSON document. It is acknowledged that JSON documents come - in a variety of structures, and JSON is unique in that the structure - of stored data structures often prescribes a non-ambiguous definite - JSON representation. Attempting to force a specific structure is generally - not viable, and therefore JSON Schema allows for a great flexibility - in the structure of the JSON data that it describes. - - - This specification is protocol agnostic. - The underlying protocol (such as HTTP) should sufficiently define the - semantics of the client-server interface, the retrieval of resource - representations linked to by JSON representations, and modification of - those resources. The goal of this - format is to sufficiently describe JSON structures such that one can - utilize existing information available in existing JSON - representations from a large variety of services that leverage a representational state transfer - architecture using existing protocols. - -
-
- -
- - JSON Schema instances are correlated to their schema by the "describedby" - relation, where the schema is defined to be the target of the relation. - Instance representations may be of the "application/json" media type or - any other subtype. Consequently, dictating how an instance - representation should specify the relation to the schema is beyond the normative scope - of this document (since this document specifically defines the JSON - Schema media type, and no other), but it is recommended that instances - specify their schema so that user agents can interpret the instance - representation and messages may retain the self-descriptive - characteristic, avoiding the need for out-of-band information about - instance data. Two approaches are recommended for declaring the - relation to the schema that describes the meaning of a JSON instance's (or collection - of instances) structure. A MIME type parameter named - "profile" or a relation of "describedby" (which could be defined by a Link header) may be used: - -
- - - -
- - or if the content is being transferred by a protocol (such as HTTP) that - provides headers, a Link header can be used: - -
- -; rel="describedby" -]]> - -
- - Instances MAY specify multiple schemas, to indicate all the schemas that - are applicable to the data, and the data SHOULD be valid by all the schemas. - The instance data MAY have multiple schemas - that it is defined by (the instance data SHOULD be valid for those schemas). - Or if the document is a collection of instances, the collection MAY contain - instances from different schemas. When collections contain heterogeneous - instances, the "pathStart" attribute MAY be specified in the - schema to disambiguate which schema should be applied for each item in the - collection. However, ultimately, the mechanism for referencing a schema is up to the - media type of the instance documents (if they choose to specify that schemas - can be referenced). -
- -
- - JSON Schemas can themselves be described using JSON Schemas. - A self-describing JSON Schema for the core JSON Schema can - be found at http://json-schema.org/schema for the latest version or - http://json-schema.org/draft-03/schema for the draft-03 version. The hyper schema - self-description can be found at http://json-schema.org/hyper-schema - or http://json-schema.org/draft-03/hyper-schema. All schemas - used within a protocol with media type definitions - SHOULD include a MIME parameter that refers to the self-descriptive - hyper schema or another schema that extends this hyper schema: - -
- - - -
-
-
-
- -
- - A JSON Schema is a JSON Object that defines various attributes - (including usage and valid values) of a JSON value. JSON - Schema has recursive capabilities; there are a number of elements - in the structure that allow for nested JSON Schemas. - - -
- An example JSON Schema definition could look like: - - - -
- - - A JSON Schema object may have any of the following properties, called schema - attributes (all attributes are optional): - - -
- - This attribute defines what the primitive type or the schema of the instance MUST be in order to validate. - This attribute can take one of two forms: - - - - A string indicating a primitive or simple type. The following are acceptable string values: - - - Value MUST be a string. - Value MUST be a number, floating point numbers are allowed. - Value MUST be an integer, no floating point numbers are allowed. This is a subset of the number type. - Value MUST be a boolean. - Value MUST be an object. - Value MUST be an array. - Value MUST be null. Note this is mainly for purpose of being able use union types to define nullability. If this type is not included in a union, null values are not allowed (the primitives listed above do not allow nulls on their own). - Value MAY be of any type including null. - - - If the property is not defined or is not in this list, then any type of value is acceptable. - Other type values MAY be used for custom purposes, but minimal validators of the specification - implementation can allow any instance value on unknown type values. - - - - An array of two or more simple type definitions. Each item in the array MUST be a simple type definition or a schema. - The instance value is valid if it is of the same type as one of the simple type definitions, or valid by one of the schemas, in the array. - - - - -
- For example, a schema that defines if an instance can be a string or a number would be: - - -
-
- -
- This attribute is an object with property definitions that define the valid values of instance object property values. When the instance value is an object, the property values of the instance object MUST conform to the property definitions in this object. In this object, each property definition's value MUST be a schema, and the property's name MUST be the name of the instance property that it defines. The instance property value MUST be valid according to the schema from the property definition. Properties are considered unordered, the order of the instance properties MAY be in any order. -
- -
- This attribute is an object that defines the schema for a set of property names of an object instance. The name of each property of this attribute's object is a regular expression pattern in the ECMA 262/Perl 5 format, while the value is a schema. If the pattern matches the name of a property on the instance object, the value of the instance's property MUST be valid against the pattern name's schema value. -
- -
- This attribute defines a schema for all properties that are not explicitly defined in an object type definition. If specified, the value MUST be a schema or a boolean. If false is provided, no additional properties are allowed beyond the properties defined in the schema. The default value is an empty schema which allows any value for additional properties. -
- -
- This attribute defines the allowed items in an instance array, and MUST be a schema or an array of schemas. The default value is an empty schema which allows any value for items in the instance array. - When this attribute value is a schema and the instance value is an array, then all the items in the array MUST be valid according to the schema. - When this attribute value is an array of schemas and the instance value is an array, each position in the instance array MUST conform to the schema in the corresponding position for this array. This called tuple typing. When tuple typing is used, additional items are allowed, disallowed, or constrained by the "additionalItems" attribute using the same rules as "additionalProperties" for objects. -
- -
- This provides a definition for additional items in an array instance when tuple definitions of the items is provided. This can be false to indicate additional items in the array are not allowed, or it can be a schema that defines the schema of the additional items. -
- -
- This attribute indicates if the instance must have a value, and not be undefined. This is false by default, making the instance optional. -
- -
- This attribute is an object that defines the requirements of a property on an instance object. If an object instance has a property with the same name as a property in this attribute's object, then the instance must be valid against the attribute's property value (hereafter referred to as the "dependency value"). - - The dependency value can take one of two forms: - - - - If the dependency value is a string, then the instance object MUST have a property with the same name as the dependency value. - If the dependency value is an array of strings, then the instance object MUST have a property with the same name as each string in the dependency value's array. - - - If the dependency value is a schema, then the instance object MUST be valid against the schema. - - - -
- -
- This attribute defines the minimum value of the instance property when the type of the instance value is a number. -
- -
- This attribute defines the maximum value of the instance property when the type of the instance value is a number. -
- -
- This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "minimum" attribute. This is false by default, meaning the instance value can be greater then or equal to the minimum value. -
- -
- This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "maximum" attribute. This is false by default, meaning the instance value can be less then or equal to the maximum value. -
- -
- This attribute defines the minimum number of values in an array when the array is the instance value. -
- -
- This attribute defines the maximum number of values in an array when the array is the instance value. -
- -
- This attribute indicates that all items in an array instance MUST be unique (contains no two identical values). - - Two instance are consider equal if they are both of the same type and: - - - are null; or - are booleans/numbers/strings and have the same value; or - are arrays, contains the same number of items, and each item in the array is equal to the corresponding item in the other array; or - are objects, contains the same property names, and each property in the object is equal to the corresponding property in the other object. - - -
- -
- When the instance value is a string, this provides a regular expression that a string instance MUST match in order to be valid. Regular expressions SHOULD follow the regular expression specification from ECMA 262/Perl 5 -
- -
- When the instance value is a string, this defines the minimum length of the string. -
- -
- When the instance value is a string, this defines the maximum length of the string. -
- -
- This provides an enumeration of all possible values that are valid for the instance property. This MUST be an array, and each item in the array represents a possible value for the instance value. If this attribute is defined, the instance value MUST be one of the values in the array in order for the schema to be valid. Comparison of enum values uses the same algorithm as defined in "uniqueItems". -
- -
- This attribute defines the default value of the instance when the instance is undefined. -
- -
- This attribute is a string that provides a short description of the instance property. -
- -
- This attribute is a string that provides a full description of the of purpose the instance property. -
- -
- This property defines the type of data, content type, or microformat to be expected in the instance property values. A format attribute MAY be one of the values listed below, and if so, SHOULD adhere to the semantics describing for the format. A format SHOULD only be used to give meaning to primitive types (string, integer, number, or boolean). Validators MAY (but are not required to) validate that the instance values conform to a format. - - - The following formats are predefined: - - - This SHOULD be a date in ISO 8601 format of YYYY-MM-DDThh:mm:ssZ in UTC time. This is the recommended form of date/timestamp. - This SHOULD be a date in the format of YYYY-MM-DD. It is recommended that you use the "date-time" format instead of "date" unless you need to transfer only the date part. - This SHOULD be a time in the format of hh:mm:ss. It is recommended that you use the "date-time" format instead of "time" unless you need to transfer only the time part. - This SHOULD be the difference, measured in milliseconds, between the specified time and midnight, 00:00 of January 1, 1970 UTC. The value SHOULD be a number (integer or float). - A regular expression, following the regular expression specification from ECMA 262/Perl 5. - This is a CSS color (like "#FF0000" or "red"), based on CSS 2.1. - This is a CSS style definition (like "color: red; background-color:#FFF"), based on CSS 2.1. - This SHOULD be a phone number (format MAY follow E.123). - This value SHOULD be a URI. - This SHOULD be an email address. - This SHOULD be an ip version 4 address. - This SHOULD be an ip version 6 address. - This SHOULD be a host-name. - - - - Additional custom formats MAY be created. These custom formats MAY be expressed as an URI, and this URI MAY reference a schema of that format. -
- -
- This attribute defines what value the number instance must be divisible by with no remainder (the result of the division must be an integer.) The value of this attribute SHOULD NOT be 0. -
- -
- This attribute takes the same values as the "type" attribute, however if the instance matches the type or if this value is an array and the instance matches any type or schema in the array, then this instance is not valid. -
- -
- The value of this property MUST be another schema which will provide a base schema which the current schema will inherit from. The inheritance rules are such that any instance that is valid according to the current schema MUST be valid according to the referenced schema. This MAY also be an array, in which case, the instance MUST be valid for all the schemas in the array. A schema that extends another schema MAY define additional attributes, constrain existing attributes, or add other constraints. - - Conceptually, the behavior of extends can be seen as validating an - instance against all constraints in the extending schema as well as - the extended schema(s). More optimized implementations that merge - schemas are possible, but are not required. Some examples of using "extends": - -
- - - -
- -
- - - -
-
-
- -
- - This attribute defines the current URI of this schema (this attribute is - effectively a "self" link). This URI MAY be relative or absolute. If - the URI is relative it is resolved against the current URI of the parent - schema it is contained in. If this schema is not contained in any - parent schema, the current URI of the parent schema is held to be the - URI under which this schema was addressed. If id is missing, the current URI of a schema is - defined to be that of the parent schema. The current URI of the schema - is also used to construct relative references such as for $ref. - -
- -
- - This attribute defines a URI of a schema that contains the full representation of this schema. - When a validator encounters this attribute, it SHOULD replace the current schema with the schema referenced by the value's URI (if known and available) and re-validate the instance. - This URI MAY be relative or absolute, and relative URIs SHOULD be resolved against the URI of the current schema. - -
- -
- - This attribute defines a URI of a JSON Schema that is the schema of the current schema. - When this attribute is defined, a validator SHOULD use the schema referenced by the value's URI (if known and available) when resolving Hyper Schemalinks. - - - - A validator MAY use this attribute's value to determine which version of JSON Schema the current schema is written in, and provide the appropriate validation features and behavior. - Therefore, it is RECOMMENDED that all schema authors include this attribute in their schemas to prevent conflicts with future JSON Schema specification changes. - -
-
- -
- - The following attributes are specified in addition to those - attributes that already provided by the core schema with the specific - purpose of informing user agents of relations between resources based - on JSON data. Just as with JSON - schema attributes, all the attributes in hyper schemas are optional. - Therefore, an empty object is a valid (non-informative) schema, and - essentially describes plain JSON (no constraints on the structures). - Addition of attributes provides additive information for user agents. - - -
- - The value of the links property MUST be an array, where each item - in the array is a link description object which describes the link - relations of the instances. - - -
- - A link description object is used to describe link relations. In - the context of a schema, it defines the link relations of the - instances of the schema, and can be parameterized by the instance - values. The link description format can be used on its own in - regular (non-schema documents), and use of this format can - be declared by referencing the normative link description - schema as the the schema for the data structure that uses the - links. The URI of the normative link description schema is: - http://json-schema.org/links (latest version) or - http://json-schema.org/draft-03/links (draft-03 version). - - -
- - The value of the "href" link description property - indicates the target URI of the related resource. The value - of the instance property SHOULD be resolved as a URI-Reference per RFC 3986 - and MAY be a relative URI. The base URI to be used for relative resolution - SHOULD be the URI used to retrieve the instance object (not the schema) - when used within a schema. Also, when links are used within a schema, the URI - SHOULD be parametrized by the property values of the instance - object, if property values exist for the corresponding variables - in the template (otherwise they MAY be provided from alternate sources, like user input). - - - - Instance property values SHOULD be substituted into the URIs where - matching braces ('{', '}') are found surrounding zero or more characters, - creating an expanded URI. Instance property value substitutions are resolved - by using the text between the braces to denote the property name - from the instance to get the value to substitute. - -
- For example, if an href value is defined: - - - - Then it would be resolved by replace the value of the "id" property value from the instance object. -
- -
- If the value of the "id" property was "45", the expanded URI would be: - - - -
- - If matching braces are found with the string "@" (no quotes) between the braces, then the - actual instance value SHOULD be used to replace the braces, rather than a property value. - This should only be used in situations where the instance is a scalar (string, - boolean, or number), and not for objects or arrays. -
-
- -
- - The value of the "rel" property indicates the name of the - relation to the target resource. The relation to the target SHOULD be interpreted as specifically from the instance object that the schema (or sub-schema) applies to, not just the top level resource that contains the object within its hierarchy. If a resource JSON representation contains a sub object with a property interpreted as a link, that sub-object holds the relation with the target. A relation to target from the top level resource MUST be indicated with the schema describing the top level JSON representation. - - - - Relationship definitions SHOULD NOT be media type dependent, and users are encouraged to utilize existing accepted relation definitions, including those in existing relation registries (see RFC 4287). However, we define these relations here for clarity of normative interpretation within the context of JSON hyper schema defined relations: - - - - If the relation value is "self", when this property is encountered in - the instance object, the object represents a resource and the instance object is - treated as a full representation of the target resource identified by - the specified URI. - - - - This indicates that the target of the link is the full representation for the instance object. The object that contains this link possibly may not be the full representation. - - - - This indicates the target of the link is the schema for the instance object. This MAY be used to specifically denote the schemas of objects within a JSON object hierarchy, facilitating polymorphic type data structures. - - - - This relation indicates that the target of the link - SHOULD be treated as the root or the body of the representation for the - purposes of user agent interaction or fragment resolution. All other - properties of the instance objects can be regarded as meta-data - descriptions for the data. - - - - - - The following relations are applicable for schemas (the schema as the "from" resource in the relation): - - - This indicates the target resource that represents collection of instances of a schema. - This indicates a target to use for creating new instances of a schema. This link definition SHOULD be a submission link with a non-safe method (like POST). - - - - -
- For example, if a schema is defined: - - - -
- -
- And if a collection of instance resource's JSON representation was retrieved: - - - -
- - This would indicate that for the first item in the collection, its own - (self) URI would resolve to "/Resource/thing" and the first item's "up" - relation SHOULD be resolved to the resource at "/Resource/parent". - The "children" collection would be located at "/Resource/?upId=thing". -
-
- -
- This property value is a schema that defines the expected structure of the JSON representation of the target of the link. -
- -
- - The following properties also apply to link definition objects, and - provide functionality analogous to HTML forms, in providing a - means for submitting extra (often user supplied) information to send to a server. - - -
- - This attribute defines which method can be used to access the target resource. - In an HTTP environment, this would be "GET" or "POST" (other HTTP methods - such as "PUT" and "DELETE" have semantics that are clearly implied by - accessed resources, and do not need to be defined here). - This defaults to "GET". - -
- -
- - If present, this property indicates a query media type format that the server - supports for querying or posting to the collection of instances at the target - resource. The query can be - suffixed to the target URI to query the collection with - property-based constraints on the resources that SHOULD be returned from - the server or used to post data to the resource (depending on the method). - -
- For example, with the following schema: - - - - This indicates that the client can query the server for instances that have a specific name. -
- -
- For example: - - - -
- - If no enctype or method is specified, only the single URI specified by - the href property is defined. If the method is POST, "application/json" is - the default media type. -
-
- -
- - This attribute contains a schema which defines the acceptable structure of the submitted - request (for a GET request, this schema would define the properties for the query string - and for a POST request, this would define the body). - -
-
-
-
- -
- - This property indicates the fragment resolution protocol to use for - resolving fragment identifiers in URIs within the instance - representations. This applies to the instance object URIs and all - children of the instance object's URIs. The default fragment resolution - protocol is "slash-delimited", which is defined below. Other fragment - resolution protocols MAY be used, but are not defined in this document. - - - - The fragment identifier is based on RFC 2396, Sec 5, and defines the - mechanism for resolving references to entities within a document. - - -
- - With the slash-delimited fragment resolution protocol, the fragment - identifier is interpreted as a series of property reference tokens that start with and - are delimited by the "/" character (\x2F). Each property reference token - is a series of unreserved or escaped URI characters. Each property - reference token SHOULD be interpreted, starting from the beginning of - the fragment identifier, as a path reference in the target JSON - structure. The final target value of the fragment can be determined by - starting with the root of the JSON structure from the representation of - the resource identified by the pre-fragment URI. If the target is a JSON - object, then the new target is the value of the property with the name - identified by the next property reference token in the fragment. If the - target is a JSON array, then the target is determined by finding the - item in array the array with the index defined by the next property - reference token (which MUST be a number). The target is successively - updated for each property reference token, until the entire fragment has - been traversed. - - - - Property names SHOULD be URI-encoded. In particular, any "/" in a - property name MUST be encoded to avoid being interpreted as a property - delimiter. - - - -
- For example, for the following JSON representation: - - - -
- -
- The following fragment identifiers would be resolved: - - - -
-
-
- -
- - The dot-delimited fragment resolution protocol is the same as - slash-delimited fragment resolution protocol except that the "." character - (\x2E) is used as the delimiter between property names (instead of "/") and - the path does not need to start with a ".". For example, #.foo and #foo are a valid fragment - identifiers for referencing the value of the foo propery. - -
-
- -
- This attribute indicates that the instance property SHOULD NOT be changed. Attempts by a user agent to modify the value of this property are expected to be rejected by a server. -
- -
- If the instance property value is a string, this attribute defines that the string SHOULD be interpreted as binary data and decoded using the encoding named by this schema property. RFC 2045, Sec 6.1 lists the possible values for this property. -
- -
- - This attribute is a URI that defines what the instance's URI MUST start with in order to validate. - The value of the "pathStart" attribute MUST be resolved as per RFC 3986, Sec 5, - and is relative to the instance's URI. - - - - When multiple schemas have been referenced for an instance, the user agent - can determine if this schema is applicable for a particular instance by - determining if the URI of the instance begins with the the value of the "pathStart" - attribute. If the URI of the instance does not start with this URI, - or if another schema specifies a starting URI that is longer and also matches the - instance, this schema SHOULD NOT be applied to the instance. Any schema - that does not have a pathStart attribute SHOULD be considered applicable - to all the instances for which it is referenced. - -
- -
- This attribute defines the media type of the instance representations that this schema is defining. -
-
- -
- - This specification is a sub-type of the JSON format, and - consequently the security considerations are generally the same as RFC 4627. - However, an additional issue is that when link relation of "self" - is used to denote a full representation of an object, the user agent - SHOULD NOT consider the representation to be the authoritative representation - of the resource denoted by the target URI if the target URI is not - equivalent to or a sub-path of the the URI used to request the resource - representation which contains the target URI with the "self" link. - -
- For example, if a hyper schema was defined: - - - -
- -
- And a resource was requested from somesite.com: - - - -
- -
- With a response of: - - - -
-
-
- -
- The proposed MIME media type for JSON Schema is "application/schema+json". - Type name: application - Subtype name: schema+json - Required parameters: profile - - The value of the profile parameter SHOULD be a URI (relative or absolute) that - refers to the schema used to define the structure of this structure (the - meta-schema). Normally the value would be http://json-schema.org/draft-03/hyper-schema, - but it is allowable to use other schemas that extend the hyper schema's meta- - schema. - - Optional parameters: pretty - The value of the pretty parameter MAY be true or false to indicate if additional whitespace has been included to make the JSON representation easier to read. - -
- - This registry is maintained by IANA per RFC 4287 and this specification adds - four values: "full", "create", "instances", "root". New - assignments are subject to IESG Approval, as outlined in RFC 5226. - Requests should be made by email to IANA, which will then forward the - request to the IESG, requesting approval. - -
-
-
- - - - - &rfc2045; - &rfc2119; - &rfc2396; - &rfc3339; - &rfc3986; - &rfc4287; - - - &rfc2616; - &rfc4627; - &rfc5226; - &iddiscovery; - &uritemplate; - &linkheader; - &html401; - &css21; - - -
- - - - - Added example and verbiage to "extends" attribute. - Defined slash-delimited to use a leading slash. - Made "root" a relation instead of an attribute. - Removed address values, and MIME media type from format to reduce confusion (mediaType already exists, so it can be used for MIME types). - Added more explanation of nullability. - Removed "alternate" attribute. - Upper cased many normative usages of must, may, and should. - Replaced the link submission "properties" attribute to "schema" attribute. - Replaced "optional" attribute with "required" attribute. - Replaced "maximumCanEqual" attribute with "exclusiveMaximum" attribute. - Replaced "minimumCanEqual" attribute with "exclusiveMinimum" attribute. - Replaced "requires" attribute with "dependencies" attribute. - Moved "contentEncoding" attribute to hyper schema. - Added "additionalItems" attribute. - Added "id" attribute. - Switched self-referencing variable substitution from "-this" to "@" to align with reserved characters in URI template. - Added "patternProperties" attribute. - Schema URIs are now namespace versioned. - Added "$ref" and "$schema" attributes. - - - - - - Replaced "maxDecimal" attribute with "divisibleBy" attribute. - Added slash-delimited fragment resolution protocol and made it the default. - Added language about using links outside of schemas by referencing its normative URI. - Added "uniqueItems" attribute. - Added "targetSchema" attribute to link description object. - - - - - - Fixed category and updates from template. - - - - - - Initial draft. - - - - -
- -
- - - Should we give a preference to MIME headers over Link headers (or only use one)? - Should "root" be a MIME parameter? - Should "format" be renamed to "mediaType" or "contentType" to reflect the usage MIME media types that are allowed? - How should dates be handled? - - -
-
- + + + + + + + + + + + + + + + +]> + + + + + + + + + A JSON Media Type for Describing the Structure and Meaning of JSON Documents + + + SitePen (USA) +
+ + 530 Lytton Avenue + Palo Alto, CA 94301 + USA + + +1 650 968 8787 + kris@sitepen.com +
+
+ + +
+ + + Calgary, AB + Canada + + gary.court@gmail.com +
+
+ + + Internet Engineering Task Force + JSON + Schema + JavaScript + Object + Notation + Hyper Schema + Hypermedia + + + + JSON (JavaScript Object Notation) Schema defines the media type "application/schema+json", + a JSON based format for defining + the structure of JSON data. JSON Schema provides a contract for what JSON + data is required for a given application and how to interact with it. JSON + Schema is intended to define validation, documentation, hyperlink + navigation, and interaction control of JSON data. + + +
+ + +
+ + JSON (JavaScript Object Notation) Schema is a JSON media type for defining + the structure of JSON data. JSON Schema provides a contract for what JSON + data is required for a given application and how to interact with it. JSON + Schema is intended to define validation, documentation, hyperlink + navigation, and interaction control of JSON data. + +
+ +
+ + + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", + "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be + interpreted as described in RFC 2119. + +
+ + + +
+ + JSON Schema defines the media type "application/schema+json" for + describing the structure of other + JSON documents. JSON Schema is JSON-based and includes facilities + for describing the structure of JSON documents in terms of + allowable values, descriptions, and interpreting relations with other resources. + + + JSON Schema format is organized into several separate definitions. The first + definition is the core schema specification. This definition is primary + concerned with describing a JSON structure and specifying valid elements + in the structure. The second definition is the Hyper Schema specification + which is intended define elements in a structure that can be interpreted as + hyperlinks. + Hyper Schema builds on JSON Schema to describe the hyperlink structure of + other JSON documents and elements of interaction. This allows user agents to be able to successfully navigate + JSON documents based on their schemas. + + + Cumulatively JSON Schema acts as a meta-document that can be used to define the required type and constraints on + property values, as well as define the meaning of the property values + for the purpose of describing a resource and determining hyperlinks + within the representation. + +
+ An example JSON Schema that describes products might look like: + + + + + This schema defines the properties of the instance JSON documents, + the required properties (id, name, and price), as well as an optional + property (tags). This also defines the link relations of the instance + JSON documents. + +
+ +
+ + For this specification, schema will be used to denote a JSON Schema + definition, and an instance refers to a JSON value that the schema + will be describing and validating. + +
+ +
+ + The JSON Schema media type does not attempt to dictate the structure of JSON + representations that contain data, but rather provides a separate format + for flexibly communicating how a JSON representation should be + interpreted and validated, such that user agents can properly understand + acceptable structures and extrapolate hyperlink information + with the JSON document. It is acknowledged that JSON documents come + in a variety of structures, and JSON is unique in that the structure + of stored data structures often prescribes a non-ambiguous definite + JSON representation. Attempting to force a specific structure is generally + not viable, and therefore JSON Schema allows for a great flexibility + in the structure of the JSON data that it describes. + + + This specification is protocol agnostic. + The underlying protocol (such as HTTP) should sufficiently define the + semantics of the client-server interface, the retrieval of resource + representations linked to by JSON representations, and modification of + those resources. The goal of this + format is to sufficiently describe JSON structures such that one can + utilize existing information available in existing JSON + representations from a large variety of services that leverage a representational state transfer + architecture using existing protocols. + +
+
+ +
+ + JSON Schema instances are correlated to their schema by the "describedby" + relation, where the schema is defined to be the target of the relation. + Instance representations may be of the "application/json" media type or + any other subtype. Consequently, dictating how an instance + representation should specify the relation to the schema is beyond the normative scope + of this document (since this document specifically defines the JSON + Schema media type, and no other), but it is recommended that instances + specify their schema so that user agents can interpret the instance + representation and messages may retain the self-descriptive + characteristic, avoiding the need for out-of-band information about + instance data. Two approaches are recommended for declaring the + relation to the schema that describes the meaning of a JSON instance's (or collection + of instances) structure. A MIME type parameter named + "profile" or a relation of "describedby" (which could be defined by a Link header) may be used: + +
+ + + +
+ + or if the content is being transferred by a protocol (such as HTTP) that + provides headers, a Link header can be used: + +
+ +; rel="describedby" +]]> + +
+ + Instances MAY specify multiple schemas, to indicate all the schemas that + are applicable to the data, and the data SHOULD be valid by all the schemas. + The instance data MAY have multiple schemas + that it is defined by (the instance data SHOULD be valid for those schemas). + Or if the document is a collection of instances, the collection MAY contain + instances from different schemas. When collections contain heterogeneous + instances, the "pathStart" attribute MAY be specified in the + schema to disambiguate which schema should be applied for each item in the + collection. However, ultimately, the mechanism for referencing a schema is up to the + media type of the instance documents (if they choose to specify that schemas + can be referenced). +
+ +
+ + JSON Schemas can themselves be described using JSON Schemas. + A self-describing JSON Schema for the core JSON Schema can + be found at http://json-schema.org/schema for the latest version or + http://json-schema.org/draft-03/schema for the draft-03 version. The hyper schema + self-description can be found at http://json-schema.org/hyper-schema + or http://json-schema.org/draft-03/hyper-schema. All schemas + used within a protocol with media type definitions + SHOULD include a MIME parameter that refers to the self-descriptive + hyper schema or another schema that extends this hyper schema: + +
+ + + +
+
+
+
+ +
+ + A JSON Schema is a JSON Object that defines various attributes + (including usage and valid values) of a JSON value. JSON + Schema has recursive capabilities; there are a number of elements + in the structure that allow for nested JSON Schemas. + + +
+ An example JSON Schema definition could look like: + + + +
+ + + A JSON Schema object may have any of the following properties, called schema + attributes (all attributes are optional): + + +
+ + This attribute defines what the primitive type or the schema of the instance MUST be in order to validate. + This attribute can take one of two forms: + + + + A string indicating a primitive or simple type. The following are acceptable string values: + + + Value MUST be a string. + Value MUST be a number, floating point numbers are allowed. + Value MUST be an integer, no floating point numbers are allowed. This is a subset of the number type. + Value MUST be a boolean. + Value MUST be an object. + Value MUST be an array. + Value MUST be null. Note this is mainly for purpose of being able use union types to define nullability. If this type is not included in a union, null values are not allowed (the primitives listed above do not allow nulls on their own). + Value MAY be of any type including null. + + + If the property is not defined or is not in this list, then any type of value is acceptable. + Other type values MAY be used for custom purposes, but minimal validators of the specification + implementation can allow any instance value on unknown type values. + + + + An array of two or more simple type definitions. Each item in the array MUST be a simple type definition or a schema. + The instance value is valid if it is of the same type as one of the simple type definitions, or valid by one of the schemas, in the array. + + + + +
+ For example, a schema that defines if an instance can be a string or a number would be: + + +
+
+ +
+ This attribute is an object with property definitions that define the valid values of instance object property values. When the instance value is an object, the property values of the instance object MUST conform to the property definitions in this object. In this object, each property definition's value MUST be a schema, and the property's name MUST be the name of the instance property that it defines. The instance property value MUST be valid according to the schema from the property definition. Properties are considered unordered, the order of the instance properties MAY be in any order. +
+ +
+ This attribute is an object that defines the schema for a set of property names of an object instance. The name of each property of this attribute's object is a regular expression pattern in the ECMA 262/Perl 5 format, while the value is a schema. If the pattern matches the name of a property on the instance object, the value of the instance's property MUST be valid against the pattern name's schema value. +
+ +
+ This attribute defines a schema for all properties that are not explicitly defined in an object type definition. If specified, the value MUST be a schema or a boolean. If false is provided, no additional properties are allowed beyond the properties defined in the schema. The default value is an empty schema which allows any value for additional properties. +
+ +
+ This attribute defines the allowed items in an instance array, and MUST be a schema or an array of schemas. The default value is an empty schema which allows any value for items in the instance array. + When this attribute value is a schema and the instance value is an array, then all the items in the array MUST be valid according to the schema. + When this attribute value is an array of schemas and the instance value is an array, each position in the instance array MUST conform to the schema in the corresponding position for this array. This called tuple typing. When tuple typing is used, additional items are allowed, disallowed, or constrained by the "additionalItems" attribute using the same rules as "additionalProperties" for objects. +
+ +
+ This provides a definition for additional items in an array instance when tuple definitions of the items is provided. This can be false to indicate additional items in the array are not allowed, or it can be a schema that defines the schema of the additional items. +
+ +
+ This attribute indicates if the instance must have a value, and not be undefined. This is false by default, making the instance optional. +
+ +
+ This attribute is an object that defines the requirements of a property on an instance object. If an object instance has a property with the same name as a property in this attribute's object, then the instance must be valid against the attribute's property value (hereafter referred to as the "dependency value"). + + The dependency value can take one of two forms: + + + + If the dependency value is a string, then the instance object MUST have a property with the same name as the dependency value. + If the dependency value is an array of strings, then the instance object MUST have a property with the same name as each string in the dependency value's array. + + + If the dependency value is a schema, then the instance object MUST be valid against the schema. + + + +
+ +
+ This attribute defines the minimum value of the instance property when the type of the instance value is a number. +
+ +
+ This attribute defines the maximum value of the instance property when the type of the instance value is a number. +
+ +
+ This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "minimum" attribute. This is false by default, meaning the instance value can be greater then or equal to the minimum value. +
+ +
+ This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "maximum" attribute. This is false by default, meaning the instance value can be less then or equal to the maximum value. +
+ +
+ This attribute defines the minimum number of values in an array when the array is the instance value. +
+ +
+ This attribute defines the maximum number of values in an array when the array is the instance value. +
+ +
+ This attribute indicates that all items in an array instance MUST be unique (contains no two identical values). + + Two instance are consider equal if they are both of the same type and: + + + are null; or + are booleans/numbers/strings and have the same value; or + are arrays, contains the same number of items, and each item in the array is equal to the corresponding item in the other array; or + are objects, contains the same property names, and each property in the object is equal to the corresponding property in the other object. + + +
+ +
+ When the instance value is a string, this provides a regular expression that a string instance MUST match in order to be valid. Regular expressions SHOULD follow the regular expression specification from ECMA 262/Perl 5 +
+ +
+ When the instance value is a string, this defines the minimum length of the string. +
+ +
+ When the instance value is a string, this defines the maximum length of the string. +
+ +
+ This provides an enumeration of all possible values that are valid for the instance property. This MUST be an array, and each item in the array represents a possible value for the instance value. If this attribute is defined, the instance value MUST be one of the values in the array in order for the schema to be valid. Comparison of enum values uses the same algorithm as defined in "uniqueItems". +
+ +
+ This attribute defines the default value of the instance when the instance is undefined. +
+ +
+ This attribute is a string that provides a short description of the instance property. +
+ +
+ This attribute is a string that provides a full description of the of purpose the instance property. +
+ +
+ This property defines the type of data, content type, or microformat to be expected in the instance property values. A format attribute MAY be one of the values listed below, and if so, SHOULD adhere to the semantics describing for the format. A format SHOULD only be used to give meaning to primitive types (string, integer, number, or boolean). Validators MAY (but are not required to) validate that the instance values conform to a format. + + + The following formats are predefined: + + + This SHOULD be a date in ISO 8601 format of YYYY-MM-DDThh:mm:ssZ in UTC time. This is the recommended form of date/timestamp. + This SHOULD be a date in the format of YYYY-MM-DD. It is recommended that you use the "date-time" format instead of "date" unless you need to transfer only the date part. + This SHOULD be a time in the format of hh:mm:ss. It is recommended that you use the "date-time" format instead of "time" unless you need to transfer only the time part. + This SHOULD be the difference, measured in milliseconds, between the specified time and midnight, 00:00 of January 1, 1970 UTC. The value SHOULD be a number (integer or float). + A regular expression, following the regular expression specification from ECMA 262/Perl 5. + This is a CSS color (like "#FF0000" or "red"), based on CSS 2.1. + This is a CSS style definition (like "color: red; background-color:#FFF"), based on CSS 2.1. + This SHOULD be a phone number (format MAY follow E.123). + This value SHOULD be a URI. + This SHOULD be an email address. + This SHOULD be an ip version 4 address. + This SHOULD be an ip version 6 address. + This SHOULD be a host-name. + + + + Additional custom formats MAY be created. These custom formats MAY be expressed as an URI, and this URI MAY reference a schema of that format. +
+ +
+ This attribute defines what value the number instance must be divisible by with no remainder (the result of the division must be an integer.) The value of this attribute SHOULD NOT be 0. +
+ +
+ This attribute takes the same values as the "type" attribute, however if the instance matches the type or if this value is an array and the instance matches any type or schema in the array, then this instance is not valid. +
+ +
+ The value of this property MUST be another schema which will provide a base schema which the current schema will inherit from. The inheritance rules are such that any instance that is valid according to the current schema MUST be valid according to the referenced schema. This MAY also be an array, in which case, the instance MUST be valid for all the schemas in the array. A schema that extends another schema MAY define additional attributes, constrain existing attributes, or add other constraints. + + Conceptually, the behavior of extends can be seen as validating an + instance against all constraints in the extending schema as well as + the extended schema(s). More optimized implementations that merge + schemas are possible, but are not required. Some examples of using "extends": + +
+ + + +
+ +
+ + + +
+
+
+ +
+ + This attribute defines the current URI of this schema (this attribute is + effectively a "self" link). This URI MAY be relative or absolute. If + the URI is relative it is resolved against the current URI of the parent + schema it is contained in. If this schema is not contained in any + parent schema, the current URI of the parent schema is held to be the + URI under which this schema was addressed. If id is missing, the current URI of a schema is + defined to be that of the parent schema. The current URI of the schema + is also used to construct relative references such as for $ref. + +
+ +
+ + This attribute defines a URI of a schema that contains the full representation of this schema. + When a validator encounters this attribute, it SHOULD replace the current schema with the schema referenced by the value's URI (if known and available) and re-validate the instance. + This URI MAY be relative or absolute, and relative URIs SHOULD be resolved against the URI of the current schema. + +
+ +
+ + This attribute defines a URI of a JSON Schema that is the schema of the current schema. + When this attribute is defined, a validator SHOULD use the schema referenced by the value's URI (if known and available) when resolving Hyper Schemalinks. + + + + A validator MAY use this attribute's value to determine which version of JSON Schema the current schema is written in, and provide the appropriate validation features and behavior. + Therefore, it is RECOMMENDED that all schema authors include this attribute in their schemas to prevent conflicts with future JSON Schema specification changes. + +
+
+ +
+ + The following attributes are specified in addition to those + attributes that already provided by the core schema with the specific + purpose of informing user agents of relations between resources based + on JSON data. Just as with JSON + schema attributes, all the attributes in hyper schemas are optional. + Therefore, an empty object is a valid (non-informative) schema, and + essentially describes plain JSON (no constraints on the structures). + Addition of attributes provides additive information for user agents. + + +
+ + The value of the links property MUST be an array, where each item + in the array is a link description object which describes the link + relations of the instances. + + +
+ + A link description object is used to describe link relations. In + the context of a schema, it defines the link relations of the + instances of the schema, and can be parameterized by the instance + values. The link description format can be used on its own in + regular (non-schema documents), and use of this format can + be declared by referencing the normative link description + schema as the the schema for the data structure that uses the + links. The URI of the normative link description schema is: + http://json-schema.org/links (latest version) or + http://json-schema.org/draft-03/links (draft-03 version). + + +
+ + The value of the "href" link description property + indicates the target URI of the related resource. The value + of the instance property SHOULD be resolved as a URI-Reference per RFC 3986 + and MAY be a relative URI. The base URI to be used for relative resolution + SHOULD be the URI used to retrieve the instance object (not the schema) + when used within a schema. Also, when links are used within a schema, the URI + SHOULD be parametrized by the property values of the instance + object, if property values exist for the corresponding variables + in the template (otherwise they MAY be provided from alternate sources, like user input). + + + + Instance property values SHOULD be substituted into the URIs where + matching braces ('{', '}') are found surrounding zero or more characters, + creating an expanded URI. Instance property value substitutions are resolved + by using the text between the braces to denote the property name + from the instance to get the value to substitute. + +
+ For example, if an href value is defined: + + + + Then it would be resolved by replace the value of the "id" property value from the instance object. +
+ +
+ If the value of the "id" property was "45", the expanded URI would be: + + + +
+ + If matching braces are found with the string "@" (no quotes) between the braces, then the + actual instance value SHOULD be used to replace the braces, rather than a property value. + This should only be used in situations where the instance is a scalar (string, + boolean, or number), and not for objects or arrays. +
+
+ +
+ + The value of the "rel" property indicates the name of the + relation to the target resource. The relation to the target SHOULD be interpreted as specifically from the instance object that the schema (or sub-schema) applies to, not just the top level resource that contains the object within its hierarchy. If a resource JSON representation contains a sub object with a property interpreted as a link, that sub-object holds the relation with the target. A relation to target from the top level resource MUST be indicated with the schema describing the top level JSON representation. + + + + Relationship definitions SHOULD NOT be media type dependent, and users are encouraged to utilize existing accepted relation definitions, including those in existing relation registries (see RFC 4287). However, we define these relations here for clarity of normative interpretation within the context of JSON hyper schema defined relations: + + + + If the relation value is "self", when this property is encountered in + the instance object, the object represents a resource and the instance object is + treated as a full representation of the target resource identified by + the specified URI. + + + + This indicates that the target of the link is the full representation for the instance object. The object that contains this link possibly may not be the full representation. + + + + This indicates the target of the link is the schema for the instance object. This MAY be used to specifically denote the schemas of objects within a JSON object hierarchy, facilitating polymorphic type data structures. + + + + This relation indicates that the target of the link + SHOULD be treated as the root or the body of the representation for the + purposes of user agent interaction or fragment resolution. All other + properties of the instance objects can be regarded as meta-data + descriptions for the data. + + + + + + The following relations are applicable for schemas (the schema as the "from" resource in the relation): + + + This indicates the target resource that represents collection of instances of a schema. + This indicates a target to use for creating new instances of a schema. This link definition SHOULD be a submission link with a non-safe method (like POST). + + + + +
+ For example, if a schema is defined: + + + +
+ +
+ And if a collection of instance resource's JSON representation was retrieved: + + + +
+ + This would indicate that for the first item in the collection, its own + (self) URI would resolve to "/Resource/thing" and the first item's "up" + relation SHOULD be resolved to the resource at "/Resource/parent". + The "children" collection would be located at "/Resource/?upId=thing". +
+
+ +
+ This property value is a schema that defines the expected structure of the JSON representation of the target of the link. +
+ +
+ + The following properties also apply to link definition objects, and + provide functionality analogous to HTML forms, in providing a + means for submitting extra (often user supplied) information to send to a server. + + +
+ + This attribute defines which method can be used to access the target resource. + In an HTTP environment, this would be "GET" or "POST" (other HTTP methods + such as "PUT" and "DELETE" have semantics that are clearly implied by + accessed resources, and do not need to be defined here). + This defaults to "GET". + +
+ +
+ + If present, this property indicates a query media type format that the server + supports for querying or posting to the collection of instances at the target + resource. The query can be + suffixed to the target URI to query the collection with + property-based constraints on the resources that SHOULD be returned from + the server or used to post data to the resource (depending on the method). + +
+ For example, with the following schema: + + + + This indicates that the client can query the server for instances that have a specific name. +
+ +
+ For example: + + + +
+ + If no enctype or method is specified, only the single URI specified by + the href property is defined. If the method is POST, "application/json" is + the default media type. +
+
+ +
+ + This attribute contains a schema which defines the acceptable structure of the submitted + request (for a GET request, this schema would define the properties for the query string + and for a POST request, this would define the body). + +
+
+
+
+ +
+ + This property indicates the fragment resolution protocol to use for + resolving fragment identifiers in URIs within the instance + representations. This applies to the instance object URIs and all + children of the instance object's URIs. The default fragment resolution + protocol is "slash-delimited", which is defined below. Other fragment + resolution protocols MAY be used, but are not defined in this document. + + + + The fragment identifier is based on RFC 2396, Sec 5, and defines the + mechanism for resolving references to entities within a document. + + +
+ + With the slash-delimited fragment resolution protocol, the fragment + identifier is interpreted as a series of property reference tokens that start with and + are delimited by the "/" character (\x2F). Each property reference token + is a series of unreserved or escaped URI characters. Each property + reference token SHOULD be interpreted, starting from the beginning of + the fragment identifier, as a path reference in the target JSON + structure. The final target value of the fragment can be determined by + starting with the root of the JSON structure from the representation of + the resource identified by the pre-fragment URI. If the target is a JSON + object, then the new target is the value of the property with the name + identified by the next property reference token in the fragment. If the + target is a JSON array, then the target is determined by finding the + item in array the array with the index defined by the next property + reference token (which MUST be a number). The target is successively + updated for each property reference token, until the entire fragment has + been traversed. + + + + Property names SHOULD be URI-encoded. In particular, any "/" in a + property name MUST be encoded to avoid being interpreted as a property + delimiter. + + + +
+ For example, for the following JSON representation: + + + +
+ +
+ The following fragment identifiers would be resolved: + + + +
+
+
+ +
+ + The dot-delimited fragment resolution protocol is the same as + slash-delimited fragment resolution protocol except that the "." character + (\x2E) is used as the delimiter between property names (instead of "/") and + the path does not need to start with a ".". For example, #.foo and #foo are a valid fragment + identifiers for referencing the value of the foo propery. + +
+
+ +
+ This attribute indicates that the instance property SHOULD NOT be changed. Attempts by a user agent to modify the value of this property are expected to be rejected by a server. +
+ +
+ If the instance property value is a string, this attribute defines that the string SHOULD be interpreted as binary data and decoded using the encoding named by this schema property. RFC 2045, Sec 6.1 lists the possible values for this property. +
+ +
+ + This attribute is a URI that defines what the instance's URI MUST start with in order to validate. + The value of the "pathStart" attribute MUST be resolved as per RFC 3986, Sec 5, + and is relative to the instance's URI. + + + + When multiple schemas have been referenced for an instance, the user agent + can determine if this schema is applicable for a particular instance by + determining if the URI of the instance begins with the the value of the "pathStart" + attribute. If the URI of the instance does not start with this URI, + or if another schema specifies a starting URI that is longer and also matches the + instance, this schema SHOULD NOT be applied to the instance. Any schema + that does not have a pathStart attribute SHOULD be considered applicable + to all the instances for which it is referenced. + +
+ +
+ This attribute defines the media type of the instance representations that this schema is defining. +
+
+ +
+ + This specification is a sub-type of the JSON format, and + consequently the security considerations are generally the same as RFC 4627. + However, an additional issue is that when link relation of "self" + is used to denote a full representation of an object, the user agent + SHOULD NOT consider the representation to be the authoritative representation + of the resource denoted by the target URI if the target URI is not + equivalent to or a sub-path of the the URI used to request the resource + representation which contains the target URI with the "self" link. + +
+ For example, if a hyper schema was defined: + + + +
+ +
+ And a resource was requested from somesite.com: + + + +
+ +
+ With a response of: + + + +
+
+
+ +
+ The proposed MIME media type for JSON Schema is "application/schema+json". + Type name: application + Subtype name: schema+json + Required parameters: profile + + The value of the profile parameter SHOULD be a URI (relative or absolute) that + refers to the schema used to define the structure of this structure (the + meta-schema). Normally the value would be http://json-schema.org/draft-03/hyper-schema, + but it is allowable to use other schemas that extend the hyper schema's meta- + schema. + + Optional parameters: pretty + The value of the pretty parameter MAY be true or false to indicate if additional whitespace has been included to make the JSON representation easier to read. + +
+ + This registry is maintained by IANA per RFC 4287 and this specification adds + four values: "full", "create", "instances", "root". New + assignments are subject to IESG Approval, as outlined in RFC 5226. + Requests should be made by email to IANA, which will then forward the + request to the IESG, requesting approval. + +
+
+
+ + + + + &rfc2045; + &rfc2119; + &rfc2396; + &rfc3339; + &rfc3986; + &rfc4287; + + + &rfc2616; + &rfc4627; + &rfc5226; + &iddiscovery; + &uritemplate; + &linkheader; + &html401; + &css21; + + +
+ + + + + Added example and verbiage to "extends" attribute. + Defined slash-delimited to use a leading slash. + Made "root" a relation instead of an attribute. + Removed address values, and MIME media type from format to reduce confusion (mediaType already exists, so it can be used for MIME types). + Added more explanation of nullability. + Removed "alternate" attribute. + Upper cased many normative usages of must, may, and should. + Replaced the link submission "properties" attribute to "schema" attribute. + Replaced "optional" attribute with "required" attribute. + Replaced "maximumCanEqual" attribute with "exclusiveMaximum" attribute. + Replaced "minimumCanEqual" attribute with "exclusiveMinimum" attribute. + Replaced "requires" attribute with "dependencies" attribute. + Moved "contentEncoding" attribute to hyper schema. + Added "additionalItems" attribute. + Added "id" attribute. + Switched self-referencing variable substitution from "-this" to "@" to align with reserved characters in URI template. + Added "patternProperties" attribute. + Schema URIs are now namespace versioned. + Added "$ref" and "$schema" attributes. + + + + + + Replaced "maxDecimal" attribute with "divisibleBy" attribute. + Added slash-delimited fragment resolution protocol and made it the default. + Added language about using links outside of schemas by referencing its normative URI. + Added "uniqueItems" attribute. + Added "targetSchema" attribute to link description object. + + + + + + Fixed category and updates from template. + + + + + + Initial draft. + + + + +
+ +
+ + + Should we give a preference to MIME headers over Link headers (or only use one)? + Should "root" be a MIME parameter? + Should "format" be renamed to "mediaType" or "contentType" to reflect the usage MIME media types that are allowed? + How should dates be handled? + + +
+
+
diff --git a/node_modules/json-schema/draft-zyp-json-schema-04.xml b/node_modules/json-schema/draft-zyp-json-schema-04.xml index f9c1ea5a..8ede6bf9 100644 --- a/node_modules/json-schema/draft-zyp-json-schema-04.xml +++ b/node_modules/json-schema/draft-zyp-json-schema-04.xml @@ -1,1072 +1,1072 @@ - - - - - - - - - - - - - - -]> - - - - - - - - - A JSON Media Type for Describing the Structure and Meaning of JSON Documents - - - SitePen (USA) -
- - 530 Lytton Avenue - Palo Alto, CA 94301 - USA - - +1 650 968 8787 - kris@sitepen.com -
-
- - -
- - - Calgary, AB - Canada - - gary.court@gmail.com -
-
- - - Internet Engineering Task Force - JSON - Schema - JavaScript - Object - Notation - Hyper Schema - Hypermedia - - - - JSON (JavaScript Object Notation) Schema defines the media type "application/schema+json", - a JSON based format for defining the structure of JSON data. JSON Schema provides a contract for what JSON - data is required for a given application and how to interact with it. JSON - Schema is intended to define validation, documentation, hyperlink - navigation, and interaction control of JSON data. - - -
- - -
- - JSON (JavaScript Object Notation) Schema is a JSON media type for defining - the structure of JSON data. JSON Schema provides a contract for what JSON - data is required for a given application and how to interact with it. JSON - Schema is intended to define validation, documentation, hyperlink - navigation, and interaction control of JSON data. - -
- -
- - - - The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", - "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be - interpreted as described in RFC 2119. - - - - The terms "JSON", "JSON text", "JSON value", "member", "element", "object", - "array", "number", "string", "boolean", "true", "false", and "null" in this - document are to be interpreted as defined in RFC 4627. - - - - This specification also uses the following defined terms: - - - A JSON Schema object. - Equivalent to "JSON value" as defined in RFC 4627. - Equivalent to "member" as defined in RFC 4627. - Equivalent to "element" as defined in RFC 4627. - A property of a JSON Schema object. - - -
- -
- - JSON Schema defines the media type "application/schema+json" for - describing the structure of JSON text. JSON Schemas are also written in JSON and includes facilities - for describing the structure of JSON in terms of - allowable values, descriptions, and interpreting relations with other resources. - - - This document is organized into several separate definitions. The first - definition is the core schema specification. This definition is primary - concerned with describing a JSON structure and specifying valid elements - in the structure. The second definition is the Hyper Schema specification - which is intended to define elements in a structure that can be interpreted as - hyperlinks. - Hyper Schema builds on JSON Schema to describe the hyperlink structure of - JSON values. This allows user agents to be able to successfully navigate - documents containing JSON based on their schemas. - - - Cumulatively JSON Schema acts as meta-JSON that can be used to define the - required type and constraints on JSON values, as well as define the meaning - of the JSON values for the purpose of describing a resource and determining - hyperlinks within the representation. - -
- An example JSON Schema that describes products might look like: - - - - - This schema defines the properties of the instance, - the required properties (id, name, and price), as well as an optional - property (tags). This also defines the link relations of the instance. - -
- -
- - The JSON Schema media type does not attempt to dictate the structure of JSON - values that contain data, but rather provides a separate format - for flexibly communicating how a JSON value should be - interpreted and validated, such that user agents can properly understand - acceptable structures and extrapolate hyperlink information - from the JSON. It is acknowledged that JSON values come - in a variety of structures, and JSON is unique in that the structure - of stored data structures often prescribes a non-ambiguous definite - JSON representation. Attempting to force a specific structure is generally - not viable, and therefore JSON Schema allows for a great flexibility - in the structure of the JSON data that it describes. - - - This specification is protocol agnostic. - The underlying protocol (such as HTTP) should sufficiently define the - semantics of the client-server interface, the retrieval of resource - representations linked to by JSON representations, and modification of - those resources. The goal of this - format is to sufficiently describe JSON structures such that one can - utilize existing information available in existing JSON - representations from a large variety of services that leverage a representational state transfer - architecture using existing protocols. - -
-
- -
- - JSON values are correlated to their schema by the "describedby" - relation, where the schema is the target of the relation. - JSON values MUST be of the "application/json" media type or - any other subtype. Consequently, dictating how a JSON value should - specify the relation to the schema is beyond the normative scope - of this document since this document specifically defines the JSON - Schema media type, and no other. It is RECOMMNENDED that JSON values - specify their schema so that user agents can interpret the instance - and retain the self-descriptive characteristics. This avoides the need for out-of-band information about - instance data. Two approaches are recommended for declaring the - relation to the schema that describes the meaning of a JSON instance's (or collection - of instances) structure. A MIME type parameter named - "profile" or a relation of "describedby" (which could be specified by a Link header) may be used: - -
- - - -
- - or if the content is being transferred by a protocol (such as HTTP) that - provides headers, a Link header can be used: - -
- -; rel="describedby" -]]> - -
- - Instances MAY specify multiple schemas, to indicate all the schemas that - are applicable to the data, and the data SHOULD be valid by all the schemas. - The instance data MAY have multiple schemas - that it is described by (the instance data SHOULD be valid for those schemas). - Or if the document is a collection of instances, the collection MAY contain - instances from different schemas. The mechanism for referencing a schema is - determined by the media type of the instance (if it provides a method for - referencing schemas). -
- -
- - JSON Schemas can themselves be described using JSON Schemas. - A self-describing JSON Schema for the core JSON Schema can - be found at http://json-schema.org/schema for the latest version or - http://json-schema.org/draft-04/schema for the draft-04 version. The hyper schema - self-description can be found at http://json-schema.org/hyper-schema - or http://json-schema.org/draft-04/hyper-schema. All schemas - used within a protocol with a media type specified SHOULD include a MIME parameter that refers to the self-descriptive - hyper schema or another schema that extends this hyper schema: - -
- - - -
-
-
-
- -
- - A JSON Schema is a JSON object that defines various attributes - (including usage and valid values) of a JSON value. JSON - Schema has recursive capabilities; there are a number of elements - in the structure that allow for nested JSON Schemas. - - -
- An example JSON Schema could look like: - - - -
- - - A JSON Schema object MAY have any of the following optional properties: - - - - - -
- - This attribute defines what the primitive type or the schema of the instance MUST be in order to validate. - This attribute can take one of two forms: - - - - A string indicating a primitive or simple type. The string MUST be one of the following values: - - - Instance MUST be an object. - Instance MUST be an array. - Instance MUST be a string. - Instance MUST be a number, including floating point numbers. - Instance MUST be the JSON literal "true" or "false". - Instance MUST be the JSON literal "null". Note that without this type, null values are not allowed. - Instance MAY be of any type, including null. - - - - - An array of one or more simple or schema types. - The instance value is valid if it is of the same type as one of the simple types, or valid by one of the schemas, in the array. - - - - If this attribute is not specified, then all value types are accepted. - - -
- For example, a schema that defines if an instance can be a string or a number would be: - - -
-
- -
- - This attribute is an object with properties that specify the schemas for the properties of the instance object. - In this attribute's object, each property value MUST be a schema. - When the instance value is an object, the value of the instance's properties MUST be valid according to the schemas with the same property names specified in this attribute. - Objects are unordered, so therefore the order of the instance properties or attribute properties MUST NOT determine validation success. - -
- -
- - This attribute is an object that defines the schema for a set of property names of an object instance. - The name of each property of this attribute's object is a regular expression pattern in the ECMA 262/Perl 5 format, while the value is a schema. - If the pattern matches the name of a property on the instance object, the value of the instance's property MUST be valid against the pattern name's schema value. - -
- -
- This attribute specifies how any instance property that is not explicitly defined by either the "properties" or "patternProperties" attributes (hereafter referred to as "additional properties") is handled. If specified, the value MUST be a schema or a boolean. - If a schema is provided, then all additional properties MUST be valid according to the schema. - If false is provided, then no additional properties are allowed. - The default value is an empty schema, which allows any value for additional properties. -
- -
- This attribute provides the allowed items in an array instance. If specified, this attribute MUST be a schema or an array of schemas. - When this attribute value is a schema and the instance value is an array, then all the items in the array MUST be valid according to the schema. - When this attribute value is an array of schemas and the instance value is an array, each position in the instance array MUST be valid according to the schema in the corresponding position for this array. This called tuple typing. When tuple typing is used, additional items are allowed, disallowed, or constrained by the "additionalItems" attribute the same way as "additionalProperties" for objects is. -
- -
- This attribute specifies how any item in the array instance that is not explicitly defined by "items" (hereafter referred to as "additional items") is handled. If specified, the value MUST be a schema or a boolean. - If a schema is provided: - - If the "items" attribute is unspecified, then all items in the array instance must be valid against this schema. - If the "items" attribute is a schema, then this attribute is ignored. - If the "items" attribute is an array (during tuple typing), then any additional items MUST be valid against this schema. - - - If false is provided, then any additional items in the array are not allowed. - The default value is an empty schema, which allows any value for additional items. -
- -
- This attribute is an array of strings that defines all the property names that must exist on the object instance. -
- -
- This attribute is an object that specifies the requirements of a property on an object instance. If an object instance has a property with the same name as a property in this attribute's object, then the instance must be valid against the attribute's property value (hereafter referred to as the "dependency value"). - - The dependency value can take one of two forms: - - - - If the dependency value is a string, then the instance object MUST have a property with the same name as the dependency value. - If the dependency value is an array of strings, then the instance object MUST have a property with the same name as each string in the dependency value's array. - - - If the dependency value is a schema, then the instance object MUST be valid against the schema. - - - -
- -
- This attribute defines the minimum value of the instance property when the type of the instance value is a number. -
- -
- This attribute defines the maximum value of the instance property when the type of the instance value is a number. -
- -
- This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "minimum" attribute. This is false by default, meaning the instance value can be greater then or equal to the minimum value. -
- -
- This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "maximum" attribute. This is false by default, meaning the instance value can be less then or equal to the maximum value. -
- -
- This attribute defines the minimum number of values in an array when the array is the instance value. -
- -
- This attribute defines the maximum number of values in an array when the array is the instance value. -
- -
- This attribute defines the minimum number of properties required on an object instance. -
- -
- This attribute defines the maximum number of properties the object instance can have. -
- -
- This attribute indicates that all items in an array instance MUST be unique (contains no two identical values). - - Two instance are consider equal if they are both of the same type and: - - - are null; or - are booleans/numbers/strings and have the same value; or - are arrays, contains the same number of items, and each item in the array is equal to the item at the corresponding index in the other array; or - are objects, contains the same property names, and each property in the object is equal to the corresponding property in the other object. - - -
- -
- When the instance value is a string, this provides a regular expression that a string instance MUST match in order to be valid. Regular expressions SHOULD follow the regular expression specification from ECMA 262/Perl 5 -
- -
- When the instance value is a string, this defines the minimum length of the string. -
- -
- When the instance value is a string, this defines the maximum length of the string. -
- -
- This provides an enumeration of all possible values that are valid for the instance property. This MUST be an array, and each item in the array represents a possible value for the instance value. If this attribute is defined, the instance value MUST be one of the values in the array in order for the schema to be valid. Comparison of enum values uses the same algorithm as defined in "uniqueItems". -
- -
- This attribute defines the default value of the instance when the instance is undefined. -
- -
- This attribute is a string that provides a short description of the instance property. -
- -
- This attribute is a string that provides a full description of the of purpose the instance property. -
- -
- This attribute defines what value the number instance must be divisible by with no remainder (the result of the division must be an integer.) The value of this attribute SHOULD NOT be 0. -
- -
- This attribute takes the same values as the "type" attribute, however if the instance matches the type or if this value is an array and the instance matches any type or schema in the array, then this instance is not valid. -
- -
- The value of this property MUST be another schema which will provide a base schema which the current schema will inherit from. The inheritance rules are such that any instance that is valid according to the current schema MUST be valid according to the referenced schema. This MAY also be an array, in which case, the instance MUST be valid for all the schemas in the array. A schema that extends another schema MAY define additional attributes, constrain existing attributes, or add other constraints. - - Conceptually, the behavior of extends can be seen as validating an - instance against all constraints in the extending schema as well as - the extended schema(s). More optimized implementations that merge - schemas are possible, but are not required. Some examples of using "extends": - -
- - - -
- -
- - - -
-
-
- -
- - This attribute defines the current URI of this schema (this attribute is - effectively a "self" link). This URI MAY be relative or absolute. If - the URI is relative it is resolved against the current URI of the parent - schema it is contained in. If this schema is not contained in any - parent schema, the current URI of the parent schema is held to be the - URI under which this schema was addressed. If id is missing, the current URI of a schema is - defined to be that of the parent schema. The current URI of the schema - is also used to construct relative references such as for $ref. - -
- -
- - This attribute defines a URI of a schema that contains the full representation of this schema. - When a validator encounters this attribute, it SHOULD replace the current schema with the schema referenced by the value's URI (if known and available) and re-validate the instance. - This URI MAY be relative or absolute, and relative URIs SHOULD be resolved against the URI of the current schema. - -
- -
- - This attribute defines a URI of a JSON Schema that is the schema of the current schema. - When this attribute is defined, a validator SHOULD use the schema referenced by the value's URI (if known and available) when resolving Hyper Schemalinks. - - - - A validator MAY use this attribute's value to determine which version of JSON Schema the current schema is written in, and provide the appropriate validation features and behavior. - Therefore, it is RECOMMENDED that all schema authors include this attribute in their schemas to prevent conflicts with future JSON Schema specification changes. - -
-
- -
- - The following attributes are specified in addition to those - attributes that already provided by the core schema with the specific - purpose of informing user agents of relations between resources based - on JSON data. Just as with JSON - schema attributes, all the attributes in hyper schemas are optional. - Therefore, an empty object is a valid (non-informative) schema, and - essentially describes plain JSON (no constraints on the structures). - Addition of attributes provides additive information for user agents. - - -
- - The value of the links property MUST be an array, where each item - in the array is a link description object which describes the link - relations of the instances. - - - - -
- - A link description object is used to describe link relations. In - the context of a schema, it defines the link relations of the - instances of the schema, and can be parameterized by the instance - values. The link description format can be used without JSON Schema, - and use of this format can - be declared by referencing the normative link description - schema as the the schema for the data structure that uses the - links. The URI of the normative link description schema is: - http://json-schema.org/links (latest version) or - http://json-schema.org/draft-04/links (draft-04 version). - - -
- - The value of the "href" link description property - indicates the target URI of the related resource. The value - of the instance property SHOULD be resolved as a URI-Reference per RFC 3986 - and MAY be a relative URI. The base URI to be used for relative resolution - SHOULD be the URI used to retrieve the instance object (not the schema) - when used within a schema. Also, when links are used within a schema, the URI - SHOULD be parametrized by the property values of the instance - object, if property values exist for the corresponding variables - in the template (otherwise they MAY be provided from alternate sources, like user input). - - - - Instance property values SHOULD be substituted into the URIs where - matching braces ('{', '}') are found surrounding zero or more characters, - creating an expanded URI. Instance property value substitutions are resolved - by using the text between the braces to denote the property name - from the instance to get the value to substitute. - -
- For example, if an href value is defined: - - - - Then it would be resolved by replace the value of the "id" property value from the instance object. -
- -
- If the value of the "id" property was "45", the expanded URI would be: - - - -
- - If matching braces are found with the string "@" (no quotes) between the braces, then the - actual instance value SHOULD be used to replace the braces, rather than a property value. - This should only be used in situations where the instance is a scalar (string, - boolean, or number), and not for objects or arrays. -
-
- -
- - The value of the "rel" property indicates the name of the - relation to the target resource. The relation to the target SHOULD be interpreted as specifically from the instance object that the schema (or sub-schema) applies to, not just the top level resource that contains the object within its hierarchy. If a resource JSON representation contains a sub object with a property interpreted as a link, that sub-object holds the relation with the target. A relation to target from the top level resource MUST be indicated with the schema describing the top level JSON representation. - - - - Relationship definitions SHOULD NOT be media type dependent, and users are encouraged to utilize existing accepted relation definitions, including those in existing relation registries (see RFC 4287). However, we define these relations here for clarity of normative interpretation within the context of JSON hyper schema defined relations: - - - - If the relation value is "self", when this property is encountered in - the instance object, the object represents a resource and the instance object is - treated as a full representation of the target resource identified by - the specified URI. - - - - This indicates that the target of the link is the full representation for the instance object. The object that contains this link possibly may not be the full representation. - - - - This indicates the target of the link is the schema for the instance object. This MAY be used to specifically denote the schemas of objects within a JSON object hierarchy, facilitating polymorphic type data structures. - - - - This relation indicates that the target of the link - SHOULD be treated as the root or the body of the representation for the - purposes of user agent interaction or fragment resolution. All other - properties of the instance objects can be regarded as meta-data - descriptions for the data. - - - - - - The following relations are applicable for schemas (the schema as the "from" resource in the relation): - - - This indicates the target resource that represents collection of instances of a schema. - This indicates a target to use for creating new instances of a schema. This link definition SHOULD be a submission link with a non-safe method (like POST). - - - - -
- For example, if a schema is defined: - - - -
- -
- And if a collection of instance resource's JSON representation was retrieved: - - - -
- - This would indicate that for the first item in the collection, its own - (self) URI would resolve to "/Resource/thing" and the first item's "up" - relation SHOULD be resolved to the resource at "/Resource/parent". - The "children" collection would be located at "/Resource/?upId=thing". -
-
- -
- This property value is a string that defines the templating language used in the "href" attribute. If no templating language is defined, then the default Link Description Object templating langauge is used. -
- -
- This property value is a schema that defines the expected structure of the JSON representation of the target of the link. -
- -
- - The following properties also apply to link definition objects, and - provide functionality analogous to HTML forms, in providing a - means for submitting extra (often user supplied) information to send to a server. - - -
- - This attribute defines which method can be used to access the target resource. - In an HTTP environment, this would be "GET" or "POST" (other HTTP methods - such as "PUT" and "DELETE" have semantics that are clearly implied by - accessed resources, and do not need to be defined here). - This defaults to "GET". - -
- -
- - If present, this property indicates a query media type format that the server - supports for querying or posting to the collection of instances at the target - resource. The query can be - suffixed to the target URI to query the collection with - property-based constraints on the resources that SHOULD be returned from - the server or used to post data to the resource (depending on the method). - -
- For example, with the following schema: - - - - This indicates that the client can query the server for instances that have a specific name. -
- -
- For example: - - - -
- - If no enctype or method is specified, only the single URI specified by - the href property is defined. If the method is POST, "application/json" is - the default media type. -
-
- -
- - This attribute contains a schema which defines the acceptable structure of the submitted - request (for a GET request, this schema would define the properties for the query string - and for a POST request, this would define the body). - -
-
-
-
- -
- - This property indicates the fragment resolution protocol to use for - resolving fragment identifiers in URIs within the instance - representations. This applies to the instance object URIs and all - children of the instance object's URIs. The default fragment resolution - protocol is "json-pointer", which is defined below. Other fragment - resolution protocols MAY be used, but are not defined in this document. - - - - The fragment identifier is based on RFC 3986, Sec 5, and defines the - mechanism for resolving references to entities within a document. - - -
- The "json-pointer" fragment resolution protocol uses a JSON Pointer to resolve fragment identifiers in URIs within instance representations. -
-
- - - -
- This attribute indicates that the instance value SHOULD NOT be changed. Attempts by a user agent to modify the value of this property are expected to be rejected by a server. -
- -
- If the instance property value is a string, this attribute defines that the string SHOULD be interpreted as binary data and decoded using the encoding named by this schema property. RFC 2045, Sec 6.1 lists the possible values for this property. -
- -
- - This attribute is a URI that defines what the instance's URI MUST start with in order to validate. - The value of the "pathStart" attribute MUST be resolved as per RFC 3986, Sec 5, - and is relative to the instance's URI. - - - - When multiple schemas have been referenced for an instance, the user agent - can determine if this schema is applicable for a particular instance by - determining if the URI of the instance begins with the the value of the "pathStart" - attribute. If the URI of the instance does not start with this URI, - or if another schema specifies a starting URI that is longer and also matches the - instance, this schema SHOULD NOT be applied to the instance. Any schema - that does not have a pathStart attribute SHOULD be considered applicable - to all the instances for which it is referenced. - -
- -
- This attribute defines the media type of the instance representations that this schema is defining. -
-
- -
- - This specification is a sub-type of the JSON format, and - consequently the security considerations are generally the same as RFC 4627. - However, an additional issue is that when link relation of "self" - is used to denote a full representation of an object, the user agent - SHOULD NOT consider the representation to be the authoritative representation - of the resource denoted by the target URI if the target URI is not - equivalent to or a sub-path of the the URI used to request the resource - representation which contains the target URI with the "self" link. - -
- For example, if a hyper schema was defined: - - - -
- -
- And a resource was requested from somesite.com: - - - -
- -
- With a response of: - - - -
-
-
- -
- The proposed MIME media type for JSON Schema is "application/schema+json". - Type name: application - Subtype name: schema+json - Required parameters: profile - - The value of the profile parameter SHOULD be a URI (relative or absolute) that - refers to the schema used to define the structure of this structure (the - meta-schema). Normally the value would be http://json-schema.org/draft-04/hyper-schema, - but it is allowable to use other schemas that extend the hyper schema's meta- - schema. - - Optional parameters: pretty - The value of the pretty parameter MAY be true or false to indicate if additional whitespace has been included to make the JSON representation easier to read. - -
- - This registry is maintained by IANA per RFC 4287 and this specification adds - four values: "full", "create", "instances", "root". New - assignments are subject to IESG Approval, as outlined in RFC 5226. - Requests should be made by email to IANA, which will then forward the - request to the IESG, requesting approval. - -
-
-
- - - - - &rfc2045; - &rfc2119; - &rfc3339; - &rfc3986; - &rfc4287; - - - JSON Pointer - - ForgeRock US, Inc. - - - SitePen (USA) - - - - - - - &rfc2616; - &rfc4627; - &rfc5226; - &iddiscovery; - &uritemplate; - &linkheader; - &html401; - &css21; - - -
- - - - - Changed "required" attribute to an array of strings. - Removed "format" attribute. - Added "minProperties" and "maxProperties" attributes. - Replaced "slash-delimited" fragment resolution with "json-pointer". - Added "template" LDO attribute. - Removed irrelevant "Open Issues" section. - Merged Conventions and Terminology sections. - Defined terms used in specification. - Removed "integer" type in favor of {"type":"number", "divisibleBy":1}. - Restricted "type" to only the core JSON types. - Improved wording of many sections. - - - - - - Added example and verbiage to "extends" attribute. - Defined slash-delimited to use a leading slash. - Made "root" a relation instead of an attribute. - Removed address values, and MIME media type from format to reduce confusion (mediaType already exists, so it can be used for MIME types). - Added more explanation of nullability. - Removed "alternate" attribute. - Upper cased many normative usages of must, may, and should. - Replaced the link submission "properties" attribute to "schema" attribute. - Replaced "optional" attribute with "required" attribute. - Replaced "maximumCanEqual" attribute with "exclusiveMaximum" attribute. - Replaced "minimumCanEqual" attribute with "exclusiveMinimum" attribute. - Replaced "requires" attribute with "dependencies" attribute. - Moved "contentEncoding" attribute to hyper schema. - Added "additionalItems" attribute. - Added "id" attribute. - Switched self-referencing variable substitution from "-this" to "@" to align with reserved characters in URI template. - Added "patternProperties" attribute. - Schema URIs are now namespace versioned. - Added "$ref" and "$schema" attributes. - - - - - - Replaced "maxDecimal" attribute with "divisibleBy" attribute. - Added slash-delimited fragment resolution protocol and made it the default. - Added language about using links outside of schemas by referencing its normative URI. - Added "uniqueItems" attribute. - Added "targetSchema" attribute to link description object. - - - - - - Fixed category and updates from template. - - - - - - Initial draft. - - - - -
-
-
+ + + + + + + + + + + + + + +]> + + + + + + + + + A JSON Media Type for Describing the Structure and Meaning of JSON Documents + + + SitePen (USA) +
+ + 530 Lytton Avenue + Palo Alto, CA 94301 + USA + + +1 650 968 8787 + kris@sitepen.com +
+
+ + +
+ + + Calgary, AB + Canada + + gary.court@gmail.com +
+
+ + + Internet Engineering Task Force + JSON + Schema + JavaScript + Object + Notation + Hyper Schema + Hypermedia + + + + JSON (JavaScript Object Notation) Schema defines the media type "application/schema+json", + a JSON based format for defining the structure of JSON data. JSON Schema provides a contract for what JSON + data is required for a given application and how to interact with it. JSON + Schema is intended to define validation, documentation, hyperlink + navigation, and interaction control of JSON data. + + +
+ + +
+ + JSON (JavaScript Object Notation) Schema is a JSON media type for defining + the structure of JSON data. JSON Schema provides a contract for what JSON + data is required for a given application and how to interact with it. JSON + Schema is intended to define validation, documentation, hyperlink + navigation, and interaction control of JSON data. + +
+ +
+ + + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", + "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be + interpreted as described in RFC 2119. + + + + The terms "JSON", "JSON text", "JSON value", "member", "element", "object", + "array", "number", "string", "boolean", "true", "false", and "null" in this + document are to be interpreted as defined in RFC 4627. + + + + This specification also uses the following defined terms: + + + A JSON Schema object. + Equivalent to "JSON value" as defined in RFC 4627. + Equivalent to "member" as defined in RFC 4627. + Equivalent to "element" as defined in RFC 4627. + A property of a JSON Schema object. + + +
+ +
+ + JSON Schema defines the media type "application/schema+json" for + describing the structure of JSON text. JSON Schemas are also written in JSON and includes facilities + for describing the structure of JSON in terms of + allowable values, descriptions, and interpreting relations with other resources. + + + This document is organized into several separate definitions. The first + definition is the core schema specification. This definition is primary + concerned with describing a JSON structure and specifying valid elements + in the structure. The second definition is the Hyper Schema specification + which is intended to define elements in a structure that can be interpreted as + hyperlinks. + Hyper Schema builds on JSON Schema to describe the hyperlink structure of + JSON values. This allows user agents to be able to successfully navigate + documents containing JSON based on their schemas. + + + Cumulatively JSON Schema acts as meta-JSON that can be used to define the + required type and constraints on JSON values, as well as define the meaning + of the JSON values for the purpose of describing a resource and determining + hyperlinks within the representation. + +
+ An example JSON Schema that describes products might look like: + + + + + This schema defines the properties of the instance, + the required properties (id, name, and price), as well as an optional + property (tags). This also defines the link relations of the instance. + +
+ +
+ + The JSON Schema media type does not attempt to dictate the structure of JSON + values that contain data, but rather provides a separate format + for flexibly communicating how a JSON value should be + interpreted and validated, such that user agents can properly understand + acceptable structures and extrapolate hyperlink information + from the JSON. It is acknowledged that JSON values come + in a variety of structures, and JSON is unique in that the structure + of stored data structures often prescribes a non-ambiguous definite + JSON representation. Attempting to force a specific structure is generally + not viable, and therefore JSON Schema allows for a great flexibility + in the structure of the JSON data that it describes. + + + This specification is protocol agnostic. + The underlying protocol (such as HTTP) should sufficiently define the + semantics of the client-server interface, the retrieval of resource + representations linked to by JSON representations, and modification of + those resources. The goal of this + format is to sufficiently describe JSON structures such that one can + utilize existing information available in existing JSON + representations from a large variety of services that leverage a representational state transfer + architecture using existing protocols. + +
+
+ +
+ + JSON values are correlated to their schema by the "describedby" + relation, where the schema is the target of the relation. + JSON values MUST be of the "application/json" media type or + any other subtype. Consequently, dictating how a JSON value should + specify the relation to the schema is beyond the normative scope + of this document since this document specifically defines the JSON + Schema media type, and no other. It is RECOMMNENDED that JSON values + specify their schema so that user agents can interpret the instance + and retain the self-descriptive characteristics. This avoides the need for out-of-band information about + instance data. Two approaches are recommended for declaring the + relation to the schema that describes the meaning of a JSON instance's (or collection + of instances) structure. A MIME type parameter named + "profile" or a relation of "describedby" (which could be specified by a Link header) may be used: + +
+ + + +
+ + or if the content is being transferred by a protocol (such as HTTP) that + provides headers, a Link header can be used: + +
+ +; rel="describedby" +]]> + +
+ + Instances MAY specify multiple schemas, to indicate all the schemas that + are applicable to the data, and the data SHOULD be valid by all the schemas. + The instance data MAY have multiple schemas + that it is described by (the instance data SHOULD be valid for those schemas). + Or if the document is a collection of instances, the collection MAY contain + instances from different schemas. The mechanism for referencing a schema is + determined by the media type of the instance (if it provides a method for + referencing schemas). +
+ +
+ + JSON Schemas can themselves be described using JSON Schemas. + A self-describing JSON Schema for the core JSON Schema can + be found at http://json-schema.org/schema for the latest version or + http://json-schema.org/draft-04/schema for the draft-04 version. The hyper schema + self-description can be found at http://json-schema.org/hyper-schema + or http://json-schema.org/draft-04/hyper-schema. All schemas + used within a protocol with a media type specified SHOULD include a MIME parameter that refers to the self-descriptive + hyper schema or another schema that extends this hyper schema: + +
+ + + +
+
+
+
+ +
+ + A JSON Schema is a JSON object that defines various attributes + (including usage and valid values) of a JSON value. JSON + Schema has recursive capabilities; there are a number of elements + in the structure that allow for nested JSON Schemas. + + +
+ An example JSON Schema could look like: + + + +
+ + + A JSON Schema object MAY have any of the following optional properties: + + + + + +
+ + This attribute defines what the primitive type or the schema of the instance MUST be in order to validate. + This attribute can take one of two forms: + + + + A string indicating a primitive or simple type. The string MUST be one of the following values: + + + Instance MUST be an object. + Instance MUST be an array. + Instance MUST be a string. + Instance MUST be a number, including floating point numbers. + Instance MUST be the JSON literal "true" or "false". + Instance MUST be the JSON literal "null". Note that without this type, null values are not allowed. + Instance MAY be of any type, including null. + + + + + An array of one or more simple or schema types. + The instance value is valid if it is of the same type as one of the simple types, or valid by one of the schemas, in the array. + + + + If this attribute is not specified, then all value types are accepted. + + +
+ For example, a schema that defines if an instance can be a string or a number would be: + + +
+
+ +
+ + This attribute is an object with properties that specify the schemas for the properties of the instance object. + In this attribute's object, each property value MUST be a schema. + When the instance value is an object, the value of the instance's properties MUST be valid according to the schemas with the same property names specified in this attribute. + Objects are unordered, so therefore the order of the instance properties or attribute properties MUST NOT determine validation success. + +
+ +
+ + This attribute is an object that defines the schema for a set of property names of an object instance. + The name of each property of this attribute's object is a regular expression pattern in the ECMA 262/Perl 5 format, while the value is a schema. + If the pattern matches the name of a property on the instance object, the value of the instance's property MUST be valid against the pattern name's schema value. + +
+ +
+ This attribute specifies how any instance property that is not explicitly defined by either the "properties" or "patternProperties" attributes (hereafter referred to as "additional properties") is handled. If specified, the value MUST be a schema or a boolean. + If a schema is provided, then all additional properties MUST be valid according to the schema. + If false is provided, then no additional properties are allowed. + The default value is an empty schema, which allows any value for additional properties. +
+ +
+ This attribute provides the allowed items in an array instance. If specified, this attribute MUST be a schema or an array of schemas. + When this attribute value is a schema and the instance value is an array, then all the items in the array MUST be valid according to the schema. + When this attribute value is an array of schemas and the instance value is an array, each position in the instance array MUST be valid according to the schema in the corresponding position for this array. This called tuple typing. When tuple typing is used, additional items are allowed, disallowed, or constrained by the "additionalItems" attribute the same way as "additionalProperties" for objects is. +
+ +
+ This attribute specifies how any item in the array instance that is not explicitly defined by "items" (hereafter referred to as "additional items") is handled. If specified, the value MUST be a schema or a boolean. + If a schema is provided: + + If the "items" attribute is unspecified, then all items in the array instance must be valid against this schema. + If the "items" attribute is a schema, then this attribute is ignored. + If the "items" attribute is an array (during tuple typing), then any additional items MUST be valid against this schema. + + + If false is provided, then any additional items in the array are not allowed. + The default value is an empty schema, which allows any value for additional items. +
+ +
+ This attribute is an array of strings that defines all the property names that must exist on the object instance. +
+ +
+ This attribute is an object that specifies the requirements of a property on an object instance. If an object instance has a property with the same name as a property in this attribute's object, then the instance must be valid against the attribute's property value (hereafter referred to as the "dependency value"). + + The dependency value can take one of two forms: + + + + If the dependency value is a string, then the instance object MUST have a property with the same name as the dependency value. + If the dependency value is an array of strings, then the instance object MUST have a property with the same name as each string in the dependency value's array. + + + If the dependency value is a schema, then the instance object MUST be valid against the schema. + + + +
+ +
+ This attribute defines the minimum value of the instance property when the type of the instance value is a number. +
+ +
+ This attribute defines the maximum value of the instance property when the type of the instance value is a number. +
+ +
+ This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "minimum" attribute. This is false by default, meaning the instance value can be greater then or equal to the minimum value. +
+ +
+ This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "maximum" attribute. This is false by default, meaning the instance value can be less then or equal to the maximum value. +
+ +
+ This attribute defines the minimum number of values in an array when the array is the instance value. +
+ +
+ This attribute defines the maximum number of values in an array when the array is the instance value. +
+ +
+ This attribute defines the minimum number of properties required on an object instance. +
+ +
+ This attribute defines the maximum number of properties the object instance can have. +
+ +
+ This attribute indicates that all items in an array instance MUST be unique (contains no two identical values). + + Two instance are consider equal if they are both of the same type and: + + + are null; or + are booleans/numbers/strings and have the same value; or + are arrays, contains the same number of items, and each item in the array is equal to the item at the corresponding index in the other array; or + are objects, contains the same property names, and each property in the object is equal to the corresponding property in the other object. + + +
+ +
+ When the instance value is a string, this provides a regular expression that a string instance MUST match in order to be valid. Regular expressions SHOULD follow the regular expression specification from ECMA 262/Perl 5 +
+ +
+ When the instance value is a string, this defines the minimum length of the string. +
+ +
+ When the instance value is a string, this defines the maximum length of the string. +
+ +
+ This provides an enumeration of all possible values that are valid for the instance property. This MUST be an array, and each item in the array represents a possible value for the instance value. If this attribute is defined, the instance value MUST be one of the values in the array in order for the schema to be valid. Comparison of enum values uses the same algorithm as defined in "uniqueItems". +
+ +
+ This attribute defines the default value of the instance when the instance is undefined. +
+ +
+ This attribute is a string that provides a short description of the instance property. +
+ +
+ This attribute is a string that provides a full description of the of purpose the instance property. +
+ +
+ This attribute defines what value the number instance must be divisible by with no remainder (the result of the division must be an integer.) The value of this attribute SHOULD NOT be 0. +
+ +
+ This attribute takes the same values as the "type" attribute, however if the instance matches the type or if this value is an array and the instance matches any type or schema in the array, then this instance is not valid. +
+ +
+ The value of this property MUST be another schema which will provide a base schema which the current schema will inherit from. The inheritance rules are such that any instance that is valid according to the current schema MUST be valid according to the referenced schema. This MAY also be an array, in which case, the instance MUST be valid for all the schemas in the array. A schema that extends another schema MAY define additional attributes, constrain existing attributes, or add other constraints. + + Conceptually, the behavior of extends can be seen as validating an + instance against all constraints in the extending schema as well as + the extended schema(s). More optimized implementations that merge + schemas are possible, but are not required. Some examples of using "extends": + +
+ + + +
+ +
+ + + +
+
+
+ +
+ + This attribute defines the current URI of this schema (this attribute is + effectively a "self" link). This URI MAY be relative or absolute. If + the URI is relative it is resolved against the current URI of the parent + schema it is contained in. If this schema is not contained in any + parent schema, the current URI of the parent schema is held to be the + URI under which this schema was addressed. If id is missing, the current URI of a schema is + defined to be that of the parent schema. The current URI of the schema + is also used to construct relative references such as for $ref. + +
+ +
+ + This attribute defines a URI of a schema that contains the full representation of this schema. + When a validator encounters this attribute, it SHOULD replace the current schema with the schema referenced by the value's URI (if known and available) and re-validate the instance. + This URI MAY be relative or absolute, and relative URIs SHOULD be resolved against the URI of the current schema. + +
+ +
+ + This attribute defines a URI of a JSON Schema that is the schema of the current schema. + When this attribute is defined, a validator SHOULD use the schema referenced by the value's URI (if known and available) when resolving Hyper Schemalinks. + + + + A validator MAY use this attribute's value to determine which version of JSON Schema the current schema is written in, and provide the appropriate validation features and behavior. + Therefore, it is RECOMMENDED that all schema authors include this attribute in their schemas to prevent conflicts with future JSON Schema specification changes. + +
+
+ +
+ + The following attributes are specified in addition to those + attributes that already provided by the core schema with the specific + purpose of informing user agents of relations between resources based + on JSON data. Just as with JSON + schema attributes, all the attributes in hyper schemas are optional. + Therefore, an empty object is a valid (non-informative) schema, and + essentially describes plain JSON (no constraints on the structures). + Addition of attributes provides additive information for user agents. + + +
+ + The value of the links property MUST be an array, where each item + in the array is a link description object which describes the link + relations of the instances. + + + + +
+ + A link description object is used to describe link relations. In + the context of a schema, it defines the link relations of the + instances of the schema, and can be parameterized by the instance + values. The link description format can be used without JSON Schema, + and use of this format can + be declared by referencing the normative link description + schema as the the schema for the data structure that uses the + links. The URI of the normative link description schema is: + http://json-schema.org/links (latest version) or + http://json-schema.org/draft-04/links (draft-04 version). + + +
+ + The value of the "href" link description property + indicates the target URI of the related resource. The value + of the instance property SHOULD be resolved as a URI-Reference per RFC 3986 + and MAY be a relative URI. The base URI to be used for relative resolution + SHOULD be the URI used to retrieve the instance object (not the schema) + when used within a schema. Also, when links are used within a schema, the URI + SHOULD be parametrized by the property values of the instance + object, if property values exist for the corresponding variables + in the template (otherwise they MAY be provided from alternate sources, like user input). + + + + Instance property values SHOULD be substituted into the URIs where + matching braces ('{', '}') are found surrounding zero or more characters, + creating an expanded URI. Instance property value substitutions are resolved + by using the text between the braces to denote the property name + from the instance to get the value to substitute. + +
+ For example, if an href value is defined: + + + + Then it would be resolved by replace the value of the "id" property value from the instance object. +
+ +
+ If the value of the "id" property was "45", the expanded URI would be: + + + +
+ + If matching braces are found with the string "@" (no quotes) between the braces, then the + actual instance value SHOULD be used to replace the braces, rather than a property value. + This should only be used in situations where the instance is a scalar (string, + boolean, or number), and not for objects or arrays. +
+
+ +
+ + The value of the "rel" property indicates the name of the + relation to the target resource. The relation to the target SHOULD be interpreted as specifically from the instance object that the schema (or sub-schema) applies to, not just the top level resource that contains the object within its hierarchy. If a resource JSON representation contains a sub object with a property interpreted as a link, that sub-object holds the relation with the target. A relation to target from the top level resource MUST be indicated with the schema describing the top level JSON representation. + + + + Relationship definitions SHOULD NOT be media type dependent, and users are encouraged to utilize existing accepted relation definitions, including those in existing relation registries (see RFC 4287). However, we define these relations here for clarity of normative interpretation within the context of JSON hyper schema defined relations: + + + + If the relation value is "self", when this property is encountered in + the instance object, the object represents a resource and the instance object is + treated as a full representation of the target resource identified by + the specified URI. + + + + This indicates that the target of the link is the full representation for the instance object. The object that contains this link possibly may not be the full representation. + + + + This indicates the target of the link is the schema for the instance object. This MAY be used to specifically denote the schemas of objects within a JSON object hierarchy, facilitating polymorphic type data structures. + + + + This relation indicates that the target of the link + SHOULD be treated as the root or the body of the representation for the + purposes of user agent interaction or fragment resolution. All other + properties of the instance objects can be regarded as meta-data + descriptions for the data. + + + + + + The following relations are applicable for schemas (the schema as the "from" resource in the relation): + + + This indicates the target resource that represents collection of instances of a schema. + This indicates a target to use for creating new instances of a schema. This link definition SHOULD be a submission link with a non-safe method (like POST). + + + + +
+ For example, if a schema is defined: + + + +
+ +
+ And if a collection of instance resource's JSON representation was retrieved: + + + +
+ + This would indicate that for the first item in the collection, its own + (self) URI would resolve to "/Resource/thing" and the first item's "up" + relation SHOULD be resolved to the resource at "/Resource/parent". + The "children" collection would be located at "/Resource/?upId=thing". +
+
+ +
+ This property value is a string that defines the templating language used in the "href" attribute. If no templating language is defined, then the default Link Description Object templating langauge is used. +
+ +
+ This property value is a schema that defines the expected structure of the JSON representation of the target of the link. +
+ +
+ + The following properties also apply to link definition objects, and + provide functionality analogous to HTML forms, in providing a + means for submitting extra (often user supplied) information to send to a server. + + +
+ + This attribute defines which method can be used to access the target resource. + In an HTTP environment, this would be "GET" or "POST" (other HTTP methods + such as "PUT" and "DELETE" have semantics that are clearly implied by + accessed resources, and do not need to be defined here). + This defaults to "GET". + +
+ +
+ + If present, this property indicates a query media type format that the server + supports for querying or posting to the collection of instances at the target + resource. The query can be + suffixed to the target URI to query the collection with + property-based constraints on the resources that SHOULD be returned from + the server or used to post data to the resource (depending on the method). + +
+ For example, with the following schema: + + + + This indicates that the client can query the server for instances that have a specific name. +
+ +
+ For example: + + + +
+ + If no enctype or method is specified, only the single URI specified by + the href property is defined. If the method is POST, "application/json" is + the default media type. +
+
+ +
+ + This attribute contains a schema which defines the acceptable structure of the submitted + request (for a GET request, this schema would define the properties for the query string + and for a POST request, this would define the body). + +
+
+
+
+ +
+ + This property indicates the fragment resolution protocol to use for + resolving fragment identifiers in URIs within the instance + representations. This applies to the instance object URIs and all + children of the instance object's URIs. The default fragment resolution + protocol is "json-pointer", which is defined below. Other fragment + resolution protocols MAY be used, but are not defined in this document. + + + + The fragment identifier is based on RFC 3986, Sec 5, and defines the + mechanism for resolving references to entities within a document. + + +
+ The "json-pointer" fragment resolution protocol uses a JSON Pointer to resolve fragment identifiers in URIs within instance representations. +
+
+ + + +
+ This attribute indicates that the instance value SHOULD NOT be changed. Attempts by a user agent to modify the value of this property are expected to be rejected by a server. +
+ +
+ If the instance property value is a string, this attribute defines that the string SHOULD be interpreted as binary data and decoded using the encoding named by this schema property. RFC 2045, Sec 6.1 lists the possible values for this property. +
+ +
+ + This attribute is a URI that defines what the instance's URI MUST start with in order to validate. + The value of the "pathStart" attribute MUST be resolved as per RFC 3986, Sec 5, + and is relative to the instance's URI. + + + + When multiple schemas have been referenced for an instance, the user agent + can determine if this schema is applicable for a particular instance by + determining if the URI of the instance begins with the the value of the "pathStart" + attribute. If the URI of the instance does not start with this URI, + or if another schema specifies a starting URI that is longer and also matches the + instance, this schema SHOULD NOT be applied to the instance. Any schema + that does not have a pathStart attribute SHOULD be considered applicable + to all the instances for which it is referenced. + +
+ +
+ This attribute defines the media type of the instance representations that this schema is defining. +
+
+ +
+ + This specification is a sub-type of the JSON format, and + consequently the security considerations are generally the same as RFC 4627. + However, an additional issue is that when link relation of "self" + is used to denote a full representation of an object, the user agent + SHOULD NOT consider the representation to be the authoritative representation + of the resource denoted by the target URI if the target URI is not + equivalent to or a sub-path of the the URI used to request the resource + representation which contains the target URI with the "self" link. + +
+ For example, if a hyper schema was defined: + + + +
+ +
+ And a resource was requested from somesite.com: + + + +
+ +
+ With a response of: + + + +
+
+
+ +
+ The proposed MIME media type for JSON Schema is "application/schema+json". + Type name: application + Subtype name: schema+json + Required parameters: profile + + The value of the profile parameter SHOULD be a URI (relative or absolute) that + refers to the schema used to define the structure of this structure (the + meta-schema). Normally the value would be http://json-schema.org/draft-04/hyper-schema, + but it is allowable to use other schemas that extend the hyper schema's meta- + schema. + + Optional parameters: pretty + The value of the pretty parameter MAY be true or false to indicate if additional whitespace has been included to make the JSON representation easier to read. + +
+ + This registry is maintained by IANA per RFC 4287 and this specification adds + four values: "full", "create", "instances", "root". New + assignments are subject to IESG Approval, as outlined in RFC 5226. + Requests should be made by email to IANA, which will then forward the + request to the IESG, requesting approval. + +
+
+
+ + + + + &rfc2045; + &rfc2119; + &rfc3339; + &rfc3986; + &rfc4287; + + + JSON Pointer + + ForgeRock US, Inc. + + + SitePen (USA) + + + + + + + &rfc2616; + &rfc4627; + &rfc5226; + &iddiscovery; + &uritemplate; + &linkheader; + &html401; + &css21; + + +
+ + + + + Changed "required" attribute to an array of strings. + Removed "format" attribute. + Added "minProperties" and "maxProperties" attributes. + Replaced "slash-delimited" fragment resolution with "json-pointer". + Added "template" LDO attribute. + Removed irrelevant "Open Issues" section. + Merged Conventions and Terminology sections. + Defined terms used in specification. + Removed "integer" type in favor of {"type":"number", "divisibleBy":1}. + Restricted "type" to only the core JSON types. + Improved wording of many sections. + + + + + + Added example and verbiage to "extends" attribute. + Defined slash-delimited to use a leading slash. + Made "root" a relation instead of an attribute. + Removed address values, and MIME media type from format to reduce confusion (mediaType already exists, so it can be used for MIME types). + Added more explanation of nullability. + Removed "alternate" attribute. + Upper cased many normative usages of must, may, and should. + Replaced the link submission "properties" attribute to "schema" attribute. + Replaced "optional" attribute with "required" attribute. + Replaced "maximumCanEqual" attribute with "exclusiveMaximum" attribute. + Replaced "minimumCanEqual" attribute with "exclusiveMinimum" attribute. + Replaced "requires" attribute with "dependencies" attribute. + Moved "contentEncoding" attribute to hyper schema. + Added "additionalItems" attribute. + Added "id" attribute. + Switched self-referencing variable substitution from "-this" to "@" to align with reserved characters in URI template. + Added "patternProperties" attribute. + Schema URIs are now namespace versioned. + Added "$ref" and "$schema" attributes. + + + + + + Replaced "maxDecimal" attribute with "divisibleBy" attribute. + Added slash-delimited fragment resolution protocol and made it the default. + Added language about using links outside of schemas by referencing its normative URI. + Added "uniqueItems" attribute. + Added "targetSchema" attribute to link description object. + + + + + + Fixed category and updates from template. + + + + + + Initial draft. + + + + +
+
+
diff --git a/node_modules/json-schema/lib/links.js b/node_modules/json-schema/lib/links.js index 2f450ff6..8a87f02d 100644 --- a/node_modules/json-schema/lib/links.js +++ b/node_modules/json-schema/lib/links.js @@ -1,66 +1,66 @@ -/** - * JSON Schema link handler - * Copyright (c) 2007 Kris Zyp SitePen (www.sitepen.com) - * Licensed under the MIT (MIT-LICENSE.txt) license. - */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define([], function () { - return factory(); - }); - } else if (typeof module === 'object' && module.exports) { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } else { - // Browser globals - root.jsonSchemaLinks = factory(); - } -}(this, function () {// setup primitive classes to be JSON Schema types -var exports = {}; -exports.cacheLinks = true; -exports.getLink = function(relation, instance, schema){ - // gets the URI of the link for the given relation based on the instance and schema - // for example: - // getLink( - // "brother", - // {"brother_id":33}, - // {links:[{rel:"brother", href:"Brother/{brother_id}"}]}) -> - // "Brother/33" - var links = schema.__linkTemplates; - if(!links){ - links = {}; - var schemaLinks = schema.links; - if(schemaLinks && schemaLinks instanceof Array){ - schemaLinks.forEach(function(link){ - /* // TODO: allow for multiple same-name relations - if(links[link.rel]){ - if(!(links[link.rel] instanceof Array)){ - links[link.rel] = [links[link.rel]]; - } - }*/ - links[link.rel] = link.href; - }); - } - if(exports.cacheLinks){ - schema.__linkTemplates = links; - } - } - var linkTemplate = links[relation]; - return linkTemplate && exports.substitute(linkTemplate, instance); -}; - -exports.substitute = function(linkTemplate, instance){ - return linkTemplate.replace(/\{([^\}]*)\}/g, function(t, property){ - var value = instance[decodeURIComponent(property)]; - if(value instanceof Array){ - // the value is an array, it should produce a URI like /Table/(4,5,8) and store.get() should handle that as an array of values - return '(' + value.join(',') + ')'; - } - return value; - }); -}; -return exports; +/** + * JSON Schema link handler + * Copyright (c) 2007 Kris Zyp SitePen (www.sitepen.com) + * Licensed under the MIT (MIT-LICENSE.txt) license. + */ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([], function () { + return factory(); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(); + } else { + // Browser globals + root.jsonSchemaLinks = factory(); + } +}(this, function () {// setup primitive classes to be JSON Schema types +var exports = {}; +exports.cacheLinks = true; +exports.getLink = function(relation, instance, schema){ + // gets the URI of the link for the given relation based on the instance and schema + // for example: + // getLink( + // "brother", + // {"brother_id":33}, + // {links:[{rel:"brother", href:"Brother/{brother_id}"}]}) -> + // "Brother/33" + var links = schema.__linkTemplates; + if(!links){ + links = {}; + var schemaLinks = schema.links; + if(schemaLinks && schemaLinks instanceof Array){ + schemaLinks.forEach(function(link){ + /* // TODO: allow for multiple same-name relations + if(links[link.rel]){ + if(!(links[link.rel] instanceof Array)){ + links[link.rel] = [links[link.rel]]; + } + }*/ + links[link.rel] = link.href; + }); + } + if(exports.cacheLinks){ + schema.__linkTemplates = links; + } + } + var linkTemplate = links[relation]; + return linkTemplate && exports.substitute(linkTemplate, instance); +}; + +exports.substitute = function(linkTemplate, instance){ + return linkTemplate.replace(/\{([^\}]*)\}/g, function(t, property){ + var value = instance[decodeURIComponent(property)]; + if(value instanceof Array){ + // the value is an array, it should produce a URI like /Table/(4,5,8) and store.get() should handle that as an array of values + return '(' + value.join(',') + ')'; + } + return value; + }); +}; +return exports; })); \ No newline at end of file diff --git a/node_modules/json-schema/lib/validate.js b/node_modules/json-schema/lib/validate.js index 4d0b5379..e4dc1511 100644 --- a/node_modules/json-schema/lib/validate.js +++ b/node_modules/json-schema/lib/validate.js @@ -1,273 +1,273 @@ -/** - * JSONSchema Validator - Validates JavaScript objects using JSON Schemas - * (http://www.json.com/json-schema-proposal/) - * - * Copyright (c) 2007 Kris Zyp SitePen (www.sitepen.com) - * Licensed under the MIT (MIT-LICENSE.txt) license. -To use the validator call the validate function with an instance object and an optional schema object. -If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating), -that schema will be used to validate and the schema parameter is not necessary (if both exist, -both validations will occur). -The validate method will return an array of validation errors. If there are no errors, then an -empty list will be returned. A validation error will have two properties: -"property" which indicates which property had the error -"message" which indicates what the error was - */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define([], function () { - return factory(); - }); - } else if (typeof module === 'object' && module.exports) { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } else { - // Browser globals - root.jsonSchema = factory(); - } -}(this, function () {// setup primitive classes to be JSON Schema types -var exports = validate -exports.Integer = {type:"integer"}; -var primitiveConstructors = { - String: String, - Boolean: Boolean, - Number: Number, - Object: Object, - Array: Array, - Date: Date -} -exports.validate = validate; -function validate(/*Any*/instance,/*Object*/schema) { - // Summary: - // To use the validator call JSONSchema.validate with an instance object and an optional schema object. - // If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating), - // that schema will be used to validate and the schema parameter is not necessary (if both exist, - // both validations will occur). - // The validate method will return an object with two properties: - // valid: A boolean indicating if the instance is valid by the schema - // errors: An array of validation errors. If there are no errors, then an - // empty list will be returned. A validation error will have two properties: - // property: which indicates which property had the error - // message: which indicates what the error was - // - return validate(instance, schema, {changing: false});//, coerce: false, existingOnly: false}); - }; -exports.checkPropertyChange = function(/*Any*/value,/*Object*/schema, /*String*/property) { - // Summary: - // The checkPropertyChange method will check to see if an value can legally be in property with the given schema - // This is slightly different than the validate method in that it will fail if the schema is readonly and it will - // not check for self-validation, it is assumed that the passed in value is already internally valid. - // The checkPropertyChange method will return the same object type as validate, see JSONSchema.validate for - // information. - // - return validate(value, schema, {changing: property || "property"}); - }; -var validate = exports._validate = function(/*Any*/instance,/*Object*/schema,/*Object*/options) { - - if (!options) options = {}; - var _changing = options.changing; - - function getType(schema){ - return schema.type || (primitiveConstructors[schema.name] == schema && schema.name.toLowerCase()); - } - var errors = []; - // validate a value against a property definition - function checkProp(value, schema, path,i){ - - var l; - path += path ? typeof i == 'number' ? '[' + i + ']' : typeof i == 'undefined' ? '' : '.' + i : i; - function addError(message){ - errors.push({property:path,message:message}); - } - - if((typeof schema != 'object' || schema instanceof Array) && (path || typeof schema != 'function') && !(schema && getType(schema))){ - if(typeof schema == 'function'){ - if(!(value instanceof schema)){ - addError("is not an instance of the class/constructor " + schema.name); - } - }else if(schema){ - addError("Invalid schema/property definition " + schema); - } - return null; - } - if(_changing && schema.readonly){ - addError("is a readonly field, it can not be changed"); - } - if(schema['extends']){ // if it extends another schema, it must pass that schema as well - checkProp(value,schema['extends'],path,i); - } - // validate a value against a type definition - function checkType(type,value){ - if(type){ - if(typeof type == 'string' && type != 'any' && - (type == 'null' ? value !== null : typeof value != type) && - !(value instanceof Array && type == 'array') && - !(value instanceof Date && type == 'date') && - !(type == 'integer' && value%1===0)){ - return [{property:path,message:(typeof value) + " value found, but a " + type + " is required"}]; - } - if(type instanceof Array){ - var unionErrors=[]; - for(var j = 0; j < type.length; j++){ // a union type - if(!(unionErrors=checkType(type[j],value)).length){ - break; - } - } - if(unionErrors.length){ - return unionErrors; - } - }else if(typeof type == 'object'){ - var priorErrors = errors; - errors = []; - checkProp(value,type,path); - var theseErrors = errors; - errors = priorErrors; - return theseErrors; - } - } - return []; - } - if(value === undefined){ - if(schema.required){ - addError("is missing and it is required"); - } - }else{ - errors = errors.concat(checkType(getType(schema),value)); - if(schema.disallow && !checkType(schema.disallow,value).length){ - addError(" disallowed value was matched"); - } - if(value !== null){ - if(value instanceof Array){ - if(schema.items){ - var itemsIsArray = schema.items instanceof Array; - var propDef = schema.items; - for (i = 0, l = value.length; i < l; i += 1) { - if (itemsIsArray) - propDef = schema.items[i]; - if (options.coerce) - value[i] = options.coerce(value[i], propDef); - errors.concat(checkProp(value[i],propDef,path,i)); - } - } - if(schema.minItems && value.length < schema.minItems){ - addError("There must be a minimum of " + schema.minItems + " in the array"); - } - if(schema.maxItems && value.length > schema.maxItems){ - addError("There must be a maximum of " + schema.maxItems + " in the array"); - } - }else if(schema.properties || schema.additionalProperties){ - errors.concat(checkObj(value, schema.properties, path, schema.additionalProperties)); - } - if(schema.pattern && typeof value == 'string' && !value.match(schema.pattern)){ - addError("does not match the regex pattern " + schema.pattern); - } - if(schema.maxLength && typeof value == 'string' && value.length > schema.maxLength){ - addError("may only be " + schema.maxLength + " characters long"); - } - if(schema.minLength && typeof value == 'string' && value.length < schema.minLength){ - addError("must be at least " + schema.minLength + " characters long"); - } - if(typeof schema.minimum !== undefined && typeof value == typeof schema.minimum && - schema.minimum > value){ - addError("must have a minimum value of " + schema.minimum); - } - if(typeof schema.maximum !== undefined && typeof value == typeof schema.maximum && - schema.maximum < value){ - addError("must have a maximum value of " + schema.maximum); - } - if(schema['enum']){ - var enumer = schema['enum']; - l = enumer.length; - var found; - for(var j = 0; j < l; j++){ - if(enumer[j]===value){ - found=1; - break; - } - } - if(!found){ - addError("does not have a value in the enumeration " + enumer.join(", ")); - } - } - if(typeof schema.maxDecimal == 'number' && - (value.toString().match(new RegExp("\\.[0-9]{" + (schema.maxDecimal + 1) + ",}")))){ - addError("may only have " + schema.maxDecimal + " digits of decimal places"); - } - } - } - return null; - } - // validate an object against a schema - function checkObj(instance,objTypeDef,path,additionalProp){ - - if(typeof objTypeDef =='object'){ - if(typeof instance != 'object' || instance instanceof Array){ - errors.push({property:path,message:"an object is required"}); - } - - for(var i in objTypeDef){ - if(objTypeDef.hasOwnProperty(i)){ - var value = instance[i]; - // skip _not_ specified properties - if (value === undefined && options.existingOnly) continue; - var propDef = objTypeDef[i]; - // set default - if(value === undefined && propDef["default"]){ - value = instance[i] = propDef["default"]; - } - if(options.coerce && i in instance){ - value = instance[i] = options.coerce(value, propDef); - } - checkProp(value,propDef,path,i); - } - } - } - for(i in instance){ - if(instance.hasOwnProperty(i) && !(i.charAt(0) == '_' && i.charAt(1) == '_') && objTypeDef && !objTypeDef[i] && additionalProp===false){ - if (options.filter) { - delete instance[i]; - continue; - } else { - errors.push({property:path,message:(typeof value) + "The property " + i + - " is not defined in the schema and the schema does not allow additional properties"}); - } - } - var requires = objTypeDef && objTypeDef[i] && objTypeDef[i].requires; - if(requires && !(requires in instance)){ - errors.push({property:path,message:"the presence of the property " + i + " requires that " + requires + " also be present"}); - } - value = instance[i]; - if(additionalProp && (!(objTypeDef && typeof objTypeDef == 'object') || !(i in objTypeDef))){ - if(options.coerce){ - value = instance[i] = options.coerce(value, additionalProp); - } - checkProp(value,additionalProp,path,i); - } - if(!_changing && value && value.$schema){ - errors = errors.concat(checkProp(value,value.$schema,path,i)); - } - } - return errors; - } - if(schema){ - checkProp(instance,schema,'',_changing || ''); - } - if(!_changing && instance && instance.$schema){ - checkProp(instance,instance.$schema,'',''); - } - return {valid:!errors.length,errors:errors}; -}; -exports.mustBeValid = function(result){ - // summary: - // This checks to ensure that the result is valid and will throw an appropriate error message if it is not - // result: the result returned from checkPropertyChange or validate - if(!result.valid){ - throw new TypeError(result.errors.map(function(error){return "for property " + error.property + ': ' + error.message;}).join(", \n")); - } -} - -return exports; -})); +/** + * JSONSchema Validator - Validates JavaScript objects using JSON Schemas + * (http://www.json.com/json-schema-proposal/) + * + * Copyright (c) 2007 Kris Zyp SitePen (www.sitepen.com) + * Licensed under the MIT (MIT-LICENSE.txt) license. +To use the validator call the validate function with an instance object and an optional schema object. +If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating), +that schema will be used to validate and the schema parameter is not necessary (if both exist, +both validations will occur). +The validate method will return an array of validation errors. If there are no errors, then an +empty list will be returned. A validation error will have two properties: +"property" which indicates which property had the error +"message" which indicates what the error was + */ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([], function () { + return factory(); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(); + } else { + // Browser globals + root.jsonSchema = factory(); + } +}(this, function () {// setup primitive classes to be JSON Schema types +var exports = validate +exports.Integer = {type:"integer"}; +var primitiveConstructors = { + String: String, + Boolean: Boolean, + Number: Number, + Object: Object, + Array: Array, + Date: Date +} +exports.validate = validate; +function validate(/*Any*/instance,/*Object*/schema) { + // Summary: + // To use the validator call JSONSchema.validate with an instance object and an optional schema object. + // If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating), + // that schema will be used to validate and the schema parameter is not necessary (if both exist, + // both validations will occur). + // The validate method will return an object with two properties: + // valid: A boolean indicating if the instance is valid by the schema + // errors: An array of validation errors. If there are no errors, then an + // empty list will be returned. A validation error will have two properties: + // property: which indicates which property had the error + // message: which indicates what the error was + // + return validate(instance, schema, {changing: false});//, coerce: false, existingOnly: false}); + }; +exports.checkPropertyChange = function(/*Any*/value,/*Object*/schema, /*String*/property) { + // Summary: + // The checkPropertyChange method will check to see if an value can legally be in property with the given schema + // This is slightly different than the validate method in that it will fail if the schema is readonly and it will + // not check for self-validation, it is assumed that the passed in value is already internally valid. + // The checkPropertyChange method will return the same object type as validate, see JSONSchema.validate for + // information. + // + return validate(value, schema, {changing: property || "property"}); + }; +var validate = exports._validate = function(/*Any*/instance,/*Object*/schema,/*Object*/options) { + + if (!options) options = {}; + var _changing = options.changing; + + function getType(schema){ + return schema.type || (primitiveConstructors[schema.name] == schema && schema.name.toLowerCase()); + } + var errors = []; + // validate a value against a property definition + function checkProp(value, schema, path,i){ + + var l; + path += path ? typeof i == 'number' ? '[' + i + ']' : typeof i == 'undefined' ? '' : '.' + i : i; + function addError(message){ + errors.push({property:path,message:message}); + } + + if((typeof schema != 'object' || schema instanceof Array) && (path || typeof schema != 'function') && !(schema && getType(schema))){ + if(typeof schema == 'function'){ + if(!(value instanceof schema)){ + addError("is not an instance of the class/constructor " + schema.name); + } + }else if(schema){ + addError("Invalid schema/property definition " + schema); + } + return null; + } + if(_changing && schema.readonly){ + addError("is a readonly field, it can not be changed"); + } + if(schema['extends']){ // if it extends another schema, it must pass that schema as well + checkProp(value,schema['extends'],path,i); + } + // validate a value against a type definition + function checkType(type,value){ + if(type){ + if(typeof type == 'string' && type != 'any' && + (type == 'null' ? value !== null : typeof value != type) && + !(value instanceof Array && type == 'array') && + !(value instanceof Date && type == 'date') && + !(type == 'integer' && value%1===0)){ + return [{property:path,message:(typeof value) + " value found, but a " + type + " is required"}]; + } + if(type instanceof Array){ + var unionErrors=[]; + for(var j = 0; j < type.length; j++){ // a union type + if(!(unionErrors=checkType(type[j],value)).length){ + break; + } + } + if(unionErrors.length){ + return unionErrors; + } + }else if(typeof type == 'object'){ + var priorErrors = errors; + errors = []; + checkProp(value,type,path); + var theseErrors = errors; + errors = priorErrors; + return theseErrors; + } + } + return []; + } + if(value === undefined){ + if(schema.required){ + addError("is missing and it is required"); + } + }else{ + errors = errors.concat(checkType(getType(schema),value)); + if(schema.disallow && !checkType(schema.disallow,value).length){ + addError(" disallowed value was matched"); + } + if(value !== null){ + if(value instanceof Array){ + if(schema.items){ + var itemsIsArray = schema.items instanceof Array; + var propDef = schema.items; + for (i = 0, l = value.length; i < l; i += 1) { + if (itemsIsArray) + propDef = schema.items[i]; + if (options.coerce) + value[i] = options.coerce(value[i], propDef); + errors.concat(checkProp(value[i],propDef,path,i)); + } + } + if(schema.minItems && value.length < schema.minItems){ + addError("There must be a minimum of " + schema.minItems + " in the array"); + } + if(schema.maxItems && value.length > schema.maxItems){ + addError("There must be a maximum of " + schema.maxItems + " in the array"); + } + }else if(schema.properties || schema.additionalProperties){ + errors.concat(checkObj(value, schema.properties, path, schema.additionalProperties)); + } + if(schema.pattern && typeof value == 'string' && !value.match(schema.pattern)){ + addError("does not match the regex pattern " + schema.pattern); + } + if(schema.maxLength && typeof value == 'string' && value.length > schema.maxLength){ + addError("may only be " + schema.maxLength + " characters long"); + } + if(schema.minLength && typeof value == 'string' && value.length < schema.minLength){ + addError("must be at least " + schema.minLength + " characters long"); + } + if(typeof schema.minimum !== undefined && typeof value == typeof schema.minimum && + schema.minimum > value){ + addError("must have a minimum value of " + schema.minimum); + } + if(typeof schema.maximum !== undefined && typeof value == typeof schema.maximum && + schema.maximum < value){ + addError("must have a maximum value of " + schema.maximum); + } + if(schema['enum']){ + var enumer = schema['enum']; + l = enumer.length; + var found; + for(var j = 0; j < l; j++){ + if(enumer[j]===value){ + found=1; + break; + } + } + if(!found){ + addError("does not have a value in the enumeration " + enumer.join(", ")); + } + } + if(typeof schema.maxDecimal == 'number' && + (value.toString().match(new RegExp("\\.[0-9]{" + (schema.maxDecimal + 1) + ",}")))){ + addError("may only have " + schema.maxDecimal + " digits of decimal places"); + } + } + } + return null; + } + // validate an object against a schema + function checkObj(instance,objTypeDef,path,additionalProp){ + + if(typeof objTypeDef =='object'){ + if(typeof instance != 'object' || instance instanceof Array){ + errors.push({property:path,message:"an object is required"}); + } + + for(var i in objTypeDef){ + if(objTypeDef.hasOwnProperty(i)){ + var value = instance[i]; + // skip _not_ specified properties + if (value === undefined && options.existingOnly) continue; + var propDef = objTypeDef[i]; + // set default + if(value === undefined && propDef["default"]){ + value = instance[i] = propDef["default"]; + } + if(options.coerce && i in instance){ + value = instance[i] = options.coerce(value, propDef); + } + checkProp(value,propDef,path,i); + } + } + } + for(i in instance){ + if(instance.hasOwnProperty(i) && !(i.charAt(0) == '_' && i.charAt(1) == '_') && objTypeDef && !objTypeDef[i] && additionalProp===false){ + if (options.filter) { + delete instance[i]; + continue; + } else { + errors.push({property:path,message:(typeof value) + "The property " + i + + " is not defined in the schema and the schema does not allow additional properties"}); + } + } + var requires = objTypeDef && objTypeDef[i] && objTypeDef[i].requires; + if(requires && !(requires in instance)){ + errors.push({property:path,message:"the presence of the property " + i + " requires that " + requires + " also be present"}); + } + value = instance[i]; + if(additionalProp && (!(objTypeDef && typeof objTypeDef == 'object') || !(i in objTypeDef))){ + if(options.coerce){ + value = instance[i] = options.coerce(value, additionalProp); + } + checkProp(value,additionalProp,path,i); + } + if(!_changing && value && value.$schema){ + errors = errors.concat(checkProp(value,value.$schema,path,i)); + } + } + return errors; + } + if(schema){ + checkProp(instance,schema,'',_changing || ''); + } + if(!_changing && instance && instance.$schema){ + checkProp(instance,instance.$schema,'',''); + } + return {valid:!errors.length,errors:errors}; +}; +exports.mustBeValid = function(result){ + // summary: + // This checks to ensure that the result is valid and will throw an appropriate error message if it is not + // result: the result returned from checkPropertyChange or validate + if(!result.valid){ + throw new TypeError(result.errors.map(function(error){return "for property " + error.property + ': ' + error.message;}).join(", \n")); + } +} + +return exports; +})); diff --git a/node_modules/json-schema/package.json b/node_modules/json-schema/package.json index b010571d..b9b7bac8 100644 --- a/node_modules/json-schema/package.json +++ b/node_modules/json-schema/package.json @@ -1,31 +1,31 @@ -{ - "name": "json-schema", - "version": "0.2.3", - "author": "Kris Zyp", - "description": "JSON Schema validation and specifications", - "maintainers":[ - {"name": "Kris Zyp", "email": "kriszyp@gmail.com"}], - "keywords": [ - "json", - "schema" - ], - "licenses": [ - { - "type": "AFLv2.1", - "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L43" - }, - { - "type": "BSD", - "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L13" - } - ], - "repository": { - "type":"git", - "url":"http://github.com/kriszyp/json-schema" - }, - "directories": { "lib": "./lib" }, - "main": "./lib/validate.js", - "devDependencies": { "vows": "*" }, - "scripts": { "test": "echo TESTS DISABLED vows --spec test/*.js" } -} - +{ + "name": "json-schema", + "version": "0.2.3", + "author": "Kris Zyp", + "description": "JSON Schema validation and specifications", + "maintainers":[ + {"name": "Kris Zyp", "email": "kriszyp@gmail.com"}], + "keywords": [ + "json", + "schema" + ], + "licenses": [ + { + "type": "AFLv2.1", + "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L43" + }, + { + "type": "BSD", + "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L13" + } + ], + "repository": { + "type":"git", + "url":"http://github.com/kriszyp/json-schema" + }, + "directories": { "lib": "./lib" }, + "main": "./lib/validate.js", + "devDependencies": { "vows": "*" }, + "scripts": { "test": "echo TESTS DISABLED vows --spec test/*.js" } +} + diff --git a/node_modules/json-schema/test/tests.js b/node_modules/json-schema/test/tests.js index 40eeda5d..2938aea7 100644 --- a/node_modules/json-schema/test/tests.js +++ b/node_modules/json-schema/test/tests.js @@ -1,95 +1,95 @@ -var assert = require('assert'); -var vows = require('vows'); -var path = require('path'); -var fs = require('fs'); - -var validate = require('../lib/validate').validate; - - -var revision = 'draft-03'; -var schemaRoot = path.join(__dirname, '..', revision); -var schemaNames = ['schema', 'hyper-schema', 'links', 'json-ref' ]; -var schemas = {}; - -schemaNames.forEach(function(name) { - var file = path.join(schemaRoot, name); - schemas[name] = loadSchema(file); -}); - -schemaNames.forEach(function(name) { - var s, n = name+'-nsd', f = path.join(schemaRoot, name); - schemas[n] = loadSchema(f); - s = schemas[n]; - delete s['$schema']; -}); - -function loadSchema(path) { - var data = fs.readFileSync(path, 'utf-8'); - var schema = JSON.parse(data); - return schema; -} - -function resultIsValid() { - return function(result) { - assert.isObject(result); - //assert.isBoolean(result.valid); - assert.equal(typeof(result.valid), 'boolean'); - assert.isArray(result.errors); - for (var i = 0; i < result.errors.length; i++) { - assert.notEqual(result.errors[i], null, 'errors['+i+'] is null'); - } - } -} - -function assertValidates(doc, schema) { - var context = {}; - - context[': validate('+doc+', '+schema+')'] = { - topic: validate(schemas[doc], schemas[schema]), - 'returns valid result': resultIsValid(), - 'with valid=true': function(result) { assert.equal(result.valid, true); }, - 'and no errors': function(result) { - // XXX work-around for bug in vows: [null] chokes it - if (result.errors[0] == null) assert.fail('(errors contains null)'); - assert.length(result.errors, 0); - } - }; - - return context; -} - -function assertSelfValidates(doc) { - var context = {}; - - context[': validate('+doc+')'] = { - topic: validate(schemas[doc]), - 'returns valid result': resultIsValid(), - 'with valid=true': function(result) { assert.equal(result.valid, true); }, - 'and no errors': function(result) { assert.length(result.errors, 0); } - }; - - return context; -} - -var suite = vows.describe('JSON Schema').addBatch({ - 'Core-NSD self-validates': assertSelfValidates('schema-nsd'), - 'Core-NSD/Core-NSD': assertValidates('schema-nsd', 'schema-nsd'), - 'Core-NSD/Core': assertValidates('schema-nsd', 'schema'), - - 'Core self-validates': assertSelfValidates('schema'), - 'Core/Core': assertValidates('schema', 'schema'), - - 'Hyper-NSD self-validates': assertSelfValidates('hyper-schema-nsd'), - 'Hyper self-validates': assertSelfValidates('hyper-schema'), - 'Hyper/Hyper': assertValidates('hyper-schema', 'hyper-schema'), - 'Hyper/Core': assertValidates('hyper-schema', 'schema'), - - 'Links-NSD self-validates': assertSelfValidates('links-nsd'), - 'Links self-validates': assertSelfValidates('links'), - 'Links/Hyper': assertValidates('links', 'hyper-schema'), - 'Links/Core': assertValidates('links', 'schema'), - - 'Json-Ref self-validates': assertSelfValidates('json-ref'), - 'Json-Ref/Hyper': assertValidates('json-ref', 'hyper-schema'), - 'Json-Ref/Core': assertValidates('json-ref', 'schema') -}).export(module); +var assert = require('assert'); +var vows = require('vows'); +var path = require('path'); +var fs = require('fs'); + +var validate = require('../lib/validate').validate; + + +var revision = 'draft-03'; +var schemaRoot = path.join(__dirname, '..', revision); +var schemaNames = ['schema', 'hyper-schema', 'links', 'json-ref' ]; +var schemas = {}; + +schemaNames.forEach(function(name) { + var file = path.join(schemaRoot, name); + schemas[name] = loadSchema(file); +}); + +schemaNames.forEach(function(name) { + var s, n = name+'-nsd', f = path.join(schemaRoot, name); + schemas[n] = loadSchema(f); + s = schemas[n]; + delete s['$schema']; +}); + +function loadSchema(path) { + var data = fs.readFileSync(path, 'utf-8'); + var schema = JSON.parse(data); + return schema; +} + +function resultIsValid() { + return function(result) { + assert.isObject(result); + //assert.isBoolean(result.valid); + assert.equal(typeof(result.valid), 'boolean'); + assert.isArray(result.errors); + for (var i = 0; i < result.errors.length; i++) { + assert.notEqual(result.errors[i], null, 'errors['+i+'] is null'); + } + } +} + +function assertValidates(doc, schema) { + var context = {}; + + context[': validate('+doc+', '+schema+')'] = { + topic: validate(schemas[doc], schemas[schema]), + 'returns valid result': resultIsValid(), + 'with valid=true': function(result) { assert.equal(result.valid, true); }, + 'and no errors': function(result) { + // XXX work-around for bug in vows: [null] chokes it + if (result.errors[0] == null) assert.fail('(errors contains null)'); + assert.length(result.errors, 0); + } + }; + + return context; +} + +function assertSelfValidates(doc) { + var context = {}; + + context[': validate('+doc+')'] = { + topic: validate(schemas[doc]), + 'returns valid result': resultIsValid(), + 'with valid=true': function(result) { assert.equal(result.valid, true); }, + 'and no errors': function(result) { assert.length(result.errors, 0); } + }; + + return context; +} + +var suite = vows.describe('JSON Schema').addBatch({ + 'Core-NSD self-validates': assertSelfValidates('schema-nsd'), + 'Core-NSD/Core-NSD': assertValidates('schema-nsd', 'schema-nsd'), + 'Core-NSD/Core': assertValidates('schema-nsd', 'schema'), + + 'Core self-validates': assertSelfValidates('schema'), + 'Core/Core': assertValidates('schema', 'schema'), + + 'Hyper-NSD self-validates': assertSelfValidates('hyper-schema-nsd'), + 'Hyper self-validates': assertSelfValidates('hyper-schema'), + 'Hyper/Hyper': assertValidates('hyper-schema', 'hyper-schema'), + 'Hyper/Core': assertValidates('hyper-schema', 'schema'), + + 'Links-NSD self-validates': assertSelfValidates('links-nsd'), + 'Links self-validates': assertSelfValidates('links'), + 'Links/Hyper': assertValidates('links', 'hyper-schema'), + 'Links/Core': assertValidates('links', 'schema'), + + 'Json-Ref self-validates': assertSelfValidates('json-ref'), + 'Json-Ref/Hyper': assertValidates('json-ref', 'hyper-schema'), + 'Json-Ref/Core': assertValidates('json-ref', 'schema') +}).export(module); diff --git a/node_modules/left-pad/COPYING b/node_modules/left-pad/COPYING index dd25bbb3..299ad3bf 100644 --- a/node_modules/left-pad/COPYING +++ b/node_modules/left-pad/COPYING @@ -1,14 +1,14 @@ - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2014 Azer Koçulu - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. - + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2014 Azer Koçulu + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. + diff --git a/node_modules/needle/examples/parsed-stream2.js b/node_modules/needle/examples/parsed-stream2.js index f325ec10..5d9b79af 100644 --- a/node_modules/needle/examples/parsed-stream2.js +++ b/node_modules/needle/examples/parsed-stream2.js @@ -1,21 +1,21 @@ -////////////////////////////////////////// -// This example illustrates a more complex -// example of parsing a JSON stream. -////////////////////////////////////////// - -var needle = require('./../'), - JSONStream = require('JSONStream'); - -var url = 'http://jsonplaceholder.typicode.com/db'; - -// Initialize our GET request with our default (JSON) -// parsers disabled. - -var json = new needle.get(url, {parse: false}) - // And now interpret the stream as JSON, returning only the - // title of all the posts. - .pipe(new JSONStream.parse('posts.*.title')); - -json.on('data', function (obj) { - console.log('got title: \'' + obj + '\''); -}) +////////////////////////////////////////// +// This example illustrates a more complex +// example of parsing a JSON stream. +////////////////////////////////////////// + +var needle = require('./../'), + JSONStream = require('JSONStream'); + +var url = 'http://jsonplaceholder.typicode.com/db'; + +// Initialize our GET request with our default (JSON) +// parsers disabled. + +var json = new needle.get(url, {parse: false}) + // And now interpret the stream as JSON, returning only the + // title of all the posts. + .pipe(new JSONStream.parse('posts.*.title')); + +json.on('data', function (obj) { + console.log('got title: \'' + obj + '\''); +}) diff --git a/node_modules/needle/test/compression_spec.js b/node_modules/needle/test/compression_spec.js index 115b2b95..ea5f3b19 100644 --- a/node_modules/needle/test/compression_spec.js +++ b/node_modules/needle/test/compression_spec.js @@ -1,94 +1,94 @@ -var should = require('should'), - needle = require('./../'), - http = require('http'), - zlib = require('zlib'), - stream = require('stream'), - port = 11123, - server; - -describe('compression', function(){ - - require.bind(null, 'zlib').should.not.throw() - - var jsonData = '{"foo":"bar"}'; - - describe('when server supports compression', function(){ - - before(function(){ - server = http.createServer(function(req, res) { - var raw = new stream.PassThrough(); - - var acceptEncoding = req.headers['accept-encoding']; - if (!acceptEncoding) { - acceptEncoding = ''; - } - - if (acceptEncoding.match(/\bdeflate\b/)) { - res.setHeader('Content-Encoding', 'deflate'); - raw.pipe(zlib.createDeflate()).pipe(res); - } else if (acceptEncoding.match(/\bgzip\b/)) { - res.setHeader('Content-Encoding', 'gzip'); - raw.pipe(zlib.createGzip()).pipe(res); - } else { - raw.pipe(res); - } - - res.setHeader('Content-Type', 'application/json') - if (req.headers['with-bad']) { - res.end('foo'); // end, no deflate data - } else { - raw.end(jsonData) - } - - }) - - server.listen(port); - }); - - after(function(done){ - server.close(done); - }) - - describe('and client requests no compression', function() { - it('should have the body decompressed', function(done){ - needle.get('localhost:' + port, function(err, response, body){ - should.ifError(err); - body.should.have.property('foo', 'bar'); - response.bytes.should.equal(jsonData.length); - done(); - }) - }) - }) - - describe('and client requests gzip compression', function() { - it('should have the body decompressed', function(done){ - needle.get('localhost:' + port, {headers: {'Accept-Encoding': 'gzip'}}, function(err, response, body){ - should.ifError(err); - body.should.have.property('foo', 'bar'); - response.bytes.should.not.equal(jsonData.length); - done(); - }) - }) - }) - - describe('and client requests deflate compression', function() { - it('should have the body decompressed', function(done){ - needle.get('localhost:' + port, {headers: {'Accept-Encoding': 'deflate'}}, function(err, response, body){ - should.ifError(err); - body.should.have.property('foo', 'bar'); - response.bytes.should.not.equal(jsonData.length); - done(); - }) - }) - - it('should rethrow errors from decompressors', function(done){ - needle.get('localhost:' + port, {headers: {'Accept-Encoding': 'deflate', 'With-Bad': 'true'}}, function(err, response, body) { - should.exist(err); - err.message.should.equal("incorrect header check"); - err.code.should.equal("Z_DATA_ERROR") - done(); - }) - }) - }) - }) -}) +var should = require('should'), + needle = require('./../'), + http = require('http'), + zlib = require('zlib'), + stream = require('stream'), + port = 11123, + server; + +describe('compression', function(){ + + require.bind(null, 'zlib').should.not.throw() + + var jsonData = '{"foo":"bar"}'; + + describe('when server supports compression', function(){ + + before(function(){ + server = http.createServer(function(req, res) { + var raw = new stream.PassThrough(); + + var acceptEncoding = req.headers['accept-encoding']; + if (!acceptEncoding) { + acceptEncoding = ''; + } + + if (acceptEncoding.match(/\bdeflate\b/)) { + res.setHeader('Content-Encoding', 'deflate'); + raw.pipe(zlib.createDeflate()).pipe(res); + } else if (acceptEncoding.match(/\bgzip\b/)) { + res.setHeader('Content-Encoding', 'gzip'); + raw.pipe(zlib.createGzip()).pipe(res); + } else { + raw.pipe(res); + } + + res.setHeader('Content-Type', 'application/json') + if (req.headers['with-bad']) { + res.end('foo'); // end, no deflate data + } else { + raw.end(jsonData) + } + + }) + + server.listen(port); + }); + + after(function(done){ + server.close(done); + }) + + describe('and client requests no compression', function() { + it('should have the body decompressed', function(done){ + needle.get('localhost:' + port, function(err, response, body){ + should.ifError(err); + body.should.have.property('foo', 'bar'); + response.bytes.should.equal(jsonData.length); + done(); + }) + }) + }) + + describe('and client requests gzip compression', function() { + it('should have the body decompressed', function(done){ + needle.get('localhost:' + port, {headers: {'Accept-Encoding': 'gzip'}}, function(err, response, body){ + should.ifError(err); + body.should.have.property('foo', 'bar'); + response.bytes.should.not.equal(jsonData.length); + done(); + }) + }) + }) + + describe('and client requests deflate compression', function() { + it('should have the body decompressed', function(done){ + needle.get('localhost:' + port, {headers: {'Accept-Encoding': 'deflate'}}, function(err, response, body){ + should.ifError(err); + body.should.have.property('foo', 'bar'); + response.bytes.should.not.equal(jsonData.length); + done(); + }) + }) + + it('should rethrow errors from decompressors', function(done){ + needle.get('localhost:' + port, {headers: {'Accept-Encoding': 'deflate', 'With-Bad': 'true'}}, function(err, response, body) { + should.exist(err); + err.message.should.equal("incorrect header check"); + err.code.should.equal("Z_DATA_ERROR") + done(); + }) + }) + }) + }) +}) diff --git a/node_modules/node-notifier/vendor/notifu/notifu.exe b/node_modules/node-notifier/vendor/notifu/notifu.exe new file mode 100755 index 0000000000000000000000000000000000000000..bd423c64899dc77005d18b0686ba66ef4b9661eb GIT binary patch literal 242176 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⁡3BVM32? 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òO-BuxAMKBffIbbH*Y@#X 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

KkU)CX>W}QU;rb3i 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öjs{D#`-EKO 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 literal 0 HcmV?d00001 diff --git a/node_modules/node-notifier/vendor/snoreToast/SnoreToast.exe b/node_modules/node-notifier/vendor/snoreToast/SnoreToast.exe new file mode 100755 index 0000000000000000000000000000000000000000..3b98dec7a7e7770789fc2525282fd71a6dcf2310 GIT binary patch literal 281600 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

0`G<}y}k@}qkpBy3qu!{7+4j;R)Iw&bwm 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�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�`KS|uF&+~$vUih;B3E>__Ynq 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%0A)va%Kw0_a+cn!musN^kvrnkwsdtX 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 literal 0 HcmV?d00001 diff --git a/node_modules/prettier/bin-prettier.js b/node_modules/prettier/bin-prettier.js index b0fa2260..8ddcbda1 100755 --- a/node_modules/prettier/bin-prettier.js +++ b/node_modules/prettier/bin-prettier.js @@ -4210,19 +4210,19 @@ var support = { getSupportInfo: getSupportInfo$2 }; -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. ***************************************************************************** */ /* global Reflect, Promise */ @@ -39649,11 +39649,11 @@ var ini = createCommonjsModule(function (module, exports) { }); var fs$$2 = __importStar(fs); - /** - * define the possible values: - * section: [section] - * param: key=value - * comment: ;this is a comment + /** + * define the possible values: + * section: [section] + * param: key=value + * comment: ;this is a comment */ @@ -39662,9 +39662,9 @@ var ini = createCommonjsModule(function (module, exports) { param: /^\s*([\w\.\-\_]+)\s*[=:]\s*(.*?)\s*([#;].*)?$/, comment: /^\s*[#;].*$/ }; - /** - * Parses an .ini file - * @param file The location of the .ini file + /** + * Parses an .ini file + * @param file The location of the .ini file */ function parse(file) { diff --git a/node_modules/prettier/index.js b/node_modules/prettier/index.js index f5d1e7c8..f70f7010 100644 --- a/node_modules/prettier/index.js +++ b/node_modules/prettier/index.js @@ -4208,19 +4208,19 @@ var support = { getSupportInfo: getSupportInfo$2 }; -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. ***************************************************************************** */ /* global Reflect, Promise */ @@ -39647,11 +39647,11 @@ var ini = createCommonjsModule(function (module, exports) { }); var fs$$2 = __importStar(fs); - /** - * define the possible values: - * section: [section] - * param: key=value - * comment: ;this is a comment + /** + * define the possible values: + * section: [section] + * param: key=value + * comment: ;this is a comment */ @@ -39660,9 +39660,9 @@ var ini = createCommonjsModule(function (module, exports) { param: /^\s*([\w\.\-\_]+)\s*[=:]\s*(.*?)\s*([#;].*)?$/, comment: /^\s*[#;].*$/ }; - /** - * Parses an .ini file - * @param file The location of the .ini file + /** + * Parses an .ini file + * @param file The location of the .ini file */ function parse(file) { diff --git a/node_modules/prettier/parser-postcss.js b/node_modules/prettier/parser-postcss.js index 20b3548c..880f3072 100644 --- a/node_modules/prettier/parser-postcss.js +++ b/node_modules/prettier/parser-postcss.js @@ -11450,24 +11450,24 @@ function Container(opts) { node.parent = _this; // eslint-disable-line no-param-reassign }); } -/** - * A node that contains other nodes and support traversing over them +/** + * A node that contains other nodes and support traversing over them */ Container.prototype = Object.create(_Node2.default.prototype); Container.constructor = _Node2.default; -/** - * Iterate over descendant nodes of the node - * - * @param {RegExp|string} filter - Optional. Only nodes with node.type that - * satisfies the filter will be traversed over - * @param {function} cb - callback to call on each node. Takes theese params: - * node - the node being processed, i - it's index, nodes - the array - * of all nodes - * If false is returned, the iteration breaks - * - * @return (boolean) false, if the iteration was broken +/** + * Iterate over descendant nodes of the node + * + * @param {RegExp|string} filter - Optional. Only nodes with node.type that + * satisfies the filter will be traversed over + * @param {function} cb - callback to call on each node. Takes theese params: + * node - the node being processed, i - it's index, nodes - the array + * of all nodes + * If false is returned, the iteration breaks + * + * @return (boolean) false, if the iteration was broken */ Container.prototype.walk = function walk(filter, cb) { @@ -11490,15 +11490,15 @@ Container.prototype.walk = function walk(filter, cb) { return true; }; -/** - * Iterate over immediate children of the node - * - * @param {function} cb - callback to call on each node. Takes theese params: - * node - the node being processed, i - it's index, nodes - the array - * of all nodes - * If false is returned, the iteration breaks - * - * @return (boolean) false, if the iteration was broken +/** + * Iterate over immediate children of the node + * + * @param {function} cb - callback to call on each node. Takes theese params: + * node - the node being processed, i - it's index, nodes - the array + * of all nodes + * If false is returned, the iteration breaks + * + * @return (boolean) false, if the iteration was broken */ @@ -11528,8 +11528,8 @@ exports.default = Container; Object.defineProperty(exports, "__esModule", { value: true }); -/** - * A very generic node. Pretty much any element of a media query +/** + * A very generic node. Pretty much any element of a media query */ function Node(opts) { @@ -22248,25 +22248,25 @@ function _interopRequireDefault(obj) { default: obj }; } -/** - * Parses a media query list into an array of nodes. A typical node signature: - * {string} node.type -- one of: 'media-query', 'media-type', 'keyword', - * 'media-feature-expression', 'media-feature', 'colon', 'value' - * {string} node.value -- the contents of a particular element, trimmed - * e.g.: `screen`, `max-width`, `1024px` - * {string} node.after -- whitespaces that follow the element - * {string} node.before -- whitespaces that precede the element - * {string} node.sourceIndex -- the index of the element in a source media - * query list, 0-based - * {object} node.parent -- a link to the parent node (a container) - * - * Some nodes (media queries, media feature expressions) contain other nodes. - * They additionally have: - * {array} node.nodes -- an array of nodes of the type described here - * {funciton} node.each -- traverses direct children of the node, calling - * a callback for each one - * {funciton} node.walk -- traverses ALL descendants of the node, calling - * a callback for each one +/** + * Parses a media query list into an array of nodes. A typical node signature: + * {string} node.type -- one of: 'media-query', 'media-type', 'keyword', + * 'media-feature-expression', 'media-feature', 'colon', 'value' + * {string} node.value -- the contents of a particular element, trimmed + * e.g.: `screen`, `max-width`, `1024px` + * {string} node.after -- whitespaces that follow the element + * {string} node.before -- whitespaces that precede the element + * {string} node.sourceIndex -- the index of the element in a source media + * query list, 0-based + * {object} node.parent -- a link to the parent node (a container) + * + * Some nodes (media queries, media feature expressions) contain other nodes. + * They additionally have: + * {array} node.nodes -- an array of nodes of the type described here + * {funciton} node.each -- traverses direct children of the node, calling + * a callback for each one + * {funciton} node.walk -- traverses ALL descendants of the node, calling + * a callback for each one */ @@ -22305,14 +22305,14 @@ function _interopRequireDefault(obj) { default: obj }; } -/** - * Parses a media feature expression, e.g. `max-width: 10px`, `(color)` - * - * @param {string} string - the source expression string, can be inside parens - * @param {Number} index - the index of `string` in the overall input - * - * @return {Array} an array of Nodes, the first element being a media feature, - * the secont - its value (may be missing) +/** + * Parses a media feature expression, e.g. `max-width: 10px`, `(color)` + * + * @param {string} string - the source expression string, can be inside parens + * @param {Number} index - the index of `string` in the overall input + * + * @return {Array} an array of Nodes, the first element being a media feature, + * the secont - its value (may be missing) */ @@ -22409,13 +22409,13 @@ function parseMediaFeature(string) { return result; } -/** - * Parses a media query, e.g. `screen and (color)`, `only tv` - * - * @param {string} string - the source media query string - * @param {Number} index - the index of `string` in the overall input - * - * @return {Array} an array of Nodes and Containers +/** + * Parses a media query, e.g. `screen and (color)`, `only tv` + * + * @param {string} string - the source media query string + * @param {Number} index - the index of `string` in the overall input + * + * @return {Array} an array of Nodes and Containers */ @@ -22579,13 +22579,13 @@ function parseMediaQuery(string) { return result; } -/** - * Parses a media query list. Takes a possible `url()` at the start into - * account, and divides the list into media queries that are parsed separately - * - * @param {string} string - the source media query list string - * - * @return {Array} an array of Nodes/Containers +/** + * Parses a media query list. Takes a possible `url()` at the start into + * account, and divides the list into media queries that are parsed separately + * + * @param {string} string - the source media query list string + * + * @return {Array} an array of Nodes/Containers */ diff --git a/node_modules/prettier/standalone.js b/node_modules/prettier/standalone.js index c6758dea..baaa9e6b 100644 --- a/node_modules/prettier/standalone.js +++ b/node_modules/prettier/standalone.js @@ -6570,19 +6570,19 @@ var support = { getSupportInfo: getSupportInfo$2 }; -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. ***************************************************************************** */ /* global Reflect, Promise */ diff --git a/node_modules/resolve-url/.jshintrc b/node_modules/resolve-url/.jshintrc index 8703acd7..aaf33580 100644 --- a/node_modules/resolve-url/.jshintrc +++ b/node_modules/resolve-url/.jshintrc @@ -1,44 +1,44 @@ -{ - "bitwise": true, - "camelcase": true, - "curly": false, - "eqeqeq": true, - "es3": true, - "forin": true, - "immed": false, - "indent": false, - "latedef": "nofunc", - "newcap": false, - "noarg": true, - "noempty": true, - "nonew": false, - "plusplus": false, - "quotmark": false, - "undef": true, - "unused": "vars", - "strict": false, - "trailing": true, - "maxparams": 5, - "maxdepth": false, - "maxstatements": false, - "maxcomplexity": false, - "maxlen": 100, - - "asi": true, - "expr": true, - "globalstrict": true, - "smarttabs": true, - "sub": true, - - "node": true, - "browser": true, - "globals": { - "describe": false, - "it": false, - "before": false, - "beforeEach": false, - "after": false, - "afterEach": false, - "define": false - } -} +{ + "bitwise": true, + "camelcase": true, + "curly": false, + "eqeqeq": true, + "es3": true, + "forin": true, + "immed": false, + "indent": false, + "latedef": "nofunc", + "newcap": false, + "noarg": true, + "noempty": true, + "nonew": false, + "plusplus": false, + "quotmark": false, + "undef": true, + "unused": "vars", + "strict": false, + "trailing": true, + "maxparams": 5, + "maxdepth": false, + "maxstatements": false, + "maxcomplexity": false, + "maxlen": 100, + + "asi": true, + "expr": true, + "globalstrict": true, + "smarttabs": true, + "sub": true, + + "node": true, + "browser": true, + "globals": { + "describe": false, + "it": false, + "before": false, + "beforeEach": false, + "after": false, + "afterEach": false, + "define": false + } +} diff --git a/node_modules/resolve-url/readme.md b/node_modules/resolve-url/readme.md index 1f864e8d..edfff735 100644 --- a/node_modules/resolve-url/readme.md +++ b/node_modules/resolve-url/readme.md @@ -1,83 +1,83 @@ -Overview -======== - -[![browser support](https://ci.testling.com/lydell/resolve-url.png)](https://ci.testling.com/lydell/resolve-url) - -Like Node.js’ [`path.resolve`]/[`url.resolve`] for the browser. - -```js -var resolveUrl = require("resolve-url") - -window.location -// https://example.com/articles/resolving-urls/edit - -resolveUrl("remove") -// https://example.com/articles/resolving-urls/remove - -resolveUrl("/static/scripts/app.js") -// https://example.com/static/scripts/app.js - -// Imagine /static/scripts/app.js contains `//# sourceMappingURL=../source-maps/app.js.map` -resolveUrl("/static/scripts/app.js", "../source-maps/app.js.map") -// https://example.com/static/source-maps/app.js.map - -resolveUrl("/static/scripts/app.js", "../source-maps/app.js.map", "../coffee/app.coffee") -// https://example.com/static/coffee/app.coffee - -resolveUrl("//cdn.example.com/jquery.js") -// https://cdn.example.com/jquery.js - -resolveUrl("http://foo.org/") -// http://foo.org/ -``` - - -Installation -============ - -- `npm install resolve-url` -- `bower install resolve-url` -- `component install lydell/resolve-url` - -Works with CommonJS, AMD and browser globals, through UMD. - - -Usage -===== - -### `resolveUrl(...urls)` ### - -Pass one or more urls. Resolves the last one to an absolute url, using the -previous ones and `window.location`. - -It’s like starting out on `window.location`, and then clicking links with the -urls as `href` attributes in order, from left to right. - -Unlike Node.js’ [`path.resolve`], this function always goes through all of the -arguments, from left to right. `path.resolve` goes from right to left and only -in the worst case goes through them all. Should that matter. - -Actually, the function is _really_ like clicking a lot of links in series: An -actual `` gets its `href` attribute set for each url! This means that the -url resolution of the browser is used, which makes this module really -light-weight. - -Also note that this functions deals with urls, not paths, so in that respect it -has more in common with Node.js’ [`url.resolve`]. But the arguments are more -like [`path.resolve`]. - -[`path.resolve`]: http://nodejs.org/api/path.html#path_path_resolve_from_to -[`url.resolve`]: http://nodejs.org/api/url.html#url_url_resolve_from_to - - -Tests -===== - -Run `npm test`, which lints the code and then gives you a link to open in a -browser of choice (using `testling`). - - -License -======= - -[The X11 (“MIT”) License](LICENSE). +Overview +======== + +[![browser support](https://ci.testling.com/lydell/resolve-url.png)](https://ci.testling.com/lydell/resolve-url) + +Like Node.js’ [`path.resolve`]/[`url.resolve`] for the browser. + +```js +var resolveUrl = require("resolve-url") + +window.location +// https://example.com/articles/resolving-urls/edit + +resolveUrl("remove") +// https://example.com/articles/resolving-urls/remove + +resolveUrl("/static/scripts/app.js") +// https://example.com/static/scripts/app.js + +// Imagine /static/scripts/app.js contains `//# sourceMappingURL=../source-maps/app.js.map` +resolveUrl("/static/scripts/app.js", "../source-maps/app.js.map") +// https://example.com/static/source-maps/app.js.map + +resolveUrl("/static/scripts/app.js", "../source-maps/app.js.map", "../coffee/app.coffee") +// https://example.com/static/coffee/app.coffee + +resolveUrl("//cdn.example.com/jquery.js") +// https://cdn.example.com/jquery.js + +resolveUrl("http://foo.org/") +// http://foo.org/ +``` + + +Installation +============ + +- `npm install resolve-url` +- `bower install resolve-url` +- `component install lydell/resolve-url` + +Works with CommonJS, AMD and browser globals, through UMD. + + +Usage +===== + +### `resolveUrl(...urls)` ### + +Pass one or more urls. Resolves the last one to an absolute url, using the +previous ones and `window.location`. + +It’s like starting out on `window.location`, and then clicking links with the +urls as `href` attributes in order, from left to right. + +Unlike Node.js’ [`path.resolve`], this function always goes through all of the +arguments, from left to right. `path.resolve` goes from right to left and only +in the worst case goes through them all. Should that matter. + +Actually, the function is _really_ like clicking a lot of links in series: An +actual `` gets its `href` attribute set for each url! This means that the +url resolution of the browser is used, which makes this module really +light-weight. + +Also note that this functions deals with urls, not paths, so in that respect it +has more in common with Node.js’ [`url.resolve`]. But the arguments are more +like [`path.resolve`]. + +[`path.resolve`]: http://nodejs.org/api/path.html#path_path_resolve_from_to +[`url.resolve`]: http://nodejs.org/api/url.html#url_url_resolve_from_to + + +Tests +===== + +Run `npm test`, which lints the code and then gives you a link to open in a +browser of choice (using `testling`). + + +License +======= + +[The X11 (“MIT”) License](LICENSE). diff --git a/node_modules/resolve-url/resolve-url.js b/node_modules/resolve-url/resolve-url.js index dc5c5b7b..19e8d040 100644 --- a/node_modules/resolve-url/resolve-url.js +++ b/node_modules/resolve-url/resolve-url.js @@ -1,47 +1,47 @@ -// Copyright 2014 Simon Lydell -// X11 (“MIT”) Licensed. (See LICENSE.) - -void (function(root, factory) { - if (typeof define === "function" && define.amd) { - define(factory) - } else if (typeof exports === "object") { - module.exports = factory() - } else { - root.resolveUrl = factory() - } -}(this, function() { - - function resolveUrl(/* ...urls */) { - var numUrls = arguments.length - - if (numUrls === 0) { - throw new Error("resolveUrl requires at least one argument; got none.") - } - - var base = document.createElement("base") - base.href = arguments[0] - - if (numUrls === 1) { - return base.href - } - - var head = document.getElementsByTagName("head")[0] - head.insertBefore(base, head.firstChild) - - var a = document.createElement("a") - var resolved - - for (var index = 1; index < numUrls; index++) { - a.href = arguments[index] - resolved = a.href - base.href = resolved - } - - head.removeChild(base) - - return resolved - } - - return resolveUrl - -})); +// Copyright 2014 Simon Lydell +// X11 (“MIT”) Licensed. (See LICENSE.) + +void (function(root, factory) { + if (typeof define === "function" && define.amd) { + define(factory) + } else if (typeof exports === "object") { + module.exports = factory() + } else { + root.resolveUrl = factory() + } +}(this, function() { + + function resolveUrl(/* ...urls */) { + var numUrls = arguments.length + + if (numUrls === 0) { + throw new Error("resolveUrl requires at least one argument; got none.") + } + + var base = document.createElement("base") + base.href = arguments[0] + + if (numUrls === 1) { + return base.href + } + + var head = document.getElementsByTagName("head")[0] + head.insertBefore(base, head.firstChild) + + var a = document.createElement("a") + var resolved + + for (var index = 1; index < numUrls; index++) { + a.href = arguments[index] + resolved = a.href + base.href = resolved + } + + head.removeChild(base) + + return resolved + } + + return resolveUrl + +})); diff --git a/node_modules/resolve-url/test/resolve-url.js b/node_modules/resolve-url/test/resolve-url.js index 7f135a7c..18532edd 100644 --- a/node_modules/resolve-url/test/resolve-url.js +++ b/node_modules/resolve-url/test/resolve-url.js @@ -1,70 +1,70 @@ -// Copyright 2014 Simon Lydell -// X11 (“MIT”) Licensed. (See LICENSE.) - -var test = require("tape") - -var resolveUrl = require("../") - -"use strict" - -test("resolveUrl", function(t) { - - t.plan(7) - - t.equal(typeof resolveUrl, "function", "is a function") - - t.equal( - resolveUrl("https://example.com/"), - "https://example.com/" - ) - - var loc = "https://example.com/articles/resolving-urls/edit" - - t.equal( - resolveUrl(loc, "remove"), - "https://example.com/articles/resolving-urls/remove" - ) - - t.equal( - resolveUrl(loc, "/static/scripts/app.js"), - "https://example.com/static/scripts/app.js" - ) - - t.equal( - resolveUrl(loc, "/static/scripts/app.js", "../source-maps/app.js.map"), - "https://example.com/static/source-maps/app.js.map" - ) - - t.equal( - resolveUrl(loc, "/static/scripts/app.js", "../source-maps/app.js.map", "../coffee/app.coffee"), - "https://example.com/static/coffee/app.coffee" - ) - - t.equal( - resolveUrl(loc, "//cdn.example.com/jquery.js"), - "https://cdn.example.com/jquery.js" - ) - -}) - -test("edge cases", function(t) { - - t.plan(4) - - t["throws"](resolveUrl, /at least one argument/, "throws with no arguments") - - var accidentallyUndefined - var result - t.doesNotThrow( - function() { result = resolveUrl(accidentallyUndefined) }, - "undefined is still an argument" - ) - t.ok(result.match(/\/undefined$/), "undefined is stringified") - - t.equal( - resolveUrl("http://foo.org/test", undefined, {}, ["a/b"], null), - "http://foo.org/a/null", - "arguments are stringified" - ) - -}) +// Copyright 2014 Simon Lydell +// X11 (“MIT”) Licensed. (See LICENSE.) + +var test = require("tape") + +var resolveUrl = require("../") + +"use strict" + +test("resolveUrl", function(t) { + + t.plan(7) + + t.equal(typeof resolveUrl, "function", "is a function") + + t.equal( + resolveUrl("https://example.com/"), + "https://example.com/" + ) + + var loc = "https://example.com/articles/resolving-urls/edit" + + t.equal( + resolveUrl(loc, "remove"), + "https://example.com/articles/resolving-urls/remove" + ) + + t.equal( + resolveUrl(loc, "/static/scripts/app.js"), + "https://example.com/static/scripts/app.js" + ) + + t.equal( + resolveUrl(loc, "/static/scripts/app.js", "../source-maps/app.js.map"), + "https://example.com/static/source-maps/app.js.map" + ) + + t.equal( + resolveUrl(loc, "/static/scripts/app.js", "../source-maps/app.js.map", "../coffee/app.coffee"), + "https://example.com/static/coffee/app.coffee" + ) + + t.equal( + resolveUrl(loc, "//cdn.example.com/jquery.js"), + "https://cdn.example.com/jquery.js" + ) + +}) + +test("edge cases", function(t) { + + t.plan(4) + + t["throws"](resolveUrl, /at least one argument/, "throws with no arguments") + + var accidentallyUndefined + var result + t.doesNotThrow( + function() { result = resolveUrl(accidentallyUndefined) }, + "undefined is still an argument" + ) + t.ok(result.match(/\/undefined$/), "undefined is stringified") + + t.equal( + resolveUrl("http://foo.org/test", undefined, {}, ["a/b"], null), + "http://foo.org/a/null", + "arguments are stringified" + ) + +}) diff --git a/node_modules/typescript/AUTHORS.md b/node_modules/typescript/AUTHORS.md index 1f8cbe6c..2ee14e49 100644 --- a/node_modules/typescript/AUTHORS.md +++ b/node_modules/typescript/AUTHORS.md @@ -1,348 +1,348 @@ -TypeScript is authored by: -* Aaron Holmes -* Abubaker Bashir -* Adam Freidin -* Adi Dahiya -* Aditya Daflapurkar -* Adnan Chowdhury -* Adrian Leonhard -* Adrien Gibrat -* Ahmad Farid -* Akshar Patel -* Alan Agius -* Alex Chugaev -* Alex Eagle -* Alex Khomchenko -* Alex Ryan -* Alexander Kuvaev -* Alexander Rusakov -* Alexander Tarasyuk -* Ali Sabzevari -* Aliaksandr Radzivanovich -* Aluan Haddad -* Anatoly Ressin -* Anders Hejlsberg -* Andreas Martin -* Andrej Baran -* Andrew Casey -* Andrew Faulkner -* Andrew Ochsner -* Andrew Stegmaier -* Andrew Z Allen -* András Parditka -* Andy Hanson -* Anil Anar -* Anton Khlynovskiy -* Anton Tolmachev -* Anubha Mathur -* Armando Aguirre -* Arnaud Tournier -* Arnav Singh -* Artem Tyurin -* Arthur Ozga -* Asad Saeeduddin -* Avery Morin -* Basarat Ali Syed -* @begincalendar -* Ben Duffield -* Ben Mosher -* Benjamin Bock -* Benjamin Lichtman -* Benny Neugebauer -* Bill Ticehurst -* Blaine Bublitz -* Blake Embrey -* @bluelovers -* @bootstraponline -* Bowden Kelly -* Bowden Kenny -* Brandon Slade -* Brett Mayen -* Bryan Forbes -* Caitlin Potter -* Cameron Taggart -* @cedvdb -* Charles Pierce -* Charly POLY -* Chris Bubernak -* Christophe Vidal -* Chuck Jazdzewski -* Colby Russell -* Colin Snover -* Cotton Hou -* Cyrus Najmabadi -* Dafrok Zhang -* Dahan Gong -* Dan Corder -* Dan Freeman -* Dan Quirk -* Daniel Gooss -* Daniel Hollocher -* Daniel Król -* Daniel Lehenbauer -* Daniel Rosenwasser -* David Kmenta -* David Li -* David Sheldrick -* David Sherret -* David Souther -* David Staheli -* Denis Nedelyaev -* Derek P Sifford -* Dhruv Rajvanshi -* Dick van den Brink -* Diogo Franco (Kovensky) -* Dirk Bäumer -* Dirk Holtwick -* Dom Chen -* Donald Pipowitch -* Doug Ilijev -* @e-cloud -* Ecole Keine -* Elisée Maurer -* Elizabeth Dinella -* Emilio García-Pumarino -* Eric Grube -* Eric Tsang -* Erik Edrosa -* Erik McClenney -* Esakki Raj -* Ethan Resnick -* Ethan Rubio -* Eugene Timokhov -* Evan Martin -* Evan Sebastian -* Eyas Sharaiha -* Fabian Cook -* @falsandtru -* Filipe Silva -* @flowmemo -* Francois Wouts -* Frank Wallis -* Franklin Tse -* František Žiacik -* Gabe Moothart -* Gabriel Isenberg -* Gilad Peleg -* Godfrey Chan -* Graeme Wicksted -* Guilherme Oenning -* Guillaume Salles -* Guy Bedford -* Halasi Tamás -* Harald Niesche -* Hendrik Liebau -* Henry Mercer -* Herrington Darkholme -* Holger Jeromin -* Homa Wong -* Iain Monro -* @IdeaHunter -* Igor Novozhilov -* Ika -* Ingvar Stepanyan -* Isiah Meadows -* Ivan Enderlin -* Ivo Gabe de Wolff -* Iwata Hidetaka -* Jack Williams -* Jakub Korzeniowski -* Jakub Młokosiewicz -* James Henry -* James Whitney -* Jan Melcher -* Jason Freeman -* Jason Jarrett -* Jason Killian -* Jason Ramsay -* JBerger -* Jed Mao -* Jeffrey Morlan -* Jesse Schalken -* Jing Ma -* Jiri Tobisek -* Joe Calzaretta -* Joe Chung -* Joel Day -* Joey Wilson -* Johannes Rieken -* John Doe -* John Vilk -* Jonathan Bond-Caron -* Jonathan Park -* Jonathan Toland -* Jonathan Turner -* Jonathon Smith -* Jordi Oliveras Rovira -* Joscha Feth -* Josh Abernathy -* Josh Goldberg -* Josh Kalderimis -* Josh Soref -* Juan Luis Boya García -* Julian Williams -* Justin Bay -* Justin Johansson -* K. Preißer -* Kagami Sascha Rosylight -* Kanchalai Tanglertsampan -* Kate Miháliková -* Keith Mashinter -* Ken Howard -* Kenji Imamula -* Kerem Kat -* Kevin Donnelly -* Kevin Gibbons -* Kevin Lang -* Khải -* Kitson Kelly -* Klaus Meinhardt -* Kris Zyp -* Kyle Kelley -* Kārlis Gaņģis -* Lorant Pinter -* Lucien Greathouse -* Lukas Elmer -* Maarten Sijm -* Magnus Hiie -* Magnus Kulke -* Manish Giri -* Marin Marinov -* Marius Schulz -* Markus Johnsson -* Martin Hiller -* Martin Probst -* Martin Vseticka -* Martyn Janes -* Masahiro Wakame -* Mateusz Burzyński -* Matt Bierner -* Matt McCutchen -* Matt Mitchell -* Mattias Buelens -* Mattias Buelens -* Max Deepfield -* Maxwell Paul Brickner -* @meyer -* Micah Zoltu -* @micbou -* Michael -* Michael Bromley -* Mike Busyrev -* Mike Morearty -* Mine Starks -* Mohamed Hegazy -* Mohsen Azimi -* Myles Megyesi -* Nathan Shively-Sanders -* Nathan Yee -* Nicolas Henry -* Nicu Micleușanu -* @nieltg -* Nima Zahedi -* Noah Chen -* Noel Varanda -* Noj Vek -* Oleg Mihailik -* Oleksandr Chekhovskyi -* Omer Sheikh -* Orta Therox -* Oskar Segersva¨rd -* Oussama Ben Brahim -* Patrick Zhong -* Paul Jolly -* Paul Koerbitz -* Paul van Brenk -* @pcbro -* Pedro Maltez -* Perry Jiang -* Peter Burns -* Philip Bulley -* Philippe Voinov -* Pi Lanningham -* Piero Cangianiello -* @piloopin -* Prayag Verma -* Priyantha Lankapura -* @progre -* Punya Biswal -* Rado Kirov -* Raj Dosanjh -* Reiner Dolp -* Remo H. Jansen -* @rhysd -* Ricardo N Feliciano -* Richard Karmazín -* Richard Knoll -* Richard Sentino -* Robert Coie -* Rohit Verma -* Ron Buckton -* Rostislav Galimsky -* Rowan Wyborn -* Ryan Cavanaugh -* Ryohei Ikegami -* Sam Bostock -* Sam El-Husseini -* Sarangan Rajamanickam -* Sean Barag -* Sergey Rubanov -* Sergey Shandar -* Sergii Bezliudnyi -* Sharon Rolel -* Sheetal Nandi -* Shengping Zhong -* Shyyko Serhiy -* Simon Hürlimann -* Slawomir Sadziak -* Solal Pirelli -* Soo Jae Hwang -* Stan Thomas -* Stanislav Iliev -* Stanislav Sysoev -* Stas Vilchik -* Stephan Ginthör -* Steve Lucco -* @styfle -* Sudheesh Singanamalla -* Sébastien Arod -* @T18970237136 -* @t_ -* Taras Mankovski -* Tarik Ozket -* Tetsuharu Ohzeki -* Thomas den Hollander -* Thomas Loubiou -* Tien Hoanhtien -* Tim Lancina -* Tim Perry -* Tim Viiding-Spader -* Tingan Ho -* Todd Thomson -* togru -* Tomas Grubliauskas -* Torben Fitschen -* @TravCav -* TruongSinh Tran-Nguyen -* Tycho Grouwstra -* Vadi Taslim -* Vakhurin Sergey -* Vidar Tonaas Fauske -* Viktor Zozulyak -* Vilic Vane -* Vimal Raghubir -* Vladimir Kurchatkin -* Vladimir Matveev -* Vyacheslav Pukhanov -* Wenlu Wang -* Wesley Wigham -* William Orr -* Wilson Hobbs -* York Yao -* @yortus -* Yuichi Nukiyama -* Yuval Greenfield -* Zeeshan Ahmed -* Zev Spitz -* Zhengbo Li +TypeScript is authored by: +* Aaron Holmes +* Abubaker Bashir +* Adam Freidin +* Adi Dahiya +* Aditya Daflapurkar +* Adnan Chowdhury +* Adrian Leonhard +* Adrien Gibrat +* Ahmad Farid +* Akshar Patel +* Alan Agius +* Alex Chugaev +* Alex Eagle +* Alex Khomchenko +* Alex Ryan +* Alexander Kuvaev +* Alexander Rusakov +* Alexander Tarasyuk +* Ali Sabzevari +* Aliaksandr Radzivanovich +* Aluan Haddad +* Anatoly Ressin +* Anders Hejlsberg +* Andreas Martin +* Andrej Baran +* Andrew Casey +* Andrew Faulkner +* Andrew Ochsner +* Andrew Stegmaier +* Andrew Z Allen +* András Parditka +* Andy Hanson +* Anil Anar +* Anton Khlynovskiy +* Anton Tolmachev +* Anubha Mathur +* Armando Aguirre +* Arnaud Tournier +* Arnav Singh +* Artem Tyurin +* Arthur Ozga +* Asad Saeeduddin +* Avery Morin +* Basarat Ali Syed +* @begincalendar +* Ben Duffield +* Ben Mosher +* Benjamin Bock +* Benjamin Lichtman +* Benny Neugebauer +* Bill Ticehurst +* Blaine Bublitz +* Blake Embrey +* @bluelovers +* @bootstraponline +* Bowden Kelly +* Bowden Kenny +* Brandon Slade +* Brett Mayen +* Bryan Forbes +* Caitlin Potter +* Cameron Taggart +* @cedvdb +* Charles Pierce +* Charly POLY +* Chris Bubernak +* Christophe Vidal +* Chuck Jazdzewski +* Colby Russell +* Colin Snover +* Cotton Hou +* Cyrus Najmabadi +* Dafrok Zhang +* Dahan Gong +* Dan Corder +* Dan Freeman +* Dan Quirk +* Daniel Gooss +* Daniel Hollocher +* Daniel Król +* Daniel Lehenbauer +* Daniel Rosenwasser +* David Kmenta +* David Li +* David Sheldrick +* David Sherret +* David Souther +* David Staheli +* Denis Nedelyaev +* Derek P Sifford +* Dhruv Rajvanshi +* Dick van den Brink +* Diogo Franco (Kovensky) +* Dirk Bäumer +* Dirk Holtwick +* Dom Chen +* Donald Pipowitch +* Doug Ilijev +* @e-cloud +* Ecole Keine +* Elisée Maurer +* Elizabeth Dinella +* Emilio García-Pumarino +* Eric Grube +* Eric Tsang +* Erik Edrosa +* Erik McClenney +* Esakki Raj +* Ethan Resnick +* Ethan Rubio +* Eugene Timokhov +* Evan Martin +* Evan Sebastian +* Eyas Sharaiha +* Fabian Cook +* @falsandtru +* Filipe Silva +* @flowmemo +* Francois Wouts +* Frank Wallis +* Franklin Tse +* František Žiacik +* Gabe Moothart +* Gabriel Isenberg +* Gilad Peleg +* Godfrey Chan +* Graeme Wicksted +* Guilherme Oenning +* Guillaume Salles +* Guy Bedford +* Halasi Tamás +* Harald Niesche +* Hendrik Liebau +* Henry Mercer +* Herrington Darkholme +* Holger Jeromin +* Homa Wong +* Iain Monro +* @IdeaHunter +* Igor Novozhilov +* Ika +* Ingvar Stepanyan +* Isiah Meadows +* Ivan Enderlin +* Ivo Gabe de Wolff +* Iwata Hidetaka +* Jack Williams +* Jakub Korzeniowski +* Jakub Młokosiewicz +* James Henry +* James Whitney +* Jan Melcher +* Jason Freeman +* Jason Jarrett +* Jason Killian +* Jason Ramsay +* JBerger +* Jed Mao +* Jeffrey Morlan +* Jesse Schalken +* Jing Ma +* Jiri Tobisek +* Joe Calzaretta +* Joe Chung +* Joel Day +* Joey Wilson +* Johannes Rieken +* John Doe +* John Vilk +* Jonathan Bond-Caron +* Jonathan Park +* Jonathan Toland +* Jonathan Turner +* Jonathon Smith +* Jordi Oliveras Rovira +* Joscha Feth +* Josh Abernathy +* Josh Goldberg +* Josh Kalderimis +* Josh Soref +* Juan Luis Boya García +* Julian Williams +* Justin Bay +* Justin Johansson +* K. Preißer +* Kagami Sascha Rosylight +* Kanchalai Tanglertsampan +* Kate Miháliková +* Keith Mashinter +* Ken Howard +* Kenji Imamula +* Kerem Kat +* Kevin Donnelly +* Kevin Gibbons +* Kevin Lang +* Khải +* Kitson Kelly +* Klaus Meinhardt +* Kris Zyp +* Kyle Kelley +* Kārlis Gaņģis +* Lorant Pinter +* Lucien Greathouse +* Lukas Elmer +* Maarten Sijm +* Magnus Hiie +* Magnus Kulke +* Manish Giri +* Marin Marinov +* Marius Schulz +* Markus Johnsson +* Martin Hiller +* Martin Probst +* Martin Vseticka +* Martyn Janes +* Masahiro Wakame +* Mateusz Burzyński +* Matt Bierner +* Matt McCutchen +* Matt Mitchell +* Mattias Buelens +* Mattias Buelens +* Max Deepfield +* Maxwell Paul Brickner +* @meyer +* Micah Zoltu +* @micbou +* Michael +* Michael Bromley +* Mike Busyrev +* Mike Morearty +* Mine Starks +* Mohamed Hegazy +* Mohsen Azimi +* Myles Megyesi +* Nathan Shively-Sanders +* Nathan Yee +* Nicolas Henry +* Nicu Micleușanu +* @nieltg +* Nima Zahedi +* Noah Chen +* Noel Varanda +* Noj Vek +* Oleg Mihailik +* Oleksandr Chekhovskyi +* Omer Sheikh +* Orta Therox +* Oskar Segersva¨rd +* Oussama Ben Brahim +* Patrick Zhong +* Paul Jolly +* Paul Koerbitz +* Paul van Brenk +* @pcbro +* Pedro Maltez +* Perry Jiang +* Peter Burns +* Philip Bulley +* Philippe Voinov +* Pi Lanningham +* Piero Cangianiello +* @piloopin +* Prayag Verma +* Priyantha Lankapura +* @progre +* Punya Biswal +* Rado Kirov +* Raj Dosanjh +* Reiner Dolp +* Remo H. Jansen +* @rhysd +* Ricardo N Feliciano +* Richard Karmazín +* Richard Knoll +* Richard Sentino +* Robert Coie +* Rohit Verma +* Ron Buckton +* Rostislav Galimsky +* Rowan Wyborn +* Ryan Cavanaugh +* Ryohei Ikegami +* Sam Bostock +* Sam El-Husseini +* Sarangan Rajamanickam +* Sean Barag +* Sergey Rubanov +* Sergey Shandar +* Sergii Bezliudnyi +* Sharon Rolel +* Sheetal Nandi +* Shengping Zhong +* Shyyko Serhiy +* Simon Hürlimann +* Slawomir Sadziak +* Solal Pirelli +* Soo Jae Hwang +* Stan Thomas +* Stanislav Iliev +* Stanislav Sysoev +* Stas Vilchik +* Stephan Ginthör +* Steve Lucco +* @styfle +* Sudheesh Singanamalla +* Sébastien Arod +* @T18970237136 +* @t_ +* Taras Mankovski +* Tarik Ozket +* Tetsuharu Ohzeki +* Thomas den Hollander +* Thomas Loubiou +* Tien Hoanhtien +* Tim Lancina +* Tim Perry +* Tim Viiding-Spader +* Tingan Ho +* Todd Thomson +* togru +* Tomas Grubliauskas +* Torben Fitschen +* @TravCav +* TruongSinh Tran-Nguyen +* Tycho Grouwstra +* Vadi Taslim +* Vakhurin Sergey +* Vidar Tonaas Fauske +* Viktor Zozulyak +* Vilic Vane +* Vimal Raghubir +* Vladimir Kurchatkin +* Vladimir Matveev +* Vyacheslav Pukhanov +* Wenlu Wang +* Wesley Wigham +* William Orr +* Wilson Hobbs +* York Yao +* @yortus +* Yuichi Nukiyama +* Yuval Greenfield +* Zeeshan Ahmed +* Zev Spitz +* Zhengbo Li * @Zzzen \ No newline at end of file diff --git a/node_modules/typescript/LICENSE.txt b/node_modules/typescript/LICENSE.txt index edc24fd6..8746124b 100644 --- a/node_modules/typescript/LICENSE.txt +++ b/node_modules/typescript/LICENSE.txt @@ -1,55 +1,55 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS diff --git a/node_modules/typescript/README.md b/node_modules/typescript/README.md index 0cf25714..04c8c7db 100644 --- a/node_modules/typescript/README.md +++ b/node_modules/typescript/README.md @@ -1,99 +1,99 @@ - -# TypeScript - -[![Join the chat at https://gitter.im/Microsoft/TypeScript](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Microsoft/TypeScript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -[![Build Status](https://travis-ci.org/microsoft/TypeScript.svg?branch=master)](https://travis-ci.org/Microsoft/TypeScript) -[![VSTS Build Status](https://dev.azure.com/typescript/TypeScript/_apis/build/status/Typescript/node10)](https://dev.azure.com/typescript/TypeScript/_build/latest?definitionId=4&view=logs) -[![npm version](https://badge.fury.io/js/typescript.svg)](https://www.npmjs.com/package/typescript) -[![Downloads](https://img.shields.io/npm/dm/typescript.svg)](https://www.npmjs.com/package/typescript) - - - -[TypeScript](https://www.typescriptlang.org/) is a language for application-scale JavaScript. TypeScript adds optional types to JavaScript that support tools for large-scale JavaScript applications for any browser, for any host, on any OS. TypeScript compiles to readable, standards-based JavaScript. Try it out at the [playground](https://www.typescriptlang.org/play/), and stay up to date via [our blog](https://blogs.msdn.microsoft.com/typescript) and [Twitter account](https://twitter.com/typescript). - -## Installing - -For the latest stable version: - -```bash -npm install -g typescript -``` - -For our nightly builds: - -```bash -npm install -g typescript@next -``` - -## Contribute - -There are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript. -* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in. -* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls). -* Engage with other TypeScript users and developers on [StackOverflow](https://stackoverflow.com/questions/tagged/typescript). -* Join the [#typescript](https://twitter.com/search?q=%23TypeScript) discussion on Twitter. -* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md). -* Read the language specification ([docx](https://github.com/Microsoft/TypeScript/blob/master/doc/TypeScript%20Language%20Specification.docx?raw=true), - [pdf](https://github.com/Microsoft/TypeScript/blob/master/doc/TypeScript%20Language%20Specification.pdf?raw=true), [md](https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md)). - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see -the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) -with any additional questions or comments. - -## Documentation - -* [Quick tutorial](https://www.typescriptlang.org/docs/tutorial.html) -* [Programming handbook](https://www.typescriptlang.org/docs/handbook/basic-types.html) -* [Language specification](https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md) -* [Homepage](https://www.typescriptlang.org/) - -## Building - -In order to build the TypeScript compiler, ensure that you have [Git](https://git-scm.com/downloads) and [Node.js](https://nodejs.org/) installed. - -Clone a copy of the repo: - -```bash -git clone https://github.com/Microsoft/TypeScript.git -``` - -Change to the TypeScript directory: - -```bash -cd TypeScript -``` - -Install [Gulp](https://gulpjs.com/) tools and dev dependencies: - -```bash -npm install -g gulp -npm install -``` - -Use one of the following to build and test: - -``` -gulp local # Build the compiler into built/local -gulp clean # Delete the built compiler -gulp LKG # Replace the last known good with the built one. - # Bootstrapping step to be executed when the built compiler reaches a stable state. -gulp tests # Build the test infrastructure using the built compiler. -gulp runtests # Run tests using the built compiler and test infrastructure. - # You can override the host or specify a test for this command. - # Use --host= or --tests=. -gulp baseline-accept # This replaces the baseline test results with the results obtained from gulp runtests. -gulp lint # Runs tslint on the TypeScript source. -gulp help # List the above commands. -``` - - -## Usage - -```bash -node built/local/tsc.js hello.ts -``` - - -## Roadmap - -For details on our planned features and future direction please refer to our [roadmap](https://github.com/Microsoft/TypeScript/wiki/Roadmap). + +# TypeScript + +[![Join the chat at https://gitter.im/Microsoft/TypeScript](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Microsoft/TypeScript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![Build Status](https://travis-ci.org/microsoft/TypeScript.svg?branch=master)](https://travis-ci.org/Microsoft/TypeScript) +[![VSTS Build Status](https://dev.azure.com/typescript/TypeScript/_apis/build/status/Typescript/node10)](https://dev.azure.com/typescript/TypeScript/_build/latest?definitionId=4&view=logs) +[![npm version](https://badge.fury.io/js/typescript.svg)](https://www.npmjs.com/package/typescript) +[![Downloads](https://img.shields.io/npm/dm/typescript.svg)](https://www.npmjs.com/package/typescript) + + + +[TypeScript](https://www.typescriptlang.org/) is a language for application-scale JavaScript. TypeScript adds optional types to JavaScript that support tools for large-scale JavaScript applications for any browser, for any host, on any OS. TypeScript compiles to readable, standards-based JavaScript. Try it out at the [playground](https://www.typescriptlang.org/play/), and stay up to date via [our blog](https://blogs.msdn.microsoft.com/typescript) and [Twitter account](https://twitter.com/typescript). + +## Installing + +For the latest stable version: + +```bash +npm install -g typescript +``` + +For our nightly builds: + +```bash +npm install -g typescript@next +``` + +## Contribute + +There are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript. +* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in. +* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls). +* Engage with other TypeScript users and developers on [StackOverflow](https://stackoverflow.com/questions/tagged/typescript). +* Join the [#typescript](https://twitter.com/search?q=%23TypeScript) discussion on Twitter. +* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md). +* Read the language specification ([docx](https://github.com/Microsoft/TypeScript/blob/master/doc/TypeScript%20Language%20Specification.docx?raw=true), + [pdf](https://github.com/Microsoft/TypeScript/blob/master/doc/TypeScript%20Language%20Specification.pdf?raw=true), [md](https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md)). + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see +the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) +with any additional questions or comments. + +## Documentation + +* [Quick tutorial](https://www.typescriptlang.org/docs/tutorial.html) +* [Programming handbook](https://www.typescriptlang.org/docs/handbook/basic-types.html) +* [Language specification](https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md) +* [Homepage](https://www.typescriptlang.org/) + +## Building + +In order to build the TypeScript compiler, ensure that you have [Git](https://git-scm.com/downloads) and [Node.js](https://nodejs.org/) installed. + +Clone a copy of the repo: + +```bash +git clone https://github.com/Microsoft/TypeScript.git +``` + +Change to the TypeScript directory: + +```bash +cd TypeScript +``` + +Install [Gulp](https://gulpjs.com/) tools and dev dependencies: + +```bash +npm install -g gulp +npm install +``` + +Use one of the following to build and test: + +``` +gulp local # Build the compiler into built/local +gulp clean # Delete the built compiler +gulp LKG # Replace the last known good with the built one. + # Bootstrapping step to be executed when the built compiler reaches a stable state. +gulp tests # Build the test infrastructure using the built compiler. +gulp runtests # Run tests using the built compiler and test infrastructure. + # You can override the host or specify a test for this command. + # Use --host= or --tests=. +gulp baseline-accept # This replaces the baseline test results with the results obtained from gulp runtests. +gulp lint # Runs tslint on the TypeScript source. +gulp help # List the above commands. +``` + + +## Usage + +```bash +node built/local/tsc.js hello.ts +``` + + +## Roadmap + +For details on our planned features and future direction please refer to our [roadmap](https://github.com/Microsoft/TypeScript/wiki/Roadmap). diff --git a/node_modules/typescript/ThirdPartyNoticeText.txt b/node_modules/typescript/ThirdPartyNoticeText.txt index b4f9cb68..26aa57f2 100644 --- a/node_modules/typescript/ThirdPartyNoticeText.txt +++ b/node_modules/typescript/ThirdPartyNoticeText.txt @@ -1,193 +1,193 @@ -/*!----------------- TypeScript ThirdPartyNotices ------------------------------------------------------- - -The TypeScript software incorporates third party material from the projects listed below. The original copyright notice and the license under which Microsoft received such third party material are set forth below. Microsoft reserves all other rights not expressly granted, whether by implication, estoppel or otherwise. - ---------------------------------------------- -Third Party Code Components --------------------------------------------- - -------------------- DefinitelyTyped -------------------- -This file is based on or incorporates material from the projects listed below (collectively "Third Party Code"). Microsoft is not the original author of the Third Party Code. The original copyright notice and the license, under which Microsoft received such Third Party Code, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft, not the third party, licenses the Third Party Code to you under the terms set forth in the EULA for the Microsoft Product. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise. -DefinitelyTyped -This project is licensed under the MIT license. Copyrights are respective of each contributor listed at the beginning of each definition file. Provided for Informational Purposes Only - -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. --------------------------------------------------------------------------------------- - -------------------- Unicode -------------------- -UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE - -Unicode Data Files include all data files under the directories -http://www.unicode.org/Public/, http://www.unicode.org/reports/, -http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and -http://www.unicode.org/utility/trac/browser/. - -Unicode Data Files do not include PDF online code charts under the -directory http://www.unicode.org/Public/. - -Software includes any source code published in the Unicode Standard -or under the directories -http://www.unicode.org/Public/, http://www.unicode.org/reports/, -http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and -http://www.unicode.org/utility/trac/browser/. - -NOTICE TO USER: Carefully read the following legal agreement. -BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S -DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), -YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. -IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE -THE DATA FILES OR SOFTWARE. - -COPYRIGHT AND PERMISSION NOTICE - -Copyright (c) 1991-2017 Unicode, Inc. All rights reserved. -Distributed under the Terms of Use in http://www.unicode.org/copyright.html. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Unicode data files and any associated documentation -(the "Data Files") or Unicode software and any associated documentation -(the "Software") to deal in the Data Files or Software -without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, and/or sell copies of -the Data Files or Software, and to permit persons to whom the Data Files -or Software are furnished to do so, provided that either -(a) this copyright and permission notice appear with all copies -of the Data Files or Software, or -(b) this copyright and permission notice appear in associated -Documentation. - -THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS -NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL 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 THE DATA FILES OR SOFTWARE. - -Except as contained in this notice, the name of a copyright holder -shall not be used in advertising or otherwise to promote the sale, -use or other dealings in these Data Files or Software without prior -written authorization of the copyright holder. -------------------------------------------------------------------------------------- - --------------------Document Object Model----------------------------- -DOM - -W3C License -This work is being provided by the copyright holders under the following license. -By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. -Permission to copy, modify, and distribute this work, with or without modification,for any purpose and without fee or royalty is hereby granted, provided that you include the following -on ALL copies of the work or portions thereof, including modifications: -* The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. -* Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. -* Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived -from [title and URI of the W3C document]. Copyright [YEAR] W3C (MIT, ERCIM, Keio, Beihang)." -Disclaimers -THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR -FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. -COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. -The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. -Title to copyright in this work will at all times remain with copyright holders. - ---------- - -DOM -Copyright 2018 WHATWG (Apple, Google, Mozilla, Microsoft). This work is licensed under a Creative Commons Attribution 4.0 International License: Attribution 4.0 International -======================================================================= -Creative Commons Corporation ("Creative Commons") is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an "as-is" basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Using Creative Commons Public Licenses Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC- licensed material, or material used under an exception or limitation to copyright. More considerations for licensors: - -wiki.creativecommons.org/Considerations_for_licensors Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor's permission is not necessary for any reason--for example, because of any applicable exception or limitation to copyright--then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More_considerations for the public: wiki.creativecommons.org/Considerations_for_licensees ======================================================================= -Creative Commons Attribution 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 -- Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. h. Licensor means the individual(s) or entity(ies) granting rights under this Public License. i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 -- Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: a. reproduce and Share the Licensed Material, in whole or in part; and b. produce, reproduce, and Share Adapted Material. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a) (4) never produces Adapted Material. 5. Downstream recipients. a. Offer from the Licensor -- Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. b. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. Section 3 -- License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: a. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; b. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and c. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. Section 4 -- Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 -- Disclaimer of Warranties and Limitation of Liability. a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 -- Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 -- Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 -- Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. ======================================================================= Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the "Licensor." Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark "Creative Commons" or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. - --------------------------------------------------------------------------------- - -----------------------Web Background Synchronization------------------------------ - -Web Background Synchronization Specification -Portions of spec by W3C - -W3C Community Final Specification Agreement -To secure commitments from participants for the full text of a Community or Business Group Report, the group may call for voluntary commitments to the following terms; a "summary" is -available. See also the related "W3C Community Contributor License Agreement". -1. The Purpose of this Agreement. -This Agreement sets forth the terms under which I make certain copyright and patent rights available to you for your implementation of the Specification. -Any other capitalized terms not specifically defined herein have the same meaning as those terms have in the "W3C Patent Policy", and if not defined there, in the "W3C Process Document". -2. Copyrights. -2.1. Copyright Grant. I grant to you a perpetual (for the duration of the applicable copyright), worldwide, non-exclusive, no-charge, royalty-free, copyright license, without any obligation for accounting to me, to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, distribute, and implement the Specification to the full extent of my copyright interest in the Specification. -2.2. Attribution. As a condition of the copyright grant, you must include an attribution to the Specification in any derivative work you make based on the Specification. That attribution must include, at minimum, the Specification name and version number. -3. Patents. -3.1. Patent Licensing Commitment. I agree to license my Essential Claims under the W3C Community RF Licensing Requirements. This requirement includes Essential Claims that I own and any that I have the right to license without obligation of payment or other consideration to an unrelated third party. W3C Community RF Licensing Requirements obligations made concerning the Specification and described in this policy are binding on me for the life of the patents in question and encumber the patents containing Essential Claims, regardless of changes in participation status or W3C Membership. I also agree to license my Essential Claims under the W3C Community RF Licensing Requirements in derivative works of the Specification so long as all normative portions of the Specification are maintained and that this licensing commitment does not extend to any portion of the derivative work that was not included in the Specification. -3.2. Optional, Additional Patent Grant. In addition to the provisions of Section 3.1, I may also, at my option, make certain intellectual property rights infringed by implementations of the Specification, including Essential Claims, available by providing those terms via the W3C Web site. -4. No Other Rights. Except as specifically set forth in this Agreement, no other express or implied patent, trademark, copyright, or other property rights are granted under this Agreement, including by implication, waiver, or estoppel. -5. Antitrust Compliance. I acknowledge that I may compete with other participants, that I am under no obligation to implement the Specification, that each participant is free to develop competing technologies and standards, and that each party is free to license its patent rights to third parties, including for the purpose of enabling competing technologies and standards. -6. Non-Circumvention. I agree that I will not intentionally take or willfully assist any third party to take any action for the purpose of circumventing my obligations under this Agreement. -7. Transition to W3C Recommendation Track. The Specification developed by the Project may transition to the W3C Recommendation Track. The W3C Team is responsible for notifying me that a Corresponding Working Group has been chartered. I have no obligation to join the Corresponding Working Group. If the Specification developed by the Project transitions to the W3C Recommendation Track, the following terms apply: -7.1. If I join the Corresponding Working Group. If I join the Corresponding Working Group, I will be subject to all W3C rules, obligations, licensing commitments, and policies that govern that Corresponding Working Group. -7.2. If I Do Not Join the Corresponding Working Group. -7.2.1. Licensing Obligations to Resulting Specification. If I do not join the Corresponding Working Group, I agree to offer patent licenses according to the W3C Royalty-Free licensing requirements described in Section 5 of the W3C Patent Policy for the portions of the Specification included in the resulting Recommendation. This licensing commitment does not extend to any portion of an implementation of the Recommendation that was not included in the Specification. This licensing commitment may not be revoked but may be modified through the exclusion process defined in Section 4 of the W3C Patent Policy. I am not required to join the Corresponding Working Group to exclude patents from the W3C Royalty-Free licensing commitment, but must otherwise follow the normal exclusion procedures defined by the W3C Patent Policy. The W3C Team will notify me of any Call for Exclusion in the Corresponding Working Group as set forth in Section 4.5 of the W3C Patent Policy. -7.2.2. No Disclosure Obligation. If I do not join the Corresponding Working Group, I have no patent disclosure obligations outside of those set forth in Section 6 of the W3C Patent Policy. -8. Conflict of Interest. I will disclose significant relationships when those relationships might reasonably be perceived as creating a conflict of interest with my role. I will notify W3C of any change in my affiliation using W3C-provided mechanisms. -9. Representations, Warranties and Disclaimers. I represent and warrant that I am legally entitled to grant the rights and promises set forth in this Agreement. IN ALL OTHER RESPECTS THE SPECIFICATION IS PROVIDED AS IS. The entire risk as to implementing or otherwise using the Specification is assumed by the implementer and user. Except as stated herein, I expressly disclaim any warranties (express, implied, or otherwise), including implied warranties of merchantability, non-infringement, fitness for a particular purpose, or title, related to the Specification. IN NO EVENT WILL ANY PARTY BE LIABLE TO ANY OTHER PARTY FOR LOST PROFITS OR ANY FORM OF INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER FROM ANY CAUSES OF ACTION OF ANY KIND WITH RESPECT TO THIS AGREEMENT, WHETHER BASED ON BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE), OR OTHERWISE, AND WHETHER OR NOT THE OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. All of my obligations under Section 3 regarding the transfer, successors in interest, or assignment of Granted Claims will be satisfied if I notify the transferee or assignee of any patent that I know contains Granted Claims of the obligations under Section 3. Nothing in this Agreement requires me to undertake a patent search. -10. Definitions. -10.1. Agreement. Agreement means this W3C Community Final Specification Agreement. -10.2. Corresponding Working Group. Corresponding Working Group is a W3C Working Group that is chartered to develop a Recommendation, as defined in the W3C Process Document, that takes the Specification as an input. -10.3. Essential Claims. Essential Claims shall mean all claims in any patent or patent application in any jurisdiction in the world that would necessarily be infringed by implementation of the Specification. A claim is necessarily infringed hereunder only when it is not possible to avoid infringing it because there is no non-infringing alternative for implementing the normative portions of the Specification. Existence of a non-infringing alternative shall be judged based on the state of the art at the time of the publication of the Specification. The following are expressly excluded from and shall not be deemed to constitute Essential Claims: -10.3.1. any claims other than as set forth above even if contained in the same patent as Essential Claims; and -10.3.2. claims which would be infringed only by: -portions of an implementation that are not specified in the normative portions of the Specification, or -enabling technologies that may be necessary to make or use any product or portion thereof that complies with the Specification and are not themselves expressly set forth in the Specification (e.g., semiconductor manufacturing technology, compiler technology, object-oriented technology, basic operating system technology, and the like); or -the implementation of technology developed elsewhere and merely incorporated by reference in the body of the Specification. -10.3.3. design patents and design registrations. -For purposes of this definition, the normative portions of the Specification shall be deemed to include only architectural and interoperability requirements. Optional features in the RFC 2119 sense are considered normative unless they are specifically identified as informative. Implementation examples or any other material that merely illustrate the requirements of the Specification are informative, rather than normative. -10.4. I, Me, or My. I, me, or my refers to the signatory. -10.5 Project. Project means the W3C Community Group or Business Group for which I executed this Agreement. -10.6. Specification. Specification means the Specification identified by the Project as the target of this agreement in a call for Final Specification Commitments. W3C shall provide the authoritative mechanisms for the identification of this Specification. -10.7. W3C Community RF Licensing Requirements. W3C Community RF Licensing Requirements license shall mean a non-assignable, non-sublicensable license to make, have made, use, sell, have sold, offer to sell, import, and distribute and dispose of implementations of the Specification that: -10.7.1. shall be available to all, worldwide, whether or not they are W3C Members; -10.7.2. shall extend to all Essential Claims owned or controlled by me; -10.7.3. may be limited to implementations of the Specification, and to what is required by the Specification; -10.7.4. may be conditioned on a grant of a reciprocal RF license (as defined in this policy) to all Essential Claims owned or controlled by the licensee. A reciprocal license may be required to be available to all, and a reciprocal license may itself be conditioned on a further reciprocal license from all. -10.7.5. may not be conditioned on payment of royalties, fees or other consideration; -10.7.6. may be suspended with respect to any licensee when licensor issued by licensee for infringement of claims essential to implement the Specification or any W3C Recommendation; -10.7.7. may not impose any further conditions or restrictions on the use of any technology, intellectual property rights, or other restrictions on behavior of the licensee, but may include reasonable, customary terms relating to operation or maintenance of the license relationship such as the following: choice of law and dispute resolution; -10.7.8. shall not be considered accepted by an implementer who manifests an intent not to accept the terms of the W3C Community RF Licensing Requirements license as offered by the licensor. -10.7.9. The RF license conforming to the requirements in this policy shall be made available by the licensor as long as the Specification is in effect. The term of such license shall be for the life of the patents in question. -I am encouraged to provide a contact from which licensing information can be obtained and other relevant licensing information. Any such information will be made publicly available. -10.8. You or Your. You, you, or your means any person or entity who exercises copyright or patent rights granted under this Agreement, and any person that person or entity controls. - -------------------------------------------------------------------------------------- - -------------------- WebGL ----------------------------- -Copyright (c) 2018 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are 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 Materials. - -THE MATERIALS ARE 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 -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. ------------------------------------------------------- - -------------- End of ThirdPartyNotices ------------------------------------------- */ - +/*!----------------- TypeScript ThirdPartyNotices ------------------------------------------------------- + +The TypeScript software incorporates third party material from the projects listed below. The original copyright notice and the license under which Microsoft received such third party material are set forth below. Microsoft reserves all other rights not expressly granted, whether by implication, estoppel or otherwise. + +--------------------------------------------- +Third Party Code Components +-------------------------------------------- + +------------------- DefinitelyTyped -------------------- +This file is based on or incorporates material from the projects listed below (collectively "Third Party Code"). Microsoft is not the original author of the Third Party Code. The original copyright notice and the license, under which Microsoft received such Third Party Code, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft, not the third party, licenses the Third Party Code to you under the terms set forth in the EULA for the Microsoft Product. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise. +DefinitelyTyped +This project is licensed under the MIT license. Copyrights are respective of each contributor listed at the beginning of each definition file. Provided for Informational Purposes Only + +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. +-------------------------------------------------------------------------------------- + +------------------- Unicode -------------------- +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE + +Unicode Data Files include all data files under the directories +http://www.unicode.org/Public/, http://www.unicode.org/reports/, +http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and +http://www.unicode.org/utility/trac/browser/. + +Unicode Data Files do not include PDF online code charts under the +directory http://www.unicode.org/Public/. + +Software includes any source code published in the Unicode Standard +or under the directories +http://www.unicode.org/Public/, http://www.unicode.org/reports/, +http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and +http://www.unicode.org/utility/trac/browser/. + +NOTICE TO USER: Carefully read the following legal agreement. +BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S +DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), +YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. +IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE +THE DATA FILES OR SOFTWARE. + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1991-2017 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in http://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL 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 THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +------------------------------------------------------------------------------------- + +-------------------Document Object Model----------------------------- +DOM + +W3C License +This work is being provided by the copyright holders under the following license. +By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. +Permission to copy, modify, and distribute this work, with or without modification,for any purpose and without fee or royalty is hereby granted, provided that you include the following +on ALL copies of the work or portions thereof, including modifications: +* The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. +* Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. +* Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived +from [title and URI of the W3C document]. Copyright [YEAR] W3C (MIT, ERCIM, Keio, Beihang)." +Disclaimers +THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR +FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. +Title to copyright in this work will at all times remain with copyright holders. + +--------- + +DOM +Copyright 2018 WHATWG (Apple, Google, Mozilla, Microsoft). This work is licensed under a Creative Commons Attribution 4.0 International License: Attribution 4.0 International +======================================================================= +Creative Commons Corporation ("Creative Commons") is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an "as-is" basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Using Creative Commons Public Licenses Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC- licensed material, or material used under an exception or limitation to copyright. More considerations for licensors: + +wiki.creativecommons.org/Considerations_for_licensors Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor's permission is not necessary for any reason--for example, because of any applicable exception or limitation to copyright--then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More_considerations for the public: wiki.creativecommons.org/Considerations_for_licensees ======================================================================= +Creative Commons Attribution 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 -- Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. h. Licensor means the individual(s) or entity(ies) granting rights under this Public License. i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 -- Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: a. reproduce and Share the Licensed Material, in whole or in part; and b. produce, reproduce, and Share Adapted Material. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a) (4) never produces Adapted Material. 5. Downstream recipients. a. Offer from the Licensor -- Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. b. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. Section 3 -- License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: a. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; b. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and c. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. Section 4 -- Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 -- Disclaimer of Warranties and Limitation of Liability. a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 -- Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 -- Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 -- Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. ======================================================================= Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the "Licensor." Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark "Creative Commons" or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. + +-------------------------------------------------------------------------------- + +----------------------Web Background Synchronization------------------------------ + +Web Background Synchronization Specification +Portions of spec by W3C + +W3C Community Final Specification Agreement +To secure commitments from participants for the full text of a Community or Business Group Report, the group may call for voluntary commitments to the following terms; a "summary" is +available. See also the related "W3C Community Contributor License Agreement". +1. The Purpose of this Agreement. +This Agreement sets forth the terms under which I make certain copyright and patent rights available to you for your implementation of the Specification. +Any other capitalized terms not specifically defined herein have the same meaning as those terms have in the "W3C Patent Policy", and if not defined there, in the "W3C Process Document". +2. Copyrights. +2.1. Copyright Grant. I grant to you a perpetual (for the duration of the applicable copyright), worldwide, non-exclusive, no-charge, royalty-free, copyright license, without any obligation for accounting to me, to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, distribute, and implement the Specification to the full extent of my copyright interest in the Specification. +2.2. Attribution. As a condition of the copyright grant, you must include an attribution to the Specification in any derivative work you make based on the Specification. That attribution must include, at minimum, the Specification name and version number. +3. Patents. +3.1. Patent Licensing Commitment. I agree to license my Essential Claims under the W3C Community RF Licensing Requirements. This requirement includes Essential Claims that I own and any that I have the right to license without obligation of payment or other consideration to an unrelated third party. W3C Community RF Licensing Requirements obligations made concerning the Specification and described in this policy are binding on me for the life of the patents in question and encumber the patents containing Essential Claims, regardless of changes in participation status or W3C Membership. I also agree to license my Essential Claims under the W3C Community RF Licensing Requirements in derivative works of the Specification so long as all normative portions of the Specification are maintained and that this licensing commitment does not extend to any portion of the derivative work that was not included in the Specification. +3.2. Optional, Additional Patent Grant. In addition to the provisions of Section 3.1, I may also, at my option, make certain intellectual property rights infringed by implementations of the Specification, including Essential Claims, available by providing those terms via the W3C Web site. +4. No Other Rights. Except as specifically set forth in this Agreement, no other express or implied patent, trademark, copyright, or other property rights are granted under this Agreement, including by implication, waiver, or estoppel. +5. Antitrust Compliance. I acknowledge that I may compete with other participants, that I am under no obligation to implement the Specification, that each participant is free to develop competing technologies and standards, and that each party is free to license its patent rights to third parties, including for the purpose of enabling competing technologies and standards. +6. Non-Circumvention. I agree that I will not intentionally take or willfully assist any third party to take any action for the purpose of circumventing my obligations under this Agreement. +7. Transition to W3C Recommendation Track. The Specification developed by the Project may transition to the W3C Recommendation Track. The W3C Team is responsible for notifying me that a Corresponding Working Group has been chartered. I have no obligation to join the Corresponding Working Group. If the Specification developed by the Project transitions to the W3C Recommendation Track, the following terms apply: +7.1. If I join the Corresponding Working Group. If I join the Corresponding Working Group, I will be subject to all W3C rules, obligations, licensing commitments, and policies that govern that Corresponding Working Group. +7.2. If I Do Not Join the Corresponding Working Group. +7.2.1. Licensing Obligations to Resulting Specification. If I do not join the Corresponding Working Group, I agree to offer patent licenses according to the W3C Royalty-Free licensing requirements described in Section 5 of the W3C Patent Policy for the portions of the Specification included in the resulting Recommendation. This licensing commitment does not extend to any portion of an implementation of the Recommendation that was not included in the Specification. This licensing commitment may not be revoked but may be modified through the exclusion process defined in Section 4 of the W3C Patent Policy. I am not required to join the Corresponding Working Group to exclude patents from the W3C Royalty-Free licensing commitment, but must otherwise follow the normal exclusion procedures defined by the W3C Patent Policy. The W3C Team will notify me of any Call for Exclusion in the Corresponding Working Group as set forth in Section 4.5 of the W3C Patent Policy. +7.2.2. No Disclosure Obligation. If I do not join the Corresponding Working Group, I have no patent disclosure obligations outside of those set forth in Section 6 of the W3C Patent Policy. +8. Conflict of Interest. I will disclose significant relationships when those relationships might reasonably be perceived as creating a conflict of interest with my role. I will notify W3C of any change in my affiliation using W3C-provided mechanisms. +9. Representations, Warranties and Disclaimers. I represent and warrant that I am legally entitled to grant the rights and promises set forth in this Agreement. IN ALL OTHER RESPECTS THE SPECIFICATION IS PROVIDED AS IS. The entire risk as to implementing or otherwise using the Specification is assumed by the implementer and user. Except as stated herein, I expressly disclaim any warranties (express, implied, or otherwise), including implied warranties of merchantability, non-infringement, fitness for a particular purpose, or title, related to the Specification. IN NO EVENT WILL ANY PARTY BE LIABLE TO ANY OTHER PARTY FOR LOST PROFITS OR ANY FORM OF INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER FROM ANY CAUSES OF ACTION OF ANY KIND WITH RESPECT TO THIS AGREEMENT, WHETHER BASED ON BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE), OR OTHERWISE, AND WHETHER OR NOT THE OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. All of my obligations under Section 3 regarding the transfer, successors in interest, or assignment of Granted Claims will be satisfied if I notify the transferee or assignee of any patent that I know contains Granted Claims of the obligations under Section 3. Nothing in this Agreement requires me to undertake a patent search. +10. Definitions. +10.1. Agreement. Agreement means this W3C Community Final Specification Agreement. +10.2. Corresponding Working Group. Corresponding Working Group is a W3C Working Group that is chartered to develop a Recommendation, as defined in the W3C Process Document, that takes the Specification as an input. +10.3. Essential Claims. Essential Claims shall mean all claims in any patent or patent application in any jurisdiction in the world that would necessarily be infringed by implementation of the Specification. A claim is necessarily infringed hereunder only when it is not possible to avoid infringing it because there is no non-infringing alternative for implementing the normative portions of the Specification. Existence of a non-infringing alternative shall be judged based on the state of the art at the time of the publication of the Specification. The following are expressly excluded from and shall not be deemed to constitute Essential Claims: +10.3.1. any claims other than as set forth above even if contained in the same patent as Essential Claims; and +10.3.2. claims which would be infringed only by: +portions of an implementation that are not specified in the normative portions of the Specification, or +enabling technologies that may be necessary to make or use any product or portion thereof that complies with the Specification and are not themselves expressly set forth in the Specification (e.g., semiconductor manufacturing technology, compiler technology, object-oriented technology, basic operating system technology, and the like); or +the implementation of technology developed elsewhere and merely incorporated by reference in the body of the Specification. +10.3.3. design patents and design registrations. +For purposes of this definition, the normative portions of the Specification shall be deemed to include only architectural and interoperability requirements. Optional features in the RFC 2119 sense are considered normative unless they are specifically identified as informative. Implementation examples or any other material that merely illustrate the requirements of the Specification are informative, rather than normative. +10.4. I, Me, or My. I, me, or my refers to the signatory. +10.5 Project. Project means the W3C Community Group or Business Group for which I executed this Agreement. +10.6. Specification. Specification means the Specification identified by the Project as the target of this agreement in a call for Final Specification Commitments. W3C shall provide the authoritative mechanisms for the identification of this Specification. +10.7. W3C Community RF Licensing Requirements. W3C Community RF Licensing Requirements license shall mean a non-assignable, non-sublicensable license to make, have made, use, sell, have sold, offer to sell, import, and distribute and dispose of implementations of the Specification that: +10.7.1. shall be available to all, worldwide, whether or not they are W3C Members; +10.7.2. shall extend to all Essential Claims owned or controlled by me; +10.7.3. may be limited to implementations of the Specification, and to what is required by the Specification; +10.7.4. may be conditioned on a grant of a reciprocal RF license (as defined in this policy) to all Essential Claims owned or controlled by the licensee. A reciprocal license may be required to be available to all, and a reciprocal license may itself be conditioned on a further reciprocal license from all. +10.7.5. may not be conditioned on payment of royalties, fees or other consideration; +10.7.6. may be suspended with respect to any licensee when licensor issued by licensee for infringement of claims essential to implement the Specification or any W3C Recommendation; +10.7.7. may not impose any further conditions or restrictions on the use of any technology, intellectual property rights, or other restrictions on behavior of the licensee, but may include reasonable, customary terms relating to operation or maintenance of the license relationship such as the following: choice of law and dispute resolution; +10.7.8. shall not be considered accepted by an implementer who manifests an intent not to accept the terms of the W3C Community RF Licensing Requirements license as offered by the licensor. +10.7.9. The RF license conforming to the requirements in this policy shall be made available by the licensor as long as the Specification is in effect. The term of such license shall be for the life of the patents in question. +I am encouraged to provide a contact from which licensing information can be obtained and other relevant licensing information. Any such information will be made publicly available. +10.8. You or Your. You, you, or your means any person or entity who exercises copyright or patent rights granted under this Agreement, and any person that person or entity controls. + +------------------------------------------------------------------------------------- + +------------------- WebGL ----------------------------- +Copyright (c) 2018 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are 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 Materials. + +THE MATERIALS ARE 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 +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +------------------------------------------------------ + +------------- End of ThirdPartyNotices ------------------------------------------- */ + diff --git a/node_modules/typescript/lib/lib.d.ts b/node_modules/typescript/lib/lib.d.ts index 38a1cc01..6b79c0ad 100644 --- a/node_modules/typescript/lib/lib.d.ts +++ b/node_modules/typescript/lib/lib.d.ts @@ -15,10 +15,10 @@ and limitations under the License. -/// +/// -/// -/// -/// -/// +/// +/// +/// +/// diff --git a/node_modules/typescript/lib/lib.dom.d.ts b/node_modules/typescript/lib/lib.dom.d.ts index 92500ffc..ffb28f24 100644 --- a/node_modules/typescript/lib/lib.dom.d.ts +++ b/node_modules/typescript/lib/lib.dom.d.ts @@ -15,7 +15,7 @@ and limitations under the License. -/// +/// ///////////////////////////// diff --git a/node_modules/typescript/lib/lib.dom.iterable.d.ts b/node_modules/typescript/lib/lib.dom.iterable.d.ts index 00b00fa5..b89ba2d5 100644 --- a/node_modules/typescript/lib/lib.dom.iterable.d.ts +++ b/node_modules/typescript/lib/lib.dom.iterable.d.ts @@ -15,7 +15,7 @@ and limitations under the License. -/// +/// ///////////////////////////// diff --git a/node_modules/typescript/lib/lib.es2015.collection.d.ts b/node_modules/typescript/lib/lib.es2015.collection.d.ts index 557bfd9b..036723b1 100644 --- a/node_modules/typescript/lib/lib.es2015.collection.d.ts +++ b/node_modules/typescript/lib/lib.es2015.collection.d.ts @@ -15,75 +15,75 @@ and limitations under the License. -/// +/// -interface Map { - clear(): void; - delete(key: K): boolean; - forEach(callbackfn: (value: V, key: K, map: Map) => void, thisArg?: any): void; - get(key: K): V | undefined; - has(key: K): boolean; - set(key: K, value: V): this; - readonly size: number; -} - -interface MapConstructor { - new(): Map; - new(entries?: ReadonlyArray | null): Map; - readonly prototype: Map; -} -declare var Map: MapConstructor; - -interface ReadonlyMap { - forEach(callbackfn: (value: V, key: K, map: ReadonlyMap) => void, thisArg?: any): void; - get(key: K): V | undefined; - has(key: K): boolean; - readonly size: number; -} - -interface WeakMap { - delete(key: K): boolean; - get(key: K): V | undefined; - has(key: K): boolean; - set(key: K, value: V): this; -} - -interface WeakMapConstructor { - new (entries?: ReadonlyArray<[K, V]> | null): WeakMap; - readonly prototype: WeakMap; -} -declare var WeakMap: WeakMapConstructor; - -interface Set { - add(value: T): this; - clear(): void; - delete(value: T): boolean; - forEach(callbackfn: (value: T, value2: T, set: Set) => void, thisArg?: any): void; - has(value: T): boolean; - readonly size: number; -} - -interface SetConstructor { - new (values?: ReadonlyArray | null): Set; - readonly prototype: Set; -} -declare var Set: SetConstructor; - -interface ReadonlySet { - forEach(callbackfn: (value: T, value2: T, set: ReadonlySet) => void, thisArg?: any): void; - has(value: T): boolean; - readonly size: number; -} - -interface WeakSet { - add(value: T): this; - delete(value: T): boolean; - has(value: T): boolean; -} - -interface WeakSetConstructor { - new (values?: ReadonlyArray | null): WeakSet; - readonly prototype: WeakSet; -} -declare var WeakSet: WeakSetConstructor; +interface Map { + clear(): void; + delete(key: K): boolean; + forEach(callbackfn: (value: V, key: K, map: Map) => void, thisArg?: any): void; + get(key: K): V | undefined; + has(key: K): boolean; + set(key: K, value: V): this; + readonly size: number; +} + +interface MapConstructor { + new(): Map; + new(entries?: ReadonlyArray | null): Map; + readonly prototype: Map; +} +declare var Map: MapConstructor; + +interface ReadonlyMap { + forEach(callbackfn: (value: V, key: K, map: ReadonlyMap) => void, thisArg?: any): void; + get(key: K): V | undefined; + has(key: K): boolean; + readonly size: number; +} + +interface WeakMap { + delete(key: K): boolean; + get(key: K): V | undefined; + has(key: K): boolean; + set(key: K, value: V): this; +} + +interface WeakMapConstructor { + new (entries?: ReadonlyArray<[K, V]> | null): WeakMap; + readonly prototype: WeakMap; +} +declare var WeakMap: WeakMapConstructor; + +interface Set { + add(value: T): this; + clear(): void; + delete(value: T): boolean; + forEach(callbackfn: (value: T, value2: T, set: Set) => void, thisArg?: any): void; + has(value: T): boolean; + readonly size: number; +} + +interface SetConstructor { + new (values?: ReadonlyArray | null): Set; + readonly prototype: Set; +} +declare var Set: SetConstructor; + +interface ReadonlySet { + forEach(callbackfn: (value: T, value2: T, set: ReadonlySet) => void, thisArg?: any): void; + has(value: T): boolean; + readonly size: number; +} + +interface WeakSet { + add(value: T): this; + delete(value: T): boolean; + has(value: T): boolean; +} + +interface WeakSetConstructor { + new (values?: ReadonlyArray | null): WeakSet; + readonly prototype: WeakSet; +} +declare var WeakSet: WeakSetConstructor; diff --git a/node_modules/typescript/lib/lib.es2015.core.d.ts b/node_modules/typescript/lib/lib.es2015.core.d.ts index 8cecc6e0..11abcb96 100644 --- a/node_modules/typescript/lib/lib.es2015.core.d.ts +++ b/node_modules/typescript/lib/lib.es2015.core.d.ts @@ -15,503 +15,503 @@ and limitations under the License. -/// - - -interface Array { - /** - * Returns the value of the first element in the array where predicate is true, and undefined - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - find(predicate: (this: void, value: T, index: number, obj: T[]) => value is S, thisArg?: any): S | undefined; - find(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): T | undefined; - - /** - * Returns the index of the first element in the array where predicate is true, and -1 - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, - * findIndex immediately returns that element index. Otherwise, findIndex returns -1. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - findIndex(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): number; - - /** - * Returns the this object after filling the section identified by start and end with value - * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as - * length+end. - */ - fill(value: T, start?: number, end?: number): this; - - /** - * Returns the this object after copying a section of the array identified by start and end - * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it - * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. - */ - copyWithin(target: number, start: number, end?: number): this; -} - -interface ArrayConstructor { - /** - * Creates an array from an array-like object. - * @param arrayLike An array-like object to convert to an array. - */ - from(arrayLike: ArrayLike): T[]; - - /** - * Creates an array from an iterable object. - * @param arrayLike An array-like object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; - - /** - * Returns a new array from a set of elements. - * @param items A set of elements to include in the new array object. - */ - of(...items: T[]): T[]; -} - -interface DateConstructor { - new (value: number | string | Date): Date; -} - -interface Function { - /** - * Returns the name of the function. Function names are read-only and can not be changed. - */ - readonly name: string; -} - -interface Math { - /** - * Returns the number of leading zero bits in the 32-bit binary representation of a number. - * @param x A numeric expression. - */ - clz32(x: number): number; - - /** - * Returns the result of 32-bit multiplication of two numbers. - * @param x First number - * @param y Second number - */ - imul(x: number, y: number): number; - - /** - * Returns the sign of the x, indicating whether x is positive, negative or zero. - * @param x The numeric expression to test - */ - sign(x: number): number; - - /** - * Returns the base 10 logarithm of a number. - * @param x A numeric expression. - */ - log10(x: number): number; - - /** - * Returns the base 2 logarithm of a number. - * @param x A numeric expression. - */ - log2(x: number): number; - - /** - * Returns the natural logarithm of 1 + x. - * @param x A numeric expression. - */ - log1p(x: number): number; - - /** - * Returns the result of (e^x - 1), which is an implementation-dependent approximation to - * subtracting 1 from the exponential function of x (e raised to the power of x, where e - * is the base of the natural logarithms). - * @param x A numeric expression. - */ - expm1(x: number): number; - - /** - * Returns the hyperbolic cosine of a number. - * @param x A numeric expression that contains an angle measured in radians. - */ - cosh(x: number): number; - - /** - * Returns the hyperbolic sine of a number. - * @param x A numeric expression that contains an angle measured in radians. - */ - sinh(x: number): number; - - /** - * Returns the hyperbolic tangent of a number. - * @param x A numeric expression that contains an angle measured in radians. - */ - tanh(x: number): number; - - /** - * Returns the inverse hyperbolic cosine of a number. - * @param x A numeric expression that contains an angle measured in radians. - */ - acosh(x: number): number; - - /** - * Returns the inverse hyperbolic sine of a number. - * @param x A numeric expression that contains an angle measured in radians. - */ - asinh(x: number): number; - - /** - * Returns the inverse hyperbolic tangent of a number. - * @param x A numeric expression that contains an angle measured in radians. - */ - atanh(x: number): number; - - /** - * Returns the square root of the sum of squares of its arguments. - * @param values Values to compute the square root for. - * If no arguments are passed, the result is +0. - * If there is only one argument, the result is the absolute value. - * If any argument is +Infinity or -Infinity, the result is +Infinity. - * If any argument is NaN, the result is NaN. - * If all arguments are either +0 or −0, the result is +0. - */ - hypot(...values: number[]): number; - - /** - * Returns the integral part of the a numeric expression, x, removing any fractional digits. - * If x is already an integer, the result is x. - * @param x A numeric expression. - */ - trunc(x: number): number; - - /** - * Returns the nearest single precision float representation of a number. - * @param x A numeric expression. - */ - fround(x: number): number; - - /** - * Returns an implementation-dependent approximation to the cube root of number. - * @param x A numeric expression. - */ - cbrt(x: number): number; -} - -interface NumberConstructor { - /** - * The value of Number.EPSILON is the difference between 1 and the smallest value greater than 1 - * that is representable as a Number value, which is approximately: - * 2.2204460492503130808472633361816 x 10‍−‍16. - */ - readonly EPSILON: number; - - /** - * Returns true if passed value is finite. - * Unlike the global isFinite, Number.isFinite doesn't forcibly convert the parameter to a - * number. Only finite values of the type number, result in true. - * @param number A numeric value. - */ - isFinite(number: number): boolean; - - /** - * Returns true if the value passed is an integer, false otherwise. - * @param number A numeric value. - */ - isInteger(number: number): boolean; - - /** - * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a - * number). Unlike the global isNaN(), Number.isNaN() doesn't forcefully convert the parameter - * to a number. Only values of the type number, that are also NaN, result in true. - * @param number A numeric value. - */ - isNaN(number: number): boolean; - - /** - * Returns true if the value passed is a safe integer. - * @param number A numeric value. - */ - isSafeInteger(number: number): boolean; - - /** - * The value of the largest integer n such that n and n + 1 are both exactly representable as - * a Number value. - * The value of Number.MAX_SAFE_INTEGER is 9007199254740991 2^53 − 1. - */ - readonly MAX_SAFE_INTEGER: number; - - /** - * The value of the smallest integer n such that n and n − 1 are both exactly representable as - * a Number value. - * The value of Number.MIN_SAFE_INTEGER is −9007199254740991 (−(2^53 − 1)). - */ - readonly MIN_SAFE_INTEGER: number; - - /** - * Converts a string to a floating-point number. - * @param string A string that contains a floating-point number. - */ - parseFloat(string: string): number; - - /** - * Converts A string to an integer. - * @param s A string to convert into a number. - * @param radix A value between 2 and 36 that specifies the base of the number in numString. - * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. - * All other strings are considered decimal. - */ - parseInt(string: string, radix?: number): number; -} - -interface ObjectConstructor { - /** - * Copy the values of all of the enumerable own properties from one or more source objects to a - * target object. Returns the target object. - * @param target The target object to copy to. - * @param source The source object from which to copy properties. - */ - assign(target: T, source: U): T & U; - - /** - * Copy the values of all of the enumerable own properties from one or more source objects to a - * target object. Returns the target object. - * @param target The target object to copy to. - * @param source1 The first source object from which to copy properties. - * @param source2 The second source object from which to copy properties. - */ - assign(target: T, source1: U, source2: V): T & U & V; - - /** - * Copy the values of all of the enumerable own properties from one or more source objects to a - * target object. Returns the target object. - * @param target The target object to copy to. - * @param source1 The first source object from which to copy properties. - * @param source2 The second source object from which to copy properties. - * @param source3 The third source object from which to copy properties. - */ - assign(target: T, source1: U, source2: V, source3: W): T & U & V & W; - - /** - * Copy the values of all of the enumerable own properties from one or more source objects to a - * target object. Returns the target object. - * @param target The target object to copy to. - * @param sources One or more source objects from which to copy properties - */ - assign(target: object, ...sources: any[]): any; - - /** - * Returns an array of all symbol properties found directly on object o. - * @param o Object to retrieve the symbols from. - */ - getOwnPropertySymbols(o: any): symbol[]; - - /** - * Returns the names of the enumerable string properties and methods of an object. - * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. - */ - keys(o: {}): string[]; - - /** - * Returns true if the values are the same value, false otherwise. - * @param value1 The first value. - * @param value2 The second value. - */ - is(value1: any, value2: any): boolean; - - /** - * Sets the prototype of a specified object o to object proto or null. Returns the object o. - * @param o The object to change its prototype. - * @param proto The value of the new prototype or null. - */ - setPrototypeOf(o: any, proto: object | null): any; -} - -interface ReadonlyArray { - /** - * Returns the value of the first element in the array where predicate is true, and undefined - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - find(predicate: (this: void, value: T, index: number, obj: ReadonlyArray) => value is S, thisArg?: any): S | undefined; - find(predicate: (value: T, index: number, obj: ReadonlyArray) => unknown, thisArg?: any): T | undefined; - - /** - * Returns the index of the first element in the array where predicate is true, and -1 - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, - * findIndex immediately returns that element index. Otherwise, findIndex returns -1. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - findIndex(predicate: (value: T, index: number, obj: ReadonlyArray) => unknown, thisArg?: any): number; -} - -interface RegExp { - /** - * Returns a string indicating the flags of the regular expression in question. This field is read-only. - * The characters in this string are sequenced and concatenated in the following order: - * - * - "g" for global - * - "i" for ignoreCase - * - "m" for multiline - * - "u" for unicode - * - "y" for sticky - * - * If no flags are set, the value is the empty string. - */ - readonly flags: string; - - /** - * Returns a Boolean value indicating the state of the sticky flag (y) used with a regular - * expression. Default is false. Read-only. - */ - readonly sticky: boolean; - - /** - * Returns a Boolean value indicating the state of the Unicode flag (u) used with a regular - * expression. Default is false. Read-only. - */ - readonly unicode: boolean; -} - -interface RegExpConstructor { - new (pattern: RegExp | string, flags?: string): RegExp; - (pattern: RegExp | string, flags?: string): RegExp; -} - -interface String { - /** - * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point - * value of the UTF-16 encoded code point starting at the string element at position pos in - * the String resulting from converting this object to a String. - * If there is no element at that position, the result is undefined. - * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos. - */ - codePointAt(pos: number): number | undefined; - - /** - * Returns true if searchString appears as a substring of the result of converting this - * object to a String, at one or more positions that are - * greater than or equal to position; otherwise, returns false. - * @param searchString search string - * @param position If position is undefined, 0 is assumed, so as to search all of the String. - */ - includes(searchString: string, position?: number): boolean; - - /** - * Returns true if the sequence of elements of searchString converted to a String is the - * same as the corresponding elements of this object (converted to a String) starting at - * endPosition – length(this). Otherwise returns false. - */ - endsWith(searchString: string, endPosition?: number): boolean; - - /** - * Returns the String value result of normalizing the string into the normalization form - * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms. - * @param form Applicable values: "NFC", "NFD", "NFKC", or "NFKD", If not specified default - * is "NFC" - */ - normalize(form: "NFC" | "NFD" | "NFKC" | "NFKD"): string; - - /** - * Returns the String value result of normalizing the string into the normalization form - * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms. - * @param form Applicable values: "NFC", "NFD", "NFKC", or "NFKD", If not specified default - * is "NFC" - */ - normalize(form?: string): string; - - /** - * Returns a String value that is made from count copies appended together. If count is 0, - * the empty string is returned. - * @param count number of copies to append - */ - repeat(count: number): string; - - /** - * Returns true if the sequence of elements of searchString converted to a String is the - * same as the corresponding elements of this object (converted to a String) starting at - * position. Otherwise returns false. - */ - startsWith(searchString: string, position?: number): boolean; - - /** - * Returns an HTML anchor element and sets the name attribute to the text value - * @param name - */ - anchor(name: string): string; - - /** Returns a HTML element */ - big(): string; - - /** Returns a HTML element */ - blink(): string; - - /** Returns a HTML element */ - bold(): string; - - /** Returns a HTML element */ - fixed(): string; - - /** Returns a HTML element and sets the color attribute value */ - fontcolor(color: string): string; - - /** Returns a HTML element and sets the size attribute value */ - fontsize(size: number): string; - - /** Returns a HTML element and sets the size attribute value */ - fontsize(size: string): string; - - /** Returns an HTML element */ - italics(): string; - - /** Returns an HTML element and sets the href attribute value */ - link(url: string): string; - - /** Returns a HTML element */ - small(): string; - - /** Returns a HTML element */ - strike(): string; - - /** Returns a HTML element */ - sub(): string; - - /** Returns a HTML element */ - sup(): string; -} - -interface StringConstructor { - /** - * Return the String value whose elements are, in order, the elements in the List elements. - * If length is 0, the empty string is returned. - */ - fromCodePoint(...codePoints: number[]): string; - - /** - * String.raw is intended for use as a tag function of a Tagged Template String. When called - * as such the first argument will be a well formed template call site object and the rest - * parameter will contain the substitution values. - * @param template A well-formed template string call site representation. - * @param substitutions A set of substitution values. - */ - raw(template: TemplateStringsArray, ...substitutions: any[]): string; -} +/// + + +interface Array { + /** + * Returns the value of the first element in the array where predicate is true, and undefined + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find + * immediately returns that element value. Otherwise, find returns undefined. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + find(predicate: (this: void, value: T, index: number, obj: T[]) => value is S, thisArg?: any): S | undefined; + find(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): T | undefined; + + /** + * Returns the index of the first element in the array where predicate is true, and -1 + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + findIndex(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): number; + + /** + * Returns the this object after filling the section identified by start and end with value + * @param value value to fill array section with + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as + * length+end. + */ + fill(value: T, start?: number, end?: number): this; + + /** + * Returns the this object after copying a section of the array identified by start and end + * to the same array starting at position target + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it + * is treated as length+end. + * @param end If not specified, length of the this object is used as its default value. + */ + copyWithin(target: number, start: number, end?: number): this; +} + +interface ArrayConstructor { + /** + * Creates an array from an array-like object. + * @param arrayLike An array-like object to convert to an array. + */ + from(arrayLike: ArrayLike): T[]; + + /** + * Creates an array from an iterable object. + * @param arrayLike An array-like object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; + + /** + * Returns a new array from a set of elements. + * @param items A set of elements to include in the new array object. + */ + of(...items: T[]): T[]; +} + +interface DateConstructor { + new (value: number | string | Date): Date; +} + +interface Function { + /** + * Returns the name of the function. Function names are read-only and can not be changed. + */ + readonly name: string; +} + +interface Math { + /** + * Returns the number of leading zero bits in the 32-bit binary representation of a number. + * @param x A numeric expression. + */ + clz32(x: number): number; + + /** + * Returns the result of 32-bit multiplication of two numbers. + * @param x First number + * @param y Second number + */ + imul(x: number, y: number): number; + + /** + * Returns the sign of the x, indicating whether x is positive, negative or zero. + * @param x The numeric expression to test + */ + sign(x: number): number; + + /** + * Returns the base 10 logarithm of a number. + * @param x A numeric expression. + */ + log10(x: number): number; + + /** + * Returns the base 2 logarithm of a number. + * @param x A numeric expression. + */ + log2(x: number): number; + + /** + * Returns the natural logarithm of 1 + x. + * @param x A numeric expression. + */ + log1p(x: number): number; + + /** + * Returns the result of (e^x - 1), which is an implementation-dependent approximation to + * subtracting 1 from the exponential function of x (e raised to the power of x, where e + * is the base of the natural logarithms). + * @param x A numeric expression. + */ + expm1(x: number): number; + + /** + * Returns the hyperbolic cosine of a number. + * @param x A numeric expression that contains an angle measured in radians. + */ + cosh(x: number): number; + + /** + * Returns the hyperbolic sine of a number. + * @param x A numeric expression that contains an angle measured in radians. + */ + sinh(x: number): number; + + /** + * Returns the hyperbolic tangent of a number. + * @param x A numeric expression that contains an angle measured in radians. + */ + tanh(x: number): number; + + /** + * Returns the inverse hyperbolic cosine of a number. + * @param x A numeric expression that contains an angle measured in radians. + */ + acosh(x: number): number; + + /** + * Returns the inverse hyperbolic sine of a number. + * @param x A numeric expression that contains an angle measured in radians. + */ + asinh(x: number): number; + + /** + * Returns the inverse hyperbolic tangent of a number. + * @param x A numeric expression that contains an angle measured in radians. + */ + atanh(x: number): number; + + /** + * Returns the square root of the sum of squares of its arguments. + * @param values Values to compute the square root for. + * If no arguments are passed, the result is +0. + * If there is only one argument, the result is the absolute value. + * If any argument is +Infinity or -Infinity, the result is +Infinity. + * If any argument is NaN, the result is NaN. + * If all arguments are either +0 or −0, the result is +0. + */ + hypot(...values: number[]): number; + + /** + * Returns the integral part of the a numeric expression, x, removing any fractional digits. + * If x is already an integer, the result is x. + * @param x A numeric expression. + */ + trunc(x: number): number; + + /** + * Returns the nearest single precision float representation of a number. + * @param x A numeric expression. + */ + fround(x: number): number; + + /** + * Returns an implementation-dependent approximation to the cube root of number. + * @param x A numeric expression. + */ + cbrt(x: number): number; +} + +interface NumberConstructor { + /** + * The value of Number.EPSILON is the difference between 1 and the smallest value greater than 1 + * that is representable as a Number value, which is approximately: + * 2.2204460492503130808472633361816 x 10‍−‍16. + */ + readonly EPSILON: number; + + /** + * Returns true if passed value is finite. + * Unlike the global isFinite, Number.isFinite doesn't forcibly convert the parameter to a + * number. Only finite values of the type number, result in true. + * @param number A numeric value. + */ + isFinite(number: number): boolean; + + /** + * Returns true if the value passed is an integer, false otherwise. + * @param number A numeric value. + */ + isInteger(number: number): boolean; + + /** + * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a + * number). Unlike the global isNaN(), Number.isNaN() doesn't forcefully convert the parameter + * to a number. Only values of the type number, that are also NaN, result in true. + * @param number A numeric value. + */ + isNaN(number: number): boolean; + + /** + * Returns true if the value passed is a safe integer. + * @param number A numeric value. + */ + isSafeInteger(number: number): boolean; + + /** + * The value of the largest integer n such that n and n + 1 are both exactly representable as + * a Number value. + * The value of Number.MAX_SAFE_INTEGER is 9007199254740991 2^53 − 1. + */ + readonly MAX_SAFE_INTEGER: number; + + /** + * The value of the smallest integer n such that n and n − 1 are both exactly representable as + * a Number value. + * The value of Number.MIN_SAFE_INTEGER is −9007199254740991 (−(2^53 − 1)). + */ + readonly MIN_SAFE_INTEGER: number; + + /** + * Converts a string to a floating-point number. + * @param string A string that contains a floating-point number. + */ + parseFloat(string: string): number; + + /** + * Converts A string to an integer. + * @param s A string to convert into a number. + * @param radix A value between 2 and 36 that specifies the base of the number in numString. + * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. + * All other strings are considered decimal. + */ + parseInt(string: string, radix?: number): number; +} + +interface ObjectConstructor { + /** + * Copy the values of all of the enumerable own properties from one or more source objects to a + * target object. Returns the target object. + * @param target The target object to copy to. + * @param source The source object from which to copy properties. + */ + assign(target: T, source: U): T & U; + + /** + * Copy the values of all of the enumerable own properties from one or more source objects to a + * target object. Returns the target object. + * @param target The target object to copy to. + * @param source1 The first source object from which to copy properties. + * @param source2 The second source object from which to copy properties. + */ + assign(target: T, source1: U, source2: V): T & U & V; + + /** + * Copy the values of all of the enumerable own properties from one or more source objects to a + * target object. Returns the target object. + * @param target The target object to copy to. + * @param source1 The first source object from which to copy properties. + * @param source2 The second source object from which to copy properties. + * @param source3 The third source object from which to copy properties. + */ + assign(target: T, source1: U, source2: V, source3: W): T & U & V & W; + + /** + * Copy the values of all of the enumerable own properties from one or more source objects to a + * target object. Returns the target object. + * @param target The target object to copy to. + * @param sources One or more source objects from which to copy properties + */ + assign(target: object, ...sources: any[]): any; + + /** + * Returns an array of all symbol properties found directly on object o. + * @param o Object to retrieve the symbols from. + */ + getOwnPropertySymbols(o: any): symbol[]; + + /** + * Returns the names of the enumerable string properties and methods of an object. + * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. + */ + keys(o: {}): string[]; + + /** + * Returns true if the values are the same value, false otherwise. + * @param value1 The first value. + * @param value2 The second value. + */ + is(value1: any, value2: any): boolean; + + /** + * Sets the prototype of a specified object o to object proto or null. Returns the object o. + * @param o The object to change its prototype. + * @param proto The value of the new prototype or null. + */ + setPrototypeOf(o: any, proto: object | null): any; +} + +interface ReadonlyArray { + /** + * Returns the value of the first element in the array where predicate is true, and undefined + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find + * immediately returns that element value. Otherwise, find returns undefined. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + find(predicate: (this: void, value: T, index: number, obj: ReadonlyArray) => value is S, thisArg?: any): S | undefined; + find(predicate: (value: T, index: number, obj: ReadonlyArray) => unknown, thisArg?: any): T | undefined; + + /** + * Returns the index of the first element in the array where predicate is true, and -1 + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + findIndex(predicate: (value: T, index: number, obj: ReadonlyArray) => unknown, thisArg?: any): number; +} + +interface RegExp { + /** + * Returns a string indicating the flags of the regular expression in question. This field is read-only. + * The characters in this string are sequenced and concatenated in the following order: + * + * - "g" for global + * - "i" for ignoreCase + * - "m" for multiline + * - "u" for unicode + * - "y" for sticky + * + * If no flags are set, the value is the empty string. + */ + readonly flags: string; + + /** + * Returns a Boolean value indicating the state of the sticky flag (y) used with a regular + * expression. Default is false. Read-only. + */ + readonly sticky: boolean; + + /** + * Returns a Boolean value indicating the state of the Unicode flag (u) used with a regular + * expression. Default is false. Read-only. + */ + readonly unicode: boolean; +} + +interface RegExpConstructor { + new (pattern: RegExp | string, flags?: string): RegExp; + (pattern: RegExp | string, flags?: string): RegExp; +} + +interface String { + /** + * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point + * value of the UTF-16 encoded code point starting at the string element at position pos in + * the String resulting from converting this object to a String. + * If there is no element at that position, the result is undefined. + * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos. + */ + codePointAt(pos: number): number | undefined; + + /** + * Returns true if searchString appears as a substring of the result of converting this + * object to a String, at one or more positions that are + * greater than or equal to position; otherwise, returns false. + * @param searchString search string + * @param position If position is undefined, 0 is assumed, so as to search all of the String. + */ + includes(searchString: string, position?: number): boolean; + + /** + * Returns true if the sequence of elements of searchString converted to a String is the + * same as the corresponding elements of this object (converted to a String) starting at + * endPosition – length(this). Otherwise returns false. + */ + endsWith(searchString: string, endPosition?: number): boolean; + + /** + * Returns the String value result of normalizing the string into the normalization form + * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms. + * @param form Applicable values: "NFC", "NFD", "NFKC", or "NFKD", If not specified default + * is "NFC" + */ + normalize(form: "NFC" | "NFD" | "NFKC" | "NFKD"): string; + + /** + * Returns the String value result of normalizing the string into the normalization form + * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms. + * @param form Applicable values: "NFC", "NFD", "NFKC", or "NFKD", If not specified default + * is "NFC" + */ + normalize(form?: string): string; + + /** + * Returns a String value that is made from count copies appended together. If count is 0, + * the empty string is returned. + * @param count number of copies to append + */ + repeat(count: number): string; + + /** + * Returns true if the sequence of elements of searchString converted to a String is the + * same as the corresponding elements of this object (converted to a String) starting at + * position. Otherwise returns false. + */ + startsWith(searchString: string, position?: number): boolean; + + /** + * Returns an HTML anchor element and sets the name attribute to the text value + * @param name + */ + anchor(name: string): string; + + /** Returns a HTML element */ + big(): string; + + /** Returns a HTML element */ + blink(): string; + + /** Returns a HTML element */ + bold(): string; + + /** Returns a HTML element */ + fixed(): string; + + /** Returns a HTML element and sets the color attribute value */ + fontcolor(color: string): string; + + /** Returns a HTML element and sets the size attribute value */ + fontsize(size: number): string; + + /** Returns a HTML element and sets the size attribute value */ + fontsize(size: string): string; + + /** Returns an HTML element */ + italics(): string; + + /** Returns an HTML element and sets the href attribute value */ + link(url: string): string; + + /** Returns a HTML element */ + small(): string; + + /** Returns a HTML element */ + strike(): string; + + /** Returns a HTML element */ + sub(): string; + + /** Returns a HTML element */ + sup(): string; +} + +interface StringConstructor { + /** + * Return the String value whose elements are, in order, the elements in the List elements. + * If length is 0, the empty string is returned. + */ + fromCodePoint(...codePoints: number[]): string; + + /** + * String.raw is intended for use as a tag function of a Tagged Template String. When called + * as such the first argument will be a well formed template call site object and the rest + * parameter will contain the substitution values. + * @param template A well-formed template string call site representation. + * @param substitutions A set of substitution values. + */ + raw(template: TemplateStringsArray, ...substitutions: any[]): string; +} diff --git a/node_modules/typescript/lib/lib.es2015.d.ts b/node_modules/typescript/lib/lib.es2015.d.ts index 80aaba05..8cdaf0c9 100644 --- a/node_modules/typescript/lib/lib.es2015.d.ts +++ b/node_modules/typescript/lib/lib.es2015.d.ts @@ -15,16 +15,16 @@ and limitations under the License. -/// +/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// diff --git a/node_modules/typescript/lib/lib.es2015.generator.d.ts b/node_modules/typescript/lib/lib.es2015.generator.d.ts index 25b733b0..b79727fa 100644 --- a/node_modules/typescript/lib/lib.es2015.generator.d.ts +++ b/node_modules/typescript/lib/lib.es2015.generator.d.ts @@ -15,65 +15,65 @@ and limitations under the License. -/// +/// -/// - -interface Generator extends Iterator { - // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. - next(...args: [] | [TNext]): IteratorResult; - return(value: TReturn): IteratorResult; - throw(e: any): IteratorResult; - [Symbol.iterator](): Generator; -} - -interface GeneratorFunction { - /** - * Creates a new Generator object. - * @param args A list of arguments the function accepts. - */ - new (...args: any[]): Generator; - /** - * Creates a new Generator object. - * @param args A list of arguments the function accepts. - */ - (...args: any[]): Generator; - /** - * The length of the arguments. - */ - readonly length: number; - /** - * Returns the name of the function. - */ - readonly name: string; - /** - * A reference to the prototype. - */ - readonly prototype: Generator; -} - -interface GeneratorFunctionConstructor { - /** - * Creates a new Generator function. - * @param args A list of arguments the function accepts. - */ - new (...args: string[]): GeneratorFunction; - /** - * Creates a new Generator function. - * @param args A list of arguments the function accepts. - */ - (...args: string[]): GeneratorFunction; - /** - * The length of the arguments. - */ - readonly length: number; - /** - * Returns the name of the function. - */ - readonly name: string; - /** - * A reference to the prototype. - */ - readonly prototype: GeneratorFunction; -} +/// + +interface Generator extends Iterator { + // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. + next(...args: [] | [TNext]): IteratorResult; + return(value: TReturn): IteratorResult; + throw(e: any): IteratorResult; + [Symbol.iterator](): Generator; +} + +interface GeneratorFunction { + /** + * Creates a new Generator object. + * @param args A list of arguments the function accepts. + */ + new (...args: any[]): Generator; + /** + * Creates a new Generator object. + * @param args A list of arguments the function accepts. + */ + (...args: any[]): Generator; + /** + * The length of the arguments. + */ + readonly length: number; + /** + * Returns the name of the function. + */ + readonly name: string; + /** + * A reference to the prototype. + */ + readonly prototype: Generator; +} + +interface GeneratorFunctionConstructor { + /** + * Creates a new Generator function. + * @param args A list of arguments the function accepts. + */ + new (...args: string[]): GeneratorFunction; + /** + * Creates a new Generator function. + * @param args A list of arguments the function accepts. + */ + (...args: string[]): GeneratorFunction; + /** + * The length of the arguments. + */ + readonly length: number; + /** + * Returns the name of the function. + */ + readonly name: string; + /** + * A reference to the prototype. + */ + readonly prototype: GeneratorFunction; +} diff --git a/node_modules/typescript/lib/lib.es2015.iterable.d.ts b/node_modules/typescript/lib/lib.es2015.iterable.d.ts index 051d3f26..b3616fe2 100644 --- a/node_modules/typescript/lib/lib.es2015.iterable.d.ts +++ b/node_modules/typescript/lib/lib.es2015.iterable.d.ts @@ -15,487 +15,487 @@ and limitations under the License. -/// - - -/// - -interface SymbolConstructor { - /** - * A method that returns the default iterator for an object. Called by the semantics of the - * for-of statement. - */ - readonly iterator: symbol; -} - -interface IteratorYieldResult { - done?: false; - value: TYield; -} - -interface IteratorReturnResult { - done: true; - value: TReturn; -} - -type IteratorResult = IteratorYieldResult | IteratorReturnResult; - -interface Iterator { - // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. - next(...args: [] | [TNext]): IteratorResult; - return?(value?: TReturn): IteratorResult; - throw?(e?: any): IteratorResult; -} - -interface Iterable { - [Symbol.iterator](): Iterator; -} - -interface IterableIterator extends Iterator { - [Symbol.iterator](): IterableIterator; -} - -interface Array { - /** Iterator */ - [Symbol.iterator](): IterableIterator; - - /** - * Returns an iterable of key, value pairs for every entry in the array - */ - entries(): IterableIterator<[number, T]>; - - /** - * Returns an iterable of keys in the array - */ - keys(): IterableIterator; - - /** - * Returns an iterable of values in the array - */ - values(): IterableIterator; -} - -interface ArrayConstructor { - /** - * Creates an array from an iterable object. - * @param iterable An iterable object to convert to an array. - */ - from(iterable: Iterable | ArrayLike): T[]; - - /** - * Creates an array from an iterable object. - * @param iterable An iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(iterable: Iterable | ArrayLike, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; -} - -interface ReadonlyArray { - /** Iterator of values in the array. */ - [Symbol.iterator](): IterableIterator; - - /** - * Returns an iterable of key, value pairs for every entry in the array - */ - entries(): IterableIterator<[number, T]>; - - /** - * Returns an iterable of keys in the array - */ - keys(): IterableIterator; - - /** - * Returns an iterable of values in the array - */ - values(): IterableIterator; -} - -interface IArguments { - /** Iterator */ - [Symbol.iterator](): IterableIterator; -} - -interface Map { - /** Returns an iterable of entries in the map. */ - [Symbol.iterator](): IterableIterator<[K, V]>; - - /** - * Returns an iterable of key, value pairs for every entry in the map. - */ - entries(): IterableIterator<[K, V]>; - - /** - * Returns an iterable of keys in the map - */ - keys(): IterableIterator; - - /** - * Returns an iterable of values in the map - */ - values(): IterableIterator; -} - -interface ReadonlyMap { - /** Returns an iterable of entries in the map. */ - [Symbol.iterator](): IterableIterator<[K, V]>; - - /** - * Returns an iterable of key, value pairs for every entry in the map. - */ - entries(): IterableIterator<[K, V]>; - - /** - * Returns an iterable of keys in the map - */ - keys(): IterableIterator; - - /** - * Returns an iterable of values in the map - */ - values(): IterableIterator; -} - -interface MapConstructor { - new (iterable: Iterable): Map; -} - -interface WeakMap { } - -interface WeakMapConstructor { - new (iterable: Iterable<[K, V]>): WeakMap; -} - -interface Set { - /** Iterates over values in the set. */ - [Symbol.iterator](): IterableIterator; - /** - * Returns an iterable of [v,v] pairs for every value `v` in the set. - */ - entries(): IterableIterator<[T, T]>; - /** - * Despite its name, returns an iterable of the values in the set, - */ - keys(): IterableIterator; - - /** - * Returns an iterable of values in the set. - */ - values(): IterableIterator; -} - -interface ReadonlySet { - /** Iterates over values in the set. */ - [Symbol.iterator](): IterableIterator; - - /** - * Returns an iterable of [v,v] pairs for every value `v` in the set. - */ - entries(): IterableIterator<[T, T]>; - - /** - * Despite its name, returns an iterable of the values in the set, - */ - keys(): IterableIterator; - - /** - * Returns an iterable of values in the set. - */ - values(): IterableIterator; -} - -interface SetConstructor { - new (iterable?: Iterable | null): Set; -} - -interface WeakSet { } - -interface WeakSetConstructor { - new (iterable: Iterable): WeakSet; -} - -interface Promise { } - -interface PromiseConstructor { - /** - * Creates a Promise that is resolved with an array of results when all of the provided Promises - * resolve, or rejected when any Promise is rejected. - * @param values An array of Promises. - * @returns A new Promise. - */ - all(values: Iterable>): Promise; - - /** - * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved - * or rejected. - * @param values An array of Promises. - * @returns A new Promise. - */ - race(values: Iterable>): Promise; -} - -declare namespace Reflect { - function enumerate(target: object): IterableIterator; -} - -interface String { - /** Iterator */ - [Symbol.iterator](): IterableIterator; -} - -interface Int8Array { - [Symbol.iterator](): IterableIterator; - /** - * Returns an array of key, value pairs for every entry in the array - */ - entries(): IterableIterator<[number, number]>; - /** - * Returns an list of keys in the array - */ - keys(): IterableIterator; - /** - * Returns an list of values in the array - */ - values(): IterableIterator; -} - -interface Int8ArrayConstructor { - new (elements: Iterable): Int8Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; -} - -interface Uint8Array { - [Symbol.iterator](): IterableIterator; - /** - * Returns an array of key, value pairs for every entry in the array - */ - entries(): IterableIterator<[number, number]>; - /** - * Returns an list of keys in the array - */ - keys(): IterableIterator; - /** - * Returns an list of values in the array - */ - values(): IterableIterator; -} - -interface Uint8ArrayConstructor { - new (elements: Iterable): Uint8Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; -} - -interface Uint8ClampedArray { - [Symbol.iterator](): IterableIterator; - /** - * Returns an array of key, value pairs for every entry in the array - */ - entries(): IterableIterator<[number, number]>; - - /** - * Returns an list of keys in the array - */ - keys(): IterableIterator; - - /** - * Returns an list of values in the array - */ - values(): IterableIterator; -} - -interface Uint8ClampedArrayConstructor { - new (elements: Iterable): Uint8ClampedArray; - - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; -} - -interface Int16Array { - [Symbol.iterator](): IterableIterator; - /** - * Returns an array of key, value pairs for every entry in the array - */ - entries(): IterableIterator<[number, number]>; - - /** - * Returns an list of keys in the array - */ - keys(): IterableIterator; - - /** - * Returns an list of values in the array - */ - values(): IterableIterator; -} - -interface Int16ArrayConstructor { - new (elements: Iterable): Int16Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; -} - -interface Uint16Array { - [Symbol.iterator](): IterableIterator; - /** - * Returns an array of key, value pairs for every entry in the array - */ - entries(): IterableIterator<[number, number]>; - /** - * Returns an list of keys in the array - */ - keys(): IterableIterator; - /** - * Returns an list of values in the array - */ - values(): IterableIterator; -} - -interface Uint16ArrayConstructor { - new (elements: Iterable): Uint16Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; -} - -interface Int32Array { - [Symbol.iterator](): IterableIterator; - /** - * Returns an array of key, value pairs for every entry in the array - */ - entries(): IterableIterator<[number, number]>; - /** - * Returns an list of keys in the array - */ - keys(): IterableIterator; - /** - * Returns an list of values in the array - */ - values(): IterableIterator; -} - -interface Int32ArrayConstructor { - new (elements: Iterable): Int32Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; -} - -interface Uint32Array { - [Symbol.iterator](): IterableIterator; - /** - * Returns an array of key, value pairs for every entry in the array - */ - entries(): IterableIterator<[number, number]>; - /** - * Returns an list of keys in the array - */ - keys(): IterableIterator; - /** - * Returns an list of values in the array - */ - values(): IterableIterator; -} - -interface Uint32ArrayConstructor { - new (elements: Iterable): Uint32Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; -} - -interface Float32Array { - [Symbol.iterator](): IterableIterator; - /** - * Returns an array of key, value pairs for every entry in the array - */ - entries(): IterableIterator<[number, number]>; - /** - * Returns an list of keys in the array - */ - keys(): IterableIterator; - /** - * Returns an list of values in the array - */ - values(): IterableIterator; -} - -interface Float32ArrayConstructor { - new (elements: Iterable): Float32Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; -} - -interface Float64Array { - [Symbol.iterator](): IterableIterator; - /** - * Returns an array of key, value pairs for every entry in the array - */ - entries(): IterableIterator<[number, number]>; - /** - * Returns an list of keys in the array - */ - keys(): IterableIterator; - /** - * Returns an list of values in the array - */ - values(): IterableIterator; -} - -interface Float64ArrayConstructor { - new (elements: Iterable): Float64Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; -} +/// + + +/// + +interface SymbolConstructor { + /** + * A method that returns the default iterator for an object. Called by the semantics of the + * for-of statement. + */ + readonly iterator: symbol; +} + +interface IteratorYieldResult { + done?: false; + value: TYield; +} + +interface IteratorReturnResult { + done: true; + value: TReturn; +} + +type IteratorResult = IteratorYieldResult | IteratorReturnResult; + +interface Iterator { + // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. + next(...args: [] | [TNext]): IteratorResult; + return?(value?: TReturn): IteratorResult; + throw?(e?: any): IteratorResult; +} + +interface Iterable { + [Symbol.iterator](): Iterator; +} + +interface IterableIterator extends Iterator { + [Symbol.iterator](): IterableIterator; +} + +interface Array { + /** Iterator */ + [Symbol.iterator](): IterableIterator; + + /** + * Returns an iterable of key, value pairs for every entry in the array + */ + entries(): IterableIterator<[number, T]>; + + /** + * Returns an iterable of keys in the array + */ + keys(): IterableIterator; + + /** + * Returns an iterable of values in the array + */ + values(): IterableIterator; +} + +interface ArrayConstructor { + /** + * Creates an array from an iterable object. + * @param iterable An iterable object to convert to an array. + */ + from(iterable: Iterable | ArrayLike): T[]; + + /** + * Creates an array from an iterable object. + * @param iterable An iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(iterable: Iterable | ArrayLike, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; +} + +interface ReadonlyArray { + /** Iterator of values in the array. */ + [Symbol.iterator](): IterableIterator; + + /** + * Returns an iterable of key, value pairs for every entry in the array + */ + entries(): IterableIterator<[number, T]>; + + /** + * Returns an iterable of keys in the array + */ + keys(): IterableIterator; + + /** + * Returns an iterable of values in the array + */ + values(): IterableIterator; +} + +interface IArguments { + /** Iterator */ + [Symbol.iterator](): IterableIterator; +} + +interface Map { + /** Returns an iterable of entries in the map. */ + [Symbol.iterator](): IterableIterator<[K, V]>; + + /** + * Returns an iterable of key, value pairs for every entry in the map. + */ + entries(): IterableIterator<[K, V]>; + + /** + * Returns an iterable of keys in the map + */ + keys(): IterableIterator; + + /** + * Returns an iterable of values in the map + */ + values(): IterableIterator; +} + +interface ReadonlyMap { + /** Returns an iterable of entries in the map. */ + [Symbol.iterator](): IterableIterator<[K, V]>; + + /** + * Returns an iterable of key, value pairs for every entry in the map. + */ + entries(): IterableIterator<[K, V]>; + + /** + * Returns an iterable of keys in the map + */ + keys(): IterableIterator; + + /** + * Returns an iterable of values in the map + */ + values(): IterableIterator; +} + +interface MapConstructor { + new (iterable: Iterable): Map; +} + +interface WeakMap { } + +interface WeakMapConstructor { + new (iterable: Iterable<[K, V]>): WeakMap; +} + +interface Set { + /** Iterates over values in the set. */ + [Symbol.iterator](): IterableIterator; + /** + * Returns an iterable of [v,v] pairs for every value `v` in the set. + */ + entries(): IterableIterator<[T, T]>; + /** + * Despite its name, returns an iterable of the values in the set, + */ + keys(): IterableIterator; + + /** + * Returns an iterable of values in the set. + */ + values(): IterableIterator; +} + +interface ReadonlySet { + /** Iterates over values in the set. */ + [Symbol.iterator](): IterableIterator; + + /** + * Returns an iterable of [v,v] pairs for every value `v` in the set. + */ + entries(): IterableIterator<[T, T]>; + + /** + * Despite its name, returns an iterable of the values in the set, + */ + keys(): IterableIterator; + + /** + * Returns an iterable of values in the set. + */ + values(): IterableIterator; +} + +interface SetConstructor { + new (iterable?: Iterable | null): Set; +} + +interface WeakSet { } + +interface WeakSetConstructor { + new (iterable: Iterable): WeakSet; +} + +interface Promise { } + +interface PromiseConstructor { + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + all(values: Iterable>): Promise; + + /** + * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved + * or rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + race(values: Iterable>): Promise; +} + +declare namespace Reflect { + function enumerate(target: object): IterableIterator; +} + +interface String { + /** Iterator */ + [Symbol.iterator](): IterableIterator; +} + +interface Int8Array { + [Symbol.iterator](): IterableIterator; + /** + * Returns an array of key, value pairs for every entry in the array + */ + entries(): IterableIterator<[number, number]>; + /** + * Returns an list of keys in the array + */ + keys(): IterableIterator; + /** + * Returns an list of values in the array + */ + values(): IterableIterator; +} + +interface Int8ArrayConstructor { + new (elements: Iterable): Int8Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; +} + +interface Uint8Array { + [Symbol.iterator](): IterableIterator; + /** + * Returns an array of key, value pairs for every entry in the array + */ + entries(): IterableIterator<[number, number]>; + /** + * Returns an list of keys in the array + */ + keys(): IterableIterator; + /** + * Returns an list of values in the array + */ + values(): IterableIterator; +} + +interface Uint8ArrayConstructor { + new (elements: Iterable): Uint8Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; +} + +interface Uint8ClampedArray { + [Symbol.iterator](): IterableIterator; + /** + * Returns an array of key, value pairs for every entry in the array + */ + entries(): IterableIterator<[number, number]>; + + /** + * Returns an list of keys in the array + */ + keys(): IterableIterator; + + /** + * Returns an list of values in the array + */ + values(): IterableIterator; +} + +interface Uint8ClampedArrayConstructor { + new (elements: Iterable): Uint8ClampedArray; + + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; +} + +interface Int16Array { + [Symbol.iterator](): IterableIterator; + /** + * Returns an array of key, value pairs for every entry in the array + */ + entries(): IterableIterator<[number, number]>; + + /** + * Returns an list of keys in the array + */ + keys(): IterableIterator; + + /** + * Returns an list of values in the array + */ + values(): IterableIterator; +} + +interface Int16ArrayConstructor { + new (elements: Iterable): Int16Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; +} + +interface Uint16Array { + [Symbol.iterator](): IterableIterator; + /** + * Returns an array of key, value pairs for every entry in the array + */ + entries(): IterableIterator<[number, number]>; + /** + * Returns an list of keys in the array + */ + keys(): IterableIterator; + /** + * Returns an list of values in the array + */ + values(): IterableIterator; +} + +interface Uint16ArrayConstructor { + new (elements: Iterable): Uint16Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; +} + +interface Int32Array { + [Symbol.iterator](): IterableIterator; + /** + * Returns an array of key, value pairs for every entry in the array + */ + entries(): IterableIterator<[number, number]>; + /** + * Returns an list of keys in the array + */ + keys(): IterableIterator; + /** + * Returns an list of values in the array + */ + values(): IterableIterator; +} + +interface Int32ArrayConstructor { + new (elements: Iterable): Int32Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; +} + +interface Uint32Array { + [Symbol.iterator](): IterableIterator; + /** + * Returns an array of key, value pairs for every entry in the array + */ + entries(): IterableIterator<[number, number]>; + /** + * Returns an list of keys in the array + */ + keys(): IterableIterator; + /** + * Returns an list of values in the array + */ + values(): IterableIterator; +} + +interface Uint32ArrayConstructor { + new (elements: Iterable): Uint32Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; +} + +interface Float32Array { + [Symbol.iterator](): IterableIterator; + /** + * Returns an array of key, value pairs for every entry in the array + */ + entries(): IterableIterator<[number, number]>; + /** + * Returns an list of keys in the array + */ + keys(): IterableIterator; + /** + * Returns an list of values in the array + */ + values(): IterableIterator; +} + +interface Float32ArrayConstructor { + new (elements: Iterable): Float32Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; +} + +interface Float64Array { + [Symbol.iterator](): IterableIterator; + /** + * Returns an array of key, value pairs for every entry in the array + */ + entries(): IterableIterator<[number, number]>; + /** + * Returns an list of keys in the array + */ + keys(): IterableIterator; + /** + * Returns an list of values in the array + */ + values(): IterableIterator; +} + +interface Float64ArrayConstructor { + new (elements: Iterable): Float64Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; +} diff --git a/node_modules/typescript/lib/lib.es2015.promise.d.ts b/node_modules/typescript/lib/lib.es2015.promise.d.ts index 4db67542..2ea96627 100644 --- a/node_modules/typescript/lib/lib.es2015.promise.d.ts +++ b/node_modules/typescript/lib/lib.es2015.promise.d.ts @@ -15,138 +15,138 @@ and limitations under the License. -/// - - -interface PromiseConstructor { - /** - * A reference to the prototype. - */ - readonly prototype: Promise; - - /** - * Creates a new Promise. - * @param executor A callback used to initialize the promise. This callback is passed two arguments: - * a resolve callback used to resolve the promise with a value or the result of another promise, - * and a reject callback used to reject the promise with a provided reason or error. - */ - new (executor: (resolve: (value?: T | PromiseLike) => void, reject: (reason?: any) => void) => void): Promise; - - /** - * Creates a Promise that is resolved with an array of results when all of the provided Promises - * resolve, or rejected when any Promise is rejected. - * @param values An array of Promises. - * @returns A new Promise. - */ - all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike, T10 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>; - - /** - * Creates a Promise that is resolved with an array of results when all of the provided Promises - * resolve, or rejected when any Promise is rejected. - * @param values An array of Promises. - * @returns A new Promise. - */ - all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>; - - /** - * Creates a Promise that is resolved with an array of results when all of the provided Promises - * resolve, or rejected when any Promise is rejected. - * @param values An array of Promises. - * @returns A new Promise. - */ - all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8]>; - - /** - * Creates a Promise that is resolved with an array of results when all of the provided Promises - * resolve, or rejected when any Promise is rejected. - * @param values An array of Promises. - * @returns A new Promise. - */ - all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7]>; - - /** - * Creates a Promise that is resolved with an array of results when all of the provided Promises - * resolve, or rejected when any Promise is rejected. - * @param values An array of Promises. - * @returns A new Promise. - */ - all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6]>; - - /** - * Creates a Promise that is resolved with an array of results when all of the provided Promises - * resolve, or rejected when any Promise is rejected. - * @param values An array of Promises. - * @returns A new Promise. - */ - all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike]): Promise<[T1, T2, T3, T4, T5]>; - - /** - * Creates a Promise that is resolved with an array of results when all of the provided Promises - * resolve, or rejected when any Promise is rejected. - * @param values An array of Promises. - * @returns A new Promise. - */ - all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike ]): Promise<[T1, T2, T3, T4]>; - - /** - * Creates a Promise that is resolved with an array of results when all of the provided Promises - * resolve, or rejected when any Promise is rejected. - * @param values An array of Promises. - * @returns A new Promise. - */ - all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike]): Promise<[T1, T2, T3]>; - - /** - * Creates a Promise that is resolved with an array of results when all of the provided Promises - * resolve, or rejected when any Promise is rejected. - * @param values An array of Promises. - * @returns A new Promise. - */ - all(values: [T1 | PromiseLike, T2 | PromiseLike]): Promise<[T1, T2]>; - - /** - * Creates a Promise that is resolved with an array of results when all of the provided Promises - * resolve, or rejected when any Promise is rejected. - * @param values An array of Promises. - * @returns A new Promise. - */ - all(values: (T | PromiseLike)[]): Promise; - - /** - * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved - * or rejected. - * @param values An array of Promises. - * @returns A new Promise. - */ - race(values: T[]): Promise ? U : T>; - - /** - * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved - * or rejected. - * @param values An iterable of Promises. - * @returns A new Promise. - */ - race(values: Iterable): Promise ? U : T>; - - /** - * Creates a new rejected promise for the provided reason. - * @param reason The reason the promise was rejected. - * @returns A new rejected Promise. - */ - reject(reason?: any): Promise; - - /** - * Creates a new resolved promise for the provided value. - * @param value A promise. - * @returns A promise whose internal state matches the provided promise. - */ - resolve(value: T | PromiseLike): Promise; - - /** - * Creates a new resolved promise . - * @returns A resolved promise. - */ - resolve(): Promise; -} - -declare var Promise: PromiseConstructor; +/// + + +interface PromiseConstructor { + /** + * A reference to the prototype. + */ + readonly prototype: Promise; + + /** + * Creates a new Promise. + * @param executor A callback used to initialize the promise. This callback is passed two arguments: + * a resolve callback used to resolve the promise with a value or the result of another promise, + * and a reject callback used to reject the promise with a provided reason or error. + */ + new (executor: (resolve: (value?: T | PromiseLike) => void, reject: (reason?: any) => void) => void): Promise; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike, T10 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike]): Promise<[T1, T2, T3, T4, T5]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike ]): Promise<[T1, T2, T3, T4]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike]): Promise<[T1, T2, T3]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + all(values: [T1 | PromiseLike, T2 | PromiseLike]): Promise<[T1, T2]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + all(values: (T | PromiseLike)[]): Promise; + + /** + * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved + * or rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + race(values: T[]): Promise ? U : T>; + + /** + * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved + * or rejected. + * @param values An iterable of Promises. + * @returns A new Promise. + */ + race(values: Iterable): Promise ? U : T>; + + /** + * Creates a new rejected promise for the provided reason. + * @param reason The reason the promise was rejected. + * @returns A new rejected Promise. + */ + reject(reason?: any): Promise; + + /** + * Creates a new resolved promise for the provided value. + * @param value A promise. + * @returns A promise whose internal state matches the provided promise. + */ + resolve(value: T | PromiseLike): Promise; + + /** + * Creates a new resolved promise . + * @returns A resolved promise. + */ + resolve(): Promise; +} + +declare var Promise: PromiseConstructor; diff --git a/node_modules/typescript/lib/lib.es2015.proxy.d.ts b/node_modules/typescript/lib/lib.es2015.proxy.d.ts index 44089703..6b45e14d 100644 --- a/node_modules/typescript/lib/lib.es2015.proxy.d.ts +++ b/node_modules/typescript/lib/lib.es2015.proxy.d.ts @@ -15,28 +15,28 @@ and limitations under the License. -/// +/// -interface ProxyHandler { - getPrototypeOf? (target: T): object | null; - setPrototypeOf? (target: T, v: any): boolean; - isExtensible? (target: T): boolean; - preventExtensions? (target: T): boolean; - getOwnPropertyDescriptor? (target: T, p: PropertyKey): PropertyDescriptor | undefined; - has? (target: T, p: PropertyKey): boolean; - get? (target: T, p: PropertyKey, receiver: any): any; - set? (target: T, p: PropertyKey, value: any, receiver: any): boolean; - deleteProperty? (target: T, p: PropertyKey): boolean; - defineProperty? (target: T, p: PropertyKey, attributes: PropertyDescriptor): boolean; - enumerate? (target: T): PropertyKey[]; - ownKeys? (target: T): PropertyKey[]; - apply? (target: T, thisArg: any, argArray?: any): any; - construct? (target: T, argArray: any, newTarget?: any): object; -} - -interface ProxyConstructor { - revocable(target: T, handler: ProxyHandler): { proxy: T; revoke: () => void; }; - new (target: T, handler: ProxyHandler): T; -} -declare var Proxy: ProxyConstructor; +interface ProxyHandler { + getPrototypeOf? (target: T): object | null; + setPrototypeOf? (target: T, v: any): boolean; + isExtensible? (target: T): boolean; + preventExtensions? (target: T): boolean; + getOwnPropertyDescriptor? (target: T, p: PropertyKey): PropertyDescriptor | undefined; + has? (target: T, p: PropertyKey): boolean; + get? (target: T, p: PropertyKey, receiver: any): any; + set? (target: T, p: PropertyKey, value: any, receiver: any): boolean; + deleteProperty? (target: T, p: PropertyKey): boolean; + defineProperty? (target: T, p: PropertyKey, attributes: PropertyDescriptor): boolean; + enumerate? (target: T): PropertyKey[]; + ownKeys? (target: T): PropertyKey[]; + apply? (target: T, thisArg: any, argArray?: any): any; + construct? (target: T, argArray: any, newTarget?: any): object; +} + +interface ProxyConstructor { + revocable(target: T, handler: ProxyHandler): { proxy: T; revoke: () => void; }; + new (target: T, handler: ProxyHandler): T; +} +declare var Proxy: ProxyConstructor; diff --git a/node_modules/typescript/lib/lib.es2015.reflect.d.ts b/node_modules/typescript/lib/lib.es2015.reflect.d.ts index 1139f1c2..7078c963 100644 --- a/node_modules/typescript/lib/lib.es2015.reflect.d.ts +++ b/node_modules/typescript/lib/lib.es2015.reflect.d.ts @@ -15,21 +15,21 @@ and limitations under the License. -/// +/// -declare namespace Reflect { - function apply(target: Function, thisArgument: any, argumentsList: ArrayLike): any; - function construct(target: Function, argumentsList: ArrayLike, newTarget?: any): any; - function defineProperty(target: object, propertyKey: PropertyKey, attributes: PropertyDescriptor): boolean; - function deleteProperty(target: object, propertyKey: PropertyKey): boolean; - function get(target: object, propertyKey: PropertyKey, receiver?: any): any; - function getOwnPropertyDescriptor(target: object, propertyKey: PropertyKey): PropertyDescriptor | undefined; - function getPrototypeOf(target: object): object; - function has(target: object, propertyKey: PropertyKey): boolean; - function isExtensible(target: object): boolean; - function ownKeys(target: object): PropertyKey[]; - function preventExtensions(target: object): boolean; - function set(target: object, propertyKey: PropertyKey, value: any, receiver?: any): boolean; - function setPrototypeOf(target: object, proto: any): boolean; -} +declare namespace Reflect { + function apply(target: Function, thisArgument: any, argumentsList: ArrayLike): any; + function construct(target: Function, argumentsList: ArrayLike, newTarget?: any): any; + function defineProperty(target: object, propertyKey: PropertyKey, attributes: PropertyDescriptor): boolean; + function deleteProperty(target: object, propertyKey: PropertyKey): boolean; + function get(target: object, propertyKey: PropertyKey, receiver?: any): any; + function getOwnPropertyDescriptor(target: object, propertyKey: PropertyKey): PropertyDescriptor | undefined; + function getPrototypeOf(target: object): object; + function has(target: object, propertyKey: PropertyKey): boolean; + function isExtensible(target: object): boolean; + function ownKeys(target: object): PropertyKey[]; + function preventExtensions(target: object): boolean; + function set(target: object, propertyKey: PropertyKey, value: any, receiver?: any): boolean; + function setPrototypeOf(target: object, proto: any): boolean; +} diff --git a/node_modules/typescript/lib/lib.es2015.symbol.d.ts b/node_modules/typescript/lib/lib.es2015.symbol.d.ts index bf09484d..07b2c405 100644 --- a/node_modules/typescript/lib/lib.es2015.symbol.d.ts +++ b/node_modules/typescript/lib/lib.es2015.symbol.d.ts @@ -15,34 +15,34 @@ and limitations under the License. -/// - - -interface SymbolConstructor { - /** - * A reference to the prototype. - */ - readonly prototype: Symbol; - - /** - * Returns a new unique Symbol value. - * @param description Description of the new Symbol object. - */ - (description?: string | number): symbol; - - /** - * Returns a Symbol object from the global symbol registry matching the given key if found. - * Otherwise, returns a new symbol with this key. - * @param key key to search for. - */ - for(key: string): symbol; - - /** - * Returns a key from the global symbol registry matching the given Symbol if found. - * Otherwise, returns a undefined. - * @param sym Symbol to find the key for. - */ - keyFor(sym: symbol): string | undefined; -} - +/// + + +interface SymbolConstructor { + /** + * A reference to the prototype. + */ + readonly prototype: Symbol; + + /** + * Returns a new unique Symbol value. + * @param description Description of the new Symbol object. + */ + (description?: string | number): symbol; + + /** + * Returns a Symbol object from the global symbol registry matching the given key if found. + * Otherwise, returns a new symbol with this key. + * @param key key to search for. + */ + for(key: string): symbol; + + /** + * Returns a key from the global symbol registry matching the given Symbol if found. + * Otherwise, returns a undefined. + * @param sym Symbol to find the key for. + */ + keyFor(sym: symbol): string | undefined; +} + declare var Symbol: SymbolConstructor; \ No newline at end of file diff --git a/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts b/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts index 400f70a7..454e2960 100644 --- a/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +++ b/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts @@ -15,304 +15,304 @@ and limitations under the License. -/// - - -/// - -interface SymbolConstructor { - /** - * A method that determines if a constructor object recognizes an object as one of the - * constructor’s instances. Called by the semantics of the instanceof operator. - */ - readonly hasInstance: symbol; - - /** - * A Boolean value that if true indicates that an object should flatten to its array elements - * by Array.prototype.concat. - */ - readonly isConcatSpreadable: symbol; - - /** - * A regular expression method that matches the regular expression against a string. Called - * by the String.prototype.match method. - */ - readonly match: symbol; - - /** - * A regular expression method that replaces matched substrings of a string. Called by the - * String.prototype.replace method. - */ - readonly replace: symbol; - - /** - * A regular expression method that returns the index within a string that matches the - * regular expression. Called by the String.prototype.search method. - */ - readonly search: symbol; - - /** - * A function valued property that is the constructor function that is used to create - * derived objects. - */ - readonly species: symbol; - - /** - * A regular expression method that splits a string at the indices that match the regular - * expression. Called by the String.prototype.split method. - */ - readonly split: symbol; - - /** - * A method that converts an object to a corresponding primitive value. - * Called by the ToPrimitive abstract operation. - */ - readonly toPrimitive: symbol; - - /** - * A String value that is used in the creation of the default string description of an object. - * Called by the built-in method Object.prototype.toString. - */ - readonly toStringTag: symbol; - - /** - * An Object whose own property names are property names that are excluded from the 'with' - * environment bindings of the associated objects. - */ - readonly unscopables: symbol; -} - -interface Symbol { - readonly [Symbol.toStringTag]: string; -} - -interface Array { - /** - * Returns an object whose properties have the value 'true' - * when they will be absent when used in a 'with' statement. - */ - [Symbol.unscopables](): { - copyWithin: boolean; - entries: boolean; - fill: boolean; - find: boolean; - findIndex: boolean; - keys: boolean; - values: boolean; - }; -} - -interface Date { - /** - * Converts a Date object to a string. - */ - [Symbol.toPrimitive](hint: "default"): string; - /** - * Converts a Date object to a string. - */ - [Symbol.toPrimitive](hint: "string"): string; - /** - * Converts a Date object to a number. - */ - [Symbol.toPrimitive](hint: "number"): number; - /** - * Converts a Date object to a string or number. - * - * @param hint The strings "number", "string", or "default" to specify what primitive to return. - * - * @throws {TypeError} If 'hint' was given something other than "number", "string", or "default". - * @returns A number if 'hint' was "number", a string if 'hint' was "string" or "default". - */ - [Symbol.toPrimitive](hint: string): string | number; -} - -interface Map { - readonly [Symbol.toStringTag]: string; -} - -interface WeakMap { - readonly [Symbol.toStringTag]: string; -} - -interface Set { - readonly [Symbol.toStringTag]: string; -} - -interface WeakSet { - readonly [Symbol.toStringTag]: string; -} - -interface JSON { - readonly [Symbol.toStringTag]: string; -} - -interface Function { - /** - * Determines whether the given value inherits from this function if this function was used - * as a constructor function. - * - * A constructor function can control which objects are recognized as its instances by - * 'instanceof' by overriding this method. - */ - [Symbol.hasInstance](value: any): boolean; -} - -interface GeneratorFunction { - readonly [Symbol.toStringTag]: string; -} - -interface Math { - readonly [Symbol.toStringTag]: string; -} - -interface Promise { - readonly [Symbol.toStringTag]: string; -} - -interface PromiseConstructor { - readonly [Symbol.species]: PromiseConstructor; -} - -interface RegExp { - /** - * Matches a string with this regular expression, and returns an array containing the results of - * that search. - * @param string A string to search within. - */ - [Symbol.match](string: string): RegExpMatchArray | null; - - /** - * Replaces text in a string, using this regular expression. - * @param string A String object or string literal whose contents matching against - * this regular expression will be replaced - * @param replaceValue A String object or string literal containing the text to replace for every - * successful match of this regular expression. - */ - [Symbol.replace](string: string, replaceValue: string): string; - - /** - * Replaces text in a string, using this regular expression. - * @param string A String object or string literal whose contents matching against - * this regular expression will be replaced - * @param replacer A function that returns the replacement text. - */ - [Symbol.replace](string: string, replacer: (substring: string, ...args: any[]) => string): string; - - /** - * Finds the position beginning first substring match in a regular expression search - * using this regular expression. - * - * @param string The string to search within. - */ - [Symbol.search](string: string): number; - - /** - * Returns an array of substrings that were delimited by strings in the original input that - * match against this regular expression. - * - * If the regular expression contains capturing parentheses, then each time this - * regular expression matches, the results (including any undefined results) of the - * capturing parentheses are spliced. - * - * @param string string value to split - * @param limit if not undefined, the output array is truncated so that it contains no more - * than 'limit' elements. - */ - [Symbol.split](string: string, limit?: number): string[]; -} - -interface RegExpConstructor { - readonly [Symbol.species]: RegExpConstructor; -} - -interface String { - /** - * Matches a string an object that supports being matched against, and returns an array containing the results of that search. - * @param matcher An object that supports being matched against. - */ - match(matcher: { [Symbol.match](string: string): RegExpMatchArray | null; }): RegExpMatchArray | null; - - /** - * Replaces text in a string, using an object that supports replacement within a string. - * @param searchValue A object can search for and replace matches within a string. - * @param replaceValue A string containing the text to replace for every successful match of searchValue in this string. - */ - replace(searchValue: { [Symbol.replace](string: string, replaceValue: string): string; }, replaceValue: string): string; - - /** - * Replaces text in a string, using an object that supports replacement within a string. - * @param searchValue A object can search for and replace matches within a string. - * @param replacer A function that returns the replacement text. - */ - replace(searchValue: { [Symbol.replace](string: string, replacer: (substring: string, ...args: any[]) => string): string; }, replacer: (substring: string, ...args: any[]) => string): string; - - /** - * Finds the first substring match in a regular expression search. - * @param searcher An object which supports searching within a string. - */ - search(searcher: { [Symbol.search](string: string): number; }): number; - - /** - * Split a string into substrings using the specified separator and return them as an array. - * @param splitter An object that can split a string. - * @param limit A value used to limit the number of elements returned in the array. - */ - split(splitter: { [Symbol.split](string: string, limit?: number): string[]; }, limit?: number): string[]; -} - -interface ArrayBuffer { - readonly [Symbol.toStringTag]: string; -} - -interface DataView { - readonly [Symbol.toStringTag]: string; -} - -interface Int8Array { - readonly [Symbol.toStringTag]: "Int8Array"; -} - -interface Uint8Array { - readonly [Symbol.toStringTag]: "UInt8Array"; -} - -interface Uint8ClampedArray { - readonly [Symbol.toStringTag]: "Uint8ClampedArray"; -} - -interface Int16Array { - readonly [Symbol.toStringTag]: "Int16Array"; -} - -interface Uint16Array { - readonly [Symbol.toStringTag]: "Uint16Array"; -} - -interface Int32Array { - readonly [Symbol.toStringTag]: "Int32Array"; -} - -interface Uint32Array { - readonly [Symbol.toStringTag]: "Uint32Array"; -} - -interface Float32Array { - readonly [Symbol.toStringTag]: "Float32Array"; -} - -interface Float64Array { - readonly [Symbol.toStringTag]: "Float64Array"; -} - -interface ArrayConstructor { - readonly [Symbol.species]: ArrayConstructor; -} -interface MapConstructor { - readonly [Symbol.species]: MapConstructor; -} -interface SetConstructor { - readonly [Symbol.species]: SetConstructor; -} -interface ArrayBufferConstructor { - readonly [Symbol.species]: ArrayBufferConstructor; +/// + + +/// + +interface SymbolConstructor { + /** + * A method that determines if a constructor object recognizes an object as one of the + * constructor’s instances. Called by the semantics of the instanceof operator. + */ + readonly hasInstance: symbol; + + /** + * A Boolean value that if true indicates that an object should flatten to its array elements + * by Array.prototype.concat. + */ + readonly isConcatSpreadable: symbol; + + /** + * A regular expression method that matches the regular expression against a string. Called + * by the String.prototype.match method. + */ + readonly match: symbol; + + /** + * A regular expression method that replaces matched substrings of a string. Called by the + * String.prototype.replace method. + */ + readonly replace: symbol; + + /** + * A regular expression method that returns the index within a string that matches the + * regular expression. Called by the String.prototype.search method. + */ + readonly search: symbol; + + /** + * A function valued property that is the constructor function that is used to create + * derived objects. + */ + readonly species: symbol; + + /** + * A regular expression method that splits a string at the indices that match the regular + * expression. Called by the String.prototype.split method. + */ + readonly split: symbol; + + /** + * A method that converts an object to a corresponding primitive value. + * Called by the ToPrimitive abstract operation. + */ + readonly toPrimitive: symbol; + + /** + * A String value that is used in the creation of the default string description of an object. + * Called by the built-in method Object.prototype.toString. + */ + readonly toStringTag: symbol; + + /** + * An Object whose own property names are property names that are excluded from the 'with' + * environment bindings of the associated objects. + */ + readonly unscopables: symbol; +} + +interface Symbol { + readonly [Symbol.toStringTag]: string; +} + +interface Array { + /** + * Returns an object whose properties have the value 'true' + * when they will be absent when used in a 'with' statement. + */ + [Symbol.unscopables](): { + copyWithin: boolean; + entries: boolean; + fill: boolean; + find: boolean; + findIndex: boolean; + keys: boolean; + values: boolean; + }; +} + +interface Date { + /** + * Converts a Date object to a string. + */ + [Symbol.toPrimitive](hint: "default"): string; + /** + * Converts a Date object to a string. + */ + [Symbol.toPrimitive](hint: "string"): string; + /** + * Converts a Date object to a number. + */ + [Symbol.toPrimitive](hint: "number"): number; + /** + * Converts a Date object to a string or number. + * + * @param hint The strings "number", "string", or "default" to specify what primitive to return. + * + * @throws {TypeError} If 'hint' was given something other than "number", "string", or "default". + * @returns A number if 'hint' was "number", a string if 'hint' was "string" or "default". + */ + [Symbol.toPrimitive](hint: string): string | number; +} + +interface Map { + readonly [Symbol.toStringTag]: string; +} + +interface WeakMap { + readonly [Symbol.toStringTag]: string; +} + +interface Set { + readonly [Symbol.toStringTag]: string; +} + +interface WeakSet { + readonly [Symbol.toStringTag]: string; +} + +interface JSON { + readonly [Symbol.toStringTag]: string; +} + +interface Function { + /** + * Determines whether the given value inherits from this function if this function was used + * as a constructor function. + * + * A constructor function can control which objects are recognized as its instances by + * 'instanceof' by overriding this method. + */ + [Symbol.hasInstance](value: any): boolean; +} + +interface GeneratorFunction { + readonly [Symbol.toStringTag]: string; +} + +interface Math { + readonly [Symbol.toStringTag]: string; +} + +interface Promise { + readonly [Symbol.toStringTag]: string; +} + +interface PromiseConstructor { + readonly [Symbol.species]: PromiseConstructor; +} + +interface RegExp { + /** + * Matches a string with this regular expression, and returns an array containing the results of + * that search. + * @param string A string to search within. + */ + [Symbol.match](string: string): RegExpMatchArray | null; + + /** + * Replaces text in a string, using this regular expression. + * @param string A String object or string literal whose contents matching against + * this regular expression will be replaced + * @param replaceValue A String object or string literal containing the text to replace for every + * successful match of this regular expression. + */ + [Symbol.replace](string: string, replaceValue: string): string; + + /** + * Replaces text in a string, using this regular expression. + * @param string A String object or string literal whose contents matching against + * this regular expression will be replaced + * @param replacer A function that returns the replacement text. + */ + [Symbol.replace](string: string, replacer: (substring: string, ...args: any[]) => string): string; + + /** + * Finds the position beginning first substring match in a regular expression search + * using this regular expression. + * + * @param string The string to search within. + */ + [Symbol.search](string: string): number; + + /** + * Returns an array of substrings that were delimited by strings in the original input that + * match against this regular expression. + * + * If the regular expression contains capturing parentheses, then each time this + * regular expression matches, the results (including any undefined results) of the + * capturing parentheses are spliced. + * + * @param string string value to split + * @param limit if not undefined, the output array is truncated so that it contains no more + * than 'limit' elements. + */ + [Symbol.split](string: string, limit?: number): string[]; +} + +interface RegExpConstructor { + readonly [Symbol.species]: RegExpConstructor; +} + +interface String { + /** + * Matches a string an object that supports being matched against, and returns an array containing the results of that search. + * @param matcher An object that supports being matched against. + */ + match(matcher: { [Symbol.match](string: string): RegExpMatchArray | null; }): RegExpMatchArray | null; + + /** + * Replaces text in a string, using an object that supports replacement within a string. + * @param searchValue A object can search for and replace matches within a string. + * @param replaceValue A string containing the text to replace for every successful match of searchValue in this string. + */ + replace(searchValue: { [Symbol.replace](string: string, replaceValue: string): string; }, replaceValue: string): string; + + /** + * Replaces text in a string, using an object that supports replacement within a string. + * @param searchValue A object can search for and replace matches within a string. + * @param replacer A function that returns the replacement text. + */ + replace(searchValue: { [Symbol.replace](string: string, replacer: (substring: string, ...args: any[]) => string): string; }, replacer: (substring: string, ...args: any[]) => string): string; + + /** + * Finds the first substring match in a regular expression search. + * @param searcher An object which supports searching within a string. + */ + search(searcher: { [Symbol.search](string: string): number; }): number; + + /** + * Split a string into substrings using the specified separator and return them as an array. + * @param splitter An object that can split a string. + * @param limit A value used to limit the number of elements returned in the array. + */ + split(splitter: { [Symbol.split](string: string, limit?: number): string[]; }, limit?: number): string[]; +} + +interface ArrayBuffer { + readonly [Symbol.toStringTag]: string; +} + +interface DataView { + readonly [Symbol.toStringTag]: string; +} + +interface Int8Array { + readonly [Symbol.toStringTag]: "Int8Array"; +} + +interface Uint8Array { + readonly [Symbol.toStringTag]: "UInt8Array"; +} + +interface Uint8ClampedArray { + readonly [Symbol.toStringTag]: "Uint8ClampedArray"; +} + +interface Int16Array { + readonly [Symbol.toStringTag]: "Int16Array"; +} + +interface Uint16Array { + readonly [Symbol.toStringTag]: "Uint16Array"; +} + +interface Int32Array { + readonly [Symbol.toStringTag]: "Int32Array"; +} + +interface Uint32Array { + readonly [Symbol.toStringTag]: "Uint32Array"; +} + +interface Float32Array { + readonly [Symbol.toStringTag]: "Float32Array"; +} + +interface Float64Array { + readonly [Symbol.toStringTag]: "Float64Array"; +} + +interface ArrayConstructor { + readonly [Symbol.species]: ArrayConstructor; +} +interface MapConstructor { + readonly [Symbol.species]: MapConstructor; +} +interface SetConstructor { + readonly [Symbol.species]: SetConstructor; +} +interface ArrayBufferConstructor { + readonly [Symbol.species]: ArrayBufferConstructor; } \ No newline at end of file diff --git a/node_modules/typescript/lib/lib.es2016.array.include.d.ts b/node_modules/typescript/lib/lib.es2016.array.include.d.ts index 734fa450..3f417a6a 100644 --- a/node_modules/typescript/lib/lib.es2016.array.include.d.ts +++ b/node_modules/typescript/lib/lib.es2016.array.include.d.ts @@ -15,104 +15,104 @@ and limitations under the License. -/// +/// -interface Array { - /** - * Determines whether an array includes a certain element, returning true or false as appropriate. - * @param searchElement The element to search for. - * @param fromIndex The position in this array at which to begin searching for searchElement. - */ - includes(searchElement: T, fromIndex?: number): boolean; -} - -interface ReadonlyArray { - /** - * Determines whether an array includes a certain element, returning true or false as appropriate. - * @param searchElement The element to search for. - * @param fromIndex The position in this array at which to begin searching for searchElement. - */ - includes(searchElement: T, fromIndex?: number): boolean; -} - -interface Int8Array { - /** - * Determines whether an array includes a certain element, returning true or false as appropriate. - * @param searchElement The element to search for. - * @param fromIndex The position in this array at which to begin searching for searchElement. - */ - includes(searchElement: number, fromIndex?: number): boolean; -} - -interface Uint8Array { - /** - * Determines whether an array includes a certain element, returning true or false as appropriate. - * @param searchElement The element to search for. - * @param fromIndex The position in this array at which to begin searching for searchElement. - */ - includes(searchElement: number, fromIndex?: number): boolean; -} - -interface Uint8ClampedArray { - /** - * Determines whether an array includes a certain element, returning true or false as appropriate. - * @param searchElement The element to search for. - * @param fromIndex The position in this array at which to begin searching for searchElement. - */ - includes(searchElement: number, fromIndex?: number): boolean; -} - -interface Int16Array { - /** - * Determines whether an array includes a certain element, returning true or false as appropriate. - * @param searchElement The element to search for. - * @param fromIndex The position in this array at which to begin searching for searchElement. - */ - includes(searchElement: number, fromIndex?: number): boolean; -} - -interface Uint16Array { - /** - * Determines whether an array includes a certain element, returning true or false as appropriate. - * @param searchElement The element to search for. - * @param fromIndex The position in this array at which to begin searching for searchElement. - */ - includes(searchElement: number, fromIndex?: number): boolean; -} - -interface Int32Array { - /** - * Determines whether an array includes a certain element, returning true or false as appropriate. - * @param searchElement The element to search for. - * @param fromIndex The position in this array at which to begin searching for searchElement. - */ - includes(searchElement: number, fromIndex?: number): boolean; -} - -interface Uint32Array { - /** - * Determines whether an array includes a certain element, returning true or false as appropriate. - * @param searchElement The element to search for. - * @param fromIndex The position in this array at which to begin searching for searchElement. - */ - includes(searchElement: number, fromIndex?: number): boolean; -} - -interface Float32Array { - /** - * Determines whether an array includes a certain element, returning true or false as appropriate. - * @param searchElement The element to search for. - * @param fromIndex The position in this array at which to begin searching for searchElement. - */ - includes(searchElement: number, fromIndex?: number): boolean; -} - -interface Float64Array { - /** - * Determines whether an array includes a certain element, returning true or false as appropriate. - * @param searchElement The element to search for. - * @param fromIndex The position in this array at which to begin searching for searchElement. - */ - includes(searchElement: number, fromIndex?: number): boolean; +interface Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: T, fromIndex?: number): boolean; +} + +interface ReadonlyArray { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: T, fromIndex?: number): boolean; +} + +interface Int8Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; +} + +interface Uint8Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; +} + +interface Uint8ClampedArray { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; +} + +interface Int16Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; +} + +interface Uint16Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; +} + +interface Int32Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; +} + +interface Uint32Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; +} + +interface Float32Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; +} + +interface Float64Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; } \ No newline at end of file diff --git a/node_modules/typescript/lib/lib.es2016.d.ts b/node_modules/typescript/lib/lib.es2016.d.ts index b2d59b8d..81da5004 100644 --- a/node_modules/typescript/lib/lib.es2016.d.ts +++ b/node_modules/typescript/lib/lib.es2016.d.ts @@ -15,8 +15,8 @@ and limitations under the License. -/// +/// -/// +/// /// \ No newline at end of file diff --git a/node_modules/typescript/lib/lib.es2016.full.d.ts b/node_modules/typescript/lib/lib.es2016.full.d.ts index 6ecfe0a6..5e317b2c 100644 --- a/node_modules/typescript/lib/lib.es2016.full.d.ts +++ b/node_modules/typescript/lib/lib.es2016.full.d.ts @@ -15,11 +15,11 @@ and limitations under the License. -/// +/// -/// -/// -/// -/// +/// +/// +/// +/// /// \ No newline at end of file diff --git a/node_modules/typescript/lib/lib.es2017.d.ts b/node_modules/typescript/lib/lib.es2017.d.ts index 850e81d0..38aae6a3 100644 --- a/node_modules/typescript/lib/lib.es2017.d.ts +++ b/node_modules/typescript/lib/lib.es2017.d.ts @@ -15,12 +15,12 @@ and limitations under the License. -/// +/// -/// -/// -/// -/// -/// -/// +/// +/// +/// +/// +/// +/// diff --git a/node_modules/typescript/lib/lib.es2017.full.d.ts b/node_modules/typescript/lib/lib.es2017.full.d.ts index 46d2ee83..f9de1f4d 100644 --- a/node_modules/typescript/lib/lib.es2017.full.d.ts +++ b/node_modules/typescript/lib/lib.es2017.full.d.ts @@ -15,11 +15,11 @@ and limitations under the License. -/// +/// -/// -/// -/// -/// +/// +/// +/// +/// /// \ No newline at end of file diff --git a/node_modules/typescript/lib/lib.es2017.intl.d.ts b/node_modules/typescript/lib/lib.es2017.intl.d.ts index 25b1fa5f..f4fc56ba 100644 --- a/node_modules/typescript/lib/lib.es2017.intl.d.ts +++ b/node_modules/typescript/lib/lib.es2017.intl.d.ts @@ -15,18 +15,18 @@ and limitations under the License. -/// +/// -declare namespace Intl { - type DateTimeFormatPartTypes = "day" | "dayPeriod" | "era" | "hour" | "literal" | "minute" | "month" | "second" | "timeZoneName" | "weekday" | "year"; - - interface DateTimeFormatPart { - type: DateTimeFormatPartTypes; - value: string; - } - - interface DateTimeFormat { - formatToParts(date?: Date | number): DateTimeFormatPart[]; - } -} +declare namespace Intl { + type DateTimeFormatPartTypes = "day" | "dayPeriod" | "era" | "hour" | "literal" | "minute" | "month" | "second" | "timeZoneName" | "weekday" | "year"; + + interface DateTimeFormatPart { + type: DateTimeFormatPartTypes; + value: string; + } + + interface DateTimeFormat { + formatToParts(date?: Date | number): DateTimeFormatPart[]; + } +} diff --git a/node_modules/typescript/lib/lib.es2017.object.d.ts b/node_modules/typescript/lib/lib.es2017.object.d.ts index 65aa1f95..c5db0f41 100644 --- a/node_modules/typescript/lib/lib.es2017.object.d.ts +++ b/node_modules/typescript/lib/lib.es2017.object.d.ts @@ -15,37 +15,37 @@ and limitations under the License. -/// - - -interface ObjectConstructor { - /** - * Returns an array of values of the enumerable properties of an object - * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. - */ - values(o: { [s: string]: T } | ArrayLike): T[]; - - /** - * Returns an array of values of the enumerable properties of an object - * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. - */ - values(o: {}): any[]; - - /** - * Returns an array of key/values of the enumerable properties of an object - * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. - */ - entries(o: { [s: string]: T } | ArrayLike): [string, T][]; - - /** - * Returns an array of key/values of the enumerable properties of an object - * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. - */ - entries(o: {}): [string, any][]; - - /** - * Returns an object containing all own property descriptors of an object - * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. - */ - getOwnPropertyDescriptors(o: T): {[P in keyof T]: TypedPropertyDescriptor} & { [x: string]: PropertyDescriptor }; -} +/// + + +interface ObjectConstructor { + /** + * Returns an array of values of the enumerable properties of an object + * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. + */ + values(o: { [s: string]: T } | ArrayLike): T[]; + + /** + * Returns an array of values of the enumerable properties of an object + * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. + */ + values(o: {}): any[]; + + /** + * Returns an array of key/values of the enumerable properties of an object + * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. + */ + entries(o: { [s: string]: T } | ArrayLike): [string, T][]; + + /** + * Returns an array of key/values of the enumerable properties of an object + * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. + */ + entries(o: {}): [string, any][]; + + /** + * Returns an object containing all own property descriptors of an object + * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. + */ + getOwnPropertyDescriptors(o: T): {[P in keyof T]: TypedPropertyDescriptor} & { [x: string]: PropertyDescriptor }; +} diff --git a/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts b/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts index e3fb0c73..d9a914da 100644 --- a/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +++ b/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts @@ -15,124 +15,124 @@ and limitations under the License. -/// - - -/// -/// - -interface SharedArrayBuffer { - /** - * Read-only. The length of the ArrayBuffer (in bytes). - */ - readonly byteLength: number; - - /* - * The SharedArrayBuffer constructor's length property whose value is 1. - */ - length: number; - /** - * Returns a section of an SharedArrayBuffer. - */ - slice(begin: number, end?: number): SharedArrayBuffer; - readonly [Symbol.species]: SharedArrayBuffer; - readonly [Symbol.toStringTag]: "SharedArrayBuffer"; -} - -interface SharedArrayBufferConstructor { - readonly prototype: SharedArrayBuffer; - new (byteLength: number): SharedArrayBuffer; -} -declare var SharedArrayBuffer: SharedArrayBufferConstructor; - -interface ArrayBufferTypes { - SharedArrayBuffer: SharedArrayBuffer; -} - -interface Atomics { - /** - * Adds a value to the value at the given position in the array, returning the original value. - * Until this atomic operation completes, any other read or write operation against the array - * will block. - */ - add(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number; - - /** - * Stores the bitwise AND of a value with the value at the given position in the array, - * returning the original value. Until this atomic operation completes, any other read or - * write operation against the array will block. - */ - and(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number; - - /** - * Replaces the value at the given position in the array if the original value equals the given - * expected value, returning the original value. Until this atomic operation completes, any - * other read or write operation against the array will block. - */ - compareExchange(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, expectedValue: number, replacementValue: number): number; - - /** - * Replaces the value at the given position in the array, returning the original value. Until - * this atomic operation completes, any other read or write operation against the array will - * block. - */ - exchange(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number; - - /** - * Returns a value indicating whether high-performance algorithms can use atomic operations - * (`true`) or must use locks (`false`) for the given number of bytes-per-element of a typed - * array. - */ - isLockFree(size: number): boolean; - - /** - * Returns the value at the given position in the array. Until this atomic operation completes, - * any other read or write operation against the array will block. - */ - load(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number): number; - - /** - * Stores the bitwise OR of a value with the value at the given position in the array, - * returning the original value. Until this atomic operation completes, any other read or write - * operation against the array will block. - */ - or(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number; - - /** - * Stores a value at the given position in the array, returning the new value. Until this - * atomic operation completes, any other read or write operation against the array will block. - */ - store(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number; - - /** - * Subtracts a value from the value at the given position in the array, returning the original - * value. Until this atomic operation completes, any other read or write operation against the - * array will block. - */ - sub(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number; - - /** - * If the value at the given position in the array is equal to the provided value, the current - * agent is put to sleep causing execution to suspend until the timeout expires (returning - * `"timed-out"`) or until the agent is awoken (returning `"ok"`); otherwise, returns - * `"not-equal"`. - */ - wait(typedArray: Int32Array, index: number, value: number, timeout?: number): "ok" | "not-equal" | "timed-out"; - - /** - * Wakes up sleeping agents that are waiting on the given index of the array, returning the - * number of agents that were awoken. - */ - notify(typedArray: Int32Array, index: number, count: number): number; - - /** - * Stores the bitwise XOR of a value with the value at the given position in the array, - * returning the original value. Until this atomic operation completes, any other read or write - * operation against the array will block. - */ - xor(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number; - - readonly [Symbol.toStringTag]: "Atomics"; -} - -declare var Atomics: Atomics; +/// + + +/// +/// + +interface SharedArrayBuffer { + /** + * Read-only. The length of the ArrayBuffer (in bytes). + */ + readonly byteLength: number; + + /* + * The SharedArrayBuffer constructor's length property whose value is 1. + */ + length: number; + /** + * Returns a section of an SharedArrayBuffer. + */ + slice(begin: number, end?: number): SharedArrayBuffer; + readonly [Symbol.species]: SharedArrayBuffer; + readonly [Symbol.toStringTag]: "SharedArrayBuffer"; +} + +interface SharedArrayBufferConstructor { + readonly prototype: SharedArrayBuffer; + new (byteLength: number): SharedArrayBuffer; +} +declare var SharedArrayBuffer: SharedArrayBufferConstructor; + +interface ArrayBufferTypes { + SharedArrayBuffer: SharedArrayBuffer; +} + +interface Atomics { + /** + * Adds a value to the value at the given position in the array, returning the original value. + * Until this atomic operation completes, any other read or write operation against the array + * will block. + */ + add(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number; + + /** + * Stores the bitwise AND of a value with the value at the given position in the array, + * returning the original value. Until this atomic operation completes, any other read or + * write operation against the array will block. + */ + and(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number; + + /** + * Replaces the value at the given position in the array if the original value equals the given + * expected value, returning the original value. Until this atomic operation completes, any + * other read or write operation against the array will block. + */ + compareExchange(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, expectedValue: number, replacementValue: number): number; + + /** + * Replaces the value at the given position in the array, returning the original value. Until + * this atomic operation completes, any other read or write operation against the array will + * block. + */ + exchange(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number; + + /** + * Returns a value indicating whether high-performance algorithms can use atomic operations + * (`true`) or must use locks (`false`) for the given number of bytes-per-element of a typed + * array. + */ + isLockFree(size: number): boolean; + + /** + * Returns the value at the given position in the array. Until this atomic operation completes, + * any other read or write operation against the array will block. + */ + load(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number): number; + + /** + * Stores the bitwise OR of a value with the value at the given position in the array, + * returning the original value. Until this atomic operation completes, any other read or write + * operation against the array will block. + */ + or(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number; + + /** + * Stores a value at the given position in the array, returning the new value. Until this + * atomic operation completes, any other read or write operation against the array will block. + */ + store(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number; + + /** + * Subtracts a value from the value at the given position in the array, returning the original + * value. Until this atomic operation completes, any other read or write operation against the + * array will block. + */ + sub(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number; + + /** + * If the value at the given position in the array is equal to the provided value, the current + * agent is put to sleep causing execution to suspend until the timeout expires (returning + * `"timed-out"`) or until the agent is awoken (returning `"ok"`); otherwise, returns + * `"not-equal"`. + */ + wait(typedArray: Int32Array, index: number, value: number, timeout?: number): "ok" | "not-equal" | "timed-out"; + + /** + * Wakes up sleeping agents that are waiting on the given index of the array, returning the + * number of agents that were awoken. + */ + notify(typedArray: Int32Array, index: number, count: number): number; + + /** + * Stores the bitwise XOR of a value with the value at the given position in the array, + * returning the original value. Until this atomic operation completes, any other read or write + * operation against the array will block. + */ + xor(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number; + + readonly [Symbol.toStringTag]: "Atomics"; +} + +declare var Atomics: Atomics; diff --git a/node_modules/typescript/lib/lib.es2017.string.d.ts b/node_modules/typescript/lib/lib.es2017.string.d.ts index dad64f0d..5d46546a 100644 --- a/node_modules/typescript/lib/lib.es2017.string.d.ts +++ b/node_modules/typescript/lib/lib.es2017.string.d.ts @@ -15,33 +15,33 @@ and limitations under the License. -/// +/// -interface String { - /** - * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length. - * The padding is applied from the start (left) of the current string. - * - * @param maxLength The length of the resulting string once the current string has been padded. - * If this parameter is smaller than the current string's length, the current string will be returned as it is. - * - * @param fillString The string to pad the current string with. - * If this string is too long, it will be truncated and the left-most part will be applied. - * The default value for this parameter is " " (U+0020). - */ - padStart(maxLength: number, fillString?: string): string; - - /** - * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length. - * The padding is applied from the end (right) of the current string. - * - * @param maxLength The length of the resulting string once the current string has been padded. - * If this parameter is smaller than the current string's length, the current string will be returned as it is. - * - * @param fillString The string to pad the current string with. - * If this string is too long, it will be truncated and the left-most part will be applied. - * The default value for this parameter is " " (U+0020). - */ - padEnd(maxLength: number, fillString?: string): string; -} +interface String { + /** + * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length. + * The padding is applied from the start (left) of the current string. + * + * @param maxLength The length of the resulting string once the current string has been padded. + * If this parameter is smaller than the current string's length, the current string will be returned as it is. + * + * @param fillString The string to pad the current string with. + * If this string is too long, it will be truncated and the left-most part will be applied. + * The default value for this parameter is " " (U+0020). + */ + padStart(maxLength: number, fillString?: string): string; + + /** + * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length. + * The padding is applied from the end (right) of the current string. + * + * @param maxLength The length of the resulting string once the current string has been padded. + * If this parameter is smaller than the current string's length, the current string will be returned as it is. + * + * @param fillString The string to pad the current string with. + * If this string is too long, it will be truncated and the left-most part will be applied. + * The default value for this parameter is " " (U+0020). + */ + padEnd(maxLength: number, fillString?: string): string; +} diff --git a/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts b/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts index 4f6f6e72..0a13c77a 100644 --- a/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +++ b/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts @@ -15,41 +15,41 @@ and limitations under the License. -/// - - -interface Int8ArrayConstructor { - new (): Int8Array; -} - -interface Uint8ArrayConstructor { - new (): Uint8Array; -} - -interface Uint8ClampedArrayConstructor { - new (): Uint8ClampedArray; -} - -interface Int16ArrayConstructor { - new (): Int16Array; -} - -interface Uint16ArrayConstructor { - new (): Uint16Array; -} - -interface Int32ArrayConstructor { - new (): Int32Array; -} - -interface Uint32ArrayConstructor { - new (): Uint32Array; -} - -interface Float32ArrayConstructor { - new (): Float32Array; -} - -interface Float64ArrayConstructor { - new (): Float64Array; -} +/// + + +interface Int8ArrayConstructor { + new (): Int8Array; +} + +interface Uint8ArrayConstructor { + new (): Uint8Array; +} + +interface Uint8ClampedArrayConstructor { + new (): Uint8ClampedArray; +} + +interface Int16ArrayConstructor { + new (): Int16Array; +} + +interface Uint16ArrayConstructor { + new (): Uint16Array; +} + +interface Int32ArrayConstructor { + new (): Int32Array; +} + +interface Uint32ArrayConstructor { + new (): Uint32Array; +} + +interface Float32ArrayConstructor { + new (): Float32Array; +} + +interface Float64ArrayConstructor { + new (): Float64Array; +} diff --git a/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts b/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts index a569853b..282c9969 100644 --- a/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +++ b/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts @@ -15,65 +15,65 @@ and limitations under the License. -/// +/// -/// - -interface AsyncGenerator extends AsyncIterator { - // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. - next(...args: [] | [TNext | PromiseLike]): Promise>; - return(value: TReturn | PromiseLike): Promise>; - throw(e: any): Promise>; - [Symbol.asyncIterator](): AsyncGenerator; -} - -interface AsyncGeneratorFunction { - /** - * Creates a new AsyncGenerator object. - * @param args A list of arguments the function accepts. - */ - new (...args: any[]): AsyncGenerator; - /** - * Creates a new AsyncGenerator object. - * @param args A list of arguments the function accepts. - */ - (...args: any[]): AsyncGenerator; - /** - * The length of the arguments. - */ - readonly length: number; - /** - * Returns the name of the function. - */ - readonly name: string; - /** - * A reference to the prototype. - */ - readonly prototype: AsyncGenerator; -} - -interface AsyncGeneratorFunctionConstructor { - /** - * Creates a new AsyncGenerator function. - * @param args A list of arguments the function accepts. - */ - new (...args: string[]): AsyncGeneratorFunction; - /** - * Creates a new AsyncGenerator function. - * @param args A list of arguments the function accepts. - */ - (...args: string[]): AsyncGeneratorFunction; - /** - * The length of the arguments. - */ - readonly length: number; - /** - * Returns the name of the function. - */ - readonly name: string; - /** - * A reference to the prototype. - */ - readonly prototype: AsyncGeneratorFunction; -} +/// + +interface AsyncGenerator extends AsyncIterator { + // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. + next(...args: [] | [TNext | PromiseLike]): Promise>; + return(value: TReturn | PromiseLike): Promise>; + throw(e: any): Promise>; + [Symbol.asyncIterator](): AsyncGenerator; +} + +interface AsyncGeneratorFunction { + /** + * Creates a new AsyncGenerator object. + * @param args A list of arguments the function accepts. + */ + new (...args: any[]): AsyncGenerator; + /** + * Creates a new AsyncGenerator object. + * @param args A list of arguments the function accepts. + */ + (...args: any[]): AsyncGenerator; + /** + * The length of the arguments. + */ + readonly length: number; + /** + * Returns the name of the function. + */ + readonly name: string; + /** + * A reference to the prototype. + */ + readonly prototype: AsyncGenerator; +} + +interface AsyncGeneratorFunctionConstructor { + /** + * Creates a new AsyncGenerator function. + * @param args A list of arguments the function accepts. + */ + new (...args: string[]): AsyncGeneratorFunction; + /** + * Creates a new AsyncGenerator function. + * @param args A list of arguments the function accepts. + */ + (...args: string[]): AsyncGeneratorFunction; + /** + * The length of the arguments. + */ + readonly length: number; + /** + * Returns the name of the function. + */ + readonly name: string; + /** + * A reference to the prototype. + */ + readonly prototype: AsyncGeneratorFunction; +} diff --git a/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts b/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts index c5bc92da..3f0ae558 100644 --- a/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +++ b/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts @@ -15,31 +15,31 @@ and limitations under the License. -/// - - -/// -/// - -interface SymbolConstructor { - /** - * A method that returns the default async iterator for an object. Called by the semantics of - * the for-await-of statement. - */ - readonly asyncIterator: symbol; -} - -interface AsyncIterator { - // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. - next(...args: [] | [TNext | PromiseLike]): Promise>; - return?(value?: TReturn | PromiseLike): Promise>; - throw?(e?: any): Promise>; -} - -interface AsyncIterable { - [Symbol.asyncIterator](): AsyncIterator; -} - -interface AsyncIterableIterator extends AsyncIterator { - [Symbol.asyncIterator](): AsyncIterableIterator; +/// + + +/// +/// + +interface SymbolConstructor { + /** + * A method that returns the default async iterator for an object. Called by the semantics of + * the for-await-of statement. + */ + readonly asyncIterator: symbol; +} + +interface AsyncIterator { + // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. + next(...args: [] | [TNext | PromiseLike]): Promise>; + return?(value?: TReturn | PromiseLike): Promise>; + throw?(e?: any): Promise>; +} + +interface AsyncIterable { + [Symbol.asyncIterator](): AsyncIterator; +} + +interface AsyncIterableIterator extends AsyncIterator { + [Symbol.asyncIterator](): AsyncIterableIterator; } \ No newline at end of file diff --git a/node_modules/typescript/lib/lib.es2018.d.ts b/node_modules/typescript/lib/lib.es2018.d.ts index 24ce0dc0..5d2dc219 100644 --- a/node_modules/typescript/lib/lib.es2018.d.ts +++ b/node_modules/typescript/lib/lib.es2018.d.ts @@ -15,12 +15,12 @@ and limitations under the License. -/// +/// -/// -/// -/// -/// -/// -/// +/// +/// +/// +/// +/// +/// diff --git a/node_modules/typescript/lib/lib.es2018.full.d.ts b/node_modules/typescript/lib/lib.es2018.full.d.ts index 277d5411..e78c22e7 100644 --- a/node_modules/typescript/lib/lib.es2018.full.d.ts +++ b/node_modules/typescript/lib/lib.es2018.full.d.ts @@ -15,11 +15,11 @@ and limitations under the License. -/// +/// -/// -/// -/// -/// +/// +/// +/// +/// /// \ No newline at end of file diff --git a/node_modules/typescript/lib/lib.es2018.intl.d.ts b/node_modules/typescript/lib/lib.es2018.intl.d.ts index 84e95f48..a88331e0 100644 --- a/node_modules/typescript/lib/lib.es2018.intl.d.ts +++ b/node_modules/typescript/lib/lib.es2018.intl.d.ts @@ -15,37 +15,37 @@ and limitations under the License. -/// - - -declare namespace Intl { - interface PluralRulesOptions { - localeMatcher?: 'lookup' | 'best fit'; - type?: 'cardinal' | 'ordinal'; - } - - interface ResolvedPluralRulesOptions { - locale: string; - pluralCategories: string[]; - type: 'cardinal' | 'ordinal'; - minimumIntegerDigits: number; - minimumFractionDigits: number; - maximumFractionDigits: number; - minimumSignificantDigits: number; - maximumSignificantDigits: number; - } - - interface PluralRules { - resolvedOptions(): ResolvedPluralRulesOptions; - select(n: number): string; - } - - const PluralRules: { - new (locales?: string | string[], options?: PluralRulesOptions): PluralRules; - (locales?: string | string[], options?: PluralRulesOptions): PluralRules; - supportedLocalesOf( - locales: string | string[], - options?: PluralRulesOptions, - ): string[]; - }; -} +/// + + +declare namespace Intl { + interface PluralRulesOptions { + localeMatcher?: 'lookup' | 'best fit'; + type?: 'cardinal' | 'ordinal'; + } + + interface ResolvedPluralRulesOptions { + locale: string; + pluralCategories: string[]; + type: 'cardinal' | 'ordinal'; + minimumIntegerDigits: number; + minimumFractionDigits: number; + maximumFractionDigits: number; + minimumSignificantDigits: number; + maximumSignificantDigits: number; + } + + interface PluralRules { + resolvedOptions(): ResolvedPluralRulesOptions; + select(n: number): string; + } + + const PluralRules: { + new (locales?: string | string[], options?: PluralRulesOptions): PluralRules; + (locales?: string | string[], options?: PluralRulesOptions): PluralRules; + supportedLocalesOf( + locales: string | string[], + options?: PluralRulesOptions, + ): string[]; + }; +} diff --git a/node_modules/typescript/lib/lib.es2018.promise.d.ts b/node_modules/typescript/lib/lib.es2018.promise.d.ts index d73b4d45..6abedab8 100644 --- a/node_modules/typescript/lib/lib.es2018.promise.d.ts +++ b/node_modules/typescript/lib/lib.es2018.promise.d.ts @@ -15,18 +15,18 @@ and limitations under the License. -/// +/// -/** - * Represents the completion of an asynchronous operation - */ -interface Promise { - /** - * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The - * resolved value cannot be modified from the callback. - * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected). - * @returns A Promise for the completion of the callback. - */ - finally(onfinally?: (() => void) | undefined | null): Promise -} +/** + * Represents the completion of an asynchronous operation + */ +interface Promise { + /** + * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The + * resolved value cannot be modified from the callback. + * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected). + * @returns A Promise for the completion of the callback. + */ + finally(onfinally?: (() => void) | undefined | null): Promise +} diff --git a/node_modules/typescript/lib/lib.es2018.regexp.d.ts b/node_modules/typescript/lib/lib.es2018.regexp.d.ts index 4ba698ff..3f3cffd3 100644 --- a/node_modules/typescript/lib/lib.es2018.regexp.d.ts +++ b/node_modules/typescript/lib/lib.es2018.regexp.d.ts @@ -15,25 +15,25 @@ and limitations under the License. -/// +/// -interface RegExpMatchArray { - groups?: { - [key: string]: string - } -} - -interface RegExpExecArray { - groups?: { - [key: string]: string - } -} - -interface RegExp { - /** - * Returns a Boolean value indicating the state of the dotAll flag (s) used with a regular expression. - * Default is false. Read-only. - */ - readonly dotAll: boolean; +interface RegExpMatchArray { + groups?: { + [key: string]: string + } +} + +interface RegExpExecArray { + groups?: { + [key: string]: string + } +} + +interface RegExp { + /** + * Returns a Boolean value indicating the state of the dotAll flag (s) used with a regular expression. + * Default is false. Read-only. + */ + readonly dotAll: boolean; } \ No newline at end of file diff --git a/node_modules/typescript/lib/lib.es2019.array.d.ts b/node_modules/typescript/lib/lib.es2019.array.d.ts index 6c751223..398d9df8 100644 --- a/node_modules/typescript/lib/lib.es2019.array.d.ts +++ b/node_modules/typescript/lib/lib.es2019.array.d.ts @@ -15,209 +15,209 @@ and limitations under the License. -/// - - -interface ReadonlyArray { - - /** - * Calls a defined callback function on each element of an array. Then, flattens the result into - * a new array. - * This is identical to a map followed by flat with depth 1. - * - * @param callback A function that accepts up to three arguments. The flatMap method calls the - * callback function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callback function. If - * thisArg is omitted, undefined is used as the this value. - */ - flatMap ( - callback: (this: This, value: T, index: number, array: T[]) => U|ReadonlyArray, - thisArg?: This - ): U[] - - - /** - * Returns a new array with all sub-array elements concatenated into it recursively up to the - * specified depth. - * - * @param depth The maximum recursion depth - */ - flat(this: - ReadonlyArray | - - ReadonlyArray> | - ReadonlyArray[]> | - ReadonlyArray[][]> | - ReadonlyArray[][][]> | - - ReadonlyArray>> | - ReadonlyArray[][]>> | - ReadonlyArray>[][]> | - ReadonlyArray[]>[]> | - ReadonlyArray>[]> | - ReadonlyArray[]>> | - - ReadonlyArray>>> | - ReadonlyArray[]>>> | - ReadonlyArray>[]>> | - ReadonlyArray>>[]> | - - ReadonlyArray>>>>, - depth: 4): U[]; - - /** - * Returns a new array with all sub-array elements concatenated into it recursively up to the - * specified depth. - * - * @param depth The maximum recursion depth - */ - flat(this: - ReadonlyArray | - - ReadonlyArray[][]> | - ReadonlyArray[]> | - ReadonlyArray> | - - ReadonlyArray>> | - ReadonlyArray[]>> | - ReadonlyArray>[]> | - - ReadonlyArray>>>, - depth: 3): U[]; - - /** - * Returns a new array with all sub-array elements concatenated into it recursively up to the - * specified depth. - * - * @param depth The maximum recursion depth - */ - flat(this: - ReadonlyArray | - - ReadonlyArray> | - ReadonlyArray[]> | - - ReadonlyArray>>, - depth: 2): U[]; - - /** - * Returns a new array with all sub-array elements concatenated into it recursively up to the - * specified depth. - * - * @param depth The maximum recursion depth - */ - flat(this: - ReadonlyArray | - ReadonlyArray>, - depth?: 1 - ): U[]; - - /** - * Returns a new array with all sub-array elements concatenated into it recursively up to the - * specified depth. - * - * @param depth The maximum recursion depth - */ - flat(this: - ReadonlyArray, - depth: 0 - ): U[]; - - /** - * Returns a new array with all sub-array elements concatenated into it recursively up to the - * specified depth. If no depth is provided, flat method defaults to the depth of 1. - * - * @param depth The maximum recursion depth - */ - flat(depth?: number): any[]; - } - -interface Array { - - /** - * Calls a defined callback function on each element of an array. Then, flattens the result into - * a new array. - * This is identical to a map followed by flat with depth 1. - * - * @param callback A function that accepts up to three arguments. The flatMap method calls the - * callback function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callback function. If - * thisArg is omitted, undefined is used as the this value. - */ - flatMap ( - callback: (this: This, value: T, index: number, array: T[]) => U|ReadonlyArray, - thisArg?: This - ): U[] - - /** - * Returns a new array with all sub-array elements concatenated into it recursively up to the - * specified depth. - * - * @param depth The maximum recursion depth - */ - flat(this: U[][][][][][][][], depth: 7): U[]; - - /** - * Returns a new array with all sub-array elements concatenated into it recursively up to the - * specified depth. - * - * @param depth The maximum recursion depth - */ - flat(this: U[][][][][][][], depth: 6): U[]; - - /** - * Returns a new array with all sub-array elements concatenated into it recursively up to the - * specified depth. - * - * @param depth The maximum recursion depth - */ - flat(this: U[][][][][][], depth: 5): U[]; - - /** - * Returns a new array with all sub-array elements concatenated into it recursively up to the - * specified depth. - * - * @param depth The maximum recursion depth - */ - flat(this: U[][][][][], depth: 4): U[]; - - /** - * Returns a new array with all sub-array elements concatenated into it recursively up to the - * specified depth. - * - * @param depth The maximum recursion depth - */ - flat(this: U[][][][], depth: 3): U[]; - - /** - * Returns a new array with all sub-array elements concatenated into it recursively up to the - * specified depth. - * - * @param depth The maximum recursion depth - */ - flat(this: U[][][], depth: 2): U[]; - - /** - * Returns a new array with all sub-array elements concatenated into it recursively up to the - * specified depth. - * - * @param depth The maximum recursion depth - */ - flat(this: U[][], depth?: 1): U[]; - - /** - * Returns a new array with all sub-array elements concatenated into it recursively up to the - * specified depth. - * - * @param depth The maximum recursion depth - */ - flat(this: U[], depth: 0): U[]; - - /** - * Returns a new array with all sub-array elements concatenated into it recursively up to the - * specified depth. If no depth is provided, flat method defaults to the depth of 1. - * - * @param depth The maximum recursion depth - */ - flat(depth?: number): any[]; -} +/// + + +interface ReadonlyArray { + + /** + * Calls a defined callback function on each element of an array. Then, flattens the result into + * a new array. + * This is identical to a map followed by flat with depth 1. + * + * @param callback A function that accepts up to three arguments. The flatMap method calls the + * callback function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callback function. If + * thisArg is omitted, undefined is used as the this value. + */ + flatMap ( + callback: (this: This, value: T, index: number, array: T[]) => U|ReadonlyArray, + thisArg?: This + ): U[] + + + /** + * Returns a new array with all sub-array elements concatenated into it recursively up to the + * specified depth. + * + * @param depth The maximum recursion depth + */ + flat(this: + ReadonlyArray | + + ReadonlyArray> | + ReadonlyArray[]> | + ReadonlyArray[][]> | + ReadonlyArray[][][]> | + + ReadonlyArray>> | + ReadonlyArray[][]>> | + ReadonlyArray>[][]> | + ReadonlyArray[]>[]> | + ReadonlyArray>[]> | + ReadonlyArray[]>> | + + ReadonlyArray>>> | + ReadonlyArray[]>>> | + ReadonlyArray>[]>> | + ReadonlyArray>>[]> | + + ReadonlyArray>>>>, + depth: 4): U[]; + + /** + * Returns a new array with all sub-array elements concatenated into it recursively up to the + * specified depth. + * + * @param depth The maximum recursion depth + */ + flat(this: + ReadonlyArray | + + ReadonlyArray[][]> | + ReadonlyArray[]> | + ReadonlyArray> | + + ReadonlyArray>> | + ReadonlyArray[]>> | + ReadonlyArray>[]> | + + ReadonlyArray>>>, + depth: 3): U[]; + + /** + * Returns a new array with all sub-array elements concatenated into it recursively up to the + * specified depth. + * + * @param depth The maximum recursion depth + */ + flat(this: + ReadonlyArray | + + ReadonlyArray> | + ReadonlyArray[]> | + + ReadonlyArray>>, + depth: 2): U[]; + + /** + * Returns a new array with all sub-array elements concatenated into it recursively up to the + * specified depth. + * + * @param depth The maximum recursion depth + */ + flat(this: + ReadonlyArray | + ReadonlyArray>, + depth?: 1 + ): U[]; + + /** + * Returns a new array with all sub-array elements concatenated into it recursively up to the + * specified depth. + * + * @param depth The maximum recursion depth + */ + flat(this: + ReadonlyArray, + depth: 0 + ): U[]; + + /** + * Returns a new array with all sub-array elements concatenated into it recursively up to the + * specified depth. If no depth is provided, flat method defaults to the depth of 1. + * + * @param depth The maximum recursion depth + */ + flat(depth?: number): any[]; + } + +interface Array { + + /** + * Calls a defined callback function on each element of an array. Then, flattens the result into + * a new array. + * This is identical to a map followed by flat with depth 1. + * + * @param callback A function that accepts up to three arguments. The flatMap method calls the + * callback function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callback function. If + * thisArg is omitted, undefined is used as the this value. + */ + flatMap ( + callback: (this: This, value: T, index: number, array: T[]) => U|ReadonlyArray, + thisArg?: This + ): U[] + + /** + * Returns a new array with all sub-array elements concatenated into it recursively up to the + * specified depth. + * + * @param depth The maximum recursion depth + */ + flat(this: U[][][][][][][][], depth: 7): U[]; + + /** + * Returns a new array with all sub-array elements concatenated into it recursively up to the + * specified depth. + * + * @param depth The maximum recursion depth + */ + flat(this: U[][][][][][][], depth: 6): U[]; + + /** + * Returns a new array with all sub-array elements concatenated into it recursively up to the + * specified depth. + * + * @param depth The maximum recursion depth + */ + flat(this: U[][][][][][], depth: 5): U[]; + + /** + * Returns a new array with all sub-array elements concatenated into it recursively up to the + * specified depth. + * + * @param depth The maximum recursion depth + */ + flat(this: U[][][][][], depth: 4): U[]; + + /** + * Returns a new array with all sub-array elements concatenated into it recursively up to the + * specified depth. + * + * @param depth The maximum recursion depth + */ + flat(this: U[][][][], depth: 3): U[]; + + /** + * Returns a new array with all sub-array elements concatenated into it recursively up to the + * specified depth. + * + * @param depth The maximum recursion depth + */ + flat(this: U[][][], depth: 2): U[]; + + /** + * Returns a new array with all sub-array elements concatenated into it recursively up to the + * specified depth. + * + * @param depth The maximum recursion depth + */ + flat(this: U[][], depth?: 1): U[]; + + /** + * Returns a new array with all sub-array elements concatenated into it recursively up to the + * specified depth. + * + * @param depth The maximum recursion depth + */ + flat(this: U[], depth: 0): U[]; + + /** + * Returns a new array with all sub-array elements concatenated into it recursively up to the + * specified depth. If no depth is provided, flat method defaults to the depth of 1. + * + * @param depth The maximum recursion depth + */ + flat(depth?: number): any[]; +} diff --git a/node_modules/typescript/lib/lib.es2019.d.ts b/node_modules/typescript/lib/lib.es2019.d.ts index 14a547af..ed25656d 100644 --- a/node_modules/typescript/lib/lib.es2019.d.ts +++ b/node_modules/typescript/lib/lib.es2019.d.ts @@ -15,11 +15,11 @@ and limitations under the License. -/// +/// -/// -/// -/// -/// -/// +/// +/// +/// +/// +/// diff --git a/node_modules/typescript/lib/lib.es2019.full.d.ts b/node_modules/typescript/lib/lib.es2019.full.d.ts index ee095676..ecbd2e6c 100644 --- a/node_modules/typescript/lib/lib.es2019.full.d.ts +++ b/node_modules/typescript/lib/lib.es2019.full.d.ts @@ -15,11 +15,11 @@ and limitations under the License. -/// +/// -/// -/// -/// -/// -/// +/// +/// +/// +/// +/// diff --git a/node_modules/typescript/lib/lib.es2019.object.d.ts b/node_modules/typescript/lib/lib.es2019.object.d.ts index 9b26b670..06394714 100644 --- a/node_modules/typescript/lib/lib.es2019.object.d.ts +++ b/node_modules/typescript/lib/lib.es2019.object.d.ts @@ -15,21 +15,21 @@ and limitations under the License. -/// +/// -/// - -interface ObjectConstructor { - /** - * Returns an object created by key-value entries for properties and methods - * @param entries An iterable object that contains key-value entries for properties and methods. - */ - fromEntries(entries: Iterable): { [k in PropertyKey]: T }; - - /** - * Returns an object created by key-value entries for properties and methods - * @param entries An iterable object that contains key-value entries for properties and methods. - */ - fromEntries(entries: Iterable): any; -} +/// + +interface ObjectConstructor { + /** + * Returns an object created by key-value entries for properties and methods + * @param entries An iterable object that contains key-value entries for properties and methods. + */ + fromEntries(entries: Iterable): { [k in PropertyKey]: T }; + + /** + * Returns an object created by key-value entries for properties and methods + * @param entries An iterable object that contains key-value entries for properties and methods. + */ + fromEntries(entries: Iterable): any; +} diff --git a/node_modules/typescript/lib/lib.es2019.string.d.ts b/node_modules/typescript/lib/lib.es2019.string.d.ts index 60985db0..6515d087 100644 --- a/node_modules/typescript/lib/lib.es2019.string.d.ts +++ b/node_modules/typescript/lib/lib.es2019.string.d.ts @@ -15,19 +15,19 @@ and limitations under the License. -/// - - -interface String { - /** Removes the trailing white space and line terminator characters from a string. */ - trimEnd(): string; - - /** Removes the leading white space and line terminator characters from a string. */ - trimStart(): string; - - /** Removes the leading white space and line terminator characters from a string. */ - trimLeft(): string; - - /** Removes the trailing white space and line terminator characters from a string. */ - trimRight(): string; -} +/// + + +interface String { + /** Removes the trailing white space and line terminator characters from a string. */ + trimEnd(): string; + + /** Removes the leading white space and line terminator characters from a string. */ + trimStart(): string; + + /** Removes the leading white space and line terminator characters from a string. */ + trimLeft(): string; + + /** Removes the trailing white space and line terminator characters from a string. */ + trimRight(): string; +} diff --git a/node_modules/typescript/lib/lib.es2019.symbol.d.ts b/node_modules/typescript/lib/lib.es2019.symbol.d.ts index 98293eaf..b956cf0d 100644 --- a/node_modules/typescript/lib/lib.es2019.symbol.d.ts +++ b/node_modules/typescript/lib/lib.es2019.symbol.d.ts @@ -15,7 +15,7 @@ and limitations under the License. -/// +/// interface Symbol { diff --git a/node_modules/typescript/lib/lib.es2020.d.ts b/node_modules/typescript/lib/lib.es2020.d.ts index f0b49c8a..8d69f42a 100644 --- a/node_modules/typescript/lib/lib.es2020.d.ts +++ b/node_modules/typescript/lib/lib.es2020.d.ts @@ -15,9 +15,9 @@ and limitations under the License. -/// +/// -/// -/// -/// +/// +/// +/// diff --git a/node_modules/typescript/lib/lib.es2020.full.d.ts b/node_modules/typescript/lib/lib.es2020.full.d.ts index 7ffe939c..58b1b8a6 100644 --- a/node_modules/typescript/lib/lib.es2020.full.d.ts +++ b/node_modules/typescript/lib/lib.es2020.full.d.ts @@ -15,11 +15,11 @@ and limitations under the License. -/// +/// -/// -/// -/// -/// -/// +/// +/// +/// +/// +/// diff --git a/node_modules/typescript/lib/lib.es2020.string.d.ts b/node_modules/typescript/lib/lib.es2020.string.d.ts index c9a99d32..ce3aeba3 100644 --- a/node_modules/typescript/lib/lib.es2020.string.d.ts +++ b/node_modules/typescript/lib/lib.es2020.string.d.ts @@ -15,16 +15,16 @@ and limitations under the License. -/// +/// -/// - -interface String { - /** - * Matches a string with a regular expression, and returns an iterable of matches - * containing the results of that search. - * @param regexp A variable name or string literal containing the regular expression pattern and flags. - */ - matchAll(regexp: RegExp): IterableIterator; -} +/// + +interface String { + /** + * Matches a string with a regular expression, and returns an iterable of matches + * containing the results of that search. + * @param regexp A variable name or string literal containing the regular expression pattern and flags. + */ + matchAll(regexp: RegExp): IterableIterator; +} diff --git a/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts b/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts index f513f5e9..06bc1dfb 100644 --- a/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +++ b/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts @@ -15,25 +15,25 @@ and limitations under the License. -/// +/// -/// -/// - -interface SymbolConstructor { - /** - * A regular expression method that matches the regular expression against a string. Called - * by the String.prototype.matchAll method. - */ - readonly matchAll: symbol; -} - -interface RegExp { - /** - * Matches a string with this regular expression, and returns an iterable of matches - * containing the results of that search. - * @param string A string to search within. - */ - [Symbol.matchAll](str: string): IterableIterator; -} +/// +/// + +interface SymbolConstructor { + /** + * A regular expression method that matches the regular expression against a string. Called + * by the String.prototype.matchAll method. + */ + readonly matchAll: symbol; +} + +interface RegExp { + /** + * Matches a string with this regular expression, and returns an iterable of matches + * containing the results of that search. + * @param string A string to search within. + */ + [Symbol.matchAll](str: string): IterableIterator; +} diff --git a/node_modules/typescript/lib/lib.es5.d.ts b/node_modules/typescript/lib/lib.es5.d.ts index 48637e9d..8216c5a3 100644 --- a/node_modules/typescript/lib/lib.es5.d.ts +++ b/node_modules/typescript/lib/lib.es5.d.ts @@ -15,4298 +15,4298 @@ and limitations under the License. -/// - - -///////////////////////////// -/// ECMAScript APIs -///////////////////////////// - -declare var NaN: number; -declare var Infinity: number; - -/** - * Evaluates JavaScript code and executes it. - * @param x A String value that contains valid JavaScript code. - */ -declare function eval(x: string): any; - -/** - * Converts a string to an integer. - * @param s A string to convert into a number. - * @param radix A value between 2 and 36 that specifies the base of the number in numString. - * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. - * All other strings are considered decimal. - */ -declare function parseInt(s: string, radix?: number): number; - -/** - * Converts a string to a floating-point number. - * @param string A string that contains a floating-point number. - */ -declare function parseFloat(string: string): number; - -/** - * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number). - * @param number A numeric value. - */ -declare function isNaN(number: number): boolean; - -/** - * Determines whether a supplied number is finite. - * @param number Any numeric value. - */ -declare function isFinite(number: number): boolean; - -/** - * Gets the unencoded version of an encoded Uniform Resource Identifier (URI). - * @param encodedURI A value representing an encoded URI. - */ -declare function decodeURI(encodedURI: string): string; - -/** - * Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI). - * @param encodedURIComponent A value representing an encoded URI component. - */ -declare function decodeURIComponent(encodedURIComponent: string): string; - -/** - * Encodes a text string as a valid Uniform Resource Identifier (URI) - * @param uri A value representing an encoded URI. - */ -declare function encodeURI(uri: string): string; - -/** - * Encodes a text string as a valid component of a Uniform Resource Identifier (URI). - * @param uriComponent A value representing an encoded URI component. - */ -declare function encodeURIComponent(uriComponent: string | number | boolean): string; - -/** - * Computes a new string in which certain characters have been replaced by a hexadecimal escape sequence. - * @param string A string value - */ -declare function escape(string: string): string; - -/** - * Computes a new string in which hexadecimal escape sequences are replaced with the character that it represents. - * @param string A string value - */ -declare function unescape(string: string): string; - -interface Symbol { - /** Returns a string representation of an object. */ - toString(): string; - - /** Returns the primitive value of the specified object. */ - valueOf(): symbol; -} - -declare type PropertyKey = string | number | symbol; - -interface PropertyDescriptor { - configurable?: boolean; - enumerable?: boolean; - value?: any; - writable?: boolean; - get?(): any; - set?(v: any): void; -} - -interface PropertyDescriptorMap { - [s: string]: PropertyDescriptor; -} - -interface Object { - /** The initial value of Object.prototype.constructor is the standard built-in Object constructor. */ - constructor: Function; - - /** Returns a string representation of an object. */ - toString(): string; - - /** Returns a date converted to a string using the current locale. */ - toLocaleString(): string; - - /** Returns the primitive value of the specified object. */ - valueOf(): Object; - - /** - * Determines whether an object has a property with the specified name. - * @param v A property name. - */ - hasOwnProperty(v: PropertyKey): boolean; - - /** - * Determines whether an object exists in another object's prototype chain. - * @param v Another object whose prototype chain is to be checked. - */ - isPrototypeOf(v: Object): boolean; - - /** - * Determines whether a specified property is enumerable. - * @param v A property name. - */ - propertyIsEnumerable(v: PropertyKey): boolean; -} - -interface ObjectConstructor { - new(value?: any): Object; - (): any; - (value: any): any; - - /** A reference to the prototype for a class of objects. */ - readonly prototype: Object; - - /** - * Returns the prototype of an object. - * @param o The object that references the prototype. - */ - getPrototypeOf(o: any): any; - - /** - * Gets the own property descriptor of the specified object. - * An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype. - * @param o Object that contains the property. - * @param p Name of the property. - */ - getOwnPropertyDescriptor(o: any, p: PropertyKey): PropertyDescriptor | undefined; - - /** - * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly - * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions. - * @param o Object that contains the own properties. - */ - getOwnPropertyNames(o: any): string[]; - - /** - * Creates an object that has the specified prototype or that has null prototype. - * @param o Object to use as a prototype. May be null. - */ - create(o: object | null): any; - - /** - * Creates an object that has the specified prototype, and that optionally contains specified properties. - * @param o Object to use as a prototype. May be null - * @param properties JavaScript object that contains one or more property descriptors. - */ - create(o: object | null, properties: PropertyDescriptorMap & ThisType): any; - - /** - * Adds a property to an object, or modifies attributes of an existing property. - * @param o Object on which to add or modify the property. This can be a native JavaScript object (that is, a user-defined object or a built in object) or a DOM object. - * @param p The property name. - * @param attributes Descriptor for the property. It can be for a data property or an accessor property. - */ - defineProperty(o: any, p: PropertyKey, attributes: PropertyDescriptor & ThisType): any; - - /** - * Adds one or more properties to an object, and/or modifies attributes of existing properties. - * @param o Object on which to add or modify the properties. This can be a native JavaScript object or a DOM object. - * @param properties JavaScript object that contains one or more descriptor objects. Each descriptor object describes a data property or an accessor property. - */ - defineProperties(o: any, properties: PropertyDescriptorMap & ThisType): any; - - /** - * Prevents the modification of attributes of existing properties, and prevents the addition of new properties. - * @param o Object on which to lock the attributes. - */ - seal(o: T): T; - - /** - * Prevents the modification of existing property attributes and values, and prevents the addition of new properties. - * @param o Object on which to lock the attributes. - */ - freeze(a: T[]): ReadonlyArray; - - /** - * Prevents the modification of existing property attributes and values, and prevents the addition of new properties. - * @param o Object on which to lock the attributes. - */ - freeze(f: T): T; - - /** - * Prevents the modification of existing property attributes and values, and prevents the addition of new properties. - * @param o Object on which to lock the attributes. - */ - freeze(o: T): Readonly; - - /** - * Prevents the addition of new properties to an object. - * @param o Object to make non-extensible. - */ - preventExtensions(o: T): T; - - /** - * Returns true if existing property attributes cannot be modified in an object and new properties cannot be added to the object. - * @param o Object to test. - */ - isSealed(o: any): boolean; - - /** - * Returns true if existing property attributes and values cannot be modified in an object, and new properties cannot be added to the object. - * @param o Object to test. - */ - isFrozen(o: any): boolean; - - /** - * Returns a value that indicates whether new properties can be added to an object. - * @param o Object to test. - */ - isExtensible(o: any): boolean; - - /** - * Returns the names of the enumerable string properties and methods of an object. - * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. - */ - keys(o: object): string[]; -} - -/** - * Provides functionality common to all JavaScript objects. - */ -declare var Object: ObjectConstructor; - -/** - * Creates a new function. - */ -interface Function { - /** - * Calls the function, substituting the specified object for the this value of the function, and the specified array for the arguments of the function. - * @param thisArg The object to be used as the this object. - * @param argArray A set of arguments to be passed to the function. - */ - apply(this: Function, thisArg: any, argArray?: any): any; - - /** - * Calls a method of an object, substituting another object for the current object. - * @param thisArg The object to be used as the current object. - * @param argArray A list of arguments to be passed to the method. - */ - call(this: Function, thisArg: any, ...argArray: any[]): any; - - /** - * For a given function, creates a bound function that has the same body as the original function. - * The this object of the bound function is associated with the specified object, and has the specified initial parameters. - * @param thisArg An object to which the this keyword can refer inside the new function. - * @param argArray A list of arguments to be passed to the new function. - */ - bind(this: Function, thisArg: any, ...argArray: any[]): any; - - /** Returns a string representation of a function. */ - toString(): string; - - prototype: any; - readonly length: number; - - // Non-standard extensions - arguments: any; - caller: Function; -} - -interface FunctionConstructor { - /** - * Creates a new function. - * @param args A list of arguments the function accepts. - */ - new(...args: string[]): Function; - (...args: string[]): Function; - readonly prototype: Function; -} - -declare var Function: FunctionConstructor; - -/** - * Extracts the type of the 'this' parameter of a function type, or 'unknown' if the function type has no 'this' parameter. - */ -type ThisParameterType = T extends (this: unknown, ...args: any[]) => any ? unknown : T extends (this: infer U, ...args: any[]) => any ? U : unknown; - -/** - * Removes the 'this' parameter from a function type. - */ -type OmitThisParameter = unknown extends ThisParameterType ? T : T extends (...args: infer A) => infer R ? (...args: A) => R : T; - -interface CallableFunction extends Function { - /** - * Calls the function with the specified object as the this value and the elements of specified array as the arguments. - * @param thisArg The object to be used as the this object. - * @param args An array of argument values to be passed to the function. - */ - apply(this: (this: T) => R, thisArg: T): R; - apply(this: (this: T, ...args: A) => R, thisArg: T, args: A): R; - - /** - * Calls the function with the specified object as the this value and the specified rest arguments as the arguments. - * @param thisArg The object to be used as the this object. - * @param args Argument values to be passed to the function. - */ - call(this: (this: T, ...args: A) => R, thisArg: T, ...args: A): R; - - /** - * For a given function, creates a bound function that has the same body as the original function. - * The this object of the bound function is associated with the specified object, and has the specified initial parameters. - * @param thisArg The object to be used as the this object. - * @param args Arguments to bind to the parameters of the function. - */ - bind(this: T, thisArg: ThisParameterType): OmitThisParameter; - bind(this: (this: T, arg0: A0, ...args: A) => R, thisArg: T, arg0: A0): (...args: A) => R; - bind(this: (this: T, arg0: A0, arg1: A1, ...args: A) => R, thisArg: T, arg0: A0, arg1: A1): (...args: A) => R; - bind(this: (this: T, arg0: A0, arg1: A1, arg2: A2, ...args: A) => R, thisArg: T, arg0: A0, arg1: A1, arg2: A2): (...args: A) => R; - bind(this: (this: T, arg0: A0, arg1: A1, arg2: A2, arg3: A3, ...args: A) => R, thisArg: T, arg0: A0, arg1: A1, arg2: A2, arg3: A3): (...args: A) => R; - bind(this: (this: T, ...args: AX[]) => R, thisArg: T, ...args: AX[]): (...args: AX[]) => R; -} - -interface NewableFunction extends Function { - /** - * Calls the function with the specified object as the this value and the elements of specified array as the arguments. - * @param thisArg The object to be used as the this object. - * @param args An array of argument values to be passed to the function. - */ - apply(this: new () => T, thisArg: T): void; - apply(this: new (...args: A) => T, thisArg: T, args: A): void; - - /** - * Calls the function with the specified object as the this value and the specified rest arguments as the arguments. - * @param thisArg The object to be used as the this object. - * @param args Argument values to be passed to the function. - */ - call(this: new (...args: A) => T, thisArg: T, ...args: A): void; - - /** - * For a given function, creates a bound function that has the same body as the original function. - * The this object of the bound function is associated with the specified object, and has the specified initial parameters. - * @param thisArg The object to be used as the this object. - * @param args Arguments to bind to the parameters of the function. - */ - bind(this: T, thisArg: any): T; - bind(this: new (arg0: A0, ...args: A) => R, thisArg: any, arg0: A0): new (...args: A) => R; - bind(this: new (arg0: A0, arg1: A1, ...args: A) => R, thisArg: any, arg0: A0, arg1: A1): new (...args: A) => R; - bind(this: new (arg0: A0, arg1: A1, arg2: A2, ...args: A) => R, thisArg: any, arg0: A0, arg1: A1, arg2: A2): new (...args: A) => R; - bind(this: new (arg0: A0, arg1: A1, arg2: A2, arg3: A3, ...args: A) => R, thisArg: any, arg0: A0, arg1: A1, arg2: A2, arg3: A3): new (...args: A) => R; - bind(this: new (...args: AX[]) => R, thisArg: any, ...args: AX[]): new (...args: AX[]) => R; -} - -interface IArguments { - [index: number]: any; - length: number; - callee: Function; -} - -interface String { - /** Returns a string representation of a string. */ - toString(): string; - - /** - * Returns the character at the specified index. - * @param pos The zero-based index of the desired character. - */ - charAt(pos: number): string; - - /** - * Returns the Unicode value of the character at the specified location. - * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned. - */ - charCodeAt(index: number): number; - - /** - * Returns a string that contains the concatenation of two or more strings. - * @param strings The strings to append to the end of the string. - */ - concat(...strings: string[]): string; - - /** - * Returns the position of the first occurrence of a substring. - * @param searchString The substring to search for in the string - * @param position The index at which to begin searching the String object. If omitted, search starts at the beginning of the string. - */ - indexOf(searchString: string, position?: number): number; - - /** - * Returns the last occurrence of a substring in the string. - * @param searchString The substring to search for. - * @param position The index at which to begin searching. If omitted, the search begins at the end of the string. - */ - lastIndexOf(searchString: string, position?: number): number; - - /** - * Determines whether two strings are equivalent in the current locale. - * @param that String to compare to target string - */ - localeCompare(that: string): number; - - /** - * Matches a string with a regular expression, and returns an array containing the results of that search. - * @param regexp A variable name or string literal containing the regular expression pattern and flags. - */ - match(regexp: string | RegExp): RegExpMatchArray | null; - - /** - * Replaces text in a string, using a regular expression or search string. - * @param searchValue A string to search for. - * @param replaceValue A string containing the text to replace for every successful match of searchValue in this string. - */ - replace(searchValue: string | RegExp, replaceValue: string): string; - - /** - * Replaces text in a string, using a regular expression or search string. - * @param searchValue A string to search for. - * @param replacer A function that returns the replacement text. - */ - replace(searchValue: string | RegExp, replacer: (substring: string, ...args: any[]) => string): string; - - /** - * Finds the first substring match in a regular expression search. - * @param regexp The regular expression pattern and applicable flags. - */ - search(regexp: string | RegExp): number; - - /** - * Returns a section of a string. - * @param start The index to the beginning of the specified portion of stringObj. - * @param end The index to the end of the specified portion of stringObj. The substring includes the characters up to, but not including, the character indicated by end. - * If this value is not specified, the substring continues to the end of stringObj. - */ - slice(start?: number, end?: number): string; - - /** - * Split a string into substrings using the specified separator and return them as an array. - * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. - * @param limit A value used to limit the number of elements returned in the array. - */ - split(separator: string | RegExp, limit?: number): string[]; - - /** - * Returns the substring at the specified location within a String object. - * @param start The zero-based index number indicating the beginning of the substring. - * @param end Zero-based index number indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end. - * If end is omitted, the characters from start through the end of the original string are returned. - */ - substring(start: number, end?: number): string; - - /** Converts all the alphabetic characters in a string to lowercase. */ - toLowerCase(): string; - - /** Converts all alphabetic characters to lowercase, taking into account the host environment's current locale. */ - toLocaleLowerCase(): string; - - /** Converts all the alphabetic characters in a string to uppercase. */ - toUpperCase(): string; - - /** Returns a string where all alphabetic characters have been converted to uppercase, taking into account the host environment's current locale. */ - toLocaleUpperCase(): string; - - /** Removes the leading and trailing white space and line terminator characters from a string. */ - trim(): string; - - /** Returns the length of a String object. */ - readonly length: number; - - // IE extensions - /** - * Gets a substring beginning at the specified location and having the specified length. - * @param from The starting position of the desired substring. The index of the first character in the string is zero. - * @param length The number of characters to include in the returned substring. - */ - substr(from: number, length?: number): string; - - /** Returns the primitive value of the specified object. */ - valueOf(): string; - - readonly [index: number]: string; -} - -interface StringConstructor { - new(value?: any): String; - (value?: any): string; - readonly prototype: String; - fromCharCode(...codes: number[]): string; -} - -/** - * Allows manipulation and formatting of text strings and determination and location of substrings within strings. - */ -declare var String: StringConstructor; - -interface Boolean { - /** Returns the primitive value of the specified object. */ - valueOf(): boolean; -} - -interface BooleanConstructor { - new(value?: any): Boolean; - (value?: T): boolean; - readonly prototype: Boolean; -} - -declare var Boolean: BooleanConstructor; - -interface Number { - /** - * Returns a string representation of an object. - * @param radix Specifies a radix for converting numeric values to strings. This value is only used for numbers. - */ - toString(radix?: number): string; - - /** - * Returns a string representing a number in fixed-point notation. - * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive. - */ - toFixed(fractionDigits?: number): string; - - /** - * Returns a string containing a number represented in exponential notation. - * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive. - */ - toExponential(fractionDigits?: number): string; - - /** - * Returns a string containing a number represented either in exponential or fixed-point notation with a specified number of digits. - * @param precision Number of significant digits. Must be in the range 1 - 21, inclusive. - */ - toPrecision(precision?: number): string; - - /** Returns the primitive value of the specified object. */ - valueOf(): number; -} - -interface NumberConstructor { - new(value?: any): Number; - (value?: any): number; - readonly prototype: Number; - - /** The largest number that can be represented in JavaScript. Equal to approximately 1.79E+308. */ - readonly MAX_VALUE: number; - - /** The closest number to zero that can be represented in JavaScript. Equal to approximately 5.00E-324. */ - readonly MIN_VALUE: number; - - /** - * A value that is not a number. - * In equality comparisons, NaN does not equal any value, including itself. To test whether a value is equivalent to NaN, use the isNaN function. - */ - readonly NaN: number; - - /** - * A value that is less than the largest negative number that can be represented in JavaScript. - * JavaScript displays NEGATIVE_INFINITY values as -infinity. - */ - readonly NEGATIVE_INFINITY: number; - - /** - * A value greater than the largest number that can be represented in JavaScript. - * JavaScript displays POSITIVE_INFINITY values as infinity. - */ - readonly POSITIVE_INFINITY: number; -} - -/** An object that represents a number of any kind. All JavaScript numbers are 64-bit floating-point numbers. */ -declare var Number: NumberConstructor; - -interface TemplateStringsArray extends ReadonlyArray { - readonly raw: ReadonlyArray; -} - -/** - * The type of `import.meta`. - * - * If you need to declare that a given property exists on `import.meta`, - * this type may be augmented via interface merging. - */ -interface ImportMeta { -} - -interface Math { - /** The mathematical constant e. This is Euler's number, the base of natural logarithms. */ - readonly E: number; - /** The natural logarithm of 10. */ - readonly LN10: number; - /** The natural logarithm of 2. */ - readonly LN2: number; - /** The base-2 logarithm of e. */ - readonly LOG2E: number; - /** The base-10 logarithm of e. */ - readonly LOG10E: number; - /** Pi. This is the ratio of the circumference of a circle to its diameter. */ - readonly PI: number; - /** The square root of 0.5, or, equivalently, one divided by the square root of 2. */ - readonly SQRT1_2: number; - /** The square root of 2. */ - readonly SQRT2: number; - /** - * Returns the absolute value of a number (the value without regard to whether it is positive or negative). - * For example, the absolute value of -5 is the same as the absolute value of 5. - * @param x A numeric expression for which the absolute value is needed. - */ - abs(x: number): number; - /** - * Returns the arc cosine (or inverse cosine) of a number. - * @param x A numeric expression. - */ - acos(x: number): number; - /** - * Returns the arcsine of a number. - * @param x A numeric expression. - */ - asin(x: number): number; - /** - * Returns the arctangent of a number. - * @param x A numeric expression for which the arctangent is needed. - */ - atan(x: number): number; - /** - * Returns the angle (in radians) from the X axis to a point. - * @param y A numeric expression representing the cartesian y-coordinate. - * @param x A numeric expression representing the cartesian x-coordinate. - */ - atan2(y: number, x: number): number; - /** - * Returns the smallest integer greater than or equal to its numeric argument. - * @param x A numeric expression. - */ - ceil(x: number): number; - /** - * Returns the cosine of a number. - * @param x A numeric expression that contains an angle measured in radians. - */ - cos(x: number): number; - /** - * Returns e (the base of natural logarithms) raised to a power. - * @param x A numeric expression representing the power of e. - */ - exp(x: number): number; - /** - * Returns the greatest integer less than or equal to its numeric argument. - * @param x A numeric expression. - */ - floor(x: number): number; - /** - * Returns the natural logarithm (base e) of a number. - * @param x A numeric expression. - */ - log(x: number): number; - /** - * Returns the larger of a set of supplied numeric expressions. - * @param values Numeric expressions to be evaluated. - */ - max(...values: number[]): number; - /** - * Returns the smaller of a set of supplied numeric expressions. - * @param values Numeric expressions to be evaluated. - */ - min(...values: number[]): number; - /** - * Returns the value of a base expression taken to a specified power. - * @param x The base value of the expression. - * @param y The exponent value of the expression. - */ - pow(x: number, y: number): number; - /** Returns a pseudorandom number between 0 and 1. */ - random(): number; - /** - * Returns a supplied numeric expression rounded to the nearest number. - * @param x The value to be rounded to the nearest number. - */ - round(x: number): number; - /** - * Returns the sine of a number. - * @param x A numeric expression that contains an angle measured in radians. - */ - sin(x: number): number; - /** - * Returns the square root of a number. - * @param x A numeric expression. - */ - sqrt(x: number): number; - /** - * Returns the tangent of a number. - * @param x A numeric expression that contains an angle measured in radians. - */ - tan(x: number): number; -} -/** An intrinsic object that provides basic mathematics functionality and constants. */ -declare var Math: Math; - -/** Enables basic storage and retrieval of dates and times. */ -interface Date { - /** Returns a string representation of a date. The format of the string depends on the locale. */ - toString(): string; - /** Returns a date as a string value. */ - toDateString(): string; - /** Returns a time as a string value. */ - toTimeString(): string; - /** Returns a value as a string value appropriate to the host environment's current locale. */ - toLocaleString(): string; - /** Returns a date as a string value appropriate to the host environment's current locale. */ - toLocaleDateString(): string; - /** Returns a time as a string value appropriate to the host environment's current locale. */ - toLocaleTimeString(): string; - /** Returns the stored time value in milliseconds since midnight, January 1, 1970 UTC. */ - valueOf(): number; - /** Gets the time value in milliseconds. */ - getTime(): number; - /** Gets the year, using local time. */ - getFullYear(): number; - /** Gets the year using Universal Coordinated Time (UTC). */ - getUTCFullYear(): number; - /** Gets the month, using local time. */ - getMonth(): number; - /** Gets the month of a Date object using Universal Coordinated Time (UTC). */ - getUTCMonth(): number; - /** Gets the day-of-the-month, using local time. */ - getDate(): number; - /** Gets the day-of-the-month, using Universal Coordinated Time (UTC). */ - getUTCDate(): number; - /** Gets the day of the week, using local time. */ - getDay(): number; - /** Gets the day of the week using Universal Coordinated Time (UTC). */ - getUTCDay(): number; - /** Gets the hours in a date, using local time. */ - getHours(): number; - /** Gets the hours value in a Date object using Universal Coordinated Time (UTC). */ - getUTCHours(): number; - /** Gets the minutes of a Date object, using local time. */ - getMinutes(): number; - /** Gets the minutes of a Date object using Universal Coordinated Time (UTC). */ - getUTCMinutes(): number; - /** Gets the seconds of a Date object, using local time. */ - getSeconds(): number; - /** Gets the seconds of a Date object using Universal Coordinated Time (UTC). */ - getUTCSeconds(): number; - /** Gets the milliseconds of a Date, using local time. */ - getMilliseconds(): number; - /** Gets the milliseconds of a Date object using Universal Coordinated Time (UTC). */ - getUTCMilliseconds(): number; - /** Gets the difference in minutes between the time on the local computer and Universal Coordinated Time (UTC). */ - getTimezoneOffset(): number; - /** - * Sets the date and time value in the Date object. - * @param time A numeric value representing the number of elapsed milliseconds since midnight, January 1, 1970 GMT. - */ - setTime(time: number): number; - /** - * Sets the milliseconds value in the Date object using local time. - * @param ms A numeric value equal to the millisecond value. - */ - setMilliseconds(ms: number): number; - /** - * Sets the milliseconds value in the Date object using Universal Coordinated Time (UTC). - * @param ms A numeric value equal to the millisecond value. - */ - setUTCMilliseconds(ms: number): number; - - /** - * Sets the seconds value in the Date object using local time. - * @param sec A numeric value equal to the seconds value. - * @param ms A numeric value equal to the milliseconds value. - */ - setSeconds(sec: number, ms?: number): number; - /** - * Sets the seconds value in the Date object using Universal Coordinated Time (UTC). - * @param sec A numeric value equal to the seconds value. - * @param ms A numeric value equal to the milliseconds value. - */ - setUTCSeconds(sec: number, ms?: number): number; - /** - * Sets the minutes value in the Date object using local time. - * @param min A numeric value equal to the minutes value. - * @param sec A numeric value equal to the seconds value. - * @param ms A numeric value equal to the milliseconds value. - */ - setMinutes(min: number, sec?: number, ms?: number): number; - /** - * Sets the minutes value in the Date object using Universal Coordinated Time (UTC). - * @param min A numeric value equal to the minutes value. - * @param sec A numeric value equal to the seconds value. - * @param ms A numeric value equal to the milliseconds value. - */ - setUTCMinutes(min: number, sec?: number, ms?: number): number; - /** - * Sets the hour value in the Date object using local time. - * @param hours A numeric value equal to the hours value. - * @param min A numeric value equal to the minutes value. - * @param sec A numeric value equal to the seconds value. - * @param ms A numeric value equal to the milliseconds value. - */ - setHours(hours: number, min?: number, sec?: number, ms?: number): number; - /** - * Sets the hours value in the Date object using Universal Coordinated Time (UTC). - * @param hours A numeric value equal to the hours value. - * @param min A numeric value equal to the minutes value. - * @param sec A numeric value equal to the seconds value. - * @param ms A numeric value equal to the milliseconds value. - */ - setUTCHours(hours: number, min?: number, sec?: number, ms?: number): number; - /** - * Sets the numeric day-of-the-month value of the Date object using local time. - * @param date A numeric value equal to the day of the month. - */ - setDate(date: number): number; - /** - * Sets the numeric day of the month in the Date object using Universal Coordinated Time (UTC). - * @param date A numeric value equal to the day of the month. - */ - setUTCDate(date: number): number; - /** - * Sets the month value in the Date object using local time. - * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. - * @param date A numeric value representing the day of the month. If this value is not supplied, the value from a call to the getDate method is used. - */ - setMonth(month: number, date?: number): number; - /** - * Sets the month value in the Date object using Universal Coordinated Time (UTC). - * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. - * @param date A numeric value representing the day of the month. If it is not supplied, the value from a call to the getUTCDate method is used. - */ - setUTCMonth(month: number, date?: number): number; - /** - * Sets the year of the Date object using local time. - * @param year A numeric value for the year. - * @param month A zero-based numeric value for the month (0 for January, 11 for December). Must be specified if numDate is specified. - * @param date A numeric value equal for the day of the month. - */ - setFullYear(year: number, month?: number, date?: number): number; - /** - * Sets the year value in the Date object using Universal Coordinated Time (UTC). - * @param year A numeric value equal to the year. - * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. Must be supplied if numDate is supplied. - * @param date A numeric value equal to the day of the month. - */ - setUTCFullYear(year: number, month?: number, date?: number): number; - /** Returns a date converted to a string using Universal Coordinated Time (UTC). */ - toUTCString(): string; - /** Returns a date as a string value in ISO format. */ - toISOString(): string; - /** Used by the JSON.stringify method to enable the transformation of an object's data for JavaScript Object Notation (JSON) serialization. */ - toJSON(key?: any): string; -} - -interface DateConstructor { - new(): Date; - new(value: number | string): Date; - new(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; - (): string; - readonly prototype: Date; - /** - * Parses a string containing a date, and returns the number of milliseconds between that date and midnight, January 1, 1970. - * @param s A date string - */ - parse(s: string): number; - /** - * Returns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date. - * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year. - * @param month The month as an number between 0 and 11 (January to December). - * @param date The date as an number between 1 and 31. - * @param hours Must be supplied if minutes is supplied. An number from 0 to 23 (midnight to 11pm) that specifies the hour. - * @param minutes Must be supplied if seconds is supplied. An number from 0 to 59 that specifies the minutes. - * @param seconds Must be supplied if milliseconds is supplied. An number from 0 to 59 that specifies the seconds. - * @param ms An number from 0 to 999 that specifies the milliseconds. - */ - UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; - now(): number; -} - -declare var Date: DateConstructor; - -interface RegExpMatchArray extends Array { - index?: number; - input?: string; -} - -interface RegExpExecArray extends Array { - index: number; - input: string; -} - -interface RegExp { - /** - * Executes a search on a string using a regular expression pattern, and returns an array containing the results of that search. - * @param string The String object or string literal on which to perform the search. - */ - exec(string: string): RegExpExecArray | null; - - /** - * Returns a Boolean value that indicates whether or not a pattern exists in a searched string. - * @param string String on which to perform the search. - */ - test(string: string): boolean; - - /** Returns a copy of the text of the regular expression pattern. Read-only. The regExp argument is a Regular expression object. It can be a variable name or a literal. */ - readonly source: string; - - /** Returns a Boolean value indicating the state of the global flag (g) used with a regular expression. Default is false. Read-only. */ - readonly global: boolean; - - /** Returns a Boolean value indicating the state of the ignoreCase flag (i) used with a regular expression. Default is false. Read-only. */ - readonly ignoreCase: boolean; - - /** Returns a Boolean value indicating the state of the multiline flag (m) used with a regular expression. Default is false. Read-only. */ - readonly multiline: boolean; - - lastIndex: number; - - // Non-standard extensions - compile(): this; -} - -interface RegExpConstructor { - new(pattern: RegExp | string): RegExp; - new(pattern: string, flags?: string): RegExp; - (pattern: RegExp | string): RegExp; - (pattern: string, flags?: string): RegExp; - readonly prototype: RegExp; - - // Non-standard extensions - $1: string; - $2: string; - $3: string; - $4: string; - $5: string; - $6: string; - $7: string; - $8: string; - $9: string; - lastMatch: string; -} - -declare var RegExp: RegExpConstructor; - -interface Error { - name: string; - message: string; - stack?: string; -} - -interface ErrorConstructor { - new(message?: string): Error; - (message?: string): Error; - readonly prototype: Error; -} - -declare var Error: ErrorConstructor; - -interface EvalError extends Error { -} - -interface EvalErrorConstructor { - new(message?: string): EvalError; - (message?: string): EvalError; - readonly prototype: EvalError; -} - -declare var EvalError: EvalErrorConstructor; - -interface RangeError extends Error { -} - -interface RangeErrorConstructor { - new(message?: string): RangeError; - (message?: string): RangeError; - readonly prototype: RangeError; -} - -declare var RangeError: RangeErrorConstructor; - -interface ReferenceError extends Error { -} - -interface ReferenceErrorConstructor { - new(message?: string): ReferenceError; - (message?: string): ReferenceError; - readonly prototype: ReferenceError; -} - -declare var ReferenceError: ReferenceErrorConstructor; - -interface SyntaxError extends Error { -} - -interface SyntaxErrorConstructor { - new(message?: string): SyntaxError; - (message?: string): SyntaxError; - readonly prototype: SyntaxError; -} - -declare var SyntaxError: SyntaxErrorConstructor; - -interface TypeError extends Error { -} - -interface TypeErrorConstructor { - new(message?: string): TypeError; - (message?: string): TypeError; - readonly prototype: TypeError; -} - -declare var TypeError: TypeErrorConstructor; - -interface URIError extends Error { -} - -interface URIErrorConstructor { - new(message?: string): URIError; - (message?: string): URIError; - readonly prototype: URIError; -} - -declare var URIError: URIErrorConstructor; - -interface JSON { - /** - * Converts a JavaScript Object Notation (JSON) string into an object. - * @param text A valid JSON string. - * @param reviver A function that transforms the results. This function is called for each member of the object. - * If a member contains nested objects, the nested objects are transformed before the parent object is. - */ - parse(text: string, reviver?: (this: any, key: string, value: any) => any): any; - /** - * Converts a JavaScript value to a JavaScript Object Notation (JSON) string. - * @param value A JavaScript value, usually an object or array, to be converted. - * @param replacer A function that transforms the results. - * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read. - */ - stringify(value: any, replacer?: (this: any, key: string, value: any) => any, space?: string | number): string; - /** - * Converts a JavaScript value to a JavaScript Object Notation (JSON) string. - * @param value A JavaScript value, usually an object or array, to be converted. - * @param replacer An array of strings and numbers that acts as a approved list for selecting the object properties that will be stringified. - * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read. - */ - stringify(value: any, replacer?: (number | string)[] | null, space?: string | number): string; -} - -/** - * An intrinsic object that provides functions to convert JavaScript values to and from the JavaScript Object Notation (JSON) format. - */ -declare var JSON: JSON; - - -///////////////////////////// -/// ECMAScript Array API (specially handled by compiler) -///////////////////////////// - -interface ReadonlyArray { - /** - * Gets the length of the array. This is a number one higher than the highest element defined in an array. - */ - readonly length: number; - /** - * Returns a string representation of an array. - */ - toString(): string; - /** - * Returns a string representation of an array. The elements are converted to string using their toLocalString methods. - */ - toLocaleString(): string; - /** - * Combines two or more arrays. - * @param items Additional items to add to the end of array1. - */ - concat(...items: ConcatArray[]): T[]; - /** - * Combines two or more arrays. - * @param items Additional items to add to the end of array1. - */ - concat(...items: (T | ConcatArray)[]): T[]; - /** - * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma. - */ - join(separator?: string): string; - /** - * Returns a section of an array. - * @param start The beginning of the specified portion of the array. - * @param end The end of the specified portion of the array. - */ - slice(start?: number, end?: number): T[]; - /** - * Returns the index of the first occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0. - */ - indexOf(searchElement: T, fromIndex?: number): number; - /** - * Returns the index of the last occurrence of a specified value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array. - */ - lastIndexOf(searchElement: T, fromIndex?: number): number; - /** - * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls the callbackfn function for each element in array1 until the callbackfn returns false, or until the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. - */ - every(callbackfn: (value: T, index: number, array: ReadonlyArray) => unknown, thisArg?: any): boolean; - /** - * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the callbackfn function for each element in array1 until the callbackfn returns true, or until the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. - */ - some(callbackfn: (value: T, index: number, array: ReadonlyArray) => unknown, thisArg?: any): boolean; - /** - * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. - */ - forEach(callbackfn: (value: T, index: number, array: ReadonlyArray) => void, thisArg?: any): void; - /** - * Calls a defined callback function on each element of an array, and returns an array that contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. - */ - map(callbackfn: (value: T, index: number, array: ReadonlyArray) => U, thisArg?: any): U[]; - /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. - */ - filter(callbackfn: (value: T, index: number, array: ReadonlyArray) => value is S, thisArg?: any): S[]; - /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. - */ - filter(callbackfn: (value: T, index: number, array: ReadonlyArray) => unknown, thisArg?: any): T[]; - /** - * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. - */ - reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: ReadonlyArray) => T): T; - reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: ReadonlyArray) => T, initialValue: T): T; - /** - * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. - */ - reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: ReadonlyArray) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. - */ - reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: ReadonlyArray) => T): T; - reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: ReadonlyArray) => T, initialValue: T): T; - /** - * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. - */ - reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: ReadonlyArray) => U, initialValue: U): U; - - readonly [n: number]: T; -} - -interface ConcatArray { - readonly length: number; - readonly [n: number]: T; - join(separator?: string): string; - slice(start?: number, end?: number): T[]; -} - -interface Array { - /** - * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array. - */ - length: number; - /** - * Returns a string representation of an array. - */ - toString(): string; - /** - * Returns a string representation of an array. The elements are converted to string using their toLocalString methods. - */ - toLocaleString(): string; - /** - * Removes the last element from an array and returns it. - */ - pop(): T | undefined; - /** - * Appends new elements to an array, and returns the new length of the array. - * @param items New elements of the Array. - */ - push(...items: T[]): number; - /** - * Combines two or more arrays. - * @param items Additional items to add to the end of array1. - */ - concat(...items: ConcatArray[]): T[]; - /** - * Combines two or more arrays. - * @param items Additional items to add to the end of array1. - */ - concat(...items: (T | ConcatArray)[]): T[]; - /** - * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma. - */ - join(separator?: string): string; - /** - * Reverses the elements in an Array. - */ - reverse(): T[]; - /** - * Removes the first element from an array and returns it. - */ - shift(): T | undefined; - /** - * Returns a section of an array. - * @param start The beginning of the specified portion of the array. - * @param end The end of the specified portion of the array. - */ - slice(start?: number, end?: number): T[]; - /** - * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If omitted, the elements are sorted in ascending, ASCII character order. - */ - sort(compareFn?: (a: T, b: T) => number): this; - /** - * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. - * @param start The zero-based location in the array from which to start removing elements. - * @param deleteCount The number of elements to remove. - */ - splice(start: number, deleteCount?: number): T[]; - /** - * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. - * @param start The zero-based location in the array from which to start removing elements. - * @param deleteCount The number of elements to remove. - * @param items Elements to insert into the array in place of the deleted elements. - */ - splice(start: number, deleteCount: number, ...items: T[]): T[]; - /** - * Inserts new elements at the start of an array. - * @param items Elements to insert at the start of the Array. - */ - unshift(...items: T[]): number; - /** - * Returns the index of the first occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0. - */ - indexOf(searchElement: T, fromIndex?: number): number; - /** - * Returns the index of the last occurrence of a specified value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array. - */ - lastIndexOf(searchElement: T, fromIndex?: number): number; - /** - * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls the callbackfn function for each element in array1 until the callbackfn returns false, or until the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. - */ - every(callbackfn: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean; - /** - * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the callbackfn function for each element in array1 until the callbackfn returns true, or until the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. - */ - some(callbackfn: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean; - /** - * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. - */ - forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void; - /** - * Calls a defined callback function on each element of an array, and returns an array that contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. - */ - map(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; - /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. - */ - filter(callbackfn: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[]; - /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. - */ - filter(callbackfn: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[]; - /** - * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. - */ - reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; - reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; - /** - * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. - */ - reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. - */ - reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; - reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; - /** - * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. - */ - reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; - - [n: number]: T; -} - -interface ArrayConstructor { - new(arrayLength?: number): any[]; - new (arrayLength: number): T[]; - new (...items: T[]): T[]; - (arrayLength?: number): any[]; - (arrayLength: number): T[]; - (...items: T[]): T[]; - isArray(arg: any): arg is Array; - readonly prototype: Array; -} - -declare var Array: ArrayConstructor; - -interface TypedPropertyDescriptor { - enumerable?: boolean; - configurable?: boolean; - writable?: boolean; - value?: T; - get?: () => T; - set?: (value: T) => void; -} - -declare type ClassDecorator = (target: TFunction) => TFunction | void; -declare type PropertyDecorator = (target: Object, propertyKey: string | symbol) => void; -declare type MethodDecorator = (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor | void; -declare type ParameterDecorator = (target: Object, propertyKey: string | symbol, parameterIndex: number) => void; - -declare type PromiseConstructorLike = new (executor: (resolve: (value?: T | PromiseLike) => void, reject: (reason?: any) => void) => void) => PromiseLike; - -interface PromiseLike { - /** - * Attaches callbacks for the resolution and/or rejection of the Promise. - * @param onfulfilled The callback to execute when the Promise is resolved. - * @param onrejected The callback to execute when the Promise is rejected. - * @returns A Promise for the completion of which ever callback is executed. - */ - then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): PromiseLike; -} - -/** - * Represents the completion of an asynchronous operation - */ -interface Promise { - /** - * Attaches callbacks for the resolution and/or rejection of the Promise. - * @param onfulfilled The callback to execute when the Promise is resolved. - * @param onrejected The callback to execute when the Promise is rejected. - * @returns A Promise for the completion of which ever callback is executed. - */ - then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; - - /** - * Attaches a callback for only the rejection of the Promise. - * @param onrejected The callback to execute when the Promise is rejected. - * @returns A Promise for the completion of the callback. - */ - catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; -} - -interface ArrayLike { - readonly length: number; - readonly [n: number]: T; -} - -/** - * Make all properties in T optional - */ -type Partial = { - [P in keyof T]?: T[P]; -}; - -/** - * Make all properties in T required - */ -type Required = { - [P in keyof T]-?: T[P]; -}; - -/** - * Make all properties in T readonly - */ -type Readonly = { - readonly [P in keyof T]: T[P]; -}; - -/** - * From T, pick a set of properties whose keys are in the union K - */ -type Pick = { - [P in K]: T[P]; -}; - -/** - * Construct a type with a set of properties K of type T - */ -type Record = { - [P in K]: T; -}; - -/** - * Exclude from T those types that are assignable to U - */ -type Exclude = T extends U ? never : T; - -/** - * Extract from T those types that are assignable to U - */ -type Extract = T extends U ? T : never; - -/** - * Construct a type with the properties of T except for those in type K. - */ -type Omit = Pick>; - -/** - * Exclude null and undefined from T - */ -type NonNullable = T extends null | undefined ? never : T; - -/** - * Obtain the parameters of a function type in a tuple - */ -type Parameters any> = T extends (...args: infer P) => any ? P : never; - -/** - * Obtain the parameters of a constructor function type in a tuple - */ -type ConstructorParameters any> = T extends new (...args: infer P) => any ? P : never; - -/** - * Obtain the return type of a function type - */ -type ReturnType any> = T extends (...args: any) => infer R ? R : any; - -/** - * Obtain the return type of a constructor function type - */ -type InstanceType any> = T extends new (...args: any) => infer R ? R : any; - -/** - * Marker for contextual 'this' type - */ -interface ThisType { } - -/** - * Represents a raw buffer of binary data, which is used to store data for the - * different typed arrays. ArrayBuffers cannot be read from or written to directly, - * but can be passed to a typed array or DataView Object to interpret the raw - * buffer as needed. - */ -interface ArrayBuffer { - /** - * Read-only. The length of the ArrayBuffer (in bytes). - */ - readonly byteLength: number; - - /** - * Returns a section of an ArrayBuffer. - */ - slice(begin: number, end?: number): ArrayBuffer; -} - -/** - * Allowed ArrayBuffer types for the buffer of an ArrayBufferView and related Typed Arrays. - */ -interface ArrayBufferTypes { - ArrayBuffer: ArrayBuffer; -} -type ArrayBufferLike = ArrayBufferTypes[keyof ArrayBufferTypes]; - -interface ArrayBufferConstructor { - readonly prototype: ArrayBuffer; - new(byteLength: number): ArrayBuffer; - isView(arg: any): arg is ArrayBufferView; -} -declare var ArrayBuffer: ArrayBufferConstructor; - -interface ArrayBufferView { - /** - * The ArrayBuffer instance referenced by the array. - */ - buffer: ArrayBufferLike; - - /** - * The length in bytes of the array. - */ - byteLength: number; - - /** - * The offset in bytes of the array. - */ - byteOffset: number; -} - -interface DataView { - readonly buffer: ArrayBuffer; - readonly byteLength: number; - readonly byteOffset: number; - /** - * Gets the Float32 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. - * @param byteOffset The place in the buffer at which the value should be retrieved. - */ - getFloat32(byteOffset: number, littleEndian?: boolean): number; - - /** - * Gets the Float64 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. - * @param byteOffset The place in the buffer at which the value should be retrieved. - */ - getFloat64(byteOffset: number, littleEndian?: boolean): number; - - /** - * Gets the Int8 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. - * @param byteOffset The place in the buffer at which the value should be retrieved. - */ - getInt8(byteOffset: number): number; - - /** - * Gets the Int16 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. - * @param byteOffset The place in the buffer at which the value should be retrieved. - */ - getInt16(byteOffset: number, littleEndian?: boolean): number; - /** - * Gets the Int32 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. - * @param byteOffset The place in the buffer at which the value should be retrieved. - */ - getInt32(byteOffset: number, littleEndian?: boolean): number; - - /** - * Gets the Uint8 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. - * @param byteOffset The place in the buffer at which the value should be retrieved. - */ - getUint8(byteOffset: number): number; - - /** - * Gets the Uint16 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. - * @param byteOffset The place in the buffer at which the value should be retrieved. - */ - getUint16(byteOffset: number, littleEndian?: boolean): number; - - /** - * Gets the Uint32 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. - * @param byteOffset The place in the buffer at which the value should be retrieved. - */ - getUint32(byteOffset: number, littleEndian?: boolean): number; - - /** - * Stores an Float32 value at the specified byte offset from the start of the view. - * @param byteOffset The place in the buffer at which the value should be set. - * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, - * otherwise a little-endian value should be written. - */ - setFloat32(byteOffset: number, value: number, littleEndian?: boolean): void; - - /** - * Stores an Float64 value at the specified byte offset from the start of the view. - * @param byteOffset The place in the buffer at which the value should be set. - * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, - * otherwise a little-endian value should be written. - */ - setFloat64(byteOffset: number, value: number, littleEndian?: boolean): void; - - /** - * Stores an Int8 value at the specified byte offset from the start of the view. - * @param byteOffset The place in the buffer at which the value should be set. - * @param value The value to set. - */ - setInt8(byteOffset: number, value: number): void; - - /** - * Stores an Int16 value at the specified byte offset from the start of the view. - * @param byteOffset The place in the buffer at which the value should be set. - * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, - * otherwise a little-endian value should be written. - */ - setInt16(byteOffset: number, value: number, littleEndian?: boolean): void; - - /** - * Stores an Int32 value at the specified byte offset from the start of the view. - * @param byteOffset The place in the buffer at which the value should be set. - * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, - * otherwise a little-endian value should be written. - */ - setInt32(byteOffset: number, value: number, littleEndian?: boolean): void; - - /** - * Stores an Uint8 value at the specified byte offset from the start of the view. - * @param byteOffset The place in the buffer at which the value should be set. - * @param value The value to set. - */ - setUint8(byteOffset: number, value: number): void; - - /** - * Stores an Uint16 value at the specified byte offset from the start of the view. - * @param byteOffset The place in the buffer at which the value should be set. - * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, - * otherwise a little-endian value should be written. - */ - setUint16(byteOffset: number, value: number, littleEndian?: boolean): void; - - /** - * Stores an Uint32 value at the specified byte offset from the start of the view. - * @param byteOffset The place in the buffer at which the value should be set. - * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, - * otherwise a little-endian value should be written. - */ - setUint32(byteOffset: number, value: number, littleEndian?: boolean): void; -} - -interface DataViewConstructor { - new(buffer: ArrayBufferLike, byteOffset?: number, byteLength?: number): DataView; -} -declare var DataView: DataViewConstructor; - -/** - * A typed array of 8-bit integer values. The contents are initialized to 0. If the requested - * number of bytes could not be allocated an exception is raised. - */ -interface Int8Array { - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * The ArrayBuffer instance referenced by the array. - */ - readonly buffer: ArrayBufferLike; - - /** - * The length in bytes of the array. - */ - readonly byteLength: number; - - /** - * The offset in bytes of the array. - */ - readonly byteOffset: number; - - /** - * Returns the this object after copying a section of the array identified by start and end - * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it - * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. - */ - copyWithin(target: number, start: number, end?: number): this; - - /** - * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, - * or until the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - every(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): boolean; - - /** - * Returns the this object after filling the section identified by start and end with value - * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as - * length+end. - */ - fill(value: number, start?: number, end?: number): this; - - /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - filter(callbackfn: (value: number, index: number, array: Int8Array) => any, thisArg?: any): Int8Array; - - /** - * Returns the value of the first element in the array where predicate is true, and undefined - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - find(predicate: (value: number, index: number, obj: Int8Array) => boolean, thisArg?: any): number | undefined; - - /** - * Returns the index of the first element in the array where predicate is true, and -1 - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, - * findIndex immediately returns that element index. Otherwise, findIndex returns -1. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - findIndex(predicate: (value: number, index: number, obj: Int8Array) => boolean, thisArg?: any): number; - - /** - * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - forEach(callbackfn: (value: number, index: number, array: Int8Array) => void, thisArg?: any): void; - - /** - * Returns the index of the first occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - indexOf(searchElement: number, fromIndex?: number): number; - - /** - * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the - * resulting String. If omitted, the array elements are separated with a comma. - */ - join(separator?: string): string; - - /** - * Returns the index of the last occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - lastIndexOf(searchElement: number, fromIndex?: number): number; - - /** - * The length of the array. - */ - readonly length: number; - - /** - * Calls a defined callback function on each element of an array, and returns an array that - * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - map(callbackfn: (value: number, index: number, array: Int8Array) => number, thisArg?: any): Int8Array; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number): number; - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U): U; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an - * argument instead of an array value. - */ - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number): number; - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U): U; - - /** - * Reverses the elements in an Array. - */ - reverse(): Int8Array; - - /** - * Sets a value or an array of values. - * @param array A typed or untyped array of values to set. - * @param offset The index in the current array at which the values are to be written. - */ - set(array: ArrayLike, offset?: number): void; - - /** - * Returns a section of an array. - * @param start The beginning of the specified portion of the array. - * @param end The end of the specified portion of the array. - */ - slice(start?: number, end?: number): Int8Array; - - /** - * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until - * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - some(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): boolean; - - /** - * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If - * omitted, the elements are sorted in ascending, ASCII character order. - */ - sort(compareFn?: (a: number, b: number) => number): this; - - /** - * Gets a new Int8Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. - * @param begin The index of the beginning of the array. - * @param end The index of the end of the array. - */ - subarray(begin: number, end?: number): Int8Array; - - /** - * Converts a number to a string by using the current locale. - */ - toLocaleString(): string; - - /** - * Returns a string representation of an array. - */ - toString(): string; - - [index: number]: number; -} -interface Int8ArrayConstructor { - readonly prototype: Int8Array; - new(length: number): Int8Array; - new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Int8Array; - new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Int8Array; - - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * Returns a new array from a set of elements. - * @param items A set of elements to include in the new array object. - */ - of(...items: number[]): Int8Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - */ - from(arrayLike: ArrayLike): Int8Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array; - - -} -declare var Int8Array: Int8ArrayConstructor; - -/** - * A typed array of 8-bit unsigned integer values. The contents are initialized to 0. If the - * requested number of bytes could not be allocated an exception is raised. - */ -interface Uint8Array { - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * The ArrayBuffer instance referenced by the array. - */ - readonly buffer: ArrayBufferLike; - - /** - * The length in bytes of the array. - */ - readonly byteLength: number; - - /** - * The offset in bytes of the array. - */ - readonly byteOffset: number; - - /** - * Returns the this object after copying a section of the array identified by start and end - * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it - * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. - */ - copyWithin(target: number, start: number, end?: number): this; - - /** - * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, - * or until the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - every(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): boolean; - - /** - * Returns the this object after filling the section identified by start and end with value - * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as - * length+end. - */ - fill(value: number, start?: number, end?: number): this; - - /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - filter(callbackfn: (value: number, index: number, array: Uint8Array) => any, thisArg?: any): Uint8Array; - - /** - * Returns the value of the first element in the array where predicate is true, and undefined - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - find(predicate: (value: number, index: number, obj: Uint8Array) => boolean, thisArg?: any): number | undefined; - - /** - * Returns the index of the first element in the array where predicate is true, and -1 - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, - * findIndex immediately returns that element index. Otherwise, findIndex returns -1. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - findIndex(predicate: (value: number, index: number, obj: Uint8Array) => boolean, thisArg?: any): number; - - /** - * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - forEach(callbackfn: (value: number, index: number, array: Uint8Array) => void, thisArg?: any): void; - - /** - * Returns the index of the first occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - indexOf(searchElement: number, fromIndex?: number): number; - - /** - * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the - * resulting String. If omitted, the array elements are separated with a comma. - */ - join(separator?: string): string; - - /** - * Returns the index of the last occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - lastIndexOf(searchElement: number, fromIndex?: number): number; - - /** - * The length of the array. - */ - readonly length: number; - - /** - * Calls a defined callback function on each element of an array, and returns an array that - * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - map(callbackfn: (value: number, index: number, array: Uint8Array) => number, thisArg?: any): Uint8Array; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number): number; - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U): U; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an - * argument instead of an array value. - */ - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number): number; - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U): U; - - /** - * Reverses the elements in an Array. - */ - reverse(): Uint8Array; - - /** - * Sets a value or an array of values. - * @param array A typed or untyped array of values to set. - * @param offset The index in the current array at which the values are to be written. - */ - set(array: ArrayLike, offset?: number): void; - - /** - * Returns a section of an array. - * @param start The beginning of the specified portion of the array. - * @param end The end of the specified portion of the array. - */ - slice(start?: number, end?: number): Uint8Array; - - /** - * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until - * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - some(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): boolean; - - /** - * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If - * omitted, the elements are sorted in ascending, ASCII character order. - */ - sort(compareFn?: (a: number, b: number) => number): this; - - /** - * Gets a new Uint8Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. - * @param begin The index of the beginning of the array. - * @param end The index of the end of the array. - */ - subarray(begin: number, end?: number): Uint8Array; - - /** - * Converts a number to a string by using the current locale. - */ - toLocaleString(): string; - - /** - * Returns a string representation of an array. - */ - toString(): string; - - [index: number]: number; -} - -interface Uint8ArrayConstructor { - readonly prototype: Uint8Array; - new(length: number): Uint8Array; - new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Uint8Array; - new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Uint8Array; - - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * Returns a new array from a set of elements. - * @param items A set of elements to include in the new array object. - */ - of(...items: number[]): Uint8Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - */ - from(arrayLike: ArrayLike): Uint8Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array; - -} -declare var Uint8Array: Uint8ArrayConstructor; - -/** - * A typed array of 8-bit unsigned integer (clamped) values. The contents are initialized to 0. - * If the requested number of bytes could not be allocated an exception is raised. - */ -interface Uint8ClampedArray { - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * The ArrayBuffer instance referenced by the array. - */ - readonly buffer: ArrayBufferLike; - - /** - * The length in bytes of the array. - */ - readonly byteLength: number; - - /** - * The offset in bytes of the array. - */ - readonly byteOffset: number; - - /** - * Returns the this object after copying a section of the array identified by start and end - * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it - * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. - */ - copyWithin(target: number, start: number, end?: number): this; - - /** - * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, - * or until the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - every(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => boolean, thisArg?: any): boolean; - - /** - * Returns the this object after filling the section identified by start and end with value - * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as - * length+end. - */ - fill(value: number, start?: number, end?: number): this; - - /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - filter(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => any, thisArg?: any): Uint8ClampedArray; - - /** - * Returns the value of the first element in the array where predicate is true, and undefined - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - find(predicate: (value: number, index: number, obj: Uint8ClampedArray) => boolean, thisArg?: any): number | undefined; - - /** - * Returns the index of the first element in the array where predicate is true, and -1 - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, - * findIndex immediately returns that element index. Otherwise, findIndex returns -1. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - findIndex(predicate: (value: number, index: number, obj: Uint8ClampedArray) => boolean, thisArg?: any): number; - - /** - * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - forEach(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => void, thisArg?: any): void; - - /** - * Returns the index of the first occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - indexOf(searchElement: number, fromIndex?: number): number; - - /** - * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the - * resulting String. If omitted, the array elements are separated with a comma. - */ - join(separator?: string): string; - - /** - * Returns the index of the last occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - lastIndexOf(searchElement: number, fromIndex?: number): number; - - /** - * The length of the array. - */ - readonly length: number; - - /** - * Calls a defined callback function on each element of an array, and returns an array that - * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - map(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => number, thisArg?: any): Uint8ClampedArray; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number): number; - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => U, initialValue: U): U; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an - * argument instead of an array value. - */ - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number): number; - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => U, initialValue: U): U; - - /** - * Reverses the elements in an Array. - */ - reverse(): Uint8ClampedArray; - - /** - * Sets a value or an array of values. - * @param array A typed or untyped array of values to set. - * @param offset The index in the current array at which the values are to be written. - */ - set(array: ArrayLike, offset?: number): void; - - /** - * Returns a section of an array. - * @param start The beginning of the specified portion of the array. - * @param end The end of the specified portion of the array. - */ - slice(start?: number, end?: number): Uint8ClampedArray; - - /** - * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until - * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - some(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => boolean, thisArg?: any): boolean; - - /** - * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If - * omitted, the elements are sorted in ascending, ASCII character order. - */ - sort(compareFn?: (a: number, b: number) => number): this; - - /** - * Gets a new Uint8ClampedArray view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. - * @param begin The index of the beginning of the array. - * @param end The index of the end of the array. - */ - subarray(begin: number, end?: number): Uint8ClampedArray; - - /** - * Converts a number to a string by using the current locale. - */ - toLocaleString(): string; - - /** - * Returns a string representation of an array. - */ - toString(): string; - - [index: number]: number; -} - -interface Uint8ClampedArrayConstructor { - readonly prototype: Uint8ClampedArray; - new(length: number): Uint8ClampedArray; - new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Uint8ClampedArray; - new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Uint8ClampedArray; - - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * Returns a new array from a set of elements. - * @param items A set of elements to include in the new array object. - */ - of(...items: number[]): Uint8ClampedArray; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - */ - from(arrayLike: ArrayLike): Uint8ClampedArray; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8ClampedArray; -} -declare var Uint8ClampedArray: Uint8ClampedArrayConstructor; - -/** - * A typed array of 16-bit signed integer values. The contents are initialized to 0. If the - * requested number of bytes could not be allocated an exception is raised. - */ -interface Int16Array { - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * The ArrayBuffer instance referenced by the array. - */ - readonly buffer: ArrayBufferLike; - - /** - * The length in bytes of the array. - */ - readonly byteLength: number; - - /** - * The offset in bytes of the array. - */ - readonly byteOffset: number; - - /** - * Returns the this object after copying a section of the array identified by start and end - * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it - * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. - */ - copyWithin(target: number, start: number, end?: number): this; - - /** - * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, - * or until the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - every(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): boolean; - - /** - * Returns the this object after filling the section identified by start and end with value - * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as - * length+end. - */ - fill(value: number, start?: number, end?: number): this; - - /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - filter(callbackfn: (value: number, index: number, array: Int16Array) => any, thisArg?: any): Int16Array; - - /** - * Returns the value of the first element in the array where predicate is true, and undefined - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - find(predicate: (value: number, index: number, obj: Int16Array) => boolean, thisArg?: any): number | undefined; - - /** - * Returns the index of the first element in the array where predicate is true, and -1 - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, - * findIndex immediately returns that element index. Otherwise, findIndex returns -1. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - findIndex(predicate: (value: number, index: number, obj: Int16Array) => boolean, thisArg?: any): number; - - /** - * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - forEach(callbackfn: (value: number, index: number, array: Int16Array) => void, thisArg?: any): void; - /** - * Returns the index of the first occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - indexOf(searchElement: number, fromIndex?: number): number; - - /** - * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the - * resulting String. If omitted, the array elements are separated with a comma. - */ - join(separator?: string): string; - - /** - * Returns the index of the last occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - lastIndexOf(searchElement: number, fromIndex?: number): number; - - /** - * The length of the array. - */ - readonly length: number; - - /** - * Calls a defined callback function on each element of an array, and returns an array that - * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - map(callbackfn: (value: number, index: number, array: Int16Array) => number, thisArg?: any): Int16Array; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number): number; - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U): U; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an - * argument instead of an array value. - */ - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number): number; - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U): U; - - /** - * Reverses the elements in an Array. - */ - reverse(): Int16Array; - - /** - * Sets a value or an array of values. - * @param array A typed or untyped array of values to set. - * @param offset The index in the current array at which the values are to be written. - */ - set(array: ArrayLike, offset?: number): void; - - /** - * Returns a section of an array. - * @param start The beginning of the specified portion of the array. - * @param end The end of the specified portion of the array. - */ - slice(start?: number, end?: number): Int16Array; - - /** - * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until - * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - some(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): boolean; - - /** - * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If - * omitted, the elements are sorted in ascending, ASCII character order. - */ - sort(compareFn?: (a: number, b: number) => number): this; - - /** - * Gets a new Int16Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. - * @param begin The index of the beginning of the array. - * @param end The index of the end of the array. - */ - subarray(begin: number, end?: number): Int16Array; - - /** - * Converts a number to a string by using the current locale. - */ - toLocaleString(): string; - - /** - * Returns a string representation of an array. - */ - toString(): string; - - [index: number]: number; -} - -interface Int16ArrayConstructor { - readonly prototype: Int16Array; - new(length: number): Int16Array; - new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Int16Array; - new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Int16Array; - - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * Returns a new array from a set of elements. - * @param items A set of elements to include in the new array object. - */ - of(...items: number[]): Int16Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - */ - from(arrayLike: ArrayLike): Int16Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array; - - -} -declare var Int16Array: Int16ArrayConstructor; - -/** - * A typed array of 16-bit unsigned integer values. The contents are initialized to 0. If the - * requested number of bytes could not be allocated an exception is raised. - */ -interface Uint16Array { - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * The ArrayBuffer instance referenced by the array. - */ - readonly buffer: ArrayBufferLike; - - /** - * The length in bytes of the array. - */ - readonly byteLength: number; - - /** - * The offset in bytes of the array. - */ - readonly byteOffset: number; - - /** - * Returns the this object after copying a section of the array identified by start and end - * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it - * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. - */ - copyWithin(target: number, start: number, end?: number): this; - - /** - * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, - * or until the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - every(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): boolean; - - /** - * Returns the this object after filling the section identified by start and end with value - * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as - * length+end. - */ - fill(value: number, start?: number, end?: number): this; - - /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - filter(callbackfn: (value: number, index: number, array: Uint16Array) => any, thisArg?: any): Uint16Array; - - /** - * Returns the value of the first element in the array where predicate is true, and undefined - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - find(predicate: (value: number, index: number, obj: Uint16Array) => boolean, thisArg?: any): number | undefined; - - /** - * Returns the index of the first element in the array where predicate is true, and -1 - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, - * findIndex immediately returns that element index. Otherwise, findIndex returns -1. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - findIndex(predicate: (value: number, index: number, obj: Uint16Array) => boolean, thisArg?: any): number; - - /** - * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - forEach(callbackfn: (value: number, index: number, array: Uint16Array) => void, thisArg?: any): void; - - /** - * Returns the index of the first occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - indexOf(searchElement: number, fromIndex?: number): number; - - /** - * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the - * resulting String. If omitted, the array elements are separated with a comma. - */ - join(separator?: string): string; - - /** - * Returns the index of the last occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - lastIndexOf(searchElement: number, fromIndex?: number): number; - - /** - * The length of the array. - */ - readonly length: number; - - /** - * Calls a defined callback function on each element of an array, and returns an array that - * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - map(callbackfn: (value: number, index: number, array: Uint16Array) => number, thisArg?: any): Uint16Array; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number): number; - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U): U; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an - * argument instead of an array value. - */ - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number): number; - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U): U; - - /** - * Reverses the elements in an Array. - */ - reverse(): Uint16Array; - - /** - * Sets a value or an array of values. - * @param array A typed or untyped array of values to set. - * @param offset The index in the current array at which the values are to be written. - */ - set(array: ArrayLike, offset?: number): void; - - /** - * Returns a section of an array. - * @param start The beginning of the specified portion of the array. - * @param end The end of the specified portion of the array. - */ - slice(start?: number, end?: number): Uint16Array; - - /** - * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until - * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - some(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): boolean; - - /** - * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If - * omitted, the elements are sorted in ascending, ASCII character order. - */ - sort(compareFn?: (a: number, b: number) => number): this; - - /** - * Gets a new Uint16Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. - * @param begin The index of the beginning of the array. - * @param end The index of the end of the array. - */ - subarray(begin: number, end?: number): Uint16Array; - - /** - * Converts a number to a string by using the current locale. - */ - toLocaleString(): string; - - /** - * Returns a string representation of an array. - */ - toString(): string; - - [index: number]: number; -} - -interface Uint16ArrayConstructor { - readonly prototype: Uint16Array; - new(length: number): Uint16Array; - new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Uint16Array; - new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Uint16Array; - - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * Returns a new array from a set of elements. - * @param items A set of elements to include in the new array object. - */ - of(...items: number[]): Uint16Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - */ - from(arrayLike: ArrayLike): Uint16Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array; - - -} -declare var Uint16Array: Uint16ArrayConstructor; -/** - * A typed array of 32-bit signed integer values. The contents are initialized to 0. If the - * requested number of bytes could not be allocated an exception is raised. - */ -interface Int32Array { - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * The ArrayBuffer instance referenced by the array. - */ - readonly buffer: ArrayBufferLike; - - /** - * The length in bytes of the array. - */ - readonly byteLength: number; - - /** - * The offset in bytes of the array. - */ - readonly byteOffset: number; - - /** - * Returns the this object after copying a section of the array identified by start and end - * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it - * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. - */ - copyWithin(target: number, start: number, end?: number): this; - - /** - * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, - * or until the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - every(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): boolean; - - /** - * Returns the this object after filling the section identified by start and end with value - * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as - * length+end. - */ - fill(value: number, start?: number, end?: number): this; - - /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - filter(callbackfn: (value: number, index: number, array: Int32Array) => any, thisArg?: any): Int32Array; - - /** - * Returns the value of the first element in the array where predicate is true, and undefined - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - find(predicate: (value: number, index: number, obj: Int32Array) => boolean, thisArg?: any): number | undefined; - - /** - * Returns the index of the first element in the array where predicate is true, and -1 - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, - * findIndex immediately returns that element index. Otherwise, findIndex returns -1. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - findIndex(predicate: (value: number, index: number, obj: Int32Array) => boolean, thisArg?: any): number; - - /** - * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - forEach(callbackfn: (value: number, index: number, array: Int32Array) => void, thisArg?: any): void; - - /** - * Returns the index of the first occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - indexOf(searchElement: number, fromIndex?: number): number; - - /** - * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the - * resulting String. If omitted, the array elements are separated with a comma. - */ - join(separator?: string): string; - - /** - * Returns the index of the last occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - lastIndexOf(searchElement: number, fromIndex?: number): number; - - /** - * The length of the array. - */ - readonly length: number; - - /** - * Calls a defined callback function on each element of an array, and returns an array that - * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - map(callbackfn: (value: number, index: number, array: Int32Array) => number, thisArg?: any): Int32Array; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number): number; - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U): U; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an - * argument instead of an array value. - */ - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number): number; - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U): U; - - /** - * Reverses the elements in an Array. - */ - reverse(): Int32Array; - - /** - * Sets a value or an array of values. - * @param array A typed or untyped array of values to set. - * @param offset The index in the current array at which the values are to be written. - */ - set(array: ArrayLike, offset?: number): void; - - /** - * Returns a section of an array. - * @param start The beginning of the specified portion of the array. - * @param end The end of the specified portion of the array. - */ - slice(start?: number, end?: number): Int32Array; - - /** - * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until - * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - some(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): boolean; - - /** - * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If - * omitted, the elements are sorted in ascending, ASCII character order. - */ - sort(compareFn?: (a: number, b: number) => number): this; - - /** - * Gets a new Int32Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. - * @param begin The index of the beginning of the array. - * @param end The index of the end of the array. - */ - subarray(begin: number, end?: number): Int32Array; - - /** - * Converts a number to a string by using the current locale. - */ - toLocaleString(): string; - - /** - * Returns a string representation of an array. - */ - toString(): string; - - [index: number]: number; -} - -interface Int32ArrayConstructor { - readonly prototype: Int32Array; - new(length: number): Int32Array; - new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Int32Array; - new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Int32Array; - - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * Returns a new array from a set of elements. - * @param items A set of elements to include in the new array object. - */ - of(...items: number[]): Int32Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - */ - from(arrayLike: ArrayLike): Int32Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array; - -} -declare var Int32Array: Int32ArrayConstructor; - -/** - * A typed array of 32-bit unsigned integer values. The contents are initialized to 0. If the - * requested number of bytes could not be allocated an exception is raised. - */ -interface Uint32Array { - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * The ArrayBuffer instance referenced by the array. - */ - readonly buffer: ArrayBufferLike; - - /** - * The length in bytes of the array. - */ - readonly byteLength: number; - - /** - * The offset in bytes of the array. - */ - readonly byteOffset: number; - - /** - * Returns the this object after copying a section of the array identified by start and end - * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it - * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. - */ - copyWithin(target: number, start: number, end?: number): this; - - /** - * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, - * or until the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - every(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): boolean; - - /** - * Returns the this object after filling the section identified by start and end with value - * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as - * length+end. - */ - fill(value: number, start?: number, end?: number): this; - - /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - filter(callbackfn: (value: number, index: number, array: Uint32Array) => any, thisArg?: any): Uint32Array; - - /** - * Returns the value of the first element in the array where predicate is true, and undefined - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - find(predicate: (value: number, index: number, obj: Uint32Array) => boolean, thisArg?: any): number | undefined; - - /** - * Returns the index of the first element in the array where predicate is true, and -1 - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, - * findIndex immediately returns that element index. Otherwise, findIndex returns -1. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - findIndex(predicate: (value: number, index: number, obj: Uint32Array) => boolean, thisArg?: any): number; - - /** - * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - forEach(callbackfn: (value: number, index: number, array: Uint32Array) => void, thisArg?: any): void; - /** - * Returns the index of the first occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - indexOf(searchElement: number, fromIndex?: number): number; - - /** - * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the - * resulting String. If omitted, the array elements are separated with a comma. - */ - join(separator?: string): string; - - /** - * Returns the index of the last occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - lastIndexOf(searchElement: number, fromIndex?: number): number; - - /** - * The length of the array. - */ - readonly length: number; - - /** - * Calls a defined callback function on each element of an array, and returns an array that - * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - map(callbackfn: (value: number, index: number, array: Uint32Array) => number, thisArg?: any): Uint32Array; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number): number; - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U): U; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an - * argument instead of an array value. - */ - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number): number; - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U): U; - - /** - * Reverses the elements in an Array. - */ - reverse(): Uint32Array; - - /** - * Sets a value or an array of values. - * @param array A typed or untyped array of values to set. - * @param offset The index in the current array at which the values are to be written. - */ - set(array: ArrayLike, offset?: number): void; - - /** - * Returns a section of an array. - * @param start The beginning of the specified portion of the array. - * @param end The end of the specified portion of the array. - */ - slice(start?: number, end?: number): Uint32Array; - - /** - * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until - * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - some(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): boolean; - - /** - * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If - * omitted, the elements are sorted in ascending, ASCII character order. - */ - sort(compareFn?: (a: number, b: number) => number): this; - - /** - * Gets a new Uint32Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. - * @param begin The index of the beginning of the array. - * @param end The index of the end of the array. - */ - subarray(begin: number, end?: number): Uint32Array; - - /** - * Converts a number to a string by using the current locale. - */ - toLocaleString(): string; - - /** - * Returns a string representation of an array. - */ - toString(): string; - - [index: number]: number; -} - -interface Uint32ArrayConstructor { - readonly prototype: Uint32Array; - new(length: number): Uint32Array; - new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Uint32Array; - new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Uint32Array; - - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * Returns a new array from a set of elements. - * @param items A set of elements to include in the new array object. - */ - of(...items: number[]): Uint32Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - */ - from(arrayLike: ArrayLike): Uint32Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array; - -} -declare var Uint32Array: Uint32ArrayConstructor; - -/** - * A typed array of 32-bit float values. The contents are initialized to 0. If the requested number - * of bytes could not be allocated an exception is raised. - */ -interface Float32Array { - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * The ArrayBuffer instance referenced by the array. - */ - readonly buffer: ArrayBufferLike; - - /** - * The length in bytes of the array. - */ - readonly byteLength: number; - - /** - * The offset in bytes of the array. - */ - readonly byteOffset: number; - - /** - * Returns the this object after copying a section of the array identified by start and end - * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it - * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. - */ - copyWithin(target: number, start: number, end?: number): this; - - /** - * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, - * or until the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - every(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): boolean; - - /** - * Returns the this object after filling the section identified by start and end with value - * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as - * length+end. - */ - fill(value: number, start?: number, end?: number): this; - - /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - filter(callbackfn: (value: number, index: number, array: Float32Array) => any, thisArg?: any): Float32Array; - - /** - * Returns the value of the first element in the array where predicate is true, and undefined - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - find(predicate: (value: number, index: number, obj: Float32Array) => boolean, thisArg?: any): number | undefined; - - /** - * Returns the index of the first element in the array where predicate is true, and -1 - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, - * findIndex immediately returns that element index. Otherwise, findIndex returns -1. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - findIndex(predicate: (value: number, index: number, obj: Float32Array) => boolean, thisArg?: any): number; - - /** - * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - forEach(callbackfn: (value: number, index: number, array: Float32Array) => void, thisArg?: any): void; - - /** - * Returns the index of the first occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - indexOf(searchElement: number, fromIndex?: number): number; - - /** - * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the - * resulting String. If omitted, the array elements are separated with a comma. - */ - join(separator?: string): string; - - /** - * Returns the index of the last occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - lastIndexOf(searchElement: number, fromIndex?: number): number; - - /** - * The length of the array. - */ - readonly length: number; - - /** - * Calls a defined callback function on each element of an array, and returns an array that - * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - map(callbackfn: (value: number, index: number, array: Float32Array) => number, thisArg?: any): Float32Array; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number): number; - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U): U; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an - * argument instead of an array value. - */ - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number): number; - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U): U; - - /** - * Reverses the elements in an Array. - */ - reverse(): Float32Array; - - /** - * Sets a value or an array of values. - * @param array A typed or untyped array of values to set. - * @param offset The index in the current array at which the values are to be written. - */ - set(array: ArrayLike, offset?: number): void; - - /** - * Returns a section of an array. - * @param start The beginning of the specified portion of the array. - * @param end The end of the specified portion of the array. - */ - slice(start?: number, end?: number): Float32Array; - - /** - * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until - * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - some(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): boolean; - - /** - * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If - * omitted, the elements are sorted in ascending, ASCII character order. - */ - sort(compareFn?: (a: number, b: number) => number): this; - - /** - * Gets a new Float32Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. - * @param begin The index of the beginning of the array. - * @param end The index of the end of the array. - */ - subarray(begin: number, end?: number): Float32Array; - - /** - * Converts a number to a string by using the current locale. - */ - toLocaleString(): string; - - /** - * Returns a string representation of an array. - */ - toString(): string; - - [index: number]: number; -} - -interface Float32ArrayConstructor { - readonly prototype: Float32Array; - new(length: number): Float32Array; - new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Float32Array; - new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Float32Array; - - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * Returns a new array from a set of elements. - * @param items A set of elements to include in the new array object. - */ - of(...items: number[]): Float32Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - */ - from(arrayLike: ArrayLike): Float32Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array; - - -} -declare var Float32Array: Float32ArrayConstructor; - -/** - * A typed array of 64-bit float values. The contents are initialized to 0. If the requested - * number of bytes could not be allocated an exception is raised. - */ -interface Float64Array { - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * The ArrayBuffer instance referenced by the array. - */ - readonly buffer: ArrayBufferLike; - - /** - * The length in bytes of the array. - */ - readonly byteLength: number; - - /** - * The offset in bytes of the array. - */ - readonly byteOffset: number; - - /** - * Returns the this object after copying a section of the array identified by start and end - * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it - * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. - */ - copyWithin(target: number, start: number, end?: number): this; - - /** - * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, - * or until the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - every(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): boolean; - - /** - * Returns the this object after filling the section identified by start and end with value - * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as - * length+end. - */ - fill(value: number, start?: number, end?: number): this; - - /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - filter(callbackfn: (value: number, index: number, array: Float64Array) => any, thisArg?: any): Float64Array; - - /** - * Returns the value of the first element in the array where predicate is true, and undefined - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - find(predicate: (value: number, index: number, obj: Float64Array) => boolean, thisArg?: any): number | undefined; - - /** - * Returns the index of the first element in the array where predicate is true, and -1 - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, - * findIndex immediately returns that element index. Otherwise, findIndex returns -1. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - findIndex(predicate: (value: number, index: number, obj: Float64Array) => boolean, thisArg?: any): number; - - /** - * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - forEach(callbackfn: (value: number, index: number, array: Float64Array) => void, thisArg?: any): void; - - /** - * Returns the index of the first occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - indexOf(searchElement: number, fromIndex?: number): number; - - /** - * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the - * resulting String. If omitted, the array elements are separated with a comma. - */ - join(separator?: string): string; - - /** - * Returns the index of the last occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - lastIndexOf(searchElement: number, fromIndex?: number): number; - - /** - * The length of the array. - */ - readonly length: number; - - /** - * Calls a defined callback function on each element of an array, and returns an array that - * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - map(callbackfn: (value: number, index: number, array: Float64Array) => number, thisArg?: any): Float64Array; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number): number; - reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U): U; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an - * argument instead of an array value. - */ - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number): number; - reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue: number): number; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U): U; - - /** - * Reverses the elements in an Array. - */ - reverse(): Float64Array; - - /** - * Sets a value or an array of values. - * @param array A typed or untyped array of values to set. - * @param offset The index in the current array at which the values are to be written. - */ - set(array: ArrayLike, offset?: number): void; - - /** - * Returns a section of an array. - * @param start The beginning of the specified portion of the array. - * @param end The end of the specified portion of the array. - */ - slice(start?: number, end?: number): Float64Array; - - /** - * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until - * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - some(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): boolean; - - /** - * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If - * omitted, the elements are sorted in ascending, ASCII character order. - */ - sort(compareFn?: (a: number, b: number) => number): this; - - /** - * Gets a new Float64Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. - * @param begin The index of the beginning of the array. - * @param end The index of the end of the array. - */ - subarray(begin: number, end?: number): Float64Array; - - /** - * Converts a number to a string by using the current locale. - */ - toLocaleString(): string; - - /** - * Returns a string representation of an array. - */ - toString(): string; - - [index: number]: number; -} - -interface Float64ArrayConstructor { - readonly prototype: Float64Array; - new(length: number): Float64Array; - new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Float64Array; - new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Float64Array; - - /** - * The size in bytes of each element in the array. - */ - readonly BYTES_PER_ELEMENT: number; - - /** - * Returns a new array from a set of elements. - * @param items A set of elements to include in the new array object. - */ - of(...items: number[]): Float64Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - */ - from(arrayLike: ArrayLike): Float64Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array; - -} -declare var Float64Array: Float64ArrayConstructor; - -///////////////////////////// -/// ECMAScript Internationalization API -///////////////////////////// - -declare namespace Intl { - interface CollatorOptions { - usage?: string; - localeMatcher?: string; - numeric?: boolean; - caseFirst?: string; - sensitivity?: string; - ignorePunctuation?: boolean; - } - - interface ResolvedCollatorOptions { - locale: string; - usage: string; - sensitivity: string; - ignorePunctuation: boolean; - collation: string; - caseFirst: string; - numeric: boolean; - } - - interface Collator { - compare(x: string, y: string): number; - resolvedOptions(): ResolvedCollatorOptions; - } - var Collator: { - new(locales?: string | string[], options?: CollatorOptions): Collator; - (locales?: string | string[], options?: CollatorOptions): Collator; - supportedLocalesOf(locales: string | string[], options?: CollatorOptions): string[]; - }; - - interface NumberFormatOptions { - localeMatcher?: string; - style?: string; - currency?: string; - currencyDisplay?: string; - useGrouping?: boolean; - minimumIntegerDigits?: number; - minimumFractionDigits?: number; - maximumFractionDigits?: number; - minimumSignificantDigits?: number; - maximumSignificantDigits?: number; - } - - interface ResolvedNumberFormatOptions { - locale: string; - numberingSystem: string; - style: string; - currency?: string; - currencyDisplay?: string; - minimumIntegerDigits: number; - minimumFractionDigits: number; - maximumFractionDigits: number; - minimumSignificantDigits?: number; - maximumSignificantDigits?: number; - useGrouping: boolean; - } - - interface NumberFormat { - format(value: number): string; - resolvedOptions(): ResolvedNumberFormatOptions; - } - var NumberFormat: { - new(locales?: string | string[], options?: NumberFormatOptions): NumberFormat; - (locales?: string | string[], options?: NumberFormatOptions): NumberFormat; - supportedLocalesOf(locales: string | string[], options?: NumberFormatOptions): string[]; - }; - - interface DateTimeFormatOptions { - localeMatcher?: string; - weekday?: string; - era?: string; - year?: string; - month?: string; - day?: string; - hour?: string; - minute?: string; - second?: string; - timeZoneName?: string; - formatMatcher?: string; - hour12?: boolean; - timeZone?: string; - } - - interface ResolvedDateTimeFormatOptions { - locale: string; - calendar: string; - numberingSystem: string; - timeZone: string; - hour12?: boolean; - weekday?: string; - era?: string; - year?: string; - month?: string; - day?: string; - hour?: string; - minute?: string; - second?: string; - timeZoneName?: string; - } - - interface DateTimeFormat { - format(date?: Date | number): string; - resolvedOptions(): ResolvedDateTimeFormatOptions; - } - var DateTimeFormat: { - new(locales?: string | string[], options?: DateTimeFormatOptions): DateTimeFormat; - (locales?: string | string[], options?: DateTimeFormatOptions): DateTimeFormat; - supportedLocalesOf(locales: string | string[], options?: DateTimeFormatOptions): string[]; - }; -} - -interface String { - /** - * Determines whether two strings are equivalent in the current or specified locale. - * @param that String to compare to target string - * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. This parameter must conform to BCP 47 standards; see the Intl.Collator object for details. - * @param options An object that contains one or more properties that specify comparison options. see the Intl.Collator object for details. - */ - localeCompare(that: string, locales?: string | string[], options?: Intl.CollatorOptions): number; -} - -interface Number { - /** - * Converts a number to a string by using the current or specified locale. - * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. - * @param options An object that contains one or more properties that specify comparison options. - */ - toLocaleString(locales?: string | string[], options?: Intl.NumberFormatOptions): string; -} - -interface Date { - /** - * Converts a date and time to a string by using the current or specified locale. - * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. - * @param options An object that contains one or more properties that specify comparison options. - */ - toLocaleString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string; - /** - * Converts a date to a string by using the current or specified locale. - * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. - * @param options An object that contains one or more properties that specify comparison options. - */ - toLocaleDateString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string; - - /** - * Converts a time to a string by using the current or specified locale. - * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. - * @param options An object that contains one or more properties that specify comparison options. - */ - toLocaleTimeString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string; -} +/// + + +///////////////////////////// +/// ECMAScript APIs +///////////////////////////// + +declare var NaN: number; +declare var Infinity: number; + +/** + * Evaluates JavaScript code and executes it. + * @param x A String value that contains valid JavaScript code. + */ +declare function eval(x: string): any; + +/** + * Converts a string to an integer. + * @param s A string to convert into a number. + * @param radix A value between 2 and 36 that specifies the base of the number in numString. + * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. + * All other strings are considered decimal. + */ +declare function parseInt(s: string, radix?: number): number; + +/** + * Converts a string to a floating-point number. + * @param string A string that contains a floating-point number. + */ +declare function parseFloat(string: string): number; + +/** + * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number). + * @param number A numeric value. + */ +declare function isNaN(number: number): boolean; + +/** + * Determines whether a supplied number is finite. + * @param number Any numeric value. + */ +declare function isFinite(number: number): boolean; + +/** + * Gets the unencoded version of an encoded Uniform Resource Identifier (URI). + * @param encodedURI A value representing an encoded URI. + */ +declare function decodeURI(encodedURI: string): string; + +/** + * Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI). + * @param encodedURIComponent A value representing an encoded URI component. + */ +declare function decodeURIComponent(encodedURIComponent: string): string; + +/** + * Encodes a text string as a valid Uniform Resource Identifier (URI) + * @param uri A value representing an encoded URI. + */ +declare function encodeURI(uri: string): string; + +/** + * Encodes a text string as a valid component of a Uniform Resource Identifier (URI). + * @param uriComponent A value representing an encoded URI component. + */ +declare function encodeURIComponent(uriComponent: string | number | boolean): string; + +/** + * Computes a new string in which certain characters have been replaced by a hexadecimal escape sequence. + * @param string A string value + */ +declare function escape(string: string): string; + +/** + * Computes a new string in which hexadecimal escape sequences are replaced with the character that it represents. + * @param string A string value + */ +declare function unescape(string: string): string; + +interface Symbol { + /** Returns a string representation of an object. */ + toString(): string; + + /** Returns the primitive value of the specified object. */ + valueOf(): symbol; +} + +declare type PropertyKey = string | number | symbol; + +interface PropertyDescriptor { + configurable?: boolean; + enumerable?: boolean; + value?: any; + writable?: boolean; + get?(): any; + set?(v: any): void; +} + +interface PropertyDescriptorMap { + [s: string]: PropertyDescriptor; +} + +interface Object { + /** The initial value of Object.prototype.constructor is the standard built-in Object constructor. */ + constructor: Function; + + /** Returns a string representation of an object. */ + toString(): string; + + /** Returns a date converted to a string using the current locale. */ + toLocaleString(): string; + + /** Returns the primitive value of the specified object. */ + valueOf(): Object; + + /** + * Determines whether an object has a property with the specified name. + * @param v A property name. + */ + hasOwnProperty(v: PropertyKey): boolean; + + /** + * Determines whether an object exists in another object's prototype chain. + * @param v Another object whose prototype chain is to be checked. + */ + isPrototypeOf(v: Object): boolean; + + /** + * Determines whether a specified property is enumerable. + * @param v A property name. + */ + propertyIsEnumerable(v: PropertyKey): boolean; +} + +interface ObjectConstructor { + new(value?: any): Object; + (): any; + (value: any): any; + + /** A reference to the prototype for a class of objects. */ + readonly prototype: Object; + + /** + * Returns the prototype of an object. + * @param o The object that references the prototype. + */ + getPrototypeOf(o: any): any; + + /** + * Gets the own property descriptor of the specified object. + * An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype. + * @param o Object that contains the property. + * @param p Name of the property. + */ + getOwnPropertyDescriptor(o: any, p: PropertyKey): PropertyDescriptor | undefined; + + /** + * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly + * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions. + * @param o Object that contains the own properties. + */ + getOwnPropertyNames(o: any): string[]; + + /** + * Creates an object that has the specified prototype or that has null prototype. + * @param o Object to use as a prototype. May be null. + */ + create(o: object | null): any; + + /** + * Creates an object that has the specified prototype, and that optionally contains specified properties. + * @param o Object to use as a prototype. May be null + * @param properties JavaScript object that contains one or more property descriptors. + */ + create(o: object | null, properties: PropertyDescriptorMap & ThisType): any; + + /** + * Adds a property to an object, or modifies attributes of an existing property. + * @param o Object on which to add or modify the property. This can be a native JavaScript object (that is, a user-defined object or a built in object) or a DOM object. + * @param p The property name. + * @param attributes Descriptor for the property. It can be for a data property or an accessor property. + */ + defineProperty(o: any, p: PropertyKey, attributes: PropertyDescriptor & ThisType): any; + + /** + * Adds one or more properties to an object, and/or modifies attributes of existing properties. + * @param o Object on which to add or modify the properties. This can be a native JavaScript object or a DOM object. + * @param properties JavaScript object that contains one or more descriptor objects. Each descriptor object describes a data property or an accessor property. + */ + defineProperties(o: any, properties: PropertyDescriptorMap & ThisType): any; + + /** + * Prevents the modification of attributes of existing properties, and prevents the addition of new properties. + * @param o Object on which to lock the attributes. + */ + seal(o: T): T; + + /** + * Prevents the modification of existing property attributes and values, and prevents the addition of new properties. + * @param o Object on which to lock the attributes. + */ + freeze(a: T[]): ReadonlyArray; + + /** + * Prevents the modification of existing property attributes and values, and prevents the addition of new properties. + * @param o Object on which to lock the attributes. + */ + freeze(f: T): T; + + /** + * Prevents the modification of existing property attributes and values, and prevents the addition of new properties. + * @param o Object on which to lock the attributes. + */ + freeze(o: T): Readonly; + + /** + * Prevents the addition of new properties to an object. + * @param o Object to make non-extensible. + */ + preventExtensions(o: T): T; + + /** + * Returns true if existing property attributes cannot be modified in an object and new properties cannot be added to the object. + * @param o Object to test. + */ + isSealed(o: any): boolean; + + /** + * Returns true if existing property attributes and values cannot be modified in an object, and new properties cannot be added to the object. + * @param o Object to test. + */ + isFrozen(o: any): boolean; + + /** + * Returns a value that indicates whether new properties can be added to an object. + * @param o Object to test. + */ + isExtensible(o: any): boolean; + + /** + * Returns the names of the enumerable string properties and methods of an object. + * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. + */ + keys(o: object): string[]; +} + +/** + * Provides functionality common to all JavaScript objects. + */ +declare var Object: ObjectConstructor; + +/** + * Creates a new function. + */ +interface Function { + /** + * Calls the function, substituting the specified object for the this value of the function, and the specified array for the arguments of the function. + * @param thisArg The object to be used as the this object. + * @param argArray A set of arguments to be passed to the function. + */ + apply(this: Function, thisArg: any, argArray?: any): any; + + /** + * Calls a method of an object, substituting another object for the current object. + * @param thisArg The object to be used as the current object. + * @param argArray A list of arguments to be passed to the method. + */ + call(this: Function, thisArg: any, ...argArray: any[]): any; + + /** + * For a given function, creates a bound function that has the same body as the original function. + * The this object of the bound function is associated with the specified object, and has the specified initial parameters. + * @param thisArg An object to which the this keyword can refer inside the new function. + * @param argArray A list of arguments to be passed to the new function. + */ + bind(this: Function, thisArg: any, ...argArray: any[]): any; + + /** Returns a string representation of a function. */ + toString(): string; + + prototype: any; + readonly length: number; + + // Non-standard extensions + arguments: any; + caller: Function; +} + +interface FunctionConstructor { + /** + * Creates a new function. + * @param args A list of arguments the function accepts. + */ + new(...args: string[]): Function; + (...args: string[]): Function; + readonly prototype: Function; +} + +declare var Function: FunctionConstructor; + +/** + * Extracts the type of the 'this' parameter of a function type, or 'unknown' if the function type has no 'this' parameter. + */ +type ThisParameterType = T extends (this: unknown, ...args: any[]) => any ? unknown : T extends (this: infer U, ...args: any[]) => any ? U : unknown; + +/** + * Removes the 'this' parameter from a function type. + */ +type OmitThisParameter = unknown extends ThisParameterType ? T : T extends (...args: infer A) => infer R ? (...args: A) => R : T; + +interface CallableFunction extends Function { + /** + * Calls the function with the specified object as the this value and the elements of specified array as the arguments. + * @param thisArg The object to be used as the this object. + * @param args An array of argument values to be passed to the function. + */ + apply(this: (this: T) => R, thisArg: T): R; + apply(this: (this: T, ...args: A) => R, thisArg: T, args: A): R; + + /** + * Calls the function with the specified object as the this value and the specified rest arguments as the arguments. + * @param thisArg The object to be used as the this object. + * @param args Argument values to be passed to the function. + */ + call(this: (this: T, ...args: A) => R, thisArg: T, ...args: A): R; + + /** + * For a given function, creates a bound function that has the same body as the original function. + * The this object of the bound function is associated with the specified object, and has the specified initial parameters. + * @param thisArg The object to be used as the this object. + * @param args Arguments to bind to the parameters of the function. + */ + bind(this: T, thisArg: ThisParameterType): OmitThisParameter; + bind(this: (this: T, arg0: A0, ...args: A) => R, thisArg: T, arg0: A0): (...args: A) => R; + bind(this: (this: T, arg0: A0, arg1: A1, ...args: A) => R, thisArg: T, arg0: A0, arg1: A1): (...args: A) => R; + bind(this: (this: T, arg0: A0, arg1: A1, arg2: A2, ...args: A) => R, thisArg: T, arg0: A0, arg1: A1, arg2: A2): (...args: A) => R; + bind(this: (this: T, arg0: A0, arg1: A1, arg2: A2, arg3: A3, ...args: A) => R, thisArg: T, arg0: A0, arg1: A1, arg2: A2, arg3: A3): (...args: A) => R; + bind(this: (this: T, ...args: AX[]) => R, thisArg: T, ...args: AX[]): (...args: AX[]) => R; +} + +interface NewableFunction extends Function { + /** + * Calls the function with the specified object as the this value and the elements of specified array as the arguments. + * @param thisArg The object to be used as the this object. + * @param args An array of argument values to be passed to the function. + */ + apply(this: new () => T, thisArg: T): void; + apply(this: new (...args: A) => T, thisArg: T, args: A): void; + + /** + * Calls the function with the specified object as the this value and the specified rest arguments as the arguments. + * @param thisArg The object to be used as the this object. + * @param args Argument values to be passed to the function. + */ + call(this: new (...args: A) => T, thisArg: T, ...args: A): void; + + /** + * For a given function, creates a bound function that has the same body as the original function. + * The this object of the bound function is associated with the specified object, and has the specified initial parameters. + * @param thisArg The object to be used as the this object. + * @param args Arguments to bind to the parameters of the function. + */ + bind(this: T, thisArg: any): T; + bind(this: new (arg0: A0, ...args: A) => R, thisArg: any, arg0: A0): new (...args: A) => R; + bind(this: new (arg0: A0, arg1: A1, ...args: A) => R, thisArg: any, arg0: A0, arg1: A1): new (...args: A) => R; + bind(this: new (arg0: A0, arg1: A1, arg2: A2, ...args: A) => R, thisArg: any, arg0: A0, arg1: A1, arg2: A2): new (...args: A) => R; + bind(this: new (arg0: A0, arg1: A1, arg2: A2, arg3: A3, ...args: A) => R, thisArg: any, arg0: A0, arg1: A1, arg2: A2, arg3: A3): new (...args: A) => R; + bind(this: new (...args: AX[]) => R, thisArg: any, ...args: AX[]): new (...args: AX[]) => R; +} + +interface IArguments { + [index: number]: any; + length: number; + callee: Function; +} + +interface String { + /** Returns a string representation of a string. */ + toString(): string; + + /** + * Returns the character at the specified index. + * @param pos The zero-based index of the desired character. + */ + charAt(pos: number): string; + + /** + * Returns the Unicode value of the character at the specified location. + * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned. + */ + charCodeAt(index: number): number; + + /** + * Returns a string that contains the concatenation of two or more strings. + * @param strings The strings to append to the end of the string. + */ + concat(...strings: string[]): string; + + /** + * Returns the position of the first occurrence of a substring. + * @param searchString The substring to search for in the string + * @param position The index at which to begin searching the String object. If omitted, search starts at the beginning of the string. + */ + indexOf(searchString: string, position?: number): number; + + /** + * Returns the last occurrence of a substring in the string. + * @param searchString The substring to search for. + * @param position The index at which to begin searching. If omitted, the search begins at the end of the string. + */ + lastIndexOf(searchString: string, position?: number): number; + + /** + * Determines whether two strings are equivalent in the current locale. + * @param that String to compare to target string + */ + localeCompare(that: string): number; + + /** + * Matches a string with a regular expression, and returns an array containing the results of that search. + * @param regexp A variable name or string literal containing the regular expression pattern and flags. + */ + match(regexp: string | RegExp): RegExpMatchArray | null; + + /** + * Replaces text in a string, using a regular expression or search string. + * @param searchValue A string to search for. + * @param replaceValue A string containing the text to replace for every successful match of searchValue in this string. + */ + replace(searchValue: string | RegExp, replaceValue: string): string; + + /** + * Replaces text in a string, using a regular expression or search string. + * @param searchValue A string to search for. + * @param replacer A function that returns the replacement text. + */ + replace(searchValue: string | RegExp, replacer: (substring: string, ...args: any[]) => string): string; + + /** + * Finds the first substring match in a regular expression search. + * @param regexp The regular expression pattern and applicable flags. + */ + search(regexp: string | RegExp): number; + + /** + * Returns a section of a string. + * @param start The index to the beginning of the specified portion of stringObj. + * @param end The index to the end of the specified portion of stringObj. The substring includes the characters up to, but not including, the character indicated by end. + * If this value is not specified, the substring continues to the end of stringObj. + */ + slice(start?: number, end?: number): string; + + /** + * Split a string into substrings using the specified separator and return them as an array. + * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. + * @param limit A value used to limit the number of elements returned in the array. + */ + split(separator: string | RegExp, limit?: number): string[]; + + /** + * Returns the substring at the specified location within a String object. + * @param start The zero-based index number indicating the beginning of the substring. + * @param end Zero-based index number indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end. + * If end is omitted, the characters from start through the end of the original string are returned. + */ + substring(start: number, end?: number): string; + + /** Converts all the alphabetic characters in a string to lowercase. */ + toLowerCase(): string; + + /** Converts all alphabetic characters to lowercase, taking into account the host environment's current locale. */ + toLocaleLowerCase(): string; + + /** Converts all the alphabetic characters in a string to uppercase. */ + toUpperCase(): string; + + /** Returns a string where all alphabetic characters have been converted to uppercase, taking into account the host environment's current locale. */ + toLocaleUpperCase(): string; + + /** Removes the leading and trailing white space and line terminator characters from a string. */ + trim(): string; + + /** Returns the length of a String object. */ + readonly length: number; + + // IE extensions + /** + * Gets a substring beginning at the specified location and having the specified length. + * @param from The starting position of the desired substring. The index of the first character in the string is zero. + * @param length The number of characters to include in the returned substring. + */ + substr(from: number, length?: number): string; + + /** Returns the primitive value of the specified object. */ + valueOf(): string; + + readonly [index: number]: string; +} + +interface StringConstructor { + new(value?: any): String; + (value?: any): string; + readonly prototype: String; + fromCharCode(...codes: number[]): string; +} + +/** + * Allows manipulation and formatting of text strings and determination and location of substrings within strings. + */ +declare var String: StringConstructor; + +interface Boolean { + /** Returns the primitive value of the specified object. */ + valueOf(): boolean; +} + +interface BooleanConstructor { + new(value?: any): Boolean; + (value?: T): boolean; + readonly prototype: Boolean; +} + +declare var Boolean: BooleanConstructor; + +interface Number { + /** + * Returns a string representation of an object. + * @param radix Specifies a radix for converting numeric values to strings. This value is only used for numbers. + */ + toString(radix?: number): string; + + /** + * Returns a string representing a number in fixed-point notation. + * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive. + */ + toFixed(fractionDigits?: number): string; + + /** + * Returns a string containing a number represented in exponential notation. + * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive. + */ + toExponential(fractionDigits?: number): string; + + /** + * Returns a string containing a number represented either in exponential or fixed-point notation with a specified number of digits. + * @param precision Number of significant digits. Must be in the range 1 - 21, inclusive. + */ + toPrecision(precision?: number): string; + + /** Returns the primitive value of the specified object. */ + valueOf(): number; +} + +interface NumberConstructor { + new(value?: any): Number; + (value?: any): number; + readonly prototype: Number; + + /** The largest number that can be represented in JavaScript. Equal to approximately 1.79E+308. */ + readonly MAX_VALUE: number; + + /** The closest number to zero that can be represented in JavaScript. Equal to approximately 5.00E-324. */ + readonly MIN_VALUE: number; + + /** + * A value that is not a number. + * In equality comparisons, NaN does not equal any value, including itself. To test whether a value is equivalent to NaN, use the isNaN function. + */ + readonly NaN: number; + + /** + * A value that is less than the largest negative number that can be represented in JavaScript. + * JavaScript displays NEGATIVE_INFINITY values as -infinity. + */ + readonly NEGATIVE_INFINITY: number; + + /** + * A value greater than the largest number that can be represented in JavaScript. + * JavaScript displays POSITIVE_INFINITY values as infinity. + */ + readonly POSITIVE_INFINITY: number; +} + +/** An object that represents a number of any kind. All JavaScript numbers are 64-bit floating-point numbers. */ +declare var Number: NumberConstructor; + +interface TemplateStringsArray extends ReadonlyArray { + readonly raw: ReadonlyArray; +} + +/** + * The type of `import.meta`. + * + * If you need to declare that a given property exists on `import.meta`, + * this type may be augmented via interface merging. + */ +interface ImportMeta { +} + +interface Math { + /** The mathematical constant e. This is Euler's number, the base of natural logarithms. */ + readonly E: number; + /** The natural logarithm of 10. */ + readonly LN10: number; + /** The natural logarithm of 2. */ + readonly LN2: number; + /** The base-2 logarithm of e. */ + readonly LOG2E: number; + /** The base-10 logarithm of e. */ + readonly LOG10E: number; + /** Pi. This is the ratio of the circumference of a circle to its diameter. */ + readonly PI: number; + /** The square root of 0.5, or, equivalently, one divided by the square root of 2. */ + readonly SQRT1_2: number; + /** The square root of 2. */ + readonly SQRT2: number; + /** + * Returns the absolute value of a number (the value without regard to whether it is positive or negative). + * For example, the absolute value of -5 is the same as the absolute value of 5. + * @param x A numeric expression for which the absolute value is needed. + */ + abs(x: number): number; + /** + * Returns the arc cosine (or inverse cosine) of a number. + * @param x A numeric expression. + */ + acos(x: number): number; + /** + * Returns the arcsine of a number. + * @param x A numeric expression. + */ + asin(x: number): number; + /** + * Returns the arctangent of a number. + * @param x A numeric expression for which the arctangent is needed. + */ + atan(x: number): number; + /** + * Returns the angle (in radians) from the X axis to a point. + * @param y A numeric expression representing the cartesian y-coordinate. + * @param x A numeric expression representing the cartesian x-coordinate. + */ + atan2(y: number, x: number): number; + /** + * Returns the smallest integer greater than or equal to its numeric argument. + * @param x A numeric expression. + */ + ceil(x: number): number; + /** + * Returns the cosine of a number. + * @param x A numeric expression that contains an angle measured in radians. + */ + cos(x: number): number; + /** + * Returns e (the base of natural logarithms) raised to a power. + * @param x A numeric expression representing the power of e. + */ + exp(x: number): number; + /** + * Returns the greatest integer less than or equal to its numeric argument. + * @param x A numeric expression. + */ + floor(x: number): number; + /** + * Returns the natural logarithm (base e) of a number. + * @param x A numeric expression. + */ + log(x: number): number; + /** + * Returns the larger of a set of supplied numeric expressions. + * @param values Numeric expressions to be evaluated. + */ + max(...values: number[]): number; + /** + * Returns the smaller of a set of supplied numeric expressions. + * @param values Numeric expressions to be evaluated. + */ + min(...values: number[]): number; + /** + * Returns the value of a base expression taken to a specified power. + * @param x The base value of the expression. + * @param y The exponent value of the expression. + */ + pow(x: number, y: number): number; + /** Returns a pseudorandom number between 0 and 1. */ + random(): number; + /** + * Returns a supplied numeric expression rounded to the nearest number. + * @param x The value to be rounded to the nearest number. + */ + round(x: number): number; + /** + * Returns the sine of a number. + * @param x A numeric expression that contains an angle measured in radians. + */ + sin(x: number): number; + /** + * Returns the square root of a number. + * @param x A numeric expression. + */ + sqrt(x: number): number; + /** + * Returns the tangent of a number. + * @param x A numeric expression that contains an angle measured in radians. + */ + tan(x: number): number; +} +/** An intrinsic object that provides basic mathematics functionality and constants. */ +declare var Math: Math; + +/** Enables basic storage and retrieval of dates and times. */ +interface Date { + /** Returns a string representation of a date. The format of the string depends on the locale. */ + toString(): string; + /** Returns a date as a string value. */ + toDateString(): string; + /** Returns a time as a string value. */ + toTimeString(): string; + /** Returns a value as a string value appropriate to the host environment's current locale. */ + toLocaleString(): string; + /** Returns a date as a string value appropriate to the host environment's current locale. */ + toLocaleDateString(): string; + /** Returns a time as a string value appropriate to the host environment's current locale. */ + toLocaleTimeString(): string; + /** Returns the stored time value in milliseconds since midnight, January 1, 1970 UTC. */ + valueOf(): number; + /** Gets the time value in milliseconds. */ + getTime(): number; + /** Gets the year, using local time. */ + getFullYear(): number; + /** Gets the year using Universal Coordinated Time (UTC). */ + getUTCFullYear(): number; + /** Gets the month, using local time. */ + getMonth(): number; + /** Gets the month of a Date object using Universal Coordinated Time (UTC). */ + getUTCMonth(): number; + /** Gets the day-of-the-month, using local time. */ + getDate(): number; + /** Gets the day-of-the-month, using Universal Coordinated Time (UTC). */ + getUTCDate(): number; + /** Gets the day of the week, using local time. */ + getDay(): number; + /** Gets the day of the week using Universal Coordinated Time (UTC). */ + getUTCDay(): number; + /** Gets the hours in a date, using local time. */ + getHours(): number; + /** Gets the hours value in a Date object using Universal Coordinated Time (UTC). */ + getUTCHours(): number; + /** Gets the minutes of a Date object, using local time. */ + getMinutes(): number; + /** Gets the minutes of a Date object using Universal Coordinated Time (UTC). */ + getUTCMinutes(): number; + /** Gets the seconds of a Date object, using local time. */ + getSeconds(): number; + /** Gets the seconds of a Date object using Universal Coordinated Time (UTC). */ + getUTCSeconds(): number; + /** Gets the milliseconds of a Date, using local time. */ + getMilliseconds(): number; + /** Gets the milliseconds of a Date object using Universal Coordinated Time (UTC). */ + getUTCMilliseconds(): number; + /** Gets the difference in minutes between the time on the local computer and Universal Coordinated Time (UTC). */ + getTimezoneOffset(): number; + /** + * Sets the date and time value in the Date object. + * @param time A numeric value representing the number of elapsed milliseconds since midnight, January 1, 1970 GMT. + */ + setTime(time: number): number; + /** + * Sets the milliseconds value in the Date object using local time. + * @param ms A numeric value equal to the millisecond value. + */ + setMilliseconds(ms: number): number; + /** + * Sets the milliseconds value in the Date object using Universal Coordinated Time (UTC). + * @param ms A numeric value equal to the millisecond value. + */ + setUTCMilliseconds(ms: number): number; + + /** + * Sets the seconds value in the Date object using local time. + * @param sec A numeric value equal to the seconds value. + * @param ms A numeric value equal to the milliseconds value. + */ + setSeconds(sec: number, ms?: number): number; + /** + * Sets the seconds value in the Date object using Universal Coordinated Time (UTC). + * @param sec A numeric value equal to the seconds value. + * @param ms A numeric value equal to the milliseconds value. + */ + setUTCSeconds(sec: number, ms?: number): number; + /** + * Sets the minutes value in the Date object using local time. + * @param min A numeric value equal to the minutes value. + * @param sec A numeric value equal to the seconds value. + * @param ms A numeric value equal to the milliseconds value. + */ + setMinutes(min: number, sec?: number, ms?: number): number; + /** + * Sets the minutes value in the Date object using Universal Coordinated Time (UTC). + * @param min A numeric value equal to the minutes value. + * @param sec A numeric value equal to the seconds value. + * @param ms A numeric value equal to the milliseconds value. + */ + setUTCMinutes(min: number, sec?: number, ms?: number): number; + /** + * Sets the hour value in the Date object using local time. + * @param hours A numeric value equal to the hours value. + * @param min A numeric value equal to the minutes value. + * @param sec A numeric value equal to the seconds value. + * @param ms A numeric value equal to the milliseconds value. + */ + setHours(hours: number, min?: number, sec?: number, ms?: number): number; + /** + * Sets the hours value in the Date object using Universal Coordinated Time (UTC). + * @param hours A numeric value equal to the hours value. + * @param min A numeric value equal to the minutes value. + * @param sec A numeric value equal to the seconds value. + * @param ms A numeric value equal to the milliseconds value. + */ + setUTCHours(hours: number, min?: number, sec?: number, ms?: number): number; + /** + * Sets the numeric day-of-the-month value of the Date object using local time. + * @param date A numeric value equal to the day of the month. + */ + setDate(date: number): number; + /** + * Sets the numeric day of the month in the Date object using Universal Coordinated Time (UTC). + * @param date A numeric value equal to the day of the month. + */ + setUTCDate(date: number): number; + /** + * Sets the month value in the Date object using local time. + * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. + * @param date A numeric value representing the day of the month. If this value is not supplied, the value from a call to the getDate method is used. + */ + setMonth(month: number, date?: number): number; + /** + * Sets the month value in the Date object using Universal Coordinated Time (UTC). + * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. + * @param date A numeric value representing the day of the month. If it is not supplied, the value from a call to the getUTCDate method is used. + */ + setUTCMonth(month: number, date?: number): number; + /** + * Sets the year of the Date object using local time. + * @param year A numeric value for the year. + * @param month A zero-based numeric value for the month (0 for January, 11 for December). Must be specified if numDate is specified. + * @param date A numeric value equal for the day of the month. + */ + setFullYear(year: number, month?: number, date?: number): number; + /** + * Sets the year value in the Date object using Universal Coordinated Time (UTC). + * @param year A numeric value equal to the year. + * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. Must be supplied if numDate is supplied. + * @param date A numeric value equal to the day of the month. + */ + setUTCFullYear(year: number, month?: number, date?: number): number; + /** Returns a date converted to a string using Universal Coordinated Time (UTC). */ + toUTCString(): string; + /** Returns a date as a string value in ISO format. */ + toISOString(): string; + /** Used by the JSON.stringify method to enable the transformation of an object's data for JavaScript Object Notation (JSON) serialization. */ + toJSON(key?: any): string; +} + +interface DateConstructor { + new(): Date; + new(value: number | string): Date; + new(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; + (): string; + readonly prototype: Date; + /** + * Parses a string containing a date, and returns the number of milliseconds between that date and midnight, January 1, 1970. + * @param s A date string + */ + parse(s: string): number; + /** + * Returns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date. + * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year. + * @param month The month as an number between 0 and 11 (January to December). + * @param date The date as an number between 1 and 31. + * @param hours Must be supplied if minutes is supplied. An number from 0 to 23 (midnight to 11pm) that specifies the hour. + * @param minutes Must be supplied if seconds is supplied. An number from 0 to 59 that specifies the minutes. + * @param seconds Must be supplied if milliseconds is supplied. An number from 0 to 59 that specifies the seconds. + * @param ms An number from 0 to 999 that specifies the milliseconds. + */ + UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; + now(): number; +} + +declare var Date: DateConstructor; + +interface RegExpMatchArray extends Array { + index?: number; + input?: string; +} + +interface RegExpExecArray extends Array { + index: number; + input: string; +} + +interface RegExp { + /** + * Executes a search on a string using a regular expression pattern, and returns an array containing the results of that search. + * @param string The String object or string literal on which to perform the search. + */ + exec(string: string): RegExpExecArray | null; + + /** + * Returns a Boolean value that indicates whether or not a pattern exists in a searched string. + * @param string String on which to perform the search. + */ + test(string: string): boolean; + + /** Returns a copy of the text of the regular expression pattern. Read-only. The regExp argument is a Regular expression object. It can be a variable name or a literal. */ + readonly source: string; + + /** Returns a Boolean value indicating the state of the global flag (g) used with a regular expression. Default is false. Read-only. */ + readonly global: boolean; + + /** Returns a Boolean value indicating the state of the ignoreCase flag (i) used with a regular expression. Default is false. Read-only. */ + readonly ignoreCase: boolean; + + /** Returns a Boolean value indicating the state of the multiline flag (m) used with a regular expression. Default is false. Read-only. */ + readonly multiline: boolean; + + lastIndex: number; + + // Non-standard extensions + compile(): this; +} + +interface RegExpConstructor { + new(pattern: RegExp | string): RegExp; + new(pattern: string, flags?: string): RegExp; + (pattern: RegExp | string): RegExp; + (pattern: string, flags?: string): RegExp; + readonly prototype: RegExp; + + // Non-standard extensions + $1: string; + $2: string; + $3: string; + $4: string; + $5: string; + $6: string; + $7: string; + $8: string; + $9: string; + lastMatch: string; +} + +declare var RegExp: RegExpConstructor; + +interface Error { + name: string; + message: string; + stack?: string; +} + +interface ErrorConstructor { + new(message?: string): Error; + (message?: string): Error; + readonly prototype: Error; +} + +declare var Error: ErrorConstructor; + +interface EvalError extends Error { +} + +interface EvalErrorConstructor { + new(message?: string): EvalError; + (message?: string): EvalError; + readonly prototype: EvalError; +} + +declare var EvalError: EvalErrorConstructor; + +interface RangeError extends Error { +} + +interface RangeErrorConstructor { + new(message?: string): RangeError; + (message?: string): RangeError; + readonly prototype: RangeError; +} + +declare var RangeError: RangeErrorConstructor; + +interface ReferenceError extends Error { +} + +interface ReferenceErrorConstructor { + new(message?: string): ReferenceError; + (message?: string): ReferenceError; + readonly prototype: ReferenceError; +} + +declare var ReferenceError: ReferenceErrorConstructor; + +interface SyntaxError extends Error { +} + +interface SyntaxErrorConstructor { + new(message?: string): SyntaxError; + (message?: string): SyntaxError; + readonly prototype: SyntaxError; +} + +declare var SyntaxError: SyntaxErrorConstructor; + +interface TypeError extends Error { +} + +interface TypeErrorConstructor { + new(message?: string): TypeError; + (message?: string): TypeError; + readonly prototype: TypeError; +} + +declare var TypeError: TypeErrorConstructor; + +interface URIError extends Error { +} + +interface URIErrorConstructor { + new(message?: string): URIError; + (message?: string): URIError; + readonly prototype: URIError; +} + +declare var URIError: URIErrorConstructor; + +interface JSON { + /** + * Converts a JavaScript Object Notation (JSON) string into an object. + * @param text A valid JSON string. + * @param reviver A function that transforms the results. This function is called for each member of the object. + * If a member contains nested objects, the nested objects are transformed before the parent object is. + */ + parse(text: string, reviver?: (this: any, key: string, value: any) => any): any; + /** + * Converts a JavaScript value to a JavaScript Object Notation (JSON) string. + * @param value A JavaScript value, usually an object or array, to be converted. + * @param replacer A function that transforms the results. + * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read. + */ + stringify(value: any, replacer?: (this: any, key: string, value: any) => any, space?: string | number): string; + /** + * Converts a JavaScript value to a JavaScript Object Notation (JSON) string. + * @param value A JavaScript value, usually an object or array, to be converted. + * @param replacer An array of strings and numbers that acts as a approved list for selecting the object properties that will be stringified. + * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read. + */ + stringify(value: any, replacer?: (number | string)[] | null, space?: string | number): string; +} + +/** + * An intrinsic object that provides functions to convert JavaScript values to and from the JavaScript Object Notation (JSON) format. + */ +declare var JSON: JSON; + + +///////////////////////////// +/// ECMAScript Array API (specially handled by compiler) +///////////////////////////// + +interface ReadonlyArray { + /** + * Gets the length of the array. This is a number one higher than the highest element defined in an array. + */ + readonly length: number; + /** + * Returns a string representation of an array. + */ + toString(): string; + /** + * Returns a string representation of an array. The elements are converted to string using their toLocalString methods. + */ + toLocaleString(): string; + /** + * Combines two or more arrays. + * @param items Additional items to add to the end of array1. + */ + concat(...items: ConcatArray[]): T[]; + /** + * Combines two or more arrays. + * @param items Additional items to add to the end of array1. + */ + concat(...items: (T | ConcatArray)[]): T[]; + /** + * Adds all the elements of an array separated by the specified separator string. + * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma. + */ + join(separator?: string): string; + /** + * Returns a section of an array. + * @param start The beginning of the specified portion of the array. + * @param end The end of the specified portion of the array. + */ + slice(start?: number, end?: number): T[]; + /** + * Returns the index of the first occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0. + */ + indexOf(searchElement: T, fromIndex?: number): number; + /** + * Returns the index of the last occurrence of a specified value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array. + */ + lastIndexOf(searchElement: T, fromIndex?: number): number; + /** + * Determines whether all the members of an array satisfy the specified test. + * @param callbackfn A function that accepts up to three arguments. The every method calls the callbackfn function for each element in array1 until the callbackfn returns false, or until the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. + */ + every(callbackfn: (value: T, index: number, array: ReadonlyArray) => unknown, thisArg?: any): boolean; + /** + * Determines whether the specified callback function returns true for any element of an array. + * @param callbackfn A function that accepts up to three arguments. The some method calls the callbackfn function for each element in array1 until the callbackfn returns true, or until the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. + */ + some(callbackfn: (value: T, index: number, array: ReadonlyArray) => unknown, thisArg?: any): boolean; + /** + * Performs the specified action for each element in an array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. + */ + forEach(callbackfn: (value: T, index: number, array: ReadonlyArray) => void, thisArg?: any): void; + /** + * Calls a defined callback function on each element of an array, and returns an array that contains the results. + * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. + */ + map(callbackfn: (value: T, index: number, array: ReadonlyArray) => U, thisArg?: any): U[]; + /** + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. + */ + filter(callbackfn: (value: T, index: number, array: ReadonlyArray) => value is S, thisArg?: any): S[]; + /** + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. + */ + filter(callbackfn: (value: T, index: number, array: ReadonlyArray) => unknown, thisArg?: any): T[]; + /** + * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. + */ + reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: ReadonlyArray) => T): T; + reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: ReadonlyArray) => T, initialValue: T): T; + /** + * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. + */ + reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: ReadonlyArray) => U, initialValue: U): U; + /** + * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. + */ + reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: ReadonlyArray) => T): T; + reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: ReadonlyArray) => T, initialValue: T): T; + /** + * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. + */ + reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: ReadonlyArray) => U, initialValue: U): U; + + readonly [n: number]: T; +} + +interface ConcatArray { + readonly length: number; + readonly [n: number]: T; + join(separator?: string): string; + slice(start?: number, end?: number): T[]; +} + +interface Array { + /** + * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array. + */ + length: number; + /** + * Returns a string representation of an array. + */ + toString(): string; + /** + * Returns a string representation of an array. The elements are converted to string using their toLocalString methods. + */ + toLocaleString(): string; + /** + * Removes the last element from an array and returns it. + */ + pop(): T | undefined; + /** + * Appends new elements to an array, and returns the new length of the array. + * @param items New elements of the Array. + */ + push(...items: T[]): number; + /** + * Combines two or more arrays. + * @param items Additional items to add to the end of array1. + */ + concat(...items: ConcatArray[]): T[]; + /** + * Combines two or more arrays. + * @param items Additional items to add to the end of array1. + */ + concat(...items: (T | ConcatArray)[]): T[]; + /** + * Adds all the elements of an array separated by the specified separator string. + * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma. + */ + join(separator?: string): string; + /** + * Reverses the elements in an Array. + */ + reverse(): T[]; + /** + * Removes the first element from an array and returns it. + */ + shift(): T | undefined; + /** + * Returns a section of an array. + * @param start The beginning of the specified portion of the array. + * @param end The end of the specified portion of the array. + */ + slice(start?: number, end?: number): T[]; + /** + * Sorts an array. + * @param compareFn The name of the function used to determine the order of the elements. If omitted, the elements are sorted in ascending, ASCII character order. + */ + sort(compareFn?: (a: T, b: T) => number): this; + /** + * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. + * @param start The zero-based location in the array from which to start removing elements. + * @param deleteCount The number of elements to remove. + */ + splice(start: number, deleteCount?: number): T[]; + /** + * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. + * @param start The zero-based location in the array from which to start removing elements. + * @param deleteCount The number of elements to remove. + * @param items Elements to insert into the array in place of the deleted elements. + */ + splice(start: number, deleteCount: number, ...items: T[]): T[]; + /** + * Inserts new elements at the start of an array. + * @param items Elements to insert at the start of the Array. + */ + unshift(...items: T[]): number; + /** + * Returns the index of the first occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0. + */ + indexOf(searchElement: T, fromIndex?: number): number; + /** + * Returns the index of the last occurrence of a specified value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array. + */ + lastIndexOf(searchElement: T, fromIndex?: number): number; + /** + * Determines whether all the members of an array satisfy the specified test. + * @param callbackfn A function that accepts up to three arguments. The every method calls the callbackfn function for each element in array1 until the callbackfn returns false, or until the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. + */ + every(callbackfn: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean; + /** + * Determines whether the specified callback function returns true for any element of an array. + * @param callbackfn A function that accepts up to three arguments. The some method calls the callbackfn function for each element in array1 until the callbackfn returns true, or until the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. + */ + some(callbackfn: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean; + /** + * Performs the specified action for each element in an array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. + */ + forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void; + /** + * Calls a defined callback function on each element of an array, and returns an array that contains the results. + * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. + */ + map(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; + /** + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. + */ + filter(callbackfn: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[]; + /** + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. + */ + filter(callbackfn: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[]; + /** + * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. + */ + reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; + reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; + /** + * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. + */ + reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; + /** + * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. + */ + reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; + reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; + /** + * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. + */ + reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; + + [n: number]: T; +} + +interface ArrayConstructor { + new(arrayLength?: number): any[]; + new (arrayLength: number): T[]; + new (...items: T[]): T[]; + (arrayLength?: number): any[]; + (arrayLength: number): T[]; + (...items: T[]): T[]; + isArray(arg: any): arg is Array; + readonly prototype: Array; +} + +declare var Array: ArrayConstructor; + +interface TypedPropertyDescriptor { + enumerable?: boolean; + configurable?: boolean; + writable?: boolean; + value?: T; + get?: () => T; + set?: (value: T) => void; +} + +declare type ClassDecorator = (target: TFunction) => TFunction | void; +declare type PropertyDecorator = (target: Object, propertyKey: string | symbol) => void; +declare type MethodDecorator = (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor | void; +declare type ParameterDecorator = (target: Object, propertyKey: string | symbol, parameterIndex: number) => void; + +declare type PromiseConstructorLike = new (executor: (resolve: (value?: T | PromiseLike) => void, reject: (reason?: any) => void) => void) => PromiseLike; + +interface PromiseLike { + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): PromiseLike; +} + +/** + * Represents the completion of an asynchronous operation + */ +interface Promise { + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; + + /** + * Attaches a callback for only the rejection of the Promise. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of the callback. + */ + catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; +} + +interface ArrayLike { + readonly length: number; + readonly [n: number]: T; +} + +/** + * Make all properties in T optional + */ +type Partial = { + [P in keyof T]?: T[P]; +}; + +/** + * Make all properties in T required + */ +type Required = { + [P in keyof T]-?: T[P]; +}; + +/** + * Make all properties in T readonly + */ +type Readonly = { + readonly [P in keyof T]: T[P]; +}; + +/** + * From T, pick a set of properties whose keys are in the union K + */ +type Pick = { + [P in K]: T[P]; +}; + +/** + * Construct a type with a set of properties K of type T + */ +type Record = { + [P in K]: T; +}; + +/** + * Exclude from T those types that are assignable to U + */ +type Exclude = T extends U ? never : T; + +/** + * Extract from T those types that are assignable to U + */ +type Extract = T extends U ? T : never; + +/** + * Construct a type with the properties of T except for those in type K. + */ +type Omit = Pick>; + +/** + * Exclude null and undefined from T + */ +type NonNullable = T extends null | undefined ? never : T; + +/** + * Obtain the parameters of a function type in a tuple + */ +type Parameters any> = T extends (...args: infer P) => any ? P : never; + +/** + * Obtain the parameters of a constructor function type in a tuple + */ +type ConstructorParameters any> = T extends new (...args: infer P) => any ? P : never; + +/** + * Obtain the return type of a function type + */ +type ReturnType any> = T extends (...args: any) => infer R ? R : any; + +/** + * Obtain the return type of a constructor function type + */ +type InstanceType any> = T extends new (...args: any) => infer R ? R : any; + +/** + * Marker for contextual 'this' type + */ +interface ThisType { } + +/** + * Represents a raw buffer of binary data, which is used to store data for the + * different typed arrays. ArrayBuffers cannot be read from or written to directly, + * but can be passed to a typed array or DataView Object to interpret the raw + * buffer as needed. + */ +interface ArrayBuffer { + /** + * Read-only. The length of the ArrayBuffer (in bytes). + */ + readonly byteLength: number; + + /** + * Returns a section of an ArrayBuffer. + */ + slice(begin: number, end?: number): ArrayBuffer; +} + +/** + * Allowed ArrayBuffer types for the buffer of an ArrayBufferView and related Typed Arrays. + */ +interface ArrayBufferTypes { + ArrayBuffer: ArrayBuffer; +} +type ArrayBufferLike = ArrayBufferTypes[keyof ArrayBufferTypes]; + +interface ArrayBufferConstructor { + readonly prototype: ArrayBuffer; + new(byteLength: number): ArrayBuffer; + isView(arg: any): arg is ArrayBufferView; +} +declare var ArrayBuffer: ArrayBufferConstructor; + +interface ArrayBufferView { + /** + * The ArrayBuffer instance referenced by the array. + */ + buffer: ArrayBufferLike; + + /** + * The length in bytes of the array. + */ + byteLength: number; + + /** + * The offset in bytes of the array. + */ + byteOffset: number; +} + +interface DataView { + readonly buffer: ArrayBuffer; + readonly byteLength: number; + readonly byteOffset: number; + /** + * Gets the Float32 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. + * @param byteOffset The place in the buffer at which the value should be retrieved. + */ + getFloat32(byteOffset: number, littleEndian?: boolean): number; + + /** + * Gets the Float64 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. + * @param byteOffset The place in the buffer at which the value should be retrieved. + */ + getFloat64(byteOffset: number, littleEndian?: boolean): number; + + /** + * Gets the Int8 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. + * @param byteOffset The place in the buffer at which the value should be retrieved. + */ + getInt8(byteOffset: number): number; + + /** + * Gets the Int16 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. + * @param byteOffset The place in the buffer at which the value should be retrieved. + */ + getInt16(byteOffset: number, littleEndian?: boolean): number; + /** + * Gets the Int32 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. + * @param byteOffset The place in the buffer at which the value should be retrieved. + */ + getInt32(byteOffset: number, littleEndian?: boolean): number; + + /** + * Gets the Uint8 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. + * @param byteOffset The place in the buffer at which the value should be retrieved. + */ + getUint8(byteOffset: number): number; + + /** + * Gets the Uint16 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. + * @param byteOffset The place in the buffer at which the value should be retrieved. + */ + getUint16(byteOffset: number, littleEndian?: boolean): number; + + /** + * Gets the Uint32 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. + * @param byteOffset The place in the buffer at which the value should be retrieved. + */ + getUint32(byteOffset: number, littleEndian?: boolean): number; + + /** + * Stores an Float32 value at the specified byte offset from the start of the view. + * @param byteOffset The place in the buffer at which the value should be set. + * @param value The value to set. + * @param littleEndian If false or undefined, a big-endian value should be written, + * otherwise a little-endian value should be written. + */ + setFloat32(byteOffset: number, value: number, littleEndian?: boolean): void; + + /** + * Stores an Float64 value at the specified byte offset from the start of the view. + * @param byteOffset The place in the buffer at which the value should be set. + * @param value The value to set. + * @param littleEndian If false or undefined, a big-endian value should be written, + * otherwise a little-endian value should be written. + */ + setFloat64(byteOffset: number, value: number, littleEndian?: boolean): void; + + /** + * Stores an Int8 value at the specified byte offset from the start of the view. + * @param byteOffset The place in the buffer at which the value should be set. + * @param value The value to set. + */ + setInt8(byteOffset: number, value: number): void; + + /** + * Stores an Int16 value at the specified byte offset from the start of the view. + * @param byteOffset The place in the buffer at which the value should be set. + * @param value The value to set. + * @param littleEndian If false or undefined, a big-endian value should be written, + * otherwise a little-endian value should be written. + */ + setInt16(byteOffset: number, value: number, littleEndian?: boolean): void; + + /** + * Stores an Int32 value at the specified byte offset from the start of the view. + * @param byteOffset The place in the buffer at which the value should be set. + * @param value The value to set. + * @param littleEndian If false or undefined, a big-endian value should be written, + * otherwise a little-endian value should be written. + */ + setInt32(byteOffset: number, value: number, littleEndian?: boolean): void; + + /** + * Stores an Uint8 value at the specified byte offset from the start of the view. + * @param byteOffset The place in the buffer at which the value should be set. + * @param value The value to set. + */ + setUint8(byteOffset: number, value: number): void; + + /** + * Stores an Uint16 value at the specified byte offset from the start of the view. + * @param byteOffset The place in the buffer at which the value should be set. + * @param value The value to set. + * @param littleEndian If false or undefined, a big-endian value should be written, + * otherwise a little-endian value should be written. + */ + setUint16(byteOffset: number, value: number, littleEndian?: boolean): void; + + /** + * Stores an Uint32 value at the specified byte offset from the start of the view. + * @param byteOffset The place in the buffer at which the value should be set. + * @param value The value to set. + * @param littleEndian If false or undefined, a big-endian value should be written, + * otherwise a little-endian value should be written. + */ + setUint32(byteOffset: number, value: number, littleEndian?: boolean): void; +} + +interface DataViewConstructor { + new(buffer: ArrayBufferLike, byteOffset?: number, byteLength?: number): DataView; +} +declare var DataView: DataViewConstructor; + +/** + * A typed array of 8-bit integer values. The contents are initialized to 0. If the requested + * number of bytes could not be allocated an exception is raised. + */ +interface Int8Array { + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * The ArrayBuffer instance referenced by the array. + */ + readonly buffer: ArrayBufferLike; + + /** + * The length in bytes of the array. + */ + readonly byteLength: number; + + /** + * The offset in bytes of the array. + */ + readonly byteOffset: number; + + /** + * Returns the this object after copying a section of the array identified by start and end + * to the same array starting at position target + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it + * is treated as length+end. + * @param end If not specified, length of the this object is used as its default value. + */ + copyWithin(target: number, start: number, end?: number): this; + + /** + * Determines whether all the members of an array satisfy the specified test. + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, + * or until the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + every(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): boolean; + + /** + * Returns the this object after filling the section identified by start and end with value + * @param value value to fill array section with + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as + * length+end. + */ + fill(value: number, start?: number, end?: number): this; + + /** + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + filter(callbackfn: (value: number, index: number, array: Int8Array) => any, thisArg?: any): Int8Array; + + /** + * Returns the value of the first element in the array where predicate is true, and undefined + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find + * immediately returns that element value. Otherwise, find returns undefined. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + find(predicate: (value: number, index: number, obj: Int8Array) => boolean, thisArg?: any): number | undefined; + + /** + * Returns the index of the first element in the array where predicate is true, and -1 + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + findIndex(predicate: (value: number, index: number, obj: Int8Array) => boolean, thisArg?: any): number; + + /** + * Performs the specified action for each element in an array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + forEach(callbackfn: (value: number, index: number, array: Int8Array) => void, thisArg?: any): void; + + /** + * Returns the index of the first occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + indexOf(searchElement: number, fromIndex?: number): number; + + /** + * Adds all the elements of an array separated by the specified separator string. + * @param separator A string used to separate one element of an array from the next in the + * resulting String. If omitted, the array elements are separated with a comma. + */ + join(separator?: string): string; + + /** + * Returns the index of the last occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + lastIndexOf(searchElement: number, fromIndex?: number): number; + + /** + * The length of the array. + */ + readonly length: number; + + /** + * Calls a defined callback function on each element of an array, and returns an array that + * contains the results. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + map(callbackfn: (value: number, index: number, array: Int8Array) => number, thisArg?: any): Int8Array; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number): number; + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U): U; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an + * argument instead of an array value. + */ + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number): number; + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U): U; + + /** + * Reverses the elements in an Array. + */ + reverse(): Int8Array; + + /** + * Sets a value or an array of values. + * @param array A typed or untyped array of values to set. + * @param offset The index in the current array at which the values are to be written. + */ + set(array: ArrayLike, offset?: number): void; + + /** + * Returns a section of an array. + * @param start The beginning of the specified portion of the array. + * @param end The end of the specified portion of the array. + */ + slice(start?: number, end?: number): Int8Array; + + /** + * Determines whether the specified callback function returns true for any element of an array. + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until + * the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + some(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): boolean; + + /** + * Sorts an array. + * @param compareFn The name of the function used to determine the order of the elements. If + * omitted, the elements are sorted in ascending, ASCII character order. + */ + sort(compareFn?: (a: number, b: number) => number): this; + + /** + * Gets a new Int8Array view of the ArrayBuffer store for this array, referencing the elements + * at begin, inclusive, up to end, exclusive. + * @param begin The index of the beginning of the array. + * @param end The index of the end of the array. + */ + subarray(begin: number, end?: number): Int8Array; + + /** + * Converts a number to a string by using the current locale. + */ + toLocaleString(): string; + + /** + * Returns a string representation of an array. + */ + toString(): string; + + [index: number]: number; +} +interface Int8ArrayConstructor { + readonly prototype: Int8Array; + new(length: number): Int8Array; + new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Int8Array; + new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Int8Array; + + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * Returns a new array from a set of elements. + * @param items A set of elements to include in the new array object. + */ + of(...items: number[]): Int8Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Int8Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array; + + +} +declare var Int8Array: Int8ArrayConstructor; + +/** + * A typed array of 8-bit unsigned integer values. The contents are initialized to 0. If the + * requested number of bytes could not be allocated an exception is raised. + */ +interface Uint8Array { + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * The ArrayBuffer instance referenced by the array. + */ + readonly buffer: ArrayBufferLike; + + /** + * The length in bytes of the array. + */ + readonly byteLength: number; + + /** + * The offset in bytes of the array. + */ + readonly byteOffset: number; + + /** + * Returns the this object after copying a section of the array identified by start and end + * to the same array starting at position target + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it + * is treated as length+end. + * @param end If not specified, length of the this object is used as its default value. + */ + copyWithin(target: number, start: number, end?: number): this; + + /** + * Determines whether all the members of an array satisfy the specified test. + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, + * or until the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + every(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): boolean; + + /** + * Returns the this object after filling the section identified by start and end with value + * @param value value to fill array section with + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as + * length+end. + */ + fill(value: number, start?: number, end?: number): this; + + /** + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + filter(callbackfn: (value: number, index: number, array: Uint8Array) => any, thisArg?: any): Uint8Array; + + /** + * Returns the value of the first element in the array where predicate is true, and undefined + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find + * immediately returns that element value. Otherwise, find returns undefined. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + find(predicate: (value: number, index: number, obj: Uint8Array) => boolean, thisArg?: any): number | undefined; + + /** + * Returns the index of the first element in the array where predicate is true, and -1 + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + findIndex(predicate: (value: number, index: number, obj: Uint8Array) => boolean, thisArg?: any): number; + + /** + * Performs the specified action for each element in an array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + forEach(callbackfn: (value: number, index: number, array: Uint8Array) => void, thisArg?: any): void; + + /** + * Returns the index of the first occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + indexOf(searchElement: number, fromIndex?: number): number; + + /** + * Adds all the elements of an array separated by the specified separator string. + * @param separator A string used to separate one element of an array from the next in the + * resulting String. If omitted, the array elements are separated with a comma. + */ + join(separator?: string): string; + + /** + * Returns the index of the last occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + lastIndexOf(searchElement: number, fromIndex?: number): number; + + /** + * The length of the array. + */ + readonly length: number; + + /** + * Calls a defined callback function on each element of an array, and returns an array that + * contains the results. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + map(callbackfn: (value: number, index: number, array: Uint8Array) => number, thisArg?: any): Uint8Array; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number): number; + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U): U; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an + * argument instead of an array value. + */ + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number): number; + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U): U; + + /** + * Reverses the elements in an Array. + */ + reverse(): Uint8Array; + + /** + * Sets a value or an array of values. + * @param array A typed or untyped array of values to set. + * @param offset The index in the current array at which the values are to be written. + */ + set(array: ArrayLike, offset?: number): void; + + /** + * Returns a section of an array. + * @param start The beginning of the specified portion of the array. + * @param end The end of the specified portion of the array. + */ + slice(start?: number, end?: number): Uint8Array; + + /** + * Determines whether the specified callback function returns true for any element of an array. + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until + * the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + some(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): boolean; + + /** + * Sorts an array. + * @param compareFn The name of the function used to determine the order of the elements. If + * omitted, the elements are sorted in ascending, ASCII character order. + */ + sort(compareFn?: (a: number, b: number) => number): this; + + /** + * Gets a new Uint8Array view of the ArrayBuffer store for this array, referencing the elements + * at begin, inclusive, up to end, exclusive. + * @param begin The index of the beginning of the array. + * @param end The index of the end of the array. + */ + subarray(begin: number, end?: number): Uint8Array; + + /** + * Converts a number to a string by using the current locale. + */ + toLocaleString(): string; + + /** + * Returns a string representation of an array. + */ + toString(): string; + + [index: number]: number; +} + +interface Uint8ArrayConstructor { + readonly prototype: Uint8Array; + new(length: number): Uint8Array; + new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Uint8Array; + new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Uint8Array; + + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * Returns a new array from a set of elements. + * @param items A set of elements to include in the new array object. + */ + of(...items: number[]): Uint8Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Uint8Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array; + +} +declare var Uint8Array: Uint8ArrayConstructor; + +/** + * A typed array of 8-bit unsigned integer (clamped) values. The contents are initialized to 0. + * If the requested number of bytes could not be allocated an exception is raised. + */ +interface Uint8ClampedArray { + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * The ArrayBuffer instance referenced by the array. + */ + readonly buffer: ArrayBufferLike; + + /** + * The length in bytes of the array. + */ + readonly byteLength: number; + + /** + * The offset in bytes of the array. + */ + readonly byteOffset: number; + + /** + * Returns the this object after copying a section of the array identified by start and end + * to the same array starting at position target + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it + * is treated as length+end. + * @param end If not specified, length of the this object is used as its default value. + */ + copyWithin(target: number, start: number, end?: number): this; + + /** + * Determines whether all the members of an array satisfy the specified test. + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, + * or until the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + every(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => boolean, thisArg?: any): boolean; + + /** + * Returns the this object after filling the section identified by start and end with value + * @param value value to fill array section with + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as + * length+end. + */ + fill(value: number, start?: number, end?: number): this; + + /** + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + filter(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => any, thisArg?: any): Uint8ClampedArray; + + /** + * Returns the value of the first element in the array where predicate is true, and undefined + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find + * immediately returns that element value. Otherwise, find returns undefined. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + find(predicate: (value: number, index: number, obj: Uint8ClampedArray) => boolean, thisArg?: any): number | undefined; + + /** + * Returns the index of the first element in the array where predicate is true, and -1 + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + findIndex(predicate: (value: number, index: number, obj: Uint8ClampedArray) => boolean, thisArg?: any): number; + + /** + * Performs the specified action for each element in an array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + forEach(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => void, thisArg?: any): void; + + /** + * Returns the index of the first occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + indexOf(searchElement: number, fromIndex?: number): number; + + /** + * Adds all the elements of an array separated by the specified separator string. + * @param separator A string used to separate one element of an array from the next in the + * resulting String. If omitted, the array elements are separated with a comma. + */ + join(separator?: string): string; + + /** + * Returns the index of the last occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + lastIndexOf(searchElement: number, fromIndex?: number): number; + + /** + * The length of the array. + */ + readonly length: number; + + /** + * Calls a defined callback function on each element of an array, and returns an array that + * contains the results. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + map(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => number, thisArg?: any): Uint8ClampedArray; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number): number; + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => U, initialValue: U): U; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an + * argument instead of an array value. + */ + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number): number; + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => U, initialValue: U): U; + + /** + * Reverses the elements in an Array. + */ + reverse(): Uint8ClampedArray; + + /** + * Sets a value or an array of values. + * @param array A typed or untyped array of values to set. + * @param offset The index in the current array at which the values are to be written. + */ + set(array: ArrayLike, offset?: number): void; + + /** + * Returns a section of an array. + * @param start The beginning of the specified portion of the array. + * @param end The end of the specified portion of the array. + */ + slice(start?: number, end?: number): Uint8ClampedArray; + + /** + * Determines whether the specified callback function returns true for any element of an array. + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until + * the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + some(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => boolean, thisArg?: any): boolean; + + /** + * Sorts an array. + * @param compareFn The name of the function used to determine the order of the elements. If + * omitted, the elements are sorted in ascending, ASCII character order. + */ + sort(compareFn?: (a: number, b: number) => number): this; + + /** + * Gets a new Uint8ClampedArray view of the ArrayBuffer store for this array, referencing the elements + * at begin, inclusive, up to end, exclusive. + * @param begin The index of the beginning of the array. + * @param end The index of the end of the array. + */ + subarray(begin: number, end?: number): Uint8ClampedArray; + + /** + * Converts a number to a string by using the current locale. + */ + toLocaleString(): string; + + /** + * Returns a string representation of an array. + */ + toString(): string; + + [index: number]: number; +} + +interface Uint8ClampedArrayConstructor { + readonly prototype: Uint8ClampedArray; + new(length: number): Uint8ClampedArray; + new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Uint8ClampedArray; + new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Uint8ClampedArray; + + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * Returns a new array from a set of elements. + * @param items A set of elements to include in the new array object. + */ + of(...items: number[]): Uint8ClampedArray; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Uint8ClampedArray; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8ClampedArray; +} +declare var Uint8ClampedArray: Uint8ClampedArrayConstructor; + +/** + * A typed array of 16-bit signed integer values. The contents are initialized to 0. If the + * requested number of bytes could not be allocated an exception is raised. + */ +interface Int16Array { + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * The ArrayBuffer instance referenced by the array. + */ + readonly buffer: ArrayBufferLike; + + /** + * The length in bytes of the array. + */ + readonly byteLength: number; + + /** + * The offset in bytes of the array. + */ + readonly byteOffset: number; + + /** + * Returns the this object after copying a section of the array identified by start and end + * to the same array starting at position target + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it + * is treated as length+end. + * @param end If not specified, length of the this object is used as its default value. + */ + copyWithin(target: number, start: number, end?: number): this; + + /** + * Determines whether all the members of an array satisfy the specified test. + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, + * or until the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + every(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): boolean; + + /** + * Returns the this object after filling the section identified by start and end with value + * @param value value to fill array section with + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as + * length+end. + */ + fill(value: number, start?: number, end?: number): this; + + /** + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + filter(callbackfn: (value: number, index: number, array: Int16Array) => any, thisArg?: any): Int16Array; + + /** + * Returns the value of the first element in the array where predicate is true, and undefined + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find + * immediately returns that element value. Otherwise, find returns undefined. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + find(predicate: (value: number, index: number, obj: Int16Array) => boolean, thisArg?: any): number | undefined; + + /** + * Returns the index of the first element in the array where predicate is true, and -1 + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + findIndex(predicate: (value: number, index: number, obj: Int16Array) => boolean, thisArg?: any): number; + + /** + * Performs the specified action for each element in an array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + forEach(callbackfn: (value: number, index: number, array: Int16Array) => void, thisArg?: any): void; + /** + * Returns the index of the first occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + indexOf(searchElement: number, fromIndex?: number): number; + + /** + * Adds all the elements of an array separated by the specified separator string. + * @param separator A string used to separate one element of an array from the next in the + * resulting String. If omitted, the array elements are separated with a comma. + */ + join(separator?: string): string; + + /** + * Returns the index of the last occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + lastIndexOf(searchElement: number, fromIndex?: number): number; + + /** + * The length of the array. + */ + readonly length: number; + + /** + * Calls a defined callback function on each element of an array, and returns an array that + * contains the results. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + map(callbackfn: (value: number, index: number, array: Int16Array) => number, thisArg?: any): Int16Array; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number): number; + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U): U; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an + * argument instead of an array value. + */ + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number): number; + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U): U; + + /** + * Reverses the elements in an Array. + */ + reverse(): Int16Array; + + /** + * Sets a value or an array of values. + * @param array A typed or untyped array of values to set. + * @param offset The index in the current array at which the values are to be written. + */ + set(array: ArrayLike, offset?: number): void; + + /** + * Returns a section of an array. + * @param start The beginning of the specified portion of the array. + * @param end The end of the specified portion of the array. + */ + slice(start?: number, end?: number): Int16Array; + + /** + * Determines whether the specified callback function returns true for any element of an array. + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until + * the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + some(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): boolean; + + /** + * Sorts an array. + * @param compareFn The name of the function used to determine the order of the elements. If + * omitted, the elements are sorted in ascending, ASCII character order. + */ + sort(compareFn?: (a: number, b: number) => number): this; + + /** + * Gets a new Int16Array view of the ArrayBuffer store for this array, referencing the elements + * at begin, inclusive, up to end, exclusive. + * @param begin The index of the beginning of the array. + * @param end The index of the end of the array. + */ + subarray(begin: number, end?: number): Int16Array; + + /** + * Converts a number to a string by using the current locale. + */ + toLocaleString(): string; + + /** + * Returns a string representation of an array. + */ + toString(): string; + + [index: number]: number; +} + +interface Int16ArrayConstructor { + readonly prototype: Int16Array; + new(length: number): Int16Array; + new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Int16Array; + new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Int16Array; + + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * Returns a new array from a set of elements. + * @param items A set of elements to include in the new array object. + */ + of(...items: number[]): Int16Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Int16Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array; + + +} +declare var Int16Array: Int16ArrayConstructor; + +/** + * A typed array of 16-bit unsigned integer values. The contents are initialized to 0. If the + * requested number of bytes could not be allocated an exception is raised. + */ +interface Uint16Array { + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * The ArrayBuffer instance referenced by the array. + */ + readonly buffer: ArrayBufferLike; + + /** + * The length in bytes of the array. + */ + readonly byteLength: number; + + /** + * The offset in bytes of the array. + */ + readonly byteOffset: number; + + /** + * Returns the this object after copying a section of the array identified by start and end + * to the same array starting at position target + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it + * is treated as length+end. + * @param end If not specified, length of the this object is used as its default value. + */ + copyWithin(target: number, start: number, end?: number): this; + + /** + * Determines whether all the members of an array satisfy the specified test. + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, + * or until the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + every(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): boolean; + + /** + * Returns the this object after filling the section identified by start and end with value + * @param value value to fill array section with + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as + * length+end. + */ + fill(value: number, start?: number, end?: number): this; + + /** + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + filter(callbackfn: (value: number, index: number, array: Uint16Array) => any, thisArg?: any): Uint16Array; + + /** + * Returns the value of the first element in the array where predicate is true, and undefined + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find + * immediately returns that element value. Otherwise, find returns undefined. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + find(predicate: (value: number, index: number, obj: Uint16Array) => boolean, thisArg?: any): number | undefined; + + /** + * Returns the index of the first element in the array where predicate is true, and -1 + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + findIndex(predicate: (value: number, index: number, obj: Uint16Array) => boolean, thisArg?: any): number; + + /** + * Performs the specified action for each element in an array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + forEach(callbackfn: (value: number, index: number, array: Uint16Array) => void, thisArg?: any): void; + + /** + * Returns the index of the first occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + indexOf(searchElement: number, fromIndex?: number): number; + + /** + * Adds all the elements of an array separated by the specified separator string. + * @param separator A string used to separate one element of an array from the next in the + * resulting String. If omitted, the array elements are separated with a comma. + */ + join(separator?: string): string; + + /** + * Returns the index of the last occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + lastIndexOf(searchElement: number, fromIndex?: number): number; + + /** + * The length of the array. + */ + readonly length: number; + + /** + * Calls a defined callback function on each element of an array, and returns an array that + * contains the results. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + map(callbackfn: (value: number, index: number, array: Uint16Array) => number, thisArg?: any): Uint16Array; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number): number; + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U): U; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an + * argument instead of an array value. + */ + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number): number; + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U): U; + + /** + * Reverses the elements in an Array. + */ + reverse(): Uint16Array; + + /** + * Sets a value or an array of values. + * @param array A typed or untyped array of values to set. + * @param offset The index in the current array at which the values are to be written. + */ + set(array: ArrayLike, offset?: number): void; + + /** + * Returns a section of an array. + * @param start The beginning of the specified portion of the array. + * @param end The end of the specified portion of the array. + */ + slice(start?: number, end?: number): Uint16Array; + + /** + * Determines whether the specified callback function returns true for any element of an array. + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until + * the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + some(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): boolean; + + /** + * Sorts an array. + * @param compareFn The name of the function used to determine the order of the elements. If + * omitted, the elements are sorted in ascending, ASCII character order. + */ + sort(compareFn?: (a: number, b: number) => number): this; + + /** + * Gets a new Uint16Array view of the ArrayBuffer store for this array, referencing the elements + * at begin, inclusive, up to end, exclusive. + * @param begin The index of the beginning of the array. + * @param end The index of the end of the array. + */ + subarray(begin: number, end?: number): Uint16Array; + + /** + * Converts a number to a string by using the current locale. + */ + toLocaleString(): string; + + /** + * Returns a string representation of an array. + */ + toString(): string; + + [index: number]: number; +} + +interface Uint16ArrayConstructor { + readonly prototype: Uint16Array; + new(length: number): Uint16Array; + new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Uint16Array; + new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Uint16Array; + + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * Returns a new array from a set of elements. + * @param items A set of elements to include in the new array object. + */ + of(...items: number[]): Uint16Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Uint16Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array; + + +} +declare var Uint16Array: Uint16ArrayConstructor; +/** + * A typed array of 32-bit signed integer values. The contents are initialized to 0. If the + * requested number of bytes could not be allocated an exception is raised. + */ +interface Int32Array { + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * The ArrayBuffer instance referenced by the array. + */ + readonly buffer: ArrayBufferLike; + + /** + * The length in bytes of the array. + */ + readonly byteLength: number; + + /** + * The offset in bytes of the array. + */ + readonly byteOffset: number; + + /** + * Returns the this object after copying a section of the array identified by start and end + * to the same array starting at position target + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it + * is treated as length+end. + * @param end If not specified, length of the this object is used as its default value. + */ + copyWithin(target: number, start: number, end?: number): this; + + /** + * Determines whether all the members of an array satisfy the specified test. + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, + * or until the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + every(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): boolean; + + /** + * Returns the this object after filling the section identified by start and end with value + * @param value value to fill array section with + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as + * length+end. + */ + fill(value: number, start?: number, end?: number): this; + + /** + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + filter(callbackfn: (value: number, index: number, array: Int32Array) => any, thisArg?: any): Int32Array; + + /** + * Returns the value of the first element in the array where predicate is true, and undefined + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find + * immediately returns that element value. Otherwise, find returns undefined. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + find(predicate: (value: number, index: number, obj: Int32Array) => boolean, thisArg?: any): number | undefined; + + /** + * Returns the index of the first element in the array where predicate is true, and -1 + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + findIndex(predicate: (value: number, index: number, obj: Int32Array) => boolean, thisArg?: any): number; + + /** + * Performs the specified action for each element in an array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + forEach(callbackfn: (value: number, index: number, array: Int32Array) => void, thisArg?: any): void; + + /** + * Returns the index of the first occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + indexOf(searchElement: number, fromIndex?: number): number; + + /** + * Adds all the elements of an array separated by the specified separator string. + * @param separator A string used to separate one element of an array from the next in the + * resulting String. If omitted, the array elements are separated with a comma. + */ + join(separator?: string): string; + + /** + * Returns the index of the last occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + lastIndexOf(searchElement: number, fromIndex?: number): number; + + /** + * The length of the array. + */ + readonly length: number; + + /** + * Calls a defined callback function on each element of an array, and returns an array that + * contains the results. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + map(callbackfn: (value: number, index: number, array: Int32Array) => number, thisArg?: any): Int32Array; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number): number; + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U): U; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an + * argument instead of an array value. + */ + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number): number; + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U): U; + + /** + * Reverses the elements in an Array. + */ + reverse(): Int32Array; + + /** + * Sets a value or an array of values. + * @param array A typed or untyped array of values to set. + * @param offset The index in the current array at which the values are to be written. + */ + set(array: ArrayLike, offset?: number): void; + + /** + * Returns a section of an array. + * @param start The beginning of the specified portion of the array. + * @param end The end of the specified portion of the array. + */ + slice(start?: number, end?: number): Int32Array; + + /** + * Determines whether the specified callback function returns true for any element of an array. + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until + * the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + some(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): boolean; + + /** + * Sorts an array. + * @param compareFn The name of the function used to determine the order of the elements. If + * omitted, the elements are sorted in ascending, ASCII character order. + */ + sort(compareFn?: (a: number, b: number) => number): this; + + /** + * Gets a new Int32Array view of the ArrayBuffer store for this array, referencing the elements + * at begin, inclusive, up to end, exclusive. + * @param begin The index of the beginning of the array. + * @param end The index of the end of the array. + */ + subarray(begin: number, end?: number): Int32Array; + + /** + * Converts a number to a string by using the current locale. + */ + toLocaleString(): string; + + /** + * Returns a string representation of an array. + */ + toString(): string; + + [index: number]: number; +} + +interface Int32ArrayConstructor { + readonly prototype: Int32Array; + new(length: number): Int32Array; + new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Int32Array; + new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Int32Array; + + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * Returns a new array from a set of elements. + * @param items A set of elements to include in the new array object. + */ + of(...items: number[]): Int32Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Int32Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array; + +} +declare var Int32Array: Int32ArrayConstructor; + +/** + * A typed array of 32-bit unsigned integer values. The contents are initialized to 0. If the + * requested number of bytes could not be allocated an exception is raised. + */ +interface Uint32Array { + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * The ArrayBuffer instance referenced by the array. + */ + readonly buffer: ArrayBufferLike; + + /** + * The length in bytes of the array. + */ + readonly byteLength: number; + + /** + * The offset in bytes of the array. + */ + readonly byteOffset: number; + + /** + * Returns the this object after copying a section of the array identified by start and end + * to the same array starting at position target + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it + * is treated as length+end. + * @param end If not specified, length of the this object is used as its default value. + */ + copyWithin(target: number, start: number, end?: number): this; + + /** + * Determines whether all the members of an array satisfy the specified test. + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, + * or until the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + every(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): boolean; + + /** + * Returns the this object after filling the section identified by start and end with value + * @param value value to fill array section with + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as + * length+end. + */ + fill(value: number, start?: number, end?: number): this; + + /** + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + filter(callbackfn: (value: number, index: number, array: Uint32Array) => any, thisArg?: any): Uint32Array; + + /** + * Returns the value of the first element in the array where predicate is true, and undefined + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find + * immediately returns that element value. Otherwise, find returns undefined. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + find(predicate: (value: number, index: number, obj: Uint32Array) => boolean, thisArg?: any): number | undefined; + + /** + * Returns the index of the first element in the array where predicate is true, and -1 + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + findIndex(predicate: (value: number, index: number, obj: Uint32Array) => boolean, thisArg?: any): number; + + /** + * Performs the specified action for each element in an array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + forEach(callbackfn: (value: number, index: number, array: Uint32Array) => void, thisArg?: any): void; + /** + * Returns the index of the first occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + indexOf(searchElement: number, fromIndex?: number): number; + + /** + * Adds all the elements of an array separated by the specified separator string. + * @param separator A string used to separate one element of an array from the next in the + * resulting String. If omitted, the array elements are separated with a comma. + */ + join(separator?: string): string; + + /** + * Returns the index of the last occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + lastIndexOf(searchElement: number, fromIndex?: number): number; + + /** + * The length of the array. + */ + readonly length: number; + + /** + * Calls a defined callback function on each element of an array, and returns an array that + * contains the results. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + map(callbackfn: (value: number, index: number, array: Uint32Array) => number, thisArg?: any): Uint32Array; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number): number; + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U): U; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an + * argument instead of an array value. + */ + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number): number; + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U): U; + + /** + * Reverses the elements in an Array. + */ + reverse(): Uint32Array; + + /** + * Sets a value or an array of values. + * @param array A typed or untyped array of values to set. + * @param offset The index in the current array at which the values are to be written. + */ + set(array: ArrayLike, offset?: number): void; + + /** + * Returns a section of an array. + * @param start The beginning of the specified portion of the array. + * @param end The end of the specified portion of the array. + */ + slice(start?: number, end?: number): Uint32Array; + + /** + * Determines whether the specified callback function returns true for any element of an array. + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until + * the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + some(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): boolean; + + /** + * Sorts an array. + * @param compareFn The name of the function used to determine the order of the elements. If + * omitted, the elements are sorted in ascending, ASCII character order. + */ + sort(compareFn?: (a: number, b: number) => number): this; + + /** + * Gets a new Uint32Array view of the ArrayBuffer store for this array, referencing the elements + * at begin, inclusive, up to end, exclusive. + * @param begin The index of the beginning of the array. + * @param end The index of the end of the array. + */ + subarray(begin: number, end?: number): Uint32Array; + + /** + * Converts a number to a string by using the current locale. + */ + toLocaleString(): string; + + /** + * Returns a string representation of an array. + */ + toString(): string; + + [index: number]: number; +} + +interface Uint32ArrayConstructor { + readonly prototype: Uint32Array; + new(length: number): Uint32Array; + new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Uint32Array; + new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Uint32Array; + + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * Returns a new array from a set of elements. + * @param items A set of elements to include in the new array object. + */ + of(...items: number[]): Uint32Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Uint32Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array; + +} +declare var Uint32Array: Uint32ArrayConstructor; + +/** + * A typed array of 32-bit float values. The contents are initialized to 0. If the requested number + * of bytes could not be allocated an exception is raised. + */ +interface Float32Array { + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * The ArrayBuffer instance referenced by the array. + */ + readonly buffer: ArrayBufferLike; + + /** + * The length in bytes of the array. + */ + readonly byteLength: number; + + /** + * The offset in bytes of the array. + */ + readonly byteOffset: number; + + /** + * Returns the this object after copying a section of the array identified by start and end + * to the same array starting at position target + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it + * is treated as length+end. + * @param end If not specified, length of the this object is used as its default value. + */ + copyWithin(target: number, start: number, end?: number): this; + + /** + * Determines whether all the members of an array satisfy the specified test. + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, + * or until the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + every(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): boolean; + + /** + * Returns the this object after filling the section identified by start and end with value + * @param value value to fill array section with + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as + * length+end. + */ + fill(value: number, start?: number, end?: number): this; + + /** + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + filter(callbackfn: (value: number, index: number, array: Float32Array) => any, thisArg?: any): Float32Array; + + /** + * Returns the value of the first element in the array where predicate is true, and undefined + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find + * immediately returns that element value. Otherwise, find returns undefined. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + find(predicate: (value: number, index: number, obj: Float32Array) => boolean, thisArg?: any): number | undefined; + + /** + * Returns the index of the first element in the array where predicate is true, and -1 + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + findIndex(predicate: (value: number, index: number, obj: Float32Array) => boolean, thisArg?: any): number; + + /** + * Performs the specified action for each element in an array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + forEach(callbackfn: (value: number, index: number, array: Float32Array) => void, thisArg?: any): void; + + /** + * Returns the index of the first occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + indexOf(searchElement: number, fromIndex?: number): number; + + /** + * Adds all the elements of an array separated by the specified separator string. + * @param separator A string used to separate one element of an array from the next in the + * resulting String. If omitted, the array elements are separated with a comma. + */ + join(separator?: string): string; + + /** + * Returns the index of the last occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + lastIndexOf(searchElement: number, fromIndex?: number): number; + + /** + * The length of the array. + */ + readonly length: number; + + /** + * Calls a defined callback function on each element of an array, and returns an array that + * contains the results. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + map(callbackfn: (value: number, index: number, array: Float32Array) => number, thisArg?: any): Float32Array; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number): number; + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U): U; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an + * argument instead of an array value. + */ + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number): number; + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U): U; + + /** + * Reverses the elements in an Array. + */ + reverse(): Float32Array; + + /** + * Sets a value or an array of values. + * @param array A typed or untyped array of values to set. + * @param offset The index in the current array at which the values are to be written. + */ + set(array: ArrayLike, offset?: number): void; + + /** + * Returns a section of an array. + * @param start The beginning of the specified portion of the array. + * @param end The end of the specified portion of the array. + */ + slice(start?: number, end?: number): Float32Array; + + /** + * Determines whether the specified callback function returns true for any element of an array. + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until + * the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + some(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): boolean; + + /** + * Sorts an array. + * @param compareFn The name of the function used to determine the order of the elements. If + * omitted, the elements are sorted in ascending, ASCII character order. + */ + sort(compareFn?: (a: number, b: number) => number): this; + + /** + * Gets a new Float32Array view of the ArrayBuffer store for this array, referencing the elements + * at begin, inclusive, up to end, exclusive. + * @param begin The index of the beginning of the array. + * @param end The index of the end of the array. + */ + subarray(begin: number, end?: number): Float32Array; + + /** + * Converts a number to a string by using the current locale. + */ + toLocaleString(): string; + + /** + * Returns a string representation of an array. + */ + toString(): string; + + [index: number]: number; +} + +interface Float32ArrayConstructor { + readonly prototype: Float32Array; + new(length: number): Float32Array; + new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Float32Array; + new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Float32Array; + + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * Returns a new array from a set of elements. + * @param items A set of elements to include in the new array object. + */ + of(...items: number[]): Float32Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Float32Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array; + + +} +declare var Float32Array: Float32ArrayConstructor; + +/** + * A typed array of 64-bit float values. The contents are initialized to 0. If the requested + * number of bytes could not be allocated an exception is raised. + */ +interface Float64Array { + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * The ArrayBuffer instance referenced by the array. + */ + readonly buffer: ArrayBufferLike; + + /** + * The length in bytes of the array. + */ + readonly byteLength: number; + + /** + * The offset in bytes of the array. + */ + readonly byteOffset: number; + + /** + * Returns the this object after copying a section of the array identified by start and end + * to the same array starting at position target + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it + * is treated as length+end. + * @param end If not specified, length of the this object is used as its default value. + */ + copyWithin(target: number, start: number, end?: number): this; + + /** + * Determines whether all the members of an array satisfy the specified test. + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, + * or until the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + every(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): boolean; + + /** + * Returns the this object after filling the section identified by start and end with value + * @param value value to fill array section with + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as + * length+end. + */ + fill(value: number, start?: number, end?: number): this; + + /** + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + filter(callbackfn: (value: number, index: number, array: Float64Array) => any, thisArg?: any): Float64Array; + + /** + * Returns the value of the first element in the array where predicate is true, and undefined + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find + * immediately returns that element value. Otherwise, find returns undefined. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + find(predicate: (value: number, index: number, obj: Float64Array) => boolean, thisArg?: any): number | undefined; + + /** + * Returns the index of the first element in the array where predicate is true, and -1 + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + findIndex(predicate: (value: number, index: number, obj: Float64Array) => boolean, thisArg?: any): number; + + /** + * Performs the specified action for each element in an array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + forEach(callbackfn: (value: number, index: number, array: Float64Array) => void, thisArg?: any): void; + + /** + * Returns the index of the first occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + indexOf(searchElement: number, fromIndex?: number): number; + + /** + * Adds all the elements of an array separated by the specified separator string. + * @param separator A string used to separate one element of an array from the next in the + * resulting String. If omitted, the array elements are separated with a comma. + */ + join(separator?: string): string; + + /** + * Returns the index of the last occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + lastIndexOf(searchElement: number, fromIndex?: number): number; + + /** + * The length of the array. + */ + readonly length: number; + + /** + * Calls a defined callback function on each element of an array, and returns an array that + * contains the results. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + map(callbackfn: (value: number, index: number, array: Float64Array) => number, thisArg?: any): Float64Array; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number): number; + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U): U; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an + * argument instead of an array value. + */ + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number): number; + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U): U; + + /** + * Reverses the elements in an Array. + */ + reverse(): Float64Array; + + /** + * Sets a value or an array of values. + * @param array A typed or untyped array of values to set. + * @param offset The index in the current array at which the values are to be written. + */ + set(array: ArrayLike, offset?: number): void; + + /** + * Returns a section of an array. + * @param start The beginning of the specified portion of the array. + * @param end The end of the specified portion of the array. + */ + slice(start?: number, end?: number): Float64Array; + + /** + * Determines whether the specified callback function returns true for any element of an array. + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until + * the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + some(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): boolean; + + /** + * Sorts an array. + * @param compareFn The name of the function used to determine the order of the elements. If + * omitted, the elements are sorted in ascending, ASCII character order. + */ + sort(compareFn?: (a: number, b: number) => number): this; + + /** + * Gets a new Float64Array view of the ArrayBuffer store for this array, referencing the elements + * at begin, inclusive, up to end, exclusive. + * @param begin The index of the beginning of the array. + * @param end The index of the end of the array. + */ + subarray(begin: number, end?: number): Float64Array; + + /** + * Converts a number to a string by using the current locale. + */ + toLocaleString(): string; + + /** + * Returns a string representation of an array. + */ + toString(): string; + + [index: number]: number; +} + +interface Float64ArrayConstructor { + readonly prototype: Float64Array; + new(length: number): Float64Array; + new(arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Float64Array; + new(buffer: ArrayBufferLike, byteOffset: number, length?: number): Float64Array; + + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * Returns a new array from a set of elements. + * @param items A set of elements to include in the new array object. + */ + of(...items: number[]): Float64Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Float64Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array; + +} +declare var Float64Array: Float64ArrayConstructor; + +///////////////////////////// +/// ECMAScript Internationalization API +///////////////////////////// + +declare namespace Intl { + interface CollatorOptions { + usage?: string; + localeMatcher?: string; + numeric?: boolean; + caseFirst?: string; + sensitivity?: string; + ignorePunctuation?: boolean; + } + + interface ResolvedCollatorOptions { + locale: string; + usage: string; + sensitivity: string; + ignorePunctuation: boolean; + collation: string; + caseFirst: string; + numeric: boolean; + } + + interface Collator { + compare(x: string, y: string): number; + resolvedOptions(): ResolvedCollatorOptions; + } + var Collator: { + new(locales?: string | string[], options?: CollatorOptions): Collator; + (locales?: string | string[], options?: CollatorOptions): Collator; + supportedLocalesOf(locales: string | string[], options?: CollatorOptions): string[]; + }; + + interface NumberFormatOptions { + localeMatcher?: string; + style?: string; + currency?: string; + currencyDisplay?: string; + useGrouping?: boolean; + minimumIntegerDigits?: number; + minimumFractionDigits?: number; + maximumFractionDigits?: number; + minimumSignificantDigits?: number; + maximumSignificantDigits?: number; + } + + interface ResolvedNumberFormatOptions { + locale: string; + numberingSystem: string; + style: string; + currency?: string; + currencyDisplay?: string; + minimumIntegerDigits: number; + minimumFractionDigits: number; + maximumFractionDigits: number; + minimumSignificantDigits?: number; + maximumSignificantDigits?: number; + useGrouping: boolean; + } + + interface NumberFormat { + format(value: number): string; + resolvedOptions(): ResolvedNumberFormatOptions; + } + var NumberFormat: { + new(locales?: string | string[], options?: NumberFormatOptions): NumberFormat; + (locales?: string | string[], options?: NumberFormatOptions): NumberFormat; + supportedLocalesOf(locales: string | string[], options?: NumberFormatOptions): string[]; + }; + + interface DateTimeFormatOptions { + localeMatcher?: string; + weekday?: string; + era?: string; + year?: string; + month?: string; + day?: string; + hour?: string; + minute?: string; + second?: string; + timeZoneName?: string; + formatMatcher?: string; + hour12?: boolean; + timeZone?: string; + } + + interface ResolvedDateTimeFormatOptions { + locale: string; + calendar: string; + numberingSystem: string; + timeZone: string; + hour12?: boolean; + weekday?: string; + era?: string; + year?: string; + month?: string; + day?: string; + hour?: string; + minute?: string; + second?: string; + timeZoneName?: string; + } + + interface DateTimeFormat { + format(date?: Date | number): string; + resolvedOptions(): ResolvedDateTimeFormatOptions; + } + var DateTimeFormat: { + new(locales?: string | string[], options?: DateTimeFormatOptions): DateTimeFormat; + (locales?: string | string[], options?: DateTimeFormatOptions): DateTimeFormat; + supportedLocalesOf(locales: string | string[], options?: DateTimeFormatOptions): string[]; + }; +} + +interface String { + /** + * Determines whether two strings are equivalent in the current or specified locale. + * @param that String to compare to target string + * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. This parameter must conform to BCP 47 standards; see the Intl.Collator object for details. + * @param options An object that contains one or more properties that specify comparison options. see the Intl.Collator object for details. + */ + localeCompare(that: string, locales?: string | string[], options?: Intl.CollatorOptions): number; +} + +interface Number { + /** + * Converts a number to a string by using the current or specified locale. + * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. + * @param options An object that contains one or more properties that specify comparison options. + */ + toLocaleString(locales?: string | string[], options?: Intl.NumberFormatOptions): string; +} + +interface Date { + /** + * Converts a date and time to a string by using the current or specified locale. + * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. + * @param options An object that contains one or more properties that specify comparison options. + */ + toLocaleString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string; + /** + * Converts a date to a string by using the current or specified locale. + * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. + * @param options An object that contains one or more properties that specify comparison options. + */ + toLocaleDateString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string; + + /** + * Converts a time to a string by using the current or specified locale. + * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. + * @param options An object that contains one or more properties that specify comparison options. + */ + toLocaleTimeString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string; +} diff --git a/node_modules/typescript/lib/lib.es6.d.ts b/node_modules/typescript/lib/lib.es6.d.ts index 6149c4a2..f2ebe020 100644 --- a/node_modules/typescript/lib/lib.es6.d.ts +++ b/node_modules/typescript/lib/lib.es6.d.ts @@ -15,11 +15,11 @@ and limitations under the License. -/// +/// -/// -/// -/// -/// -/// +/// +/// +/// +/// +/// diff --git a/node_modules/typescript/lib/lib.esnext.bigint.d.ts b/node_modules/typescript/lib/lib.esnext.bigint.d.ts index 50967de9..ae6711a4 100644 --- a/node_modules/typescript/lib/lib.esnext.bigint.d.ts +++ b/node_modules/typescript/lib/lib.esnext.bigint.d.ts @@ -15,615 +15,615 @@ and limitations under the License. -/// - - -interface BigInt { - /** - * Returns a string representation of an object. - * @param radix Specifies a radix for converting numeric values to strings. - */ - toString(radix?: number): string; - - /** Returns a string representation appropriate to the host environment's current locale. */ - toLocaleString(): string; - - /** Returns the primitive value of the specified object. */ - valueOf(): bigint; - - readonly [Symbol.toStringTag]: "BigInt"; -} - -interface BigIntConstructor { - (value?: any): bigint; - readonly prototype: BigInt; - - /** - * Interprets the low bits of a BigInt as a 2's-complement signed integer. - * All higher bits are discarded. - * @param bits The number of low bits to use - * @param int The BigInt whose bits to extract - */ - asIntN(bits: number, int: bigint): bigint; - /** - * Interprets the low bits of a BigInt as an unsigned integer. - * All higher bits are discarded. - * @param bits The number of low bits to use - * @param int The BigInt whose bits to extract - */ - asUintN(bits: number, int: bigint): bigint; -} - -declare var BigInt: BigIntConstructor; - -/** - * A typed array of 64-bit signed integer values. The contents are initialized to 0. If the - * requested number of bytes could not be allocated, an exception is raised. - */ -interface BigInt64Array { - /** The size in bytes of each element in the array. */ - readonly BYTES_PER_ELEMENT: number; - - /** The ArrayBuffer instance referenced by the array. */ - readonly buffer: ArrayBufferLike; - - /** The length in bytes of the array. */ - readonly byteLength: number; - - /** The offset in bytes of the array. */ - readonly byteOffset: number; - - /** - * Returns the this object after copying a section of the array identified by start and end - * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it - * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. - */ - copyWithin(target: number, start: number, end?: number): this; - - /** Yields index, value pairs for every entry in the array. */ - entries(): IterableIterator<[number, bigint]>; - - /** - * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in the array until the callbackfn returns false, - * or until the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - every(callbackfn: (value: bigint, index: number, array: BigInt64Array) => boolean, thisArg?: any): boolean; - - /** - * Returns the this object after filling the section identified by start and end with value - * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as - * length+end. - */ - fill(value: bigint, start?: number, end?: number): this; - - /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - filter(callbackfn: (value: bigint, index: number, array: BigInt64Array) => any, thisArg?: any): BigInt64Array; - - /** - * Returns the value of the first element in the array where predicate is true, and undefined - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - find(predicate: (value: bigint, index: number, array: BigInt64Array) => boolean, thisArg?: any): bigint | undefined; - - /** - * Returns the index of the first element in the array where predicate is true, and -1 - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, - * findIndex immediately returns that element index. Otherwise, findIndex returns -1. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - findIndex(predicate: (value: bigint, index: number, array: BigInt64Array) => boolean, thisArg?: any): number; - - /** - * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - forEach(callbackfn: (value: bigint, index: number, array: BigInt64Array) => void, thisArg?: any): void; - - /** - * Determines whether an array includes a certain element, returning true or false as appropriate. - * @param searchElement The element to search for. - * @param fromIndex The position in this array at which to begin searching for searchElement. - */ - includes(searchElement: bigint, fromIndex?: number): boolean; - - /** - * Returns the index of the first occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - indexOf(searchElement: bigint, fromIndex?: number): number; - - /** - * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the - * resulting String. If omitted, the array elements are separated with a comma. - */ - join(separator?: string): string; - - /** Yields each index in the array. */ - keys(): IterableIterator; - - /** - * Returns the index of the last occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - lastIndexOf(searchElement: bigint, fromIndex?: number): number; - - /** The length of the array. */ - readonly length: number; - - /** - * Calls a defined callback function on each element of an array, and returns an array that - * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - map(callbackfn: (value: bigint, index: number, array: BigInt64Array) => bigint, thisArg?: any): BigInt64Array; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: bigint, currentValue: bigint, currentIndex: number, array: BigInt64Array) => bigint): bigint; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: U, currentValue: bigint, currentIndex: number, array: BigInt64Array) => U, initialValue: U): U; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an - * argument instead of an array value. - */ - reduceRight(callbackfn: (previousValue: bigint, currentValue: bigint, currentIndex: number, array: BigInt64Array) => bigint): bigint; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduceRight(callbackfn: (previousValue: U, currentValue: bigint, currentIndex: number, array: BigInt64Array) => U, initialValue: U): U; - - /** Reverses the elements in the array. */ - reverse(): this; - - /** - * Sets a value or an array of values. - * @param array A typed or untyped array of values to set. - * @param offset The index in the current array at which the values are to be written. - */ - set(array: ArrayLike, offset?: number): void; - - /** - * Returns a section of an array. - * @param start The beginning of the specified portion of the array. - * @param end The end of the specified portion of the array. - */ - slice(start?: number, end?: number): BigInt64Array; - - /** - * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in the array until the callbackfn returns true, or until - * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - some(callbackfn: (value: bigint, index: number, array: BigInt64Array) => boolean, thisArg?: any): boolean; - - /** - * Sorts the array. - * @param compareFn The function used to determine the order of the elements. If omitted, the elements are sorted in ascending order. - */ - sort(compareFn?: (a: bigint, b: bigint) => number | bigint): this; - - /** - * Gets a new BigInt64Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. - * @param begin The index of the beginning of the array. - * @param end The index of the end of the array. - */ - subarray(begin: number, end?: number): BigInt64Array; - - /** Converts the array to a string by using the current locale. */ - toLocaleString(): string; - - /** Returns a string representation of the array. */ - toString(): string; - - /** Yields each value in the array. */ - values(): IterableIterator; - - [Symbol.iterator](): IterableIterator; - - readonly [Symbol.toStringTag]: "BigInt64Array"; - - [index: number]: bigint; -} - -interface BigInt64ArrayConstructor { - readonly prototype: BigInt64Array; - new(length?: number): BigInt64Array; - new(array: Iterable): BigInt64Array; - new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): BigInt64Array; - - /** The size in bytes of each element in the array. */ - readonly BYTES_PER_ELEMENT: number; - - /** - * Returns a new array from a set of elements. - * @param items A set of elements to include in the new array object. - */ - of(...items: bigint[]): BigInt64Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: ArrayLike): BigInt64Array; - from(arrayLike: ArrayLike, mapfn: (v: U, k: number) => bigint, thisArg?: any): BigInt64Array; -} - -declare var BigInt64Array: BigInt64ArrayConstructor; - -/** - * A typed array of 64-bit unsigned integer values. The contents are initialized to 0. If the - * requested number of bytes could not be allocated, an exception is raised. - */ -interface BigUint64Array { - /** The size in bytes of each element in the array. */ - readonly BYTES_PER_ELEMENT: number; - - /** The ArrayBuffer instance referenced by the array. */ - readonly buffer: ArrayBufferLike; - - /** The length in bytes of the array. */ - readonly byteLength: number; - - /** The offset in bytes of the array. */ - readonly byteOffset: number; - - /** - * Returns the this object after copying a section of the array identified by start and end - * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it - * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. - */ - copyWithin(target: number, start: number, end?: number): this; - - /** Yields index, value pairs for every entry in the array. */ - entries(): IterableIterator<[number, bigint]>; - - /** - * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in the array until the callbackfn returns false, - * or until the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - every(callbackfn: (value: bigint, index: number, array: BigUint64Array) => boolean, thisArg?: any): boolean; - - /** - * Returns the this object after filling the section identified by start and end with value - * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as - * length+end. - */ - fill(value: bigint, start?: number, end?: number): this; - - /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - filter(callbackfn: (value: bigint, index: number, array: BigUint64Array) => any, thisArg?: any): BigUint64Array; - - /** - * Returns the value of the first element in the array where predicate is true, and undefined - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - find(predicate: (value: bigint, index: number, array: BigUint64Array) => boolean, thisArg?: any): bigint | undefined; - - /** - * Returns the index of the first element in the array where predicate is true, and -1 - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, - * findIndex immediately returns that element index. Otherwise, findIndex returns -1. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - findIndex(predicate: (value: bigint, index: number, array: BigUint64Array) => boolean, thisArg?: any): number; - - /** - * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - forEach(callbackfn: (value: bigint, index: number, array: BigUint64Array) => void, thisArg?: any): void; - - /** - * Determines whether an array includes a certain element, returning true or false as appropriate. - * @param searchElement The element to search for. - * @param fromIndex The position in this array at which to begin searching for searchElement. - */ - includes(searchElement: bigint, fromIndex?: number): boolean; - - /** - * Returns the index of the first occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - indexOf(searchElement: bigint, fromIndex?: number): number; - - /** - * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the - * resulting String. If omitted, the array elements are separated with a comma. - */ - join(separator?: string): string; - - /** Yields each index in the array. */ - keys(): IterableIterator; - - /** - * Returns the index of the last occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the - * search starts at index 0. - */ - lastIndexOf(searchElement: bigint, fromIndex?: number): number; - - /** The length of the array. */ - readonly length: number; - - /** - * Calls a defined callback function on each element of an array, and returns an array that - * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - map(callbackfn: (value: bigint, index: number, array: BigUint64Array) => bigint, thisArg?: any): BigUint64Array; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: bigint, currentValue: bigint, currentIndex: number, array: BigUint64Array) => bigint): bigint; - - /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next - * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the - * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduce(callbackfn: (previousValue: U, currentValue: bigint, currentIndex: number, array: BigUint64Array) => U, initialValue: U): U; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an - * argument instead of an array value. - */ - reduceRight(callbackfn: (previousValue: bigint, currentValue: bigint, currentIndex: number, array: BigUint64Array) => bigint): bigint; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an - * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument - * instead of an array value. - */ - reduceRight(callbackfn: (previousValue: U, currentValue: bigint, currentIndex: number, array: BigUint64Array) => U, initialValue: U): U; - - /** Reverses the elements in the array. */ - reverse(): this; - - /** - * Sets a value or an array of values. - * @param array A typed or untyped array of values to set. - * @param offset The index in the current array at which the values are to be written. - */ - set(array: ArrayLike, offset?: number): void; - - /** - * Returns a section of an array. - * @param start The beginning of the specified portion of the array. - * @param end The end of the specified portion of the array. - */ - slice(start?: number, end?: number): BigUint64Array; - - /** - * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in the array until the callbackfn returns true, or until - * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. - * If thisArg is omitted, undefined is used as the this value. - */ - some(callbackfn: (value: bigint, index: number, array: BigUint64Array) => boolean, thisArg?: any): boolean; - - /** - * Sorts the array. - * @param compareFn The function used to determine the order of the elements. If omitted, the elements are sorted in ascending order. - */ - sort(compareFn?: (a: bigint, b: bigint) => number | bigint): this; - - /** - * Gets a new BigUint64Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. - * @param begin The index of the beginning of the array. - * @param end The index of the end of the array. - */ - subarray(begin: number, end?: number): BigUint64Array; - - /** Converts the array to a string by using the current locale. */ - toLocaleString(): string; - - /** Returns a string representation of the array. */ - toString(): string; - - /** Yields each value in the array. */ - values(): IterableIterator; - - [Symbol.iterator](): IterableIterator; - - readonly [Symbol.toStringTag]: "BigUint64Array"; - - [index: number]: bigint; -} - -interface BigUint64ArrayConstructor { - readonly prototype: BigUint64Array; - new(length?: number): BigUint64Array; - new(array: Iterable): BigUint64Array; - new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): BigUint64Array; - - /** The size in bytes of each element in the array. */ - readonly BYTES_PER_ELEMENT: number; - - /** - * Returns a new array from a set of elements. - * @param items A set of elements to include in the new array object. - */ - of(...items: bigint[]): BigUint64Array; - - /** - * Creates an array from an array-like or iterable object. - * @param arrayLike An array-like or iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: ArrayLike): BigUint64Array; - from(arrayLike: ArrayLike, mapfn: (v: U, k: number) => bigint, thisArg?: any): BigUint64Array; -} - -declare var BigUint64Array: BigUint64ArrayConstructor; - -interface DataView { - /** - * Gets the BigInt64 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. - * @param byteOffset The place in the buffer at which the value should be retrieved. - */ - getBigInt64(byteOffset: number, littleEndian?: boolean): bigint; - - /** - * Gets the BigUint64 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. - * @param byteOffset The place in the buffer at which the value should be retrieved. - */ - getBigUint64(byteOffset: number, littleEndian?: boolean): bigint; - - /** - * Stores a BigInt64 value at the specified byte offset from the start of the view. - * @param byteOffset The place in the buffer at which the value should be set. - * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, - * otherwise a little-endian value should be written. - */ - setBigInt64(byteOffset: number, value: bigint, littleEndian?: boolean): void; - - /** - * Stores a BigUint64 value at the specified byte offset from the start of the view. - * @param byteOffset The place in the buffer at which the value should be set. - * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, - * otherwise a little-endian value should be written. - */ - setBigUint64(byteOffset: number, value: bigint, littleEndian?: boolean): void; -} +/// + + +interface BigInt { + /** + * Returns a string representation of an object. + * @param radix Specifies a radix for converting numeric values to strings. + */ + toString(radix?: number): string; + + /** Returns a string representation appropriate to the host environment's current locale. */ + toLocaleString(): string; + + /** Returns the primitive value of the specified object. */ + valueOf(): bigint; + + readonly [Symbol.toStringTag]: "BigInt"; +} + +interface BigIntConstructor { + (value?: any): bigint; + readonly prototype: BigInt; + + /** + * Interprets the low bits of a BigInt as a 2's-complement signed integer. + * All higher bits are discarded. + * @param bits The number of low bits to use + * @param int The BigInt whose bits to extract + */ + asIntN(bits: number, int: bigint): bigint; + /** + * Interprets the low bits of a BigInt as an unsigned integer. + * All higher bits are discarded. + * @param bits The number of low bits to use + * @param int The BigInt whose bits to extract + */ + asUintN(bits: number, int: bigint): bigint; +} + +declare var BigInt: BigIntConstructor; + +/** + * A typed array of 64-bit signed integer values. The contents are initialized to 0. If the + * requested number of bytes could not be allocated, an exception is raised. + */ +interface BigInt64Array { + /** The size in bytes of each element in the array. */ + readonly BYTES_PER_ELEMENT: number; + + /** The ArrayBuffer instance referenced by the array. */ + readonly buffer: ArrayBufferLike; + + /** The length in bytes of the array. */ + readonly byteLength: number; + + /** The offset in bytes of the array. */ + readonly byteOffset: number; + + /** + * Returns the this object after copying a section of the array identified by start and end + * to the same array starting at position target + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it + * is treated as length+end. + * @param end If not specified, length of the this object is used as its default value. + */ + copyWithin(target: number, start: number, end?: number): this; + + /** Yields index, value pairs for every entry in the array. */ + entries(): IterableIterator<[number, bigint]>; + + /** + * Determines whether all the members of an array satisfy the specified test. + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in the array until the callbackfn returns false, + * or until the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + every(callbackfn: (value: bigint, index: number, array: BigInt64Array) => boolean, thisArg?: any): boolean; + + /** + * Returns the this object after filling the section identified by start and end with value + * @param value value to fill array section with + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as + * length+end. + */ + fill(value: bigint, start?: number, end?: number): this; + + /** + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + filter(callbackfn: (value: bigint, index: number, array: BigInt64Array) => any, thisArg?: any): BigInt64Array; + + /** + * Returns the value of the first element in the array where predicate is true, and undefined + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find + * immediately returns that element value. Otherwise, find returns undefined. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + find(predicate: (value: bigint, index: number, array: BigInt64Array) => boolean, thisArg?: any): bigint | undefined; + + /** + * Returns the index of the first element in the array where predicate is true, and -1 + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + findIndex(predicate: (value: bigint, index: number, array: BigInt64Array) => boolean, thisArg?: any): number; + + /** + * Performs the specified action for each element in an array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + forEach(callbackfn: (value: bigint, index: number, array: BigInt64Array) => void, thisArg?: any): void; + + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: bigint, fromIndex?: number): boolean; + + /** + * Returns the index of the first occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + indexOf(searchElement: bigint, fromIndex?: number): number; + + /** + * Adds all the elements of an array separated by the specified separator string. + * @param separator A string used to separate one element of an array from the next in the + * resulting String. If omitted, the array elements are separated with a comma. + */ + join(separator?: string): string; + + /** Yields each index in the array. */ + keys(): IterableIterator; + + /** + * Returns the index of the last occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + lastIndexOf(searchElement: bigint, fromIndex?: number): number; + + /** The length of the array. */ + readonly length: number; + + /** + * Calls a defined callback function on each element of an array, and returns an array that + * contains the results. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + map(callbackfn: (value: bigint, index: number, array: BigInt64Array) => bigint, thisArg?: any): BigInt64Array; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: bigint, currentValue: bigint, currentIndex: number, array: BigInt64Array) => bigint): bigint; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: U, currentValue: bigint, currentIndex: number, array: BigInt64Array) => U, initialValue: U): U; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an + * argument instead of an array value. + */ + reduceRight(callbackfn: (previousValue: bigint, currentValue: bigint, currentIndex: number, array: BigInt64Array) => bigint): bigint; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduceRight(callbackfn: (previousValue: U, currentValue: bigint, currentIndex: number, array: BigInt64Array) => U, initialValue: U): U; + + /** Reverses the elements in the array. */ + reverse(): this; + + /** + * Sets a value or an array of values. + * @param array A typed or untyped array of values to set. + * @param offset The index in the current array at which the values are to be written. + */ + set(array: ArrayLike, offset?: number): void; + + /** + * Returns a section of an array. + * @param start The beginning of the specified portion of the array. + * @param end The end of the specified portion of the array. + */ + slice(start?: number, end?: number): BigInt64Array; + + /** + * Determines whether the specified callback function returns true for any element of an array. + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in the array until the callbackfn returns true, or until + * the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + some(callbackfn: (value: bigint, index: number, array: BigInt64Array) => boolean, thisArg?: any): boolean; + + /** + * Sorts the array. + * @param compareFn The function used to determine the order of the elements. If omitted, the elements are sorted in ascending order. + */ + sort(compareFn?: (a: bigint, b: bigint) => number | bigint): this; + + /** + * Gets a new BigInt64Array view of the ArrayBuffer store for this array, referencing the elements + * at begin, inclusive, up to end, exclusive. + * @param begin The index of the beginning of the array. + * @param end The index of the end of the array. + */ + subarray(begin: number, end?: number): BigInt64Array; + + /** Converts the array to a string by using the current locale. */ + toLocaleString(): string; + + /** Returns a string representation of the array. */ + toString(): string; + + /** Yields each value in the array. */ + values(): IterableIterator; + + [Symbol.iterator](): IterableIterator; + + readonly [Symbol.toStringTag]: "BigInt64Array"; + + [index: number]: bigint; +} + +interface BigInt64ArrayConstructor { + readonly prototype: BigInt64Array; + new(length?: number): BigInt64Array; + new(array: Iterable): BigInt64Array; + new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): BigInt64Array; + + /** The size in bytes of each element in the array. */ + readonly BYTES_PER_ELEMENT: number; + + /** + * Returns a new array from a set of elements. + * @param items A set of elements to include in the new array object. + */ + of(...items: bigint[]): BigInt64Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: ArrayLike): BigInt64Array; + from(arrayLike: ArrayLike, mapfn: (v: U, k: number) => bigint, thisArg?: any): BigInt64Array; +} + +declare var BigInt64Array: BigInt64ArrayConstructor; + +/** + * A typed array of 64-bit unsigned integer values. The contents are initialized to 0. If the + * requested number of bytes could not be allocated, an exception is raised. + */ +interface BigUint64Array { + /** The size in bytes of each element in the array. */ + readonly BYTES_PER_ELEMENT: number; + + /** The ArrayBuffer instance referenced by the array. */ + readonly buffer: ArrayBufferLike; + + /** The length in bytes of the array. */ + readonly byteLength: number; + + /** The offset in bytes of the array. */ + readonly byteOffset: number; + + /** + * Returns the this object after copying a section of the array identified by start and end + * to the same array starting at position target + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it + * is treated as length+end. + * @param end If not specified, length of the this object is used as its default value. + */ + copyWithin(target: number, start: number, end?: number): this; + + /** Yields index, value pairs for every entry in the array. */ + entries(): IterableIterator<[number, bigint]>; + + /** + * Determines whether all the members of an array satisfy the specified test. + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in the array until the callbackfn returns false, + * or until the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + every(callbackfn: (value: bigint, index: number, array: BigUint64Array) => boolean, thisArg?: any): boolean; + + /** + * Returns the this object after filling the section identified by start and end with value + * @param value value to fill array section with + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as + * length+end. + */ + fill(value: bigint, start?: number, end?: number): this; + + /** + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + filter(callbackfn: (value: bigint, index: number, array: BigUint64Array) => any, thisArg?: any): BigUint64Array; + + /** + * Returns the value of the first element in the array where predicate is true, and undefined + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find + * immediately returns that element value. Otherwise, find returns undefined. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + find(predicate: (value: bigint, index: number, array: BigUint64Array) => boolean, thisArg?: any): bigint | undefined; + + /** + * Returns the index of the first element in the array where predicate is true, and -1 + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + findIndex(predicate: (value: bigint, index: number, array: BigUint64Array) => boolean, thisArg?: any): number; + + /** + * Performs the specified action for each element in an array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + forEach(callbackfn: (value: bigint, index: number, array: BigUint64Array) => void, thisArg?: any): void; + + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: bigint, fromIndex?: number): boolean; + + /** + * Returns the index of the first occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + indexOf(searchElement: bigint, fromIndex?: number): number; + + /** + * Adds all the elements of an array separated by the specified separator string. + * @param separator A string used to separate one element of an array from the next in the + * resulting String. If omitted, the array elements are separated with a comma. + */ + join(separator?: string): string; + + /** Yields each index in the array. */ + keys(): IterableIterator; + + /** + * Returns the index of the last occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + lastIndexOf(searchElement: bigint, fromIndex?: number): number; + + /** The length of the array. */ + readonly length: number; + + /** + * Calls a defined callback function on each element of an array, and returns an array that + * contains the results. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + map(callbackfn: (value: bigint, index: number, array: BigUint64Array) => bigint, thisArg?: any): BigUint64Array; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: bigint, currentValue: bigint, currentIndex: number, array: BigUint64Array) => bigint): bigint; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: U, currentValue: bigint, currentIndex: number, array: BigUint64Array) => U, initialValue: U): U; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an + * argument instead of an array value. + */ + reduceRight(callbackfn: (previousValue: bigint, currentValue: bigint, currentIndex: number, array: BigUint64Array) => bigint): bigint; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduceRight(callbackfn: (previousValue: U, currentValue: bigint, currentIndex: number, array: BigUint64Array) => U, initialValue: U): U; + + /** Reverses the elements in the array. */ + reverse(): this; + + /** + * Sets a value or an array of values. + * @param array A typed or untyped array of values to set. + * @param offset The index in the current array at which the values are to be written. + */ + set(array: ArrayLike, offset?: number): void; + + /** + * Returns a section of an array. + * @param start The beginning of the specified portion of the array. + * @param end The end of the specified portion of the array. + */ + slice(start?: number, end?: number): BigUint64Array; + + /** + * Determines whether the specified callback function returns true for any element of an array. + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in the array until the callbackfn returns true, or until + * the end of the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + some(callbackfn: (value: bigint, index: number, array: BigUint64Array) => boolean, thisArg?: any): boolean; + + /** + * Sorts the array. + * @param compareFn The function used to determine the order of the elements. If omitted, the elements are sorted in ascending order. + */ + sort(compareFn?: (a: bigint, b: bigint) => number | bigint): this; + + /** + * Gets a new BigUint64Array view of the ArrayBuffer store for this array, referencing the elements + * at begin, inclusive, up to end, exclusive. + * @param begin The index of the beginning of the array. + * @param end The index of the end of the array. + */ + subarray(begin: number, end?: number): BigUint64Array; + + /** Converts the array to a string by using the current locale. */ + toLocaleString(): string; + + /** Returns a string representation of the array. */ + toString(): string; + + /** Yields each value in the array. */ + values(): IterableIterator; + + [Symbol.iterator](): IterableIterator; + + readonly [Symbol.toStringTag]: "BigUint64Array"; + + [index: number]: bigint; +} + +interface BigUint64ArrayConstructor { + readonly prototype: BigUint64Array; + new(length?: number): BigUint64Array; + new(array: Iterable): BigUint64Array; + new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): BigUint64Array; + + /** The size in bytes of each element in the array. */ + readonly BYTES_PER_ELEMENT: number; + + /** + * Returns a new array from a set of elements. + * @param items A set of elements to include in the new array object. + */ + of(...items: bigint[]): BigUint64Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: ArrayLike): BigUint64Array; + from(arrayLike: ArrayLike, mapfn: (v: U, k: number) => bigint, thisArg?: any): BigUint64Array; +} + +declare var BigUint64Array: BigUint64ArrayConstructor; + +interface DataView { + /** + * Gets the BigInt64 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. + * @param byteOffset The place in the buffer at which the value should be retrieved. + */ + getBigInt64(byteOffset: number, littleEndian?: boolean): bigint; + + /** + * Gets the BigUint64 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. + * @param byteOffset The place in the buffer at which the value should be retrieved. + */ + getBigUint64(byteOffset: number, littleEndian?: boolean): bigint; + + /** + * Stores a BigInt64 value at the specified byte offset from the start of the view. + * @param byteOffset The place in the buffer at which the value should be set. + * @param value The value to set. + * @param littleEndian If false or undefined, a big-endian value should be written, + * otherwise a little-endian value should be written. + */ + setBigInt64(byteOffset: number, value: bigint, littleEndian?: boolean): void; + + /** + * Stores a BigUint64 value at the specified byte offset from the start of the view. + * @param byteOffset The place in the buffer at which the value should be set. + * @param value The value to set. + * @param littleEndian If false or undefined, a big-endian value should be written, + * otherwise a little-endian value should be written. + */ + setBigUint64(byteOffset: number, value: bigint, littleEndian?: boolean): void; +} diff --git a/node_modules/typescript/lib/lib.esnext.d.ts b/node_modules/typescript/lib/lib.esnext.d.ts index ea5841bd..f9444746 100644 --- a/node_modules/typescript/lib/lib.esnext.d.ts +++ b/node_modules/typescript/lib/lib.esnext.d.ts @@ -15,9 +15,9 @@ and limitations under the License. -/// +/// -/// -/// -/// +/// +/// +/// diff --git a/node_modules/typescript/lib/lib.esnext.full.d.ts b/node_modules/typescript/lib/lib.esnext.full.d.ts index e3c4fa5e..db0b25cd 100644 --- a/node_modules/typescript/lib/lib.esnext.full.d.ts +++ b/node_modules/typescript/lib/lib.esnext.full.d.ts @@ -15,11 +15,11 @@ and limitations under the License. -/// +/// -/// -/// -/// -/// +/// +/// +/// +/// /// \ No newline at end of file diff --git a/node_modules/typescript/lib/lib.esnext.intl.d.ts b/node_modules/typescript/lib/lib.esnext.intl.d.ts index 73a45eed..72a9bae1 100644 --- a/node_modules/typescript/lib/lib.esnext.intl.d.ts +++ b/node_modules/typescript/lib/lib.esnext.intl.d.ts @@ -15,18 +15,18 @@ and limitations under the License. -/// +/// -declare namespace Intl { - type NumberFormatPartTypes = "currency" | "decimal" | "fraction" | "group" | "infinity" | "integer" | "literal" | "minusSign" | "nan" | "plusSign" | "percentSign"; - - interface NumberFormatPart { - type: NumberFormatPartTypes; - value: string; - } - - interface NumberFormat { - formatToParts(number?: number): NumberFormatPart[]; - } - } +declare namespace Intl { + type NumberFormatPartTypes = "currency" | "decimal" | "fraction" | "group" | "infinity" | "integer" | "literal" | "minusSign" | "nan" | "plusSign" | "percentSign"; + + interface NumberFormatPart { + type: NumberFormatPartTypes; + value: string; + } + + interface NumberFormat { + formatToParts(number?: number): NumberFormatPart[]; + } + } diff --git a/node_modules/typescript/lib/lib.scripthost.d.ts b/node_modules/typescript/lib/lib.scripthost.d.ts index 5aab121c..5795c68a 100644 --- a/node_modules/typescript/lib/lib.scripthost.d.ts +++ b/node_modules/typescript/lib/lib.scripthost.d.ts @@ -15,313 +15,313 @@ and limitations under the License. -/// - - - - -///////////////////////////// -/// Windows Script Host APIS -///////////////////////////// - - -interface ActiveXObject { - new (s: string): any; -} -declare var ActiveXObject: ActiveXObject; - -interface ITextWriter { - Write(s: string): void; - WriteLine(s: string): void; - Close(): void; -} - -interface TextStreamBase { - /** - * The column number of the current character position in an input stream. - */ - Column: number; - - /** - * The current line number in an input stream. - */ - Line: number; - - /** - * Closes a text stream. - * It is not necessary to close standard streams; they close automatically when the process ends. If - * you close a standard stream, be aware that any other pointers to that standard stream become invalid. - */ - Close(): void; -} - -interface TextStreamWriter extends TextStreamBase { - /** - * Sends a string to an output stream. - */ - Write(s: string): void; - - /** - * Sends a specified number of blank lines (newline characters) to an output stream. - */ - WriteBlankLines(intLines: number): void; - - /** - * Sends a string followed by a newline character to an output stream. - */ - WriteLine(s: string): void; -} - -interface TextStreamReader extends TextStreamBase { - /** - * Returns a specified number of characters from an input stream, starting at the current pointer position. - * Does not return until the ENTER key is pressed. - * Can only be used on a stream in reading mode; causes an error in writing or appending mode. - */ - Read(characters: number): string; - - /** - * Returns all characters from an input stream. - * Can only be used on a stream in reading mode; causes an error in writing or appending mode. - */ - ReadAll(): string; - - /** - * Returns an entire line from an input stream. - * Although this method extracts the newline character, it does not add it to the returned string. - * Can only be used on a stream in reading mode; causes an error in writing or appending mode. - */ - ReadLine(): string; - - /** - * Skips a specified number of characters when reading from an input text stream. - * Can only be used on a stream in reading mode; causes an error in writing or appending mode. - * @param characters Positive number of characters to skip forward. (Backward skipping is not supported.) - */ - Skip(characters: number): void; - - /** - * Skips the next line when reading from an input text stream. - * Can only be used on a stream in reading mode, not writing or appending mode. - */ - SkipLine(): void; - - /** - * Indicates whether the stream pointer position is at the end of a line. - */ - AtEndOfLine: boolean; - - /** - * Indicates whether the stream pointer position is at the end of a stream. - */ - AtEndOfStream: boolean; -} - -declare var WScript: { - /** - * Outputs text to either a message box (under WScript.exe) or the command console window followed by - * a newline (under CScript.exe). - */ - Echo(s: any): void; - - /** - * Exposes the write-only error output stream for the current script. - * Can be accessed only while using CScript.exe. - */ - StdErr: TextStreamWriter; - - /** - * Exposes the write-only output stream for the current script. - * Can be accessed only while using CScript.exe. - */ - StdOut: TextStreamWriter; - Arguments: { length: number; Item(n: number): string; }; - - /** - * The full path of the currently running script. - */ - ScriptFullName: string; - - /** - * Forces the script to stop immediately, with an optional exit code. - */ - Quit(exitCode?: number): number; - - /** - * The Windows Script Host build version number. - */ - BuildVersion: number; - - /** - * Fully qualified path of the host executable. - */ - FullName: string; - - /** - * Gets/sets the script mode - interactive(true) or batch(false). - */ - Interactive: boolean; - - /** - * The name of the host executable (WScript.exe or CScript.exe). - */ - Name: string; - - /** - * Path of the directory containing the host executable. - */ - Path: string; - - /** - * The filename of the currently running script. - */ - ScriptName: string; - - /** - * Exposes the read-only input stream for the current script. - * Can be accessed only while using CScript.exe. - */ - StdIn: TextStreamReader; - - /** - * Windows Script Host version - */ - Version: string; - - /** - * Connects a COM object's event sources to functions named with a given prefix, in the form prefix_event. - */ - ConnectObject(objEventSource: any, strPrefix: string): void; - - /** - * Creates a COM object. - * @param strProgiID - * @param strPrefix Function names in the form prefix_event will be bound to this object's COM events. - */ - CreateObject(strProgID: string, strPrefix?: string): any; - - /** - * Disconnects a COM object from its event sources. - */ - DisconnectObject(obj: any): void; - - /** - * Retrieves an existing object with the specified ProgID from memory, or creates a new one from a file. - * @param strPathname Fully qualified path to the file containing the object persisted to disk. - * For objects in memory, pass a zero-length string. - * @param strProgID - * @param strPrefix Function names in the form prefix_event will be bound to this object's COM events. - */ - GetObject(strPathname: string, strProgID?: string, strPrefix?: string): any; - - /** - * Suspends script execution for a specified length of time, then continues execution. - * @param intTime Interval (in milliseconds) to suspend script execution. - */ - Sleep(intTime: number): void; -}; - -/** - * WSH is an alias for WScript under Windows Script Host - */ -declare var WSH: typeof WScript; - -/** - * Represents an Automation SAFEARRAY - */ -declare class SafeArray { - private constructor(); - private SafeArray_typekey: SafeArray; -} - -/** - * Allows enumerating over a COM collection, which may not have indexed item access. - */ -interface Enumerator { - /** - * Returns true if the current item is the last one in the collection, or the collection is empty, - * or the current item is undefined. - */ - atEnd(): boolean; - - /** - * Returns the current item in the collection - */ - item(): T; - - /** - * Resets the current item in the collection to the first item. If there are no items in the collection, - * the current item is set to undefined. - */ - moveFirst(): void; - - /** - * Moves the current item to the next item in the collection. If the enumerator is at the end of - * the collection or the collection is empty, the current item is set to undefined. - */ - moveNext(): void; -} - -interface EnumeratorConstructor { - new (safearray: SafeArray): Enumerator; - new (collection: { Item(index: any): T }): Enumerator; - new (collection: any): Enumerator; -} - -declare var Enumerator: EnumeratorConstructor; - -/** - * Enables reading from a COM safe array, which might have an alternate lower bound, or multiple dimensions. - */ -interface VBArray { - /** - * Returns the number of dimensions (1-based). - */ - dimensions(): number; - - /** - * Takes an index for each dimension in the array, and returns the item at the corresponding location. - */ - getItem(dimension1Index: number, ...dimensionNIndexes: number[]): T; - - /** - * Returns the smallest available index for a given dimension. - * @param dimension 1-based dimension (defaults to 1) - */ - lbound(dimension?: number): number; - - /** - * Returns the largest available index for a given dimension. - * @param dimension 1-based dimension (defaults to 1) - */ - ubound(dimension?: number): number; - - /** - * Returns a Javascript array with all the elements in the VBArray. If there are multiple dimensions, - * each successive dimension is appended to the end of the array. - * Example: [[1,2,3],[4,5,6]] becomes [1,2,3,4,5,6] - */ - toArray(): T[]; -} - -interface VBArrayConstructor { - new (safeArray: SafeArray): VBArray; -} - -declare var VBArray: VBArrayConstructor; - -/** - * Automation date (VT_DATE) - */ -declare class VarDate { - private constructor(); - private VarDate_typekey: VarDate; -} - -interface DateConstructor { - new (vd: VarDate): Date; -} - -interface Date { - getVarDate: () => VarDate; -} +/// + + + + +///////////////////////////// +/// Windows Script Host APIS +///////////////////////////// + + +interface ActiveXObject { + new (s: string): any; +} +declare var ActiveXObject: ActiveXObject; + +interface ITextWriter { + Write(s: string): void; + WriteLine(s: string): void; + Close(): void; +} + +interface TextStreamBase { + /** + * The column number of the current character position in an input stream. + */ + Column: number; + + /** + * The current line number in an input stream. + */ + Line: number; + + /** + * Closes a text stream. + * It is not necessary to close standard streams; they close automatically when the process ends. If + * you close a standard stream, be aware that any other pointers to that standard stream become invalid. + */ + Close(): void; +} + +interface TextStreamWriter extends TextStreamBase { + /** + * Sends a string to an output stream. + */ + Write(s: string): void; + + /** + * Sends a specified number of blank lines (newline characters) to an output stream. + */ + WriteBlankLines(intLines: number): void; + + /** + * Sends a string followed by a newline character to an output stream. + */ + WriteLine(s: string): void; +} + +interface TextStreamReader extends TextStreamBase { + /** + * Returns a specified number of characters from an input stream, starting at the current pointer position. + * Does not return until the ENTER key is pressed. + * Can only be used on a stream in reading mode; causes an error in writing or appending mode. + */ + Read(characters: number): string; + + /** + * Returns all characters from an input stream. + * Can only be used on a stream in reading mode; causes an error in writing or appending mode. + */ + ReadAll(): string; + + /** + * Returns an entire line from an input stream. + * Although this method extracts the newline character, it does not add it to the returned string. + * Can only be used on a stream in reading mode; causes an error in writing or appending mode. + */ + ReadLine(): string; + + /** + * Skips a specified number of characters when reading from an input text stream. + * Can only be used on a stream in reading mode; causes an error in writing or appending mode. + * @param characters Positive number of characters to skip forward. (Backward skipping is not supported.) + */ + Skip(characters: number): void; + + /** + * Skips the next line when reading from an input text stream. + * Can only be used on a stream in reading mode, not writing or appending mode. + */ + SkipLine(): void; + + /** + * Indicates whether the stream pointer position is at the end of a line. + */ + AtEndOfLine: boolean; + + /** + * Indicates whether the stream pointer position is at the end of a stream. + */ + AtEndOfStream: boolean; +} + +declare var WScript: { + /** + * Outputs text to either a message box (under WScript.exe) or the command console window followed by + * a newline (under CScript.exe). + */ + Echo(s: any): void; + + /** + * Exposes the write-only error output stream for the current script. + * Can be accessed only while using CScript.exe. + */ + StdErr: TextStreamWriter; + + /** + * Exposes the write-only output stream for the current script. + * Can be accessed only while using CScript.exe. + */ + StdOut: TextStreamWriter; + Arguments: { length: number; Item(n: number): string; }; + + /** + * The full path of the currently running script. + */ + ScriptFullName: string; + + /** + * Forces the script to stop immediately, with an optional exit code. + */ + Quit(exitCode?: number): number; + + /** + * The Windows Script Host build version number. + */ + BuildVersion: number; + + /** + * Fully qualified path of the host executable. + */ + FullName: string; + + /** + * Gets/sets the script mode - interactive(true) or batch(false). + */ + Interactive: boolean; + + /** + * The name of the host executable (WScript.exe or CScript.exe). + */ + Name: string; + + /** + * Path of the directory containing the host executable. + */ + Path: string; + + /** + * The filename of the currently running script. + */ + ScriptName: string; + + /** + * Exposes the read-only input stream for the current script. + * Can be accessed only while using CScript.exe. + */ + StdIn: TextStreamReader; + + /** + * Windows Script Host version + */ + Version: string; + + /** + * Connects a COM object's event sources to functions named with a given prefix, in the form prefix_event. + */ + ConnectObject(objEventSource: any, strPrefix: string): void; + + /** + * Creates a COM object. + * @param strProgiID + * @param strPrefix Function names in the form prefix_event will be bound to this object's COM events. + */ + CreateObject(strProgID: string, strPrefix?: string): any; + + /** + * Disconnects a COM object from its event sources. + */ + DisconnectObject(obj: any): void; + + /** + * Retrieves an existing object with the specified ProgID from memory, or creates a new one from a file. + * @param strPathname Fully qualified path to the file containing the object persisted to disk. + * For objects in memory, pass a zero-length string. + * @param strProgID + * @param strPrefix Function names in the form prefix_event will be bound to this object's COM events. + */ + GetObject(strPathname: string, strProgID?: string, strPrefix?: string): any; + + /** + * Suspends script execution for a specified length of time, then continues execution. + * @param intTime Interval (in milliseconds) to suspend script execution. + */ + Sleep(intTime: number): void; +}; + +/** + * WSH is an alias for WScript under Windows Script Host + */ +declare var WSH: typeof WScript; + +/** + * Represents an Automation SAFEARRAY + */ +declare class SafeArray { + private constructor(); + private SafeArray_typekey: SafeArray; +} + +/** + * Allows enumerating over a COM collection, which may not have indexed item access. + */ +interface Enumerator { + /** + * Returns true if the current item is the last one in the collection, or the collection is empty, + * or the current item is undefined. + */ + atEnd(): boolean; + + /** + * Returns the current item in the collection + */ + item(): T; + + /** + * Resets the current item in the collection to the first item. If there are no items in the collection, + * the current item is set to undefined. + */ + moveFirst(): void; + + /** + * Moves the current item to the next item in the collection. If the enumerator is at the end of + * the collection or the collection is empty, the current item is set to undefined. + */ + moveNext(): void; +} + +interface EnumeratorConstructor { + new (safearray: SafeArray): Enumerator; + new (collection: { Item(index: any): T }): Enumerator; + new (collection: any): Enumerator; +} + +declare var Enumerator: EnumeratorConstructor; + +/** + * Enables reading from a COM safe array, which might have an alternate lower bound, or multiple dimensions. + */ +interface VBArray { + /** + * Returns the number of dimensions (1-based). + */ + dimensions(): number; + + /** + * Takes an index for each dimension in the array, and returns the item at the corresponding location. + */ + getItem(dimension1Index: number, ...dimensionNIndexes: number[]): T; + + /** + * Returns the smallest available index for a given dimension. + * @param dimension 1-based dimension (defaults to 1) + */ + lbound(dimension?: number): number; + + /** + * Returns the largest available index for a given dimension. + * @param dimension 1-based dimension (defaults to 1) + */ + ubound(dimension?: number): number; + + /** + * Returns a Javascript array with all the elements in the VBArray. If there are multiple dimensions, + * each successive dimension is appended to the end of the array. + * Example: [[1,2,3],[4,5,6]] becomes [1,2,3,4,5,6] + */ + toArray(): T[]; +} + +interface VBArrayConstructor { + new (safeArray: SafeArray): VBArray; +} + +declare var VBArray: VBArrayConstructor; + +/** + * Automation date (VT_DATE) + */ +declare class VarDate { + private constructor(); + private VarDate_typekey: VarDate; +} + +interface DateConstructor { + new (vd: VarDate): Date; +} + +interface Date { + getVarDate: () => VarDate; +} diff --git a/node_modules/typescript/lib/lib.webworker.d.ts b/node_modules/typescript/lib/lib.webworker.d.ts index 9b73c55a..153ecbd2 100644 --- a/node_modules/typescript/lib/lib.webworker.d.ts +++ b/node_modules/typescript/lib/lib.webworker.d.ts @@ -15,7 +15,7 @@ and limitations under the License. -/// +/// ///////////////////////////// diff --git a/node_modules/typescript/lib/lib.webworker.importscripts.d.ts b/node_modules/typescript/lib/lib.webworker.importscripts.d.ts index c373ba82..debd7694 100644 --- a/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +++ b/node_modules/typescript/lib/lib.webworker.importscripts.d.ts @@ -15,12 +15,12 @@ and limitations under the License. -/// +/// - -///////////////////////////// -/// WorkerGlobalScope APIs -///////////////////////////// -// These are only available in a Web Worker -declare function importScripts(...urls: string[]): void; + +///////////////////////////// +/// WorkerGlobalScope APIs +///////////////////////////// +// These are only available in a Web Worker +declare function importScripts(...urls: string[]): void; diff --git a/node_modules/uri-js/dist/es5/uri.all.d.ts b/node_modules/uri-js/dist/es5/uri.all.d.ts index da51e235..320f5341 100644 --- a/node_modules/uri-js/dist/es5/uri.all.d.ts +++ b/node_modules/uri-js/dist/es5/uri.all.d.ts @@ -1,59 +1,59 @@ -export interface URIComponents { - scheme?: string; - userinfo?: string; - host?: string; - port?: number | string; - path?: string; - query?: string; - fragment?: string; - reference?: string; - error?: string; -} -export interface URIOptions { - scheme?: string; - reference?: string; - tolerant?: boolean; - absolutePath?: boolean; - iri?: boolean; - unicodeSupport?: boolean; - domainHost?: boolean; -} -export interface URISchemeHandler { - scheme: string; - parse(components: ParentComponents, options: Options): Components; - serialize(components: Components, options: Options): ParentComponents; - unicodeSupport?: boolean; - domainHost?: boolean; - absolutePath?: boolean; -} -export interface URIRegExps { - NOT_SCHEME: RegExp; - NOT_USERINFO: RegExp; - NOT_HOST: RegExp; - NOT_PATH: RegExp; - NOT_PATH_NOSCHEME: RegExp; - NOT_QUERY: RegExp; - NOT_FRAGMENT: RegExp; - ESCAPE: RegExp; - UNRESERVED: RegExp; - OTHER_CHARS: RegExp; - PCT_ENCODED: RegExp; - IPV4ADDRESS: RegExp; - IPV6ADDRESS: RegExp; -} -export declare const SCHEMES: { - [scheme: string]: URISchemeHandler; -}; -export declare function pctEncChar(chr: string): string; -export declare function pctDecChars(str: string): string; -export declare function parse(uriString: string, options?: URIOptions): URIComponents; -export declare function removeDotSegments(input: string): string; -export declare function serialize(components: URIComponents, options?: URIOptions): string; -export declare function resolveComponents(base: URIComponents, relative: URIComponents, options?: URIOptions, skipNormalization?: boolean): URIComponents; -export declare function resolve(baseURI: string, relativeURI: string, options?: URIOptions): string; -export declare function normalize(uri: string, options?: URIOptions): string; -export declare function normalize(uri: URIComponents, options?: URIOptions): URIComponents; -export declare function equal(uriA: string, uriB: string, options?: URIOptions): boolean; -export declare function equal(uriA: URIComponents, uriB: URIComponents, options?: URIOptions): boolean; -export declare function escapeComponent(str: string, options?: URIOptions): string; -export declare function unescapeComponent(str: string, options?: URIOptions): string; +export interface URIComponents { + scheme?: string; + userinfo?: string; + host?: string; + port?: number | string; + path?: string; + query?: string; + fragment?: string; + reference?: string; + error?: string; +} +export interface URIOptions { + scheme?: string; + reference?: string; + tolerant?: boolean; + absolutePath?: boolean; + iri?: boolean; + unicodeSupport?: boolean; + domainHost?: boolean; +} +export interface URISchemeHandler { + scheme: string; + parse(components: ParentComponents, options: Options): Components; + serialize(components: Components, options: Options): ParentComponents; + unicodeSupport?: boolean; + domainHost?: boolean; + absolutePath?: boolean; +} +export interface URIRegExps { + NOT_SCHEME: RegExp; + NOT_USERINFO: RegExp; + NOT_HOST: RegExp; + NOT_PATH: RegExp; + NOT_PATH_NOSCHEME: RegExp; + NOT_QUERY: RegExp; + NOT_FRAGMENT: RegExp; + ESCAPE: RegExp; + UNRESERVED: RegExp; + OTHER_CHARS: RegExp; + PCT_ENCODED: RegExp; + IPV4ADDRESS: RegExp; + IPV6ADDRESS: RegExp; +} +export declare const SCHEMES: { + [scheme: string]: URISchemeHandler; +}; +export declare function pctEncChar(chr: string): string; +export declare function pctDecChars(str: string): string; +export declare function parse(uriString: string, options?: URIOptions): URIComponents; +export declare function removeDotSegments(input: string): string; +export declare function serialize(components: URIComponents, options?: URIOptions): string; +export declare function resolveComponents(base: URIComponents, relative: URIComponents, options?: URIOptions, skipNormalization?: boolean): URIComponents; +export declare function resolve(baseURI: string, relativeURI: string, options?: URIOptions): string; +export declare function normalize(uri: string, options?: URIOptions): string; +export declare function normalize(uri: URIComponents, options?: URIOptions): URIComponents; +export declare function equal(uriA: string, uriB: string, options?: URIOptions): boolean; +export declare function equal(uriA: URIComponents, uriB: URIComponents, options?: URIOptions): boolean; +export declare function escapeComponent(str: string, options?: URIOptions): string; +export declare function unescapeComponent(str: string, options?: URIOptions): string; diff --git a/node_modules/uri-js/dist/es5/uri.all.min.d.ts b/node_modules/uri-js/dist/es5/uri.all.min.d.ts index da51e235..320f5341 100644 --- a/node_modules/uri-js/dist/es5/uri.all.min.d.ts +++ b/node_modules/uri-js/dist/es5/uri.all.min.d.ts @@ -1,59 +1,59 @@ -export interface URIComponents { - scheme?: string; - userinfo?: string; - host?: string; - port?: number | string; - path?: string; - query?: string; - fragment?: string; - reference?: string; - error?: string; -} -export interface URIOptions { - scheme?: string; - reference?: string; - tolerant?: boolean; - absolutePath?: boolean; - iri?: boolean; - unicodeSupport?: boolean; - domainHost?: boolean; -} -export interface URISchemeHandler { - scheme: string; - parse(components: ParentComponents, options: Options): Components; - serialize(components: Components, options: Options): ParentComponents; - unicodeSupport?: boolean; - domainHost?: boolean; - absolutePath?: boolean; -} -export interface URIRegExps { - NOT_SCHEME: RegExp; - NOT_USERINFO: RegExp; - NOT_HOST: RegExp; - NOT_PATH: RegExp; - NOT_PATH_NOSCHEME: RegExp; - NOT_QUERY: RegExp; - NOT_FRAGMENT: RegExp; - ESCAPE: RegExp; - UNRESERVED: RegExp; - OTHER_CHARS: RegExp; - PCT_ENCODED: RegExp; - IPV4ADDRESS: RegExp; - IPV6ADDRESS: RegExp; -} -export declare const SCHEMES: { - [scheme: string]: URISchemeHandler; -}; -export declare function pctEncChar(chr: string): string; -export declare function pctDecChars(str: string): string; -export declare function parse(uriString: string, options?: URIOptions): URIComponents; -export declare function removeDotSegments(input: string): string; -export declare function serialize(components: URIComponents, options?: URIOptions): string; -export declare function resolveComponents(base: URIComponents, relative: URIComponents, options?: URIOptions, skipNormalization?: boolean): URIComponents; -export declare function resolve(baseURI: string, relativeURI: string, options?: URIOptions): string; -export declare function normalize(uri: string, options?: URIOptions): string; -export declare function normalize(uri: URIComponents, options?: URIOptions): URIComponents; -export declare function equal(uriA: string, uriB: string, options?: URIOptions): boolean; -export declare function equal(uriA: URIComponents, uriB: URIComponents, options?: URIOptions): boolean; -export declare function escapeComponent(str: string, options?: URIOptions): string; -export declare function unescapeComponent(str: string, options?: URIOptions): string; +export interface URIComponents { + scheme?: string; + userinfo?: string; + host?: string; + port?: number | string; + path?: string; + query?: string; + fragment?: string; + reference?: string; + error?: string; +} +export interface URIOptions { + scheme?: string; + reference?: string; + tolerant?: boolean; + absolutePath?: boolean; + iri?: boolean; + unicodeSupport?: boolean; + domainHost?: boolean; +} +export interface URISchemeHandler { + scheme: string; + parse(components: ParentComponents, options: Options): Components; + serialize(components: Components, options: Options): ParentComponents; + unicodeSupport?: boolean; + domainHost?: boolean; + absolutePath?: boolean; +} +export interface URIRegExps { + NOT_SCHEME: RegExp; + NOT_USERINFO: RegExp; + NOT_HOST: RegExp; + NOT_PATH: RegExp; + NOT_PATH_NOSCHEME: RegExp; + NOT_QUERY: RegExp; + NOT_FRAGMENT: RegExp; + ESCAPE: RegExp; + UNRESERVED: RegExp; + OTHER_CHARS: RegExp; + PCT_ENCODED: RegExp; + IPV4ADDRESS: RegExp; + IPV6ADDRESS: RegExp; +} +export declare const SCHEMES: { + [scheme: string]: URISchemeHandler; +}; +export declare function pctEncChar(chr: string): string; +export declare function pctDecChars(str: string): string; +export declare function parse(uriString: string, options?: URIOptions): URIComponents; +export declare function removeDotSegments(input: string): string; +export declare function serialize(components: URIComponents, options?: URIOptions): string; +export declare function resolveComponents(base: URIComponents, relative: URIComponents, options?: URIOptions, skipNormalization?: boolean): URIComponents; +export declare function resolve(baseURI: string, relativeURI: string, options?: URIOptions): string; +export declare function normalize(uri: string, options?: URIOptions): string; +export declare function normalize(uri: URIComponents, options?: URIOptions): URIComponents; +export declare function equal(uriA: string, uriB: string, options?: URIOptions): boolean; +export declare function equal(uriA: URIComponents, uriB: URIComponents, options?: URIOptions): boolean; +export declare function escapeComponent(str: string, options?: URIOptions): string; +export declare function unescapeComponent(str: string, options?: URIOptions): string; diff --git a/node_modules/uri-js/dist/esnext/index.d.ts b/node_modules/uri-js/dist/esnext/index.d.ts index f6be7603..be95efb2 100644 --- a/node_modules/uri-js/dist/esnext/index.d.ts +++ b/node_modules/uri-js/dist/esnext/index.d.ts @@ -1 +1 @@ -export * from "./uri"; +export * from "./uri"; diff --git a/node_modules/uri-js/dist/esnext/index.js b/node_modules/uri-js/dist/esnext/index.js index 73dc8dbc..de8868ff 100644 --- a/node_modules/uri-js/dist/esnext/index.js +++ b/node_modules/uri-js/dist/esnext/index.js @@ -1,13 +1,13 @@ -import { SCHEMES } from "./uri"; -import http from "./schemes/http"; -SCHEMES[http.scheme] = http; -import https from "./schemes/https"; -SCHEMES[https.scheme] = https; -import mailto from "./schemes/mailto"; -SCHEMES[mailto.scheme] = mailto; -import urn from "./schemes/urn"; -SCHEMES[urn.scheme] = urn; -import uuid from "./schemes/urn-uuid"; -SCHEMES[uuid.scheme] = uuid; -export * from "./uri"; +import { SCHEMES } from "./uri"; +import http from "./schemes/http"; +SCHEMES[http.scheme] = http; +import https from "./schemes/https"; +SCHEMES[https.scheme] = https; +import mailto from "./schemes/mailto"; +SCHEMES[mailto.scheme] = mailto; +import urn from "./schemes/urn"; +SCHEMES[urn.scheme] = urn; +import uuid from "./schemes/urn-uuid"; +SCHEMES[uuid.scheme] = uuid; +export * from "./uri"; //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/regexps-iri.d.ts b/node_modules/uri-js/dist/esnext/regexps-iri.d.ts index c91cdacb..6fc0f5db 100644 --- a/node_modules/uri-js/dist/esnext/regexps-iri.d.ts +++ b/node_modules/uri-js/dist/esnext/regexps-iri.d.ts @@ -1,3 +1,3 @@ -import { URIRegExps } from "./uri"; -declare const _default: URIRegExps; -export default _default; +import { URIRegExps } from "./uri"; +declare const _default: URIRegExps; +export default _default; diff --git a/node_modules/uri-js/dist/esnext/regexps-iri.js b/node_modules/uri-js/dist/esnext/regexps-iri.js index 34e7de98..86239cf3 100644 --- a/node_modules/uri-js/dist/esnext/regexps-iri.js +++ b/node_modules/uri-js/dist/esnext/regexps-iri.js @@ -1,3 +1,3 @@ -import { buildExps } from "./regexps-uri"; -export default buildExps(true); +import { buildExps } from "./regexps-uri"; +export default buildExps(true); //# sourceMappingURL=regexps-iri.js.map \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/regexps-uri.d.ts b/node_modules/uri-js/dist/esnext/regexps-uri.d.ts index 6096bda5..10ec87bd 100644 --- a/node_modules/uri-js/dist/esnext/regexps-uri.d.ts +++ b/node_modules/uri-js/dist/esnext/regexps-uri.d.ts @@ -1,4 +1,4 @@ -import { URIRegExps } from "./uri"; -export declare function buildExps(isIRI: boolean): URIRegExps; -declare const _default: URIRegExps; -export default _default; +import { URIRegExps } from "./uri"; +export declare function buildExps(isIRI: boolean): URIRegExps; +declare const _default: URIRegExps; +export default _default; diff --git a/node_modules/uri-js/dist/esnext/regexps-uri.js b/node_modules/uri-js/dist/esnext/regexps-uri.js index 1cc659f1..6e7e9a02 100644 --- a/node_modules/uri-js/dist/esnext/regexps-uri.js +++ b/node_modules/uri-js/dist/esnext/regexps-uri.js @@ -1,42 +1,42 @@ -import { merge, subexp } from "./util"; -export function buildExps(isIRI) { - const ALPHA$$ = "[A-Za-z]", CR$ = "[\\x0D]", DIGIT$$ = "[0-9]", DQUOTE$$ = "[\\x22]", HEXDIG$$ = merge(DIGIT$$, "[A-Fa-f]"), //case-insensitive - LF$$ = "[\\x0A]", SP$$ = "[\\x20]", PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)), //expanded - GEN_DELIMS$$ = "[\\:\\/\\?\\#\\[\\]\\@]", SUB_DELIMS$$ = "[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]", RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$), UCSCHAR$$ = isIRI ? "[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]" : "[]", //subset, excludes bidi control characters - IPRIVATE$$ = isIRI ? "[\\uE000-\\uF8FF]" : "[]", //subset - UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, "[\\-\\.\\_\\~]", UCSCHAR$$), SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, "[\\+\\-\\.]") + "*"), USERINFO$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]")) + "*"), DEC_OCTET$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("[1-9]" + DIGIT$$) + "|" + DIGIT$$), DEC_OCTET_RELAXED$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("0?[1-9]" + DIGIT$$) + "|0?0?" + DIGIT$$), //relaxed parsing rules - IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$), H16$ = subexp(HEXDIG$$ + "{1,4}"), LS32$ = subexp(subexp(H16$ + "\\:" + H16$) + "|" + IPV4ADDRESS$), IPV6ADDRESS1$ = subexp(subexp(H16$ + "\\:") + "{6}" + LS32$), // 6( h16 ":" ) ls32 - IPV6ADDRESS2$ = subexp("\\:\\:" + subexp(H16$ + "\\:") + "{5}" + LS32$), // "::" 5( h16 ":" ) ls32 - IPV6ADDRESS3$ = subexp(subexp(H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{4}" + LS32$), //[ h16 ] "::" 4( h16 ":" ) ls32 - IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,1}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{3}" + LS32$), //[ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 - IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,2}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{2}" + LS32$), //[ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 - IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,3}" + H16$) + "?\\:\\:" + H16$ + "\\:" + LS32$), //[ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 - IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,4}" + H16$) + "?\\:\\:" + LS32$), //[ *4( h16 ":" ) h16 ] "::" ls32 - IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,5}" + H16$) + "?\\:\\:" + H16$), //[ *5( h16 ":" ) h16 ] "::" h16 - IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,6}" + H16$) + "?\\:\\:"), //[ *6( h16 ":" ) h16 ] "::" - IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join("|")), ZONEID$ = subexp(subexp(UNRESERVED$$ + "|" + PCT_ENCODED$) + "+"), //RFC 6874 - IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + "\\%25" + ZONEID$), //RFC 6874 - IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + ZONEID$), //RFC 6874, with relaxed parsing rules - IPVFUTURE$ = subexp("[vV]" + HEXDIG$$ + "+\\." + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]") + "+"), IP_LITERAL$ = subexp("\\[" + subexp(IPV6ADDRZ_RELAXED$ + "|" + IPV6ADDRESS$ + "|" + IPVFUTURE$) + "\\]"), //RFC 6874 - REG_NAME$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$)) + "*"), HOST$ = subexp(IP_LITERAL$ + "|" + IPV4ADDRESS$ + "(?!" + REG_NAME$ + ")" + "|" + REG_NAME$), PORT$ = subexp(DIGIT$$ + "*"), AUTHORITY$ = subexp(subexp(USERINFO$ + "@") + "?" + HOST$ + subexp("\\:" + PORT$) + "?"), PCHAR$ = subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@]")), SEGMENT$ = subexp(PCHAR$ + "*"), SEGMENT_NZ$ = subexp(PCHAR$ + "+"), SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\@]")) + "+"), PATH_ABEMPTY$ = subexp(subexp("\\/" + SEGMENT$) + "*"), PATH_ABSOLUTE$ = subexp("\\/" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + "?"), //simplified - PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified - PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified - PATH_EMPTY$ = "(?!" + PCHAR$ + ")", PATH$ = subexp(PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), QUERY$ = subexp(subexp(PCHAR$ + "|" + merge("[\\/\\?]", IPRIVATE$$)) + "*"), FRAGMENT$ = subexp(subexp(PCHAR$ + "|[\\/\\?]") + "*"), HIER_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), RELATIVE_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$), RELATIVE$ = subexp(RELATIVE_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), URI_REFERENCE$ = subexp(URI$ + "|" + RELATIVE$), ABSOLUTE_URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?"), GENERIC_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", RELATIVE_REF$ = "^(){0}" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", ABSOLUTE_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?$", SAMEDOC_REF$ = "^" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", AUTHORITY_REF$ = "^" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?$"; - return { - NOT_SCHEME: new RegExp(merge("[^]", ALPHA$$, DIGIT$$, "[\\+\\-\\.]"), "g"), - NOT_USERINFO: new RegExp(merge("[^\\%\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_HOST: new RegExp(merge("[^\\%\\[\\]\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_PATH: new RegExp(merge("[^\\%\\/\\:\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_PATH_NOSCHEME: new RegExp(merge("[^\\%\\/\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_QUERY: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]", IPRIVATE$$), "g"), - NOT_FRAGMENT: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]"), "g"), - ESCAPE: new RegExp(merge("[^]", UNRESERVED$$, SUB_DELIMS$$), "g"), - UNRESERVED: new RegExp(UNRESERVED$$, "g"), - OTHER_CHARS: new RegExp(merge("[^\\%]", UNRESERVED$$, RESERVED$$), "g"), - PCT_ENCODED: new RegExp(PCT_ENCODED$, "g"), - IPV4ADDRESS: new RegExp("^(" + IPV4ADDRESS$ + ")$"), - IPV6ADDRESS: new RegExp("^\\[?(" + IPV6ADDRESS$ + ")" + subexp(subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + "(" + ZONEID$ + ")") + "?\\]?$") //RFC 6874, with relaxed parsing rules - }; -} -export default buildExps(false); +import { merge, subexp } from "./util"; +export function buildExps(isIRI) { + const ALPHA$$ = "[A-Za-z]", CR$ = "[\\x0D]", DIGIT$$ = "[0-9]", DQUOTE$$ = "[\\x22]", HEXDIG$$ = merge(DIGIT$$, "[A-Fa-f]"), //case-insensitive + LF$$ = "[\\x0A]", SP$$ = "[\\x20]", PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)), //expanded + GEN_DELIMS$$ = "[\\:\\/\\?\\#\\[\\]\\@]", SUB_DELIMS$$ = "[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]", RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$), UCSCHAR$$ = isIRI ? "[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]" : "[]", //subset, excludes bidi control characters + IPRIVATE$$ = isIRI ? "[\\uE000-\\uF8FF]" : "[]", //subset + UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, "[\\-\\.\\_\\~]", UCSCHAR$$), SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, "[\\+\\-\\.]") + "*"), USERINFO$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]")) + "*"), DEC_OCTET$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("[1-9]" + DIGIT$$) + "|" + DIGIT$$), DEC_OCTET_RELAXED$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("0?[1-9]" + DIGIT$$) + "|0?0?" + DIGIT$$), //relaxed parsing rules + IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$), H16$ = subexp(HEXDIG$$ + "{1,4}"), LS32$ = subexp(subexp(H16$ + "\\:" + H16$) + "|" + IPV4ADDRESS$), IPV6ADDRESS1$ = subexp(subexp(H16$ + "\\:") + "{6}" + LS32$), // 6( h16 ":" ) ls32 + IPV6ADDRESS2$ = subexp("\\:\\:" + subexp(H16$ + "\\:") + "{5}" + LS32$), // "::" 5( h16 ":" ) ls32 + IPV6ADDRESS3$ = subexp(subexp(H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{4}" + LS32$), //[ h16 ] "::" 4( h16 ":" ) ls32 + IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,1}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{3}" + LS32$), //[ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 + IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,2}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{2}" + LS32$), //[ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 + IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,3}" + H16$) + "?\\:\\:" + H16$ + "\\:" + LS32$), //[ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 + IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,4}" + H16$) + "?\\:\\:" + LS32$), //[ *4( h16 ":" ) h16 ] "::" ls32 + IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,5}" + H16$) + "?\\:\\:" + H16$), //[ *5( h16 ":" ) h16 ] "::" h16 + IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,6}" + H16$) + "?\\:\\:"), //[ *6( h16 ":" ) h16 ] "::" + IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join("|")), ZONEID$ = subexp(subexp(UNRESERVED$$ + "|" + PCT_ENCODED$) + "+"), //RFC 6874 + IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + "\\%25" + ZONEID$), //RFC 6874 + IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + ZONEID$), //RFC 6874, with relaxed parsing rules + IPVFUTURE$ = subexp("[vV]" + HEXDIG$$ + "+\\." + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]") + "+"), IP_LITERAL$ = subexp("\\[" + subexp(IPV6ADDRZ_RELAXED$ + "|" + IPV6ADDRESS$ + "|" + IPVFUTURE$) + "\\]"), //RFC 6874 + REG_NAME$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$)) + "*"), HOST$ = subexp(IP_LITERAL$ + "|" + IPV4ADDRESS$ + "(?!" + REG_NAME$ + ")" + "|" + REG_NAME$), PORT$ = subexp(DIGIT$$ + "*"), AUTHORITY$ = subexp(subexp(USERINFO$ + "@") + "?" + HOST$ + subexp("\\:" + PORT$) + "?"), PCHAR$ = subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@]")), SEGMENT$ = subexp(PCHAR$ + "*"), SEGMENT_NZ$ = subexp(PCHAR$ + "+"), SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\@]")) + "+"), PATH_ABEMPTY$ = subexp(subexp("\\/" + SEGMENT$) + "*"), PATH_ABSOLUTE$ = subexp("\\/" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + "?"), //simplified + PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified + PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified + PATH_EMPTY$ = "(?!" + PCHAR$ + ")", PATH$ = subexp(PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), QUERY$ = subexp(subexp(PCHAR$ + "|" + merge("[\\/\\?]", IPRIVATE$$)) + "*"), FRAGMENT$ = subexp(subexp(PCHAR$ + "|[\\/\\?]") + "*"), HIER_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), RELATIVE_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$), RELATIVE$ = subexp(RELATIVE_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), URI_REFERENCE$ = subexp(URI$ + "|" + RELATIVE$), ABSOLUTE_URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?"), GENERIC_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", RELATIVE_REF$ = "^(){0}" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", ABSOLUTE_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?$", SAMEDOC_REF$ = "^" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", AUTHORITY_REF$ = "^" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?$"; + return { + NOT_SCHEME: new RegExp(merge("[^]", ALPHA$$, DIGIT$$, "[\\+\\-\\.]"), "g"), + NOT_USERINFO: new RegExp(merge("[^\\%\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_HOST: new RegExp(merge("[^\\%\\[\\]\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_PATH: new RegExp(merge("[^\\%\\/\\:\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_PATH_NOSCHEME: new RegExp(merge("[^\\%\\/\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_QUERY: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]", IPRIVATE$$), "g"), + NOT_FRAGMENT: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]"), "g"), + ESCAPE: new RegExp(merge("[^]", UNRESERVED$$, SUB_DELIMS$$), "g"), + UNRESERVED: new RegExp(UNRESERVED$$, "g"), + OTHER_CHARS: new RegExp(merge("[^\\%]", UNRESERVED$$, RESERVED$$), "g"), + PCT_ENCODED: new RegExp(PCT_ENCODED$, "g"), + IPV4ADDRESS: new RegExp("^(" + IPV4ADDRESS$ + ")$"), + IPV6ADDRESS: new RegExp("^\\[?(" + IPV6ADDRESS$ + ")" + subexp(subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + "(" + ZONEID$ + ")") + "?\\]?$") //RFC 6874, with relaxed parsing rules + }; +} +export default buildExps(false); //# sourceMappingURL=regexps-uri.js.map \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/schemes/http.d.ts b/node_modules/uri-js/dist/esnext/schemes/http.d.ts index fe5b2f35..38999569 100644 --- a/node_modules/uri-js/dist/esnext/schemes/http.d.ts +++ b/node_modules/uri-js/dist/esnext/schemes/http.d.ts @@ -1,3 +1,3 @@ -import { URISchemeHandler } from "../uri"; -declare const handler: URISchemeHandler; -export default handler; +import { URISchemeHandler } from "../uri"; +declare const handler: URISchemeHandler; +export default handler; diff --git a/node_modules/uri-js/dist/esnext/schemes/http.js b/node_modules/uri-js/dist/esnext/schemes/http.js index 092e16db..a2803698 100644 --- a/node_modules/uri-js/dist/esnext/schemes/http.js +++ b/node_modules/uri-js/dist/esnext/schemes/http.js @@ -1,27 +1,27 @@ -const handler = { - scheme: "http", - domainHost: true, - parse: function (components, options) { - //report missing host - if (!components.host) { - components.error = components.error || "HTTP URIs must have a host."; - } - return components; - }, - serialize: function (components, options) { - //normalize the default port - if (components.port === (String(components.scheme).toLowerCase() !== "https" ? 80 : 443) || components.port === "") { - components.port = undefined; - } - //normalize the empty path - if (!components.path) { - components.path = "/"; - } - //NOTE: We do not parse query strings for HTTP URIs - //as WWW Form Url Encoded query strings are part of the HTML4+ spec, - //and not the HTTP spec. - return components; - } -}; -export default handler; +const handler = { + scheme: "http", + domainHost: true, + parse: function (components, options) { + //report missing host + if (!components.host) { + components.error = components.error || "HTTP URIs must have a host."; + } + return components; + }, + serialize: function (components, options) { + //normalize the default port + if (components.port === (String(components.scheme).toLowerCase() !== "https" ? 80 : 443) || components.port === "") { + components.port = undefined; + } + //normalize the empty path + if (!components.path) { + components.path = "/"; + } + //NOTE: We do not parse query strings for HTTP URIs + //as WWW Form Url Encoded query strings are part of the HTML4+ spec, + //and not the HTTP spec. + return components; + } +}; +export default handler; //# sourceMappingURL=http.js.map \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/schemes/https.d.ts b/node_modules/uri-js/dist/esnext/schemes/https.d.ts index fe5b2f35..38999569 100644 --- a/node_modules/uri-js/dist/esnext/schemes/https.d.ts +++ b/node_modules/uri-js/dist/esnext/schemes/https.d.ts @@ -1,3 +1,3 @@ -import { URISchemeHandler } from "../uri"; -declare const handler: URISchemeHandler; -export default handler; +import { URISchemeHandler } from "../uri"; +declare const handler: URISchemeHandler; +export default handler; diff --git a/node_modules/uri-js/dist/esnext/schemes/https.js b/node_modules/uri-js/dist/esnext/schemes/https.js index ec4b6e76..fc3c71a6 100644 --- a/node_modules/uri-js/dist/esnext/schemes/https.js +++ b/node_modules/uri-js/dist/esnext/schemes/https.js @@ -1,9 +1,9 @@ -import http from "./http"; -const handler = { - scheme: "https", - domainHost: http.domainHost, - parse: http.parse, - serialize: http.serialize -}; -export default handler; +import http from "./http"; +const handler = { + scheme: "https", + domainHost: http.domainHost, + parse: http.parse, + serialize: http.serialize +}; +export default handler; //# sourceMappingURL=https.js.map \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts b/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts index e2aefc2a..b0db4bfc 100644 --- a/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts +++ b/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts @@ -1,12 +1,12 @@ -import { URISchemeHandler, URIComponents } from "../uri"; -export interface MailtoHeaders { - [hfname: string]: string; -} -export interface MailtoComponents extends URIComponents { - to: Array; - headers?: MailtoHeaders; - subject?: string; - body?: string; -} -declare const handler: URISchemeHandler; -export default handler; +import { URISchemeHandler, URIComponents } from "../uri"; +export interface MailtoHeaders { + [hfname: string]: string; +} +export interface MailtoComponents extends URIComponents { + to: Array; + headers?: MailtoHeaders; + subject?: string; + body?: string; +} +declare const handler: URISchemeHandler; +export default handler; diff --git a/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts b/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts index e75f2e79..261ddcea 100644 --- a/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts +++ b/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts @@ -1,7 +1,7 @@ -import { URISchemeHandler, URIOptions } from "../uri"; -import { URNComponents } from "./urn"; -export interface UUIDComponents extends URNComponents { - uuid?: string; -} -declare const handler: URISchemeHandler; -export default handler; +import { URISchemeHandler, URIOptions } from "../uri"; +import { URNComponents } from "./urn"; +export interface UUIDComponents extends URNComponents { + uuid?: string; +} +declare const handler: URISchemeHandler; +export default handler; diff --git a/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js b/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js index d1fce495..044c8a80 100644 --- a/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js +++ b/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js @@ -1,23 +1,23 @@ -const UUID = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/; -const UUID_PARSE = /^[0-9A-Fa-f\-]{36}/; -//RFC 4122 -const handler = { - scheme: "urn:uuid", - parse: function (urnComponents, options) { - const uuidComponents = urnComponents; - uuidComponents.uuid = uuidComponents.nss; - uuidComponents.nss = undefined; - if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) { - uuidComponents.error = uuidComponents.error || "UUID is not valid."; - } - return uuidComponents; - }, - serialize: function (uuidComponents, options) { - const urnComponents = uuidComponents; - //normalize UUID - urnComponents.nss = (uuidComponents.uuid || "").toLowerCase(); - return urnComponents; - }, -}; -export default handler; +const UUID = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/; +const UUID_PARSE = /^[0-9A-Fa-f\-]{36}/; +//RFC 4122 +const handler = { + scheme: "urn:uuid", + parse: function (urnComponents, options) { + const uuidComponents = urnComponents; + uuidComponents.uuid = uuidComponents.nss; + uuidComponents.nss = undefined; + if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) { + uuidComponents.error = uuidComponents.error || "UUID is not valid."; + } + return uuidComponents; + }, + serialize: function (uuidComponents, options) { + const urnComponents = uuidComponents; + //normalize UUID + urnComponents.nss = (uuidComponents.uuid || "").toLowerCase(); + return urnComponents; + }, +}; +export default handler; //# sourceMappingURL=urn-uuid.js.map \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/schemes/urn.d.ts b/node_modules/uri-js/dist/esnext/schemes/urn.d.ts index 7e0c2fba..49481055 100644 --- a/node_modules/uri-js/dist/esnext/schemes/urn.d.ts +++ b/node_modules/uri-js/dist/esnext/schemes/urn.d.ts @@ -1,10 +1,10 @@ -import { URISchemeHandler, URIComponents, URIOptions } from "../uri"; -export interface URNComponents extends URIComponents { - nid?: string; - nss?: string; -} -export interface URNOptions extends URIOptions { - nid?: string; -} -declare const handler: URISchemeHandler; -export default handler; +import { URISchemeHandler, URIComponents, URIOptions } from "../uri"; +export interface URNComponents extends URIComponents { + nid?: string; + nss?: string; +} +export interface URNOptions extends URIOptions { + nid?: string; +} +declare const handler: URISchemeHandler; +export default handler; diff --git a/node_modules/uri-js/dist/esnext/schemes/urn.js b/node_modules/uri-js/dist/esnext/schemes/urn.js index 5d3f10aa..b53161c2 100644 --- a/node_modules/uri-js/dist/esnext/schemes/urn.js +++ b/node_modules/uri-js/dist/esnext/schemes/urn.js @@ -1,49 +1,49 @@ -import { SCHEMES } from "../uri"; -const NID$ = "(?:[0-9A-Za-z][0-9A-Za-z\\-]{1,31})"; -const PCT_ENCODED$ = "(?:\\%[0-9A-Fa-f]{2})"; -const TRANS$$ = "[0-9A-Za-z\\(\\)\\+\\,\\-\\.\\:\\=\\@\\;\\$\\_\\!\\*\\'\\/\\?\\#]"; -const NSS$ = "(?:(?:" + PCT_ENCODED$ + "|" + TRANS$$ + ")+)"; -const URN_SCHEME = new RegExp("^urn\\:(" + NID$ + ")$"); -const URN_PATH = new RegExp("^(" + NID$ + ")\\:(" + NSS$ + ")$"); -const URN_PARSE = /^([^\:]+)\:(.*)/; -const URN_EXCLUDED = /[\x00-\x20\\\"\&\<\>\[\]\^\`\{\|\}\~\x7F-\xFF]/g; -//RFC 2141 -const handler = { - scheme: "urn", - parse: function (components, options) { - const matches = components.path && components.path.match(URN_PARSE); - let urnComponents = components; - if (matches) { - const scheme = options.scheme || urnComponents.scheme || "urn"; - const nid = matches[1].toLowerCase(); - const nss = matches[2]; - const urnScheme = `${scheme}:${options.nid || nid}`; - const schemeHandler = SCHEMES[urnScheme]; - urnComponents.nid = nid; - urnComponents.nss = nss; - urnComponents.path = undefined; - if (schemeHandler) { - urnComponents = schemeHandler.parse(urnComponents, options); - } - } - else { - urnComponents.error = urnComponents.error || "URN can not be parsed."; - } - return urnComponents; - }, - serialize: function (urnComponents, options) { - const scheme = options.scheme || urnComponents.scheme || "urn"; - const nid = urnComponents.nid; - const urnScheme = `${scheme}:${options.nid || nid}`; - const schemeHandler = SCHEMES[urnScheme]; - if (schemeHandler) { - urnComponents = schemeHandler.serialize(urnComponents, options); - } - const uriComponents = urnComponents; - const nss = urnComponents.nss; - uriComponents.path = `${nid || options.nid}:${nss}`; - return uriComponents; - }, -}; -export default handler; +import { SCHEMES } from "../uri"; +const NID$ = "(?:[0-9A-Za-z][0-9A-Za-z\\-]{1,31})"; +const PCT_ENCODED$ = "(?:\\%[0-9A-Fa-f]{2})"; +const TRANS$$ = "[0-9A-Za-z\\(\\)\\+\\,\\-\\.\\:\\=\\@\\;\\$\\_\\!\\*\\'\\/\\?\\#]"; +const NSS$ = "(?:(?:" + PCT_ENCODED$ + "|" + TRANS$$ + ")+)"; +const URN_SCHEME = new RegExp("^urn\\:(" + NID$ + ")$"); +const URN_PATH = new RegExp("^(" + NID$ + ")\\:(" + NSS$ + ")$"); +const URN_PARSE = /^([^\:]+)\:(.*)/; +const URN_EXCLUDED = /[\x00-\x20\\\"\&\<\>\[\]\^\`\{\|\}\~\x7F-\xFF]/g; +//RFC 2141 +const handler = { + scheme: "urn", + parse: function (components, options) { + const matches = components.path && components.path.match(URN_PARSE); + let urnComponents = components; + if (matches) { + const scheme = options.scheme || urnComponents.scheme || "urn"; + const nid = matches[1].toLowerCase(); + const nss = matches[2]; + const urnScheme = `${scheme}:${options.nid || nid}`; + const schemeHandler = SCHEMES[urnScheme]; + urnComponents.nid = nid; + urnComponents.nss = nss; + urnComponents.path = undefined; + if (schemeHandler) { + urnComponents = schemeHandler.parse(urnComponents, options); + } + } + else { + urnComponents.error = urnComponents.error || "URN can not be parsed."; + } + return urnComponents; + }, + serialize: function (urnComponents, options) { + const scheme = options.scheme || urnComponents.scheme || "urn"; + const nid = urnComponents.nid; + const urnScheme = `${scheme}:${options.nid || nid}`; + const schemeHandler = SCHEMES[urnScheme]; + if (schemeHandler) { + urnComponents = schemeHandler.serialize(urnComponents, options); + } + const uriComponents = urnComponents; + const nss = urnComponents.nss; + uriComponents.path = `${nid || options.nid}:${nss}`; + return uriComponents; + }, +}; +export default handler; //# sourceMappingURL=urn.js.map \ No newline at end of file diff --git a/node_modules/uri-js/dist/esnext/uri.d.ts b/node_modules/uri-js/dist/esnext/uri.d.ts index da51e235..320f5341 100644 --- a/node_modules/uri-js/dist/esnext/uri.d.ts +++ b/node_modules/uri-js/dist/esnext/uri.d.ts @@ -1,59 +1,59 @@ -export interface URIComponents { - scheme?: string; - userinfo?: string; - host?: string; - port?: number | string; - path?: string; - query?: string; - fragment?: string; - reference?: string; - error?: string; -} -export interface URIOptions { - scheme?: string; - reference?: string; - tolerant?: boolean; - absolutePath?: boolean; - iri?: boolean; - unicodeSupport?: boolean; - domainHost?: boolean; -} -export interface URISchemeHandler { - scheme: string; - parse(components: ParentComponents, options: Options): Components; - serialize(components: Components, options: Options): ParentComponents; - unicodeSupport?: boolean; - domainHost?: boolean; - absolutePath?: boolean; -} -export interface URIRegExps { - NOT_SCHEME: RegExp; - NOT_USERINFO: RegExp; - NOT_HOST: RegExp; - NOT_PATH: RegExp; - NOT_PATH_NOSCHEME: RegExp; - NOT_QUERY: RegExp; - NOT_FRAGMENT: RegExp; - ESCAPE: RegExp; - UNRESERVED: RegExp; - OTHER_CHARS: RegExp; - PCT_ENCODED: RegExp; - IPV4ADDRESS: RegExp; - IPV6ADDRESS: RegExp; -} -export declare const SCHEMES: { - [scheme: string]: URISchemeHandler; -}; -export declare function pctEncChar(chr: string): string; -export declare function pctDecChars(str: string): string; -export declare function parse(uriString: string, options?: URIOptions): URIComponents; -export declare function removeDotSegments(input: string): string; -export declare function serialize(components: URIComponents, options?: URIOptions): string; -export declare function resolveComponents(base: URIComponents, relative: URIComponents, options?: URIOptions, skipNormalization?: boolean): URIComponents; -export declare function resolve(baseURI: string, relativeURI: string, options?: URIOptions): string; -export declare function normalize(uri: string, options?: URIOptions): string; -export declare function normalize(uri: URIComponents, options?: URIOptions): URIComponents; -export declare function equal(uriA: string, uriB: string, options?: URIOptions): boolean; -export declare function equal(uriA: URIComponents, uriB: URIComponents, options?: URIOptions): boolean; -export declare function escapeComponent(str: string, options?: URIOptions): string; -export declare function unescapeComponent(str: string, options?: URIOptions): string; +export interface URIComponents { + scheme?: string; + userinfo?: string; + host?: string; + port?: number | string; + path?: string; + query?: string; + fragment?: string; + reference?: string; + error?: string; +} +export interface URIOptions { + scheme?: string; + reference?: string; + tolerant?: boolean; + absolutePath?: boolean; + iri?: boolean; + unicodeSupport?: boolean; + domainHost?: boolean; +} +export interface URISchemeHandler { + scheme: string; + parse(components: ParentComponents, options: Options): Components; + serialize(components: Components, options: Options): ParentComponents; + unicodeSupport?: boolean; + domainHost?: boolean; + absolutePath?: boolean; +} +export interface URIRegExps { + NOT_SCHEME: RegExp; + NOT_USERINFO: RegExp; + NOT_HOST: RegExp; + NOT_PATH: RegExp; + NOT_PATH_NOSCHEME: RegExp; + NOT_QUERY: RegExp; + NOT_FRAGMENT: RegExp; + ESCAPE: RegExp; + UNRESERVED: RegExp; + OTHER_CHARS: RegExp; + PCT_ENCODED: RegExp; + IPV4ADDRESS: RegExp; + IPV6ADDRESS: RegExp; +} +export declare const SCHEMES: { + [scheme: string]: URISchemeHandler; +}; +export declare function pctEncChar(chr: string): string; +export declare function pctDecChars(str: string): string; +export declare function parse(uriString: string, options?: URIOptions): URIComponents; +export declare function removeDotSegments(input: string): string; +export declare function serialize(components: URIComponents, options?: URIOptions): string; +export declare function resolveComponents(base: URIComponents, relative: URIComponents, options?: URIOptions, skipNormalization?: boolean): URIComponents; +export declare function resolve(baseURI: string, relativeURI: string, options?: URIOptions): string; +export declare function normalize(uri: string, options?: URIOptions): string; +export declare function normalize(uri: URIComponents, options?: URIOptions): URIComponents; +export declare function equal(uriA: string, uriB: string, options?: URIOptions): boolean; +export declare function equal(uriA: URIComponents, uriB: URIComponents, options?: URIOptions): boolean; +export declare function escapeComponent(str: string, options?: URIOptions): string; +export declare function unescapeComponent(str: string, options?: URIOptions): string; diff --git a/node_modules/uri-js/dist/esnext/util.d.ts b/node_modules/uri-js/dist/esnext/util.d.ts index 7c128575..8b484cd3 100644 --- a/node_modules/uri-js/dist/esnext/util.d.ts +++ b/node_modules/uri-js/dist/esnext/util.d.ts @@ -1,6 +1,6 @@ -export declare function merge(...sets: Array): string; -export declare function subexp(str: string): string; -export declare function typeOf(o: any): string; -export declare function toUpperCase(str: string): string; -export declare function toArray(obj: any): Array; -export declare function assign(target: object, source: any): any; +export declare function merge(...sets: Array): string; +export declare function subexp(str: string): string; +export declare function typeOf(o: any): string; +export declare function toUpperCase(str: string): string; +export declare function toArray(obj: any): Array; +export declare function assign(target: object, source: any): any; diff --git a/node_modules/uri-js/dist/esnext/util.js b/node_modules/uri-js/dist/esnext/util.js index 072711ef..45af46fe 100644 --- a/node_modules/uri-js/dist/esnext/util.js +++ b/node_modules/uri-js/dist/esnext/util.js @@ -1,36 +1,36 @@ -export function merge(...sets) { - if (sets.length > 1) { - sets[0] = sets[0].slice(0, -1); - const xl = sets.length - 1; - for (let x = 1; x < xl; ++x) { - sets[x] = sets[x].slice(1, -1); - } - sets[xl] = sets[xl].slice(1); - return sets.join(''); - } - else { - return sets[0]; - } -} -export function subexp(str) { - return "(?:" + str + ")"; -} -export function typeOf(o) { - return o === undefined ? "undefined" : (o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase()); -} -export function toUpperCase(str) { - return str.toUpperCase(); -} -export function toArray(obj) { - return obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== "number" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : []; -} -export function assign(target, source) { - const obj = target; - if (source) { - for (const key in source) { - obj[key] = source[key]; - } - } - return obj; -} +export function merge(...sets) { + if (sets.length > 1) { + sets[0] = sets[0].slice(0, -1); + const xl = sets.length - 1; + for (let x = 1; x < xl; ++x) { + sets[x] = sets[x].slice(1, -1); + } + sets[xl] = sets[xl].slice(1); + return sets.join(''); + } + else { + return sets[0]; + } +} +export function subexp(str) { + return "(?:" + str + ")"; +} +export function typeOf(o) { + return o === undefined ? "undefined" : (o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase()); +} +export function toUpperCase(str) { + return str.toUpperCase(); +} +export function toArray(obj) { + return obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== "number" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : []; +} +export function assign(target, source) { + const obj = target; + if (source) { + for (const key in source) { + obj[key] = source[key]; + } + } + return obj; +} //# sourceMappingURL=util.js.map \ No newline at end of file diff --git a/node_modules/uri-js/tests/qunit.css b/node_modules/uri-js/tests/qunit.css index 861c40d6..a2e183d5 100644 --- a/node_modules/uri-js/tests/qunit.css +++ b/node_modules/uri-js/tests/qunit.css @@ -1,118 +1,118 @@ -ol#qunit-tests { - font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; - margin:0; - padding:0; - list-style-position:inside; - - font-size: smaller; -} -ol#qunit-tests li{ - padding:0.4em 0.5em 0.4em 2.5em; - border-bottom:1px solid #fff; - font-size:small; - list-style-position:inside; -} -ol#qunit-tests li ol{ - box-shadow: inset 0px 2px 13px #999; - -moz-box-shadow: inset 0px 2px 13px #999; - -webkit-box-shadow: inset 0px 2px 13px #999; - margin-top:0.5em; - margin-left:0; - padding:0.5em; - background-color:#fff; - border-radius:15px; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; -} -ol#qunit-tests li li{ - border-bottom:none; - margin:0.5em; - background-color:#fff; - list-style-position: inside; - padding:0.4em 0.5em 0.4em 0.5em; -} - -ol#qunit-tests li li.pass{ - border-left:26px solid #C6E746; - background-color:#fff; - color:#5E740B; - } -ol#qunit-tests li li.fail{ - border-left:26px solid #EE5757; - background-color:#fff; - color:#710909; -} -ol#qunit-tests li.pass{ - background-color:#D2E0E6; - color:#528CE0; -} -ol#qunit-tests li.fail{ - background-color:#EE5757; - color:#000; -} -ol#qunit-tests li strong { - cursor:pointer; -} -h1#qunit-header{ - background-color:#0d3349; - margin:0; - padding:0.5em 0 0.5em 1em; - color:#fff; - font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; - border-top-right-radius:15px; - border-top-left-radius:15px; - -moz-border-radius-topright:15px; - -moz-border-radius-topleft:15px; - -webkit-border-top-right-radius:15px; - -webkit-border-top-left-radius:15px; - text-shadow: rgba(0, 0, 0, 0.5) 4px 4px 1px; -} -h2#qunit-banner{ - font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; - height:5px; - margin:0; - padding:0; -} -h2#qunit-banner.qunit-pass{ - background-color:#C6E746; -} -h2#qunit-banner.qunit-fail, #qunit-testrunner-toolbar { - background-color:#EE5757; -} -#qunit-testrunner-toolbar { - font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; - padding:0; - /*width:80%;*/ - padding:0em 0 0.5em 2em; - font-size: small; -} -h2#qunit-userAgent { - font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; - background-color:#2b81af; - margin:0; - padding:0; - color:#fff; - font-size: small; - padding:0.5em 0 0.5em 2.5em; - text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px; -} -p#qunit-testresult{ - font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; - margin:0; - font-size: small; - color:#2b81af; - border-bottom-right-radius:15px; - border-bottom-left-radius:15px; - -moz-border-radius-bottomright:15px; - -moz-border-radius-bottomleft:15px; - -webkit-border-bottom-right-radius:15px; - -webkit-border-bottom-left-radius:15px; - background-color:#D2E0E6; - padding:0.5em 0.5em 0.5em 2.5em; -} -strong b.fail{ - color:#710909; - } -strong b.pass{ - color:#5E740B; +ol#qunit-tests { + font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; + margin:0; + padding:0; + list-style-position:inside; + + font-size: smaller; +} +ol#qunit-tests li{ + padding:0.4em 0.5em 0.4em 2.5em; + border-bottom:1px solid #fff; + font-size:small; + list-style-position:inside; +} +ol#qunit-tests li ol{ + box-shadow: inset 0px 2px 13px #999; + -moz-box-shadow: inset 0px 2px 13px #999; + -webkit-box-shadow: inset 0px 2px 13px #999; + margin-top:0.5em; + margin-left:0; + padding:0.5em; + background-color:#fff; + border-radius:15px; + -moz-border-radius: 15px; + -webkit-border-radius: 15px; +} +ol#qunit-tests li li{ + border-bottom:none; + margin:0.5em; + background-color:#fff; + list-style-position: inside; + padding:0.4em 0.5em 0.4em 0.5em; +} + +ol#qunit-tests li li.pass{ + border-left:26px solid #C6E746; + background-color:#fff; + color:#5E740B; + } +ol#qunit-tests li li.fail{ + border-left:26px solid #EE5757; + background-color:#fff; + color:#710909; +} +ol#qunit-tests li.pass{ + background-color:#D2E0E6; + color:#528CE0; +} +ol#qunit-tests li.fail{ + background-color:#EE5757; + color:#000; +} +ol#qunit-tests li strong { + cursor:pointer; +} +h1#qunit-header{ + background-color:#0d3349; + margin:0; + padding:0.5em 0 0.5em 1em; + color:#fff; + font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; + border-top-right-radius:15px; + border-top-left-radius:15px; + -moz-border-radius-topright:15px; + -moz-border-radius-topleft:15px; + -webkit-border-top-right-radius:15px; + -webkit-border-top-left-radius:15px; + text-shadow: rgba(0, 0, 0, 0.5) 4px 4px 1px; +} +h2#qunit-banner{ + font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; + height:5px; + margin:0; + padding:0; +} +h2#qunit-banner.qunit-pass{ + background-color:#C6E746; +} +h2#qunit-banner.qunit-fail, #qunit-testrunner-toolbar { + background-color:#EE5757; +} +#qunit-testrunner-toolbar { + font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; + padding:0; + /*width:80%;*/ + padding:0em 0 0.5em 2em; + font-size: small; +} +h2#qunit-userAgent { + font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; + background-color:#2b81af; + margin:0; + padding:0; + color:#fff; + font-size: small; + padding:0.5em 0 0.5em 2.5em; + text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px; +} +p#qunit-testresult{ + font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; + margin:0; + font-size: small; + color:#2b81af; + border-bottom-right-radius:15px; + border-bottom-left-radius:15px; + -moz-border-radius-bottomright:15px; + -moz-border-radius-bottomleft:15px; + -webkit-border-bottom-right-radius:15px; + -webkit-border-bottom-left-radius:15px; + background-color:#D2E0E6; + padding:0.5em 0.5em 0.5em 2.5em; +} +strong b.fail{ + color:#710909; + } +strong b.pass{ + color:#5E740B; } \ No newline at end of file diff --git a/node_modules/uri-js/tests/qunit.js b/node_modules/uri-js/tests/qunit.js index 8bef0261..e449fdf8 100644 --- a/node_modules/uri-js/tests/qunit.js +++ b/node_modules/uri-js/tests/qunit.js @@ -1,1042 +1,1042 @@ -/* - * QUnit - A JavaScript Unit Testing Framework - * - * http://docs.jquery.com/QUnit - * - * Copyright (c) 2009 John Resig, Jörn Zaefferer - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - */ - -(function(window) { - -var QUnit = { - - // Initialize the configuration options - init: function() { - config = { - stats: { all: 0, bad: 0 }, - moduleStats: { all: 0, bad: 0 }, - started: +new Date, - blocking: false, - autorun: false, - assertions: [], - filters: [], - queue: [] - }; - - var tests = id("qunit-tests"), - banner = id("qunit-banner"), - result = id("qunit-testresult"); - - if ( tests ) { - tests.innerHTML = ""; - } - - if ( banner ) { - banner.className = ""; - } - - if ( result ) { - result.parentNode.removeChild( result ); - } - }, - - // call on start of module test to prepend name to all tests - module: function(name, testEnvironment) { - config.currentModule = name; - - synchronize(function() { - if ( config.currentModule ) { - QUnit.moduleDone( config.currentModule, config.moduleStats.bad, config.moduleStats.all ); - } - - config.currentModule = name; - config.moduleTestEnvironment = testEnvironment; - config.moduleStats = { all: 0, bad: 0 }; - - QUnit.moduleStart( name, testEnvironment ); - }); - }, - - asyncTest: function(testName, expected, callback) { - if ( arguments.length === 2 ) { - callback = expected; - expected = 0; - } - - QUnit.test(testName, expected, callback, true); - }, - - test: function(testName, expected, callback, async) { - var name = testName, testEnvironment, testEnvironmentArg; - - if ( arguments.length === 2 ) { - callback = expected; - expected = null; - } - // is 2nd argument a testEnvironment? - if ( expected && typeof expected === 'object') { - testEnvironmentArg = expected; - expected = null; - } - - if ( config.currentModule ) { - name = config.currentModule + " module: " + name; - } - - if ( !validTest(name) ) { - return; - } - - synchronize(function() { - QUnit.testStart( testName ); - - testEnvironment = extend({ - setup: function() {}, - teardown: function() {} - }, config.moduleTestEnvironment); - if (testEnvironmentArg) { - extend(testEnvironment,testEnvironmentArg); - } - - // allow utility functions to access the current test environment - QUnit.current_testEnvironment = testEnvironment; - - config.assertions = []; - config.expected = expected; - - try { - if ( !config.pollution ) { - saveGlobal(); - } - - testEnvironment.setup.call(testEnvironment); - } catch(e) { - QUnit.ok( false, "Setup failed on " + name + ": " + e.message ); - } - - if ( async ) { - QUnit.stop(); - } - - try { - callback.call(testEnvironment); - } catch(e) { - fail("Test " + name + " died, exception and test follows", e, callback); - QUnit.ok( false, "Died on test #" + (config.assertions.length + 1) + ": " + e.message ); - // else next test will carry the responsibility - saveGlobal(); - - // Restart the tests if they're blocking - if ( config.blocking ) { - start(); - } - } - }); - - synchronize(function() { - try { - checkPollution(); - testEnvironment.teardown.call(testEnvironment); - } catch(e) { - QUnit.ok( false, "Teardown failed on " + name + ": " + e.message ); - } - - try { - QUnit.reset(); - } catch(e) { - fail("reset() failed, following Test " + name + ", exception and reset fn follows", e, reset); - } - - if ( config.expected && config.expected != config.assertions.length ) { - QUnit.ok( false, "Expected " + config.expected + " assertions, but " + config.assertions.length + " were run" ); - } - - var good = 0, bad = 0, - tests = id("qunit-tests"); - - config.stats.all += config.assertions.length; - config.moduleStats.all += config.assertions.length; - - if ( tests ) { - var ol = document.createElement("ol"); - ol.style.display = "none"; - - for ( var i = 0; i < config.assertions.length; i++ ) { - var assertion = config.assertions[i]; - - var li = document.createElement("li"); - li.className = assertion.result ? "pass" : "fail"; - li.appendChild(document.createTextNode(assertion.message || "(no message)")); - ol.appendChild( li ); - - if ( assertion.result ) { - good++; - } else { - bad++; - config.stats.bad++; - config.moduleStats.bad++; - } - } - - var b = document.createElement("strong"); - b.innerHTML = name + " (" + bad + ", " + good + ", " + config.assertions.length + ")"; - - addEvent(b, "click", function() { - var next = b.nextSibling, display = next.style.display; - next.style.display = display === "none" ? "block" : "none"; - }); - - addEvent(b, "dblclick", function(e) { - var target = e && e.target ? e.target : window.event.srcElement; - if ( target.nodeName.toLowerCase() === "strong" ) { - var text = "", node = target.firstChild; - - while ( node.nodeType === 3 ) { - text += node.nodeValue; - node = node.nextSibling; - } - - text = text.replace(/(^\s*|\s*$)/g, ""); - - if ( window.location ) { - window.location.href = window.location.href.match(/^(.+?)(\?.*)?$/)[1] + "?" + encodeURIComponent(text); - } - } - }); - - var li = document.createElement("li"); - li.className = bad ? "fail" : "pass"; - li.appendChild( b ); - li.appendChild( ol ); - tests.appendChild( li ); - - if ( bad ) { - var toolbar = id("qunit-testrunner-toolbar"); - if ( toolbar ) { - toolbar.style.display = "block"; - id("qunit-filter-pass").disabled = null; - id("qunit-filter-missing").disabled = null; - } - } - - } else { - for ( var i = 0; i < config.assertions.length; i++ ) { - if ( !config.assertions[i].result ) { - bad++; - config.stats.bad++; - config.moduleStats.bad++; - } - } - } - - QUnit.testDone( testName, bad, config.assertions.length ); - - if ( !window.setTimeout && !config.queue.length ) { - done(); - } - }); - - if ( window.setTimeout && !config.doneTimer ) { - config.doneTimer = window.setTimeout(function(){ - if ( !config.queue.length ) { - done(); - } else { - synchronize( done ); - } - }, 13); - } - }, - - /** - * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through. - */ - expect: function(asserts) { - config.expected = asserts; - }, - - /** - * Asserts true. - * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" ); - */ - ok: function(a, msg) { - QUnit.log(a, msg); - - config.assertions.push({ - result: !!a, - message: msg - }); - }, - - /** - * Checks that the first two arguments are equal, with an optional message. - * Prints out both actual and expected values. - * - * Prefered to ok( actual == expected, message ) - * - * @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." ); - * - * @param Object actual - * @param Object expected - * @param String message (optional) - */ - equal: function(actual, expected, message) { - push(expected == actual, actual, expected, message); - }, - - notEqual: function(actual, expected, message) { - push(expected != actual, actual, expected, message); - }, - - deepEqual: function(a, b, message) { - push(QUnit.equiv(a, b), a, b, message); - }, - - notDeepEqual: function(a, b, message) { - push(!QUnit.equiv(a, b), a, b, message); - }, - - strictEqual: function(actual, expected, message) { - push(expected === actual, actual, expected, message); - }, - - notStrictEqual: function(actual, expected, message) { - push(expected !== actual, actual, expected, message); - }, - - start: function() { - // A slight delay, to avoid any current callbacks - if ( window.setTimeout ) { - window.setTimeout(function() { - if ( config.timeout ) { - clearTimeout(config.timeout); - } - - config.blocking = false; - process(); - }, 13); - } else { - config.blocking = false; - process(); - } - }, - - stop: function(timeout) { - config.blocking = true; - - if ( timeout && window.setTimeout ) { - config.timeout = window.setTimeout(function() { - QUnit.ok( false, "Test timed out" ); - QUnit.start(); - }, timeout); - } - }, - - /** - * Resets the test setup. Useful for tests that modify the DOM. - */ - reset: function() { - if ( window.jQuery ) { - jQuery("#main").html( config.fixture ); - jQuery.event.global = {}; - jQuery.ajaxSettings = extend({}, config.ajaxSettings); - } - }, - - /** - * Trigger an event on an element. - * - * @example triggerEvent( document.body, "click" ); - * - * @param DOMElement elem - * @param String type - */ - triggerEvent: function( elem, type, event ) { - if ( document.createEvent ) { - event = document.createEvent("MouseEvents"); - event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView, - 0, 0, 0, 0, 0, false, false, false, false, 0, null); - elem.dispatchEvent( event ); - - } else if ( elem.fireEvent ) { - elem.fireEvent("on"+type); - } - }, - - // Safe object type checking - is: function( type, obj ) { - return Object.prototype.toString.call( obj ) === "[object "+ type +"]"; - }, - - // Logging callbacks - done: function(failures, total) {}, - log: function(result, message) {}, - testStart: function(name) {}, - testDone: function(name, failures, total) {}, - moduleStart: function(name, testEnvironment) {}, - moduleDone: function(name, failures, total) {} -}; - -// Backwards compatibility, deprecated -QUnit.equals = QUnit.equal; -QUnit.same = QUnit.deepEqual; - -// Maintain internal state -var config = { - // The queue of tests to run - queue: [], - - // block until document ready - blocking: true -}; - -// Load paramaters -(function() { - var location = window.location || { search: "", protocol: "file:" }, - GETParams = location.search.slice(1).split('&'); - - for ( var i = 0; i < GETParams.length; i++ ) { - GETParams[i] = decodeURIComponent( GETParams[i] ); - if ( GETParams[i] === "noglobals" ) { - GETParams.splice( i, 1 ); - i--; - config.noglobals = true; - } else if ( GETParams[i].search('=') > -1 ) { - GETParams.splice( i, 1 ); - i--; - } - } - - // restrict modules/tests by get parameters - config.filters = GETParams; - - // Figure out if we're running the tests from a server or not - QUnit.isLocal = !!(location.protocol === 'file:'); -})(); - -// Expose the API as global variables, unless an 'exports' -// object exists, in that case we assume we're in CommonJS -if ( typeof exports === "undefined" || typeof require === "undefined" ) { - extend(window, QUnit); - window.QUnit = QUnit; -} else { - extend(exports, QUnit); - exports.QUnit = QUnit; -} - -if ( typeof document === "undefined" || document.readyState === "complete" ) { - config.autorun = true; -} - -addEvent(window, "load", function() { - // Initialize the config, saving the execution queue - var oldconfig = extend({}, config); - QUnit.init(); - extend(config, oldconfig); - - config.blocking = false; - - var userAgent = id("qunit-userAgent"); - if ( userAgent ) { - userAgent.innerHTML = navigator.userAgent; - } - - var toolbar = id("qunit-testrunner-toolbar"); - if ( toolbar ) { - toolbar.style.display = "none"; - - var filter = document.createElement("input"); - filter.type = "checkbox"; - filter.id = "qunit-filter-pass"; - filter.disabled = true; - addEvent( filter, "click", function() { - var li = document.getElementsByTagName("li"); - for ( var i = 0; i < li.length; i++ ) { - if ( li[i].className.indexOf("pass") > -1 ) { - li[i].style.display = filter.checked ? "none" : ""; - } - } - }); - toolbar.appendChild( filter ); - - var label = document.createElement("label"); - label.setAttribute("for", "qunit-filter-pass"); - label.innerHTML = "Hide passed tests"; - toolbar.appendChild( label ); - - var missing = document.createElement("input"); - missing.type = "checkbox"; - missing.id = "qunit-filter-missing"; - missing.disabled = true; - addEvent( missing, "click", function() { - var li = document.getElementsByTagName("li"); - for ( var i = 0; i < li.length; i++ ) { - if ( li[i].className.indexOf("fail") > -1 && li[i].innerHTML.indexOf('missing test - untested code is broken code') > - 1 ) { - li[i].parentNode.parentNode.style.display = missing.checked ? "none" : "block"; - } - } - }); - toolbar.appendChild( missing ); - - label = document.createElement("label"); - label.setAttribute("for", "qunit-filter-missing"); - label.innerHTML = "Hide missing tests (untested code is broken code)"; - toolbar.appendChild( label ); - } - - var main = id('main'); - if ( main ) { - config.fixture = main.innerHTML; - } - - if ( window.jQuery ) { - config.ajaxSettings = window.jQuery.ajaxSettings; - } - - QUnit.start(); -}); - -function done() { - if ( config.doneTimer && window.clearTimeout ) { - window.clearTimeout( config.doneTimer ); - config.doneTimer = null; - } - - if ( config.queue.length ) { - config.doneTimer = window.setTimeout(function(){ - if ( !config.queue.length ) { - done(); - } else { - synchronize( done ); - } - }, 13); - - return; - } - - config.autorun = true; - - // Log the last module results - if ( config.currentModule ) { - QUnit.moduleDone( config.currentModule, config.moduleStats.bad, config.moduleStats.all ); - } - - var banner = id("qunit-banner"), - tests = id("qunit-tests"), - html = ['Tests completed in ', - +new Date - config.started, ' milliseconds.
', - '', config.stats.all - config.stats.bad, ' tests of ', config.stats.all, ' passed, ', config.stats.bad,' failed.'].join(''); - - if ( banner ) { - banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass"); - } - - if ( tests ) { - var result = id("qunit-testresult"); - - if ( !result ) { - result = document.createElement("p"); - result.id = "qunit-testresult"; - result.className = "result"; - tests.parentNode.insertBefore( result, tests.nextSibling ); - } - - result.innerHTML = html; - } - - QUnit.done( config.stats.bad, config.stats.all ); -} - -function validTest( name ) { - var i = config.filters.length, - run = false; - - if ( !i ) { - return true; - } - - while ( i-- ) { - var filter = config.filters[i], - not = filter.charAt(0) == '!'; - - if ( not ) { - filter = filter.slice(1); - } - - if ( name.indexOf(filter) !== -1 ) { - return !not; - } - - if ( not ) { - run = true; - } - } - - return run; -} - -function push(result, actual, expected, message) { - message = message || (result ? "okay" : "failed"); - QUnit.ok( result, result ? message + ": " + expected : message + ", expected: " + QUnit.jsDump.parse(expected) + " result: " + QUnit.jsDump.parse(actual) ); -} - -function synchronize( callback ) { - config.queue.push( callback ); - - if ( config.autorun && !config.blocking ) { - process(); - } -} - -function process() { - while ( config.queue.length && !config.blocking ) { - config.queue.shift()(); - } -} - -function saveGlobal() { - config.pollution = []; - - if ( config.noglobals ) { - for ( var key in window ) { - config.pollution.push( key ); - } - } -} - -function checkPollution( name ) { - var old = config.pollution; - saveGlobal(); - - var newGlobals = diff( old, config.pollution ); - if ( newGlobals.length > 0 ) { - ok( false, "Introduced global variable(s): " + newGlobals.join(", ") ); - config.expected++; - } - - var deletedGlobals = diff( config.pollution, old ); - if ( deletedGlobals.length > 0 ) { - ok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") ); - config.expected++; - } -} - -// returns a new Array with the elements that are in a but not in b -function diff( a, b ) { - var result = a.slice(); - for ( var i = 0; i < result.length; i++ ) { - for ( var j = 0; j < b.length; j++ ) { - if ( result[i] === b[j] ) { - result.splice(i, 1); - i--; - break; - } - } - } - return result; -} - -function fail(message, exception, callback) { - if ( typeof console !== "undefined" && console.error && console.warn ) { - console.error(message); - console.error(exception); - console.warn(callback.toString()); - - } else if ( window.opera && opera.postError ) { - opera.postError(message, exception, callback.toString); - } -} - -function extend(a, b) { - for ( var prop in b ) { - a[prop] = b[prop]; - } - - return a; -} - -function addEvent(elem, type, fn) { - if ( elem.addEventListener ) { - elem.addEventListener( type, fn, false ); - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, fn ); - } else { - fn(); - } -} - -function id(name) { - return !!(typeof document !== "undefined" && document && document.getElementById) && - document.getElementById( name ); -} - -// Test for equality any JavaScript type. -// Discussions and reference: http://philrathe.com/articles/equiv -// Test suites: http://philrathe.com/tests/equiv -// Author: Philippe Rathé -QUnit.equiv = function () { - - var innerEquiv; // the real equiv function - var callers = []; // stack to decide between skip/abort functions - - - // Determine what is o. - function hoozit(o) { - if (QUnit.is("String", o)) { - return "string"; - - } else if (QUnit.is("Boolean", o)) { - return "boolean"; - - } else if (QUnit.is("Number", o)) { - - if (isNaN(o)) { - return "nan"; - } else { - return "number"; - } - - } else if (typeof o === "undefined") { - return "undefined"; - - // consider: typeof null === object - } else if (o === null) { - return "null"; - - // consider: typeof [] === object - } else if (QUnit.is( "Array", o)) { - return "array"; - - // consider: typeof new Date() === object - } else if (QUnit.is( "Date", o)) { - return "date"; - - // consider: /./ instanceof Object; - // /./ instanceof RegExp; - // typeof /./ === "function"; // => false in IE and Opera, - // true in FF and Safari - } else if (QUnit.is( "RegExp", o)) { - return "regexp"; - - } else if (typeof o === "object") { - return "object"; - - } else if (QUnit.is( "Function", o)) { - return "function"; - } else { - return undefined; - } - } - - // Call the o related callback with the given arguments. - function bindCallbacks(o, callbacks, args) { - var prop = hoozit(o); - if (prop) { - if (hoozit(callbacks[prop]) === "function") { - return callbacks[prop].apply(callbacks, args); - } else { - return callbacks[prop]; // or undefined - } - } - } - - var callbacks = function () { - - // for string, boolean, number and null - function useStrictEquality(b, a) { - if (b instanceof a.constructor || a instanceof b.constructor) { - // to catch short annotaion VS 'new' annotation of a declaration - // e.g. var i = 1; - // var j = new Number(1); - return a == b; - } else { - return a === b; - } - } - - return { - "string": useStrictEquality, - "boolean": useStrictEquality, - "number": useStrictEquality, - "null": useStrictEquality, - "undefined": useStrictEquality, - - "nan": function (b) { - return isNaN(b); - }, - - "date": function (b, a) { - return hoozit(b) === "date" && a.valueOf() === b.valueOf(); - }, - - "regexp": function (b, a) { - return hoozit(b) === "regexp" && - a.source === b.source && // the regex itself - a.global === b.global && // and its modifers (gmi) ... - a.ignoreCase === b.ignoreCase && - a.multiline === b.multiline; - }, - - // - skip when the property is a method of an instance (OOP) - // - abort otherwise, - // initial === would have catch identical references anyway - "function": function () { - var caller = callers[callers.length - 1]; - return caller !== Object && - typeof caller !== "undefined"; - }, - - "array": function (b, a) { - var i; - var len; - - // b could be an object literal here - if ( ! (hoozit(b) === "array")) { - return false; - } - - len = a.length; - if (len !== b.length) { // safe and faster - return false; - } - for (i = 0; i < len; i++) { - if ( ! innerEquiv(a[i], b[i])) { - return false; - } - } - return true; - }, - - "object": function (b, a) { - var i; - var eq = true; // unless we can proove it - var aProperties = [], bProperties = []; // collection of strings - - // comparing constructors is more strict than using instanceof - if ( a.constructor !== b.constructor) { - return false; - } - - // stack constructor before traversing properties - callers.push(a.constructor); - - for (i in a) { // be strict: don't ensures hasOwnProperty and go deep - - aProperties.push(i); // collect a's properties - - if ( ! innerEquiv(a[i], b[i])) { - eq = false; - } - } - - callers.pop(); // unstack, we are done - - for (i in b) { - bProperties.push(i); // collect b's properties - } - - // Ensures identical properties name - return eq && innerEquiv(aProperties.sort(), bProperties.sort()); - } - }; - }(); - - innerEquiv = function () { // can take multiple arguments - var args = Array.prototype.slice.apply(arguments); - if (args.length < 2) { - return true; // end transition - } - - return (function (a, b) { - if (a === b) { - return true; // catch the most you can - } else if (a === null || b === null || typeof a === "undefined" || typeof b === "undefined" || hoozit(a) !== hoozit(b)) { - return false; // don't lose time with error prone cases - } else { - return bindCallbacks(a, callbacks, [b, a]); - } - - // apply transition with (1..n) arguments - })(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length -1)); - }; - - return innerEquiv; - -}(); - -/** - * jsDump - * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com - * Licensed under BSD (http://www.opensource.org/licenses/bsd-license.php) - * Date: 5/15/2008 - * @projectDescription Advanced and extensible data dumping for Javascript. - * @version 1.0.0 - * @author Ariel Flesler - * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html} - */ -QUnit.jsDump = (function() { - function quote( str ) { - return '"' + str.toString().replace(/"/g, '\\"') + '"'; - }; - function literal( o ) { - return o + ''; - }; - function join( pre, arr, post ) { - var s = jsDump.separator(), - base = jsDump.indent(), - inner = jsDump.indent(1); - if ( arr.join ) - arr = arr.join( ',' + s + inner ); - if ( !arr ) - return pre + post; - return [ pre, inner + arr, base + post ].join(s); - }; - function array( arr ) { - var i = arr.length, ret = Array(i); - this.up(); - while ( i-- ) - ret[i] = this.parse( arr[i] ); - this.down(); - return join( '[', ret, ']' ); - }; - - var reName = /^function (\w+)/; - - var jsDump = { - parse:function( obj, type ) { //type is used mostly internally, you can fix a (custom)type in advance - var parser = this.parsers[ type || this.typeOf(obj) ]; - type = typeof parser; - - return type == 'function' ? parser.call( this, obj ) : - type == 'string' ? parser : - this.parsers.error; - }, - typeOf:function( obj ) { - var type; - if ( obj === null ) { - type = "null"; - } else if (typeof obj === "undefined") { - type = "undefined"; - } else if (QUnit.is("RegExp", obj)) { - type = "regexp"; - } else if (QUnit.is("Date", obj)) { - type = "date"; - } else if (QUnit.is("Function", obj)) { - type = "function"; - } else if (QUnit.is("Array", obj)) { - type = "array"; - } else if (QUnit.is("Window", obj) || QUnit.is("global", obj)) { - type = "window"; - } else if (QUnit.is("HTMLDocument", obj)) { - type = "document"; - } else if (QUnit.is("HTMLCollection", obj) || QUnit.is("NodeList", obj)) { - type = "nodelist"; - } else if (/^\[object HTML/.test(Object.prototype.toString.call( obj ))) { - type = "node"; - } else { - type = typeof obj; - } - return type; - }, - separator:function() { - return this.multiline ? this.HTML ? '
' : '\n' : this.HTML ? ' ' : ' '; - }, - indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing - if ( !this.multiline ) - return ''; - var chr = this.indentChar; - if ( this.HTML ) - chr = chr.replace(/\t/g,' ').replace(/ /g,' '); - return Array( this._depth_ + (extra||0) ).join(chr); - }, - up:function( a ) { - this._depth_ += a || 1; - }, - down:function( a ) { - this._depth_ -= a || 1; - }, - setParser:function( name, parser ) { - this.parsers[name] = parser; - }, - // The next 3 are exposed so you can use them - quote:quote, - literal:literal, - join:join, - // - _depth_: 1, - // This is the list of parsers, to modify them, use jsDump.setParser - parsers:{ - window: '[Window]', - document: '[Document]', - error:'[ERROR]', //when no parser is found, shouldn't happen - unknown: '[Unknown]', - 'null':'null', - undefined:'undefined', - 'function':function( fn ) { - var ret = 'function', - name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE - if ( name ) - ret += ' ' + name; - ret += '('; - - ret = [ ret, this.parse( fn, 'functionArgs' ), '){'].join(''); - return join( ret, this.parse(fn,'functionCode'), '}' ); - }, - array: array, - nodelist: array, - arguments: array, - object:function( map ) { - var ret = [ ]; - this.up(); - for ( var key in map ) - ret.push( this.parse(key,'key') + ': ' + this.parse(map[key]) ); - this.down(); - return join( '{', ret, '}' ); - }, - node:function( node ) { - var open = this.HTML ? '<' : '<', - close = this.HTML ? '>' : '>'; - - var tag = node.nodeName.toLowerCase(), - ret = open + tag; - - for ( var a in this.DOMAttrs ) { - var val = node[this.DOMAttrs[a]]; - if ( val ) - ret += ' ' + a + '=' + this.parse( val, 'attribute' ); - } - return ret + close + open + '/' + tag + close; - }, - functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function - var l = fn.length; - if ( !l ) return ''; - - var args = Array(l); - while ( l-- ) - args[l] = String.fromCharCode(97+l);//97 is 'a' - return ' ' + args.join(', ') + ' '; - }, - key:quote, //object calls it internally, the key part of an item in a map - functionCode:'[code]', //function calls it internally, it's the content of the function - attribute:quote, //node calls it internally, it's an html attribute value - string:quote, - date:quote, - regexp:literal, //regex - number:literal, - 'boolean':literal - }, - DOMAttrs:{//attributes to dump from nodes, name=>realName - id:'id', - name:'name', - 'class':'className' - }, - HTML:true,//if true, entities are escaped ( <, >, \t, space and \n ) - indentChar:' ',//indentation unit - multiline:true //if true, items in a collection, are separated by a \n, else just a space. - }; - - return jsDump; -})(); - -})(this); +/* + * QUnit - A JavaScript Unit Testing Framework + * + * http://docs.jquery.com/QUnit + * + * Copyright (c) 2009 John Resig, Jörn Zaefferer + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + */ + +(function(window) { + +var QUnit = { + + // Initialize the configuration options + init: function() { + config = { + stats: { all: 0, bad: 0 }, + moduleStats: { all: 0, bad: 0 }, + started: +new Date, + blocking: false, + autorun: false, + assertions: [], + filters: [], + queue: [] + }; + + var tests = id("qunit-tests"), + banner = id("qunit-banner"), + result = id("qunit-testresult"); + + if ( tests ) { + tests.innerHTML = ""; + } + + if ( banner ) { + banner.className = ""; + } + + if ( result ) { + result.parentNode.removeChild( result ); + } + }, + + // call on start of module test to prepend name to all tests + module: function(name, testEnvironment) { + config.currentModule = name; + + synchronize(function() { + if ( config.currentModule ) { + QUnit.moduleDone( config.currentModule, config.moduleStats.bad, config.moduleStats.all ); + } + + config.currentModule = name; + config.moduleTestEnvironment = testEnvironment; + config.moduleStats = { all: 0, bad: 0 }; + + QUnit.moduleStart( name, testEnvironment ); + }); + }, + + asyncTest: function(testName, expected, callback) { + if ( arguments.length === 2 ) { + callback = expected; + expected = 0; + } + + QUnit.test(testName, expected, callback, true); + }, + + test: function(testName, expected, callback, async) { + var name = testName, testEnvironment, testEnvironmentArg; + + if ( arguments.length === 2 ) { + callback = expected; + expected = null; + } + // is 2nd argument a testEnvironment? + if ( expected && typeof expected === 'object') { + testEnvironmentArg = expected; + expected = null; + } + + if ( config.currentModule ) { + name = config.currentModule + " module: " + name; + } + + if ( !validTest(name) ) { + return; + } + + synchronize(function() { + QUnit.testStart( testName ); + + testEnvironment = extend({ + setup: function() {}, + teardown: function() {} + }, config.moduleTestEnvironment); + if (testEnvironmentArg) { + extend(testEnvironment,testEnvironmentArg); + } + + // allow utility functions to access the current test environment + QUnit.current_testEnvironment = testEnvironment; + + config.assertions = []; + config.expected = expected; + + try { + if ( !config.pollution ) { + saveGlobal(); + } + + testEnvironment.setup.call(testEnvironment); + } catch(e) { + QUnit.ok( false, "Setup failed on " + name + ": " + e.message ); + } + + if ( async ) { + QUnit.stop(); + } + + try { + callback.call(testEnvironment); + } catch(e) { + fail("Test " + name + " died, exception and test follows", e, callback); + QUnit.ok( false, "Died on test #" + (config.assertions.length + 1) + ": " + e.message ); + // else next test will carry the responsibility + saveGlobal(); + + // Restart the tests if they're blocking + if ( config.blocking ) { + start(); + } + } + }); + + synchronize(function() { + try { + checkPollution(); + testEnvironment.teardown.call(testEnvironment); + } catch(e) { + QUnit.ok( false, "Teardown failed on " + name + ": " + e.message ); + } + + try { + QUnit.reset(); + } catch(e) { + fail("reset() failed, following Test " + name + ", exception and reset fn follows", e, reset); + } + + if ( config.expected && config.expected != config.assertions.length ) { + QUnit.ok( false, "Expected " + config.expected + " assertions, but " + config.assertions.length + " were run" ); + } + + var good = 0, bad = 0, + tests = id("qunit-tests"); + + config.stats.all += config.assertions.length; + config.moduleStats.all += config.assertions.length; + + if ( tests ) { + var ol = document.createElement("ol"); + ol.style.display = "none"; + + for ( var i = 0; i < config.assertions.length; i++ ) { + var assertion = config.assertions[i]; + + var li = document.createElement("li"); + li.className = assertion.result ? "pass" : "fail"; + li.appendChild(document.createTextNode(assertion.message || "(no message)")); + ol.appendChild( li ); + + if ( assertion.result ) { + good++; + } else { + bad++; + config.stats.bad++; + config.moduleStats.bad++; + } + } + + var b = document.createElement("strong"); + b.innerHTML = name + " (" + bad + ", " + good + ", " + config.assertions.length + ")"; + + addEvent(b, "click", function() { + var next = b.nextSibling, display = next.style.display; + next.style.display = display === "none" ? "block" : "none"; + }); + + addEvent(b, "dblclick", function(e) { + var target = e && e.target ? e.target : window.event.srcElement; + if ( target.nodeName.toLowerCase() === "strong" ) { + var text = "", node = target.firstChild; + + while ( node.nodeType === 3 ) { + text += node.nodeValue; + node = node.nextSibling; + } + + text = text.replace(/(^\s*|\s*$)/g, ""); + + if ( window.location ) { + window.location.href = window.location.href.match(/^(.+?)(\?.*)?$/)[1] + "?" + encodeURIComponent(text); + } + } + }); + + var li = document.createElement("li"); + li.className = bad ? "fail" : "pass"; + li.appendChild( b ); + li.appendChild( ol ); + tests.appendChild( li ); + + if ( bad ) { + var toolbar = id("qunit-testrunner-toolbar"); + if ( toolbar ) { + toolbar.style.display = "block"; + id("qunit-filter-pass").disabled = null; + id("qunit-filter-missing").disabled = null; + } + } + + } else { + for ( var i = 0; i < config.assertions.length; i++ ) { + if ( !config.assertions[i].result ) { + bad++; + config.stats.bad++; + config.moduleStats.bad++; + } + } + } + + QUnit.testDone( testName, bad, config.assertions.length ); + + if ( !window.setTimeout && !config.queue.length ) { + done(); + } + }); + + if ( window.setTimeout && !config.doneTimer ) { + config.doneTimer = window.setTimeout(function(){ + if ( !config.queue.length ) { + done(); + } else { + synchronize( done ); + } + }, 13); + } + }, + + /** + * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through. + */ + expect: function(asserts) { + config.expected = asserts; + }, + + /** + * Asserts true. + * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" ); + */ + ok: function(a, msg) { + QUnit.log(a, msg); + + config.assertions.push({ + result: !!a, + message: msg + }); + }, + + /** + * Checks that the first two arguments are equal, with an optional message. + * Prints out both actual and expected values. + * + * Prefered to ok( actual == expected, message ) + * + * @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." ); + * + * @param Object actual + * @param Object expected + * @param String message (optional) + */ + equal: function(actual, expected, message) { + push(expected == actual, actual, expected, message); + }, + + notEqual: function(actual, expected, message) { + push(expected != actual, actual, expected, message); + }, + + deepEqual: function(a, b, message) { + push(QUnit.equiv(a, b), a, b, message); + }, + + notDeepEqual: function(a, b, message) { + push(!QUnit.equiv(a, b), a, b, message); + }, + + strictEqual: function(actual, expected, message) { + push(expected === actual, actual, expected, message); + }, + + notStrictEqual: function(actual, expected, message) { + push(expected !== actual, actual, expected, message); + }, + + start: function() { + // A slight delay, to avoid any current callbacks + if ( window.setTimeout ) { + window.setTimeout(function() { + if ( config.timeout ) { + clearTimeout(config.timeout); + } + + config.blocking = false; + process(); + }, 13); + } else { + config.blocking = false; + process(); + } + }, + + stop: function(timeout) { + config.blocking = true; + + if ( timeout && window.setTimeout ) { + config.timeout = window.setTimeout(function() { + QUnit.ok( false, "Test timed out" ); + QUnit.start(); + }, timeout); + } + }, + + /** + * Resets the test setup. Useful for tests that modify the DOM. + */ + reset: function() { + if ( window.jQuery ) { + jQuery("#main").html( config.fixture ); + jQuery.event.global = {}; + jQuery.ajaxSettings = extend({}, config.ajaxSettings); + } + }, + + /** + * Trigger an event on an element. + * + * @example triggerEvent( document.body, "click" ); + * + * @param DOMElement elem + * @param String type + */ + triggerEvent: function( elem, type, event ) { + if ( document.createEvent ) { + event = document.createEvent("MouseEvents"); + event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView, + 0, 0, 0, 0, 0, false, false, false, false, 0, null); + elem.dispatchEvent( event ); + + } else if ( elem.fireEvent ) { + elem.fireEvent("on"+type); + } + }, + + // Safe object type checking + is: function( type, obj ) { + return Object.prototype.toString.call( obj ) === "[object "+ type +"]"; + }, + + // Logging callbacks + done: function(failures, total) {}, + log: function(result, message) {}, + testStart: function(name) {}, + testDone: function(name, failures, total) {}, + moduleStart: function(name, testEnvironment) {}, + moduleDone: function(name, failures, total) {} +}; + +// Backwards compatibility, deprecated +QUnit.equals = QUnit.equal; +QUnit.same = QUnit.deepEqual; + +// Maintain internal state +var config = { + // The queue of tests to run + queue: [], + + // block until document ready + blocking: true +}; + +// Load paramaters +(function() { + var location = window.location || { search: "", protocol: "file:" }, + GETParams = location.search.slice(1).split('&'); + + for ( var i = 0; i < GETParams.length; i++ ) { + GETParams[i] = decodeURIComponent( GETParams[i] ); + if ( GETParams[i] === "noglobals" ) { + GETParams.splice( i, 1 ); + i--; + config.noglobals = true; + } else if ( GETParams[i].search('=') > -1 ) { + GETParams.splice( i, 1 ); + i--; + } + } + + // restrict modules/tests by get parameters + config.filters = GETParams; + + // Figure out if we're running the tests from a server or not + QUnit.isLocal = !!(location.protocol === 'file:'); +})(); + +// Expose the API as global variables, unless an 'exports' +// object exists, in that case we assume we're in CommonJS +if ( typeof exports === "undefined" || typeof require === "undefined" ) { + extend(window, QUnit); + window.QUnit = QUnit; +} else { + extend(exports, QUnit); + exports.QUnit = QUnit; +} + +if ( typeof document === "undefined" || document.readyState === "complete" ) { + config.autorun = true; +} + +addEvent(window, "load", function() { + // Initialize the config, saving the execution queue + var oldconfig = extend({}, config); + QUnit.init(); + extend(config, oldconfig); + + config.blocking = false; + + var userAgent = id("qunit-userAgent"); + if ( userAgent ) { + userAgent.innerHTML = navigator.userAgent; + } + + var toolbar = id("qunit-testrunner-toolbar"); + if ( toolbar ) { + toolbar.style.display = "none"; + + var filter = document.createElement("input"); + filter.type = "checkbox"; + filter.id = "qunit-filter-pass"; + filter.disabled = true; + addEvent( filter, "click", function() { + var li = document.getElementsByTagName("li"); + for ( var i = 0; i < li.length; i++ ) { + if ( li[i].className.indexOf("pass") > -1 ) { + li[i].style.display = filter.checked ? "none" : ""; + } + } + }); + toolbar.appendChild( filter ); + + var label = document.createElement("label"); + label.setAttribute("for", "qunit-filter-pass"); + label.innerHTML = "Hide passed tests"; + toolbar.appendChild( label ); + + var missing = document.createElement("input"); + missing.type = "checkbox"; + missing.id = "qunit-filter-missing"; + missing.disabled = true; + addEvent( missing, "click", function() { + var li = document.getElementsByTagName("li"); + for ( var i = 0; i < li.length; i++ ) { + if ( li[i].className.indexOf("fail") > -1 && li[i].innerHTML.indexOf('missing test - untested code is broken code') > - 1 ) { + li[i].parentNode.parentNode.style.display = missing.checked ? "none" : "block"; + } + } + }); + toolbar.appendChild( missing ); + + label = document.createElement("label"); + label.setAttribute("for", "qunit-filter-missing"); + label.innerHTML = "Hide missing tests (untested code is broken code)"; + toolbar.appendChild( label ); + } + + var main = id('main'); + if ( main ) { + config.fixture = main.innerHTML; + } + + if ( window.jQuery ) { + config.ajaxSettings = window.jQuery.ajaxSettings; + } + + QUnit.start(); +}); + +function done() { + if ( config.doneTimer && window.clearTimeout ) { + window.clearTimeout( config.doneTimer ); + config.doneTimer = null; + } + + if ( config.queue.length ) { + config.doneTimer = window.setTimeout(function(){ + if ( !config.queue.length ) { + done(); + } else { + synchronize( done ); + } + }, 13); + + return; + } + + config.autorun = true; + + // Log the last module results + if ( config.currentModule ) { + QUnit.moduleDone( config.currentModule, config.moduleStats.bad, config.moduleStats.all ); + } + + var banner = id("qunit-banner"), + tests = id("qunit-tests"), + html = ['Tests completed in ', + +new Date - config.started, ' milliseconds.
', + '', config.stats.all - config.stats.bad, ' tests of ', config.stats.all, ' passed, ', config.stats.bad,' failed.'].join(''); + + if ( banner ) { + banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass"); + } + + if ( tests ) { + var result = id("qunit-testresult"); + + if ( !result ) { + result = document.createElement("p"); + result.id = "qunit-testresult"; + result.className = "result"; + tests.parentNode.insertBefore( result, tests.nextSibling ); + } + + result.innerHTML = html; + } + + QUnit.done( config.stats.bad, config.stats.all ); +} + +function validTest( name ) { + var i = config.filters.length, + run = false; + + if ( !i ) { + return true; + } + + while ( i-- ) { + var filter = config.filters[i], + not = filter.charAt(0) == '!'; + + if ( not ) { + filter = filter.slice(1); + } + + if ( name.indexOf(filter) !== -1 ) { + return !not; + } + + if ( not ) { + run = true; + } + } + + return run; +} + +function push(result, actual, expected, message) { + message = message || (result ? "okay" : "failed"); + QUnit.ok( result, result ? message + ": " + expected : message + ", expected: " + QUnit.jsDump.parse(expected) + " result: " + QUnit.jsDump.parse(actual) ); +} + +function synchronize( callback ) { + config.queue.push( callback ); + + if ( config.autorun && !config.blocking ) { + process(); + } +} + +function process() { + while ( config.queue.length && !config.blocking ) { + config.queue.shift()(); + } +} + +function saveGlobal() { + config.pollution = []; + + if ( config.noglobals ) { + for ( var key in window ) { + config.pollution.push( key ); + } + } +} + +function checkPollution( name ) { + var old = config.pollution; + saveGlobal(); + + var newGlobals = diff( old, config.pollution ); + if ( newGlobals.length > 0 ) { + ok( false, "Introduced global variable(s): " + newGlobals.join(", ") ); + config.expected++; + } + + var deletedGlobals = diff( config.pollution, old ); + if ( deletedGlobals.length > 0 ) { + ok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") ); + config.expected++; + } +} + +// returns a new Array with the elements that are in a but not in b +function diff( a, b ) { + var result = a.slice(); + for ( var i = 0; i < result.length; i++ ) { + for ( var j = 0; j < b.length; j++ ) { + if ( result[i] === b[j] ) { + result.splice(i, 1); + i--; + break; + } + } + } + return result; +} + +function fail(message, exception, callback) { + if ( typeof console !== "undefined" && console.error && console.warn ) { + console.error(message); + console.error(exception); + console.warn(callback.toString()); + + } else if ( window.opera && opera.postError ) { + opera.postError(message, exception, callback.toString); + } +} + +function extend(a, b) { + for ( var prop in b ) { + a[prop] = b[prop]; + } + + return a; +} + +function addEvent(elem, type, fn) { + if ( elem.addEventListener ) { + elem.addEventListener( type, fn, false ); + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, fn ); + } else { + fn(); + } +} + +function id(name) { + return !!(typeof document !== "undefined" && document && document.getElementById) && + document.getElementById( name ); +} + +// Test for equality any JavaScript type. +// Discussions and reference: http://philrathe.com/articles/equiv +// Test suites: http://philrathe.com/tests/equiv +// Author: Philippe Rathé +QUnit.equiv = function () { + + var innerEquiv; // the real equiv function + var callers = []; // stack to decide between skip/abort functions + + + // Determine what is o. + function hoozit(o) { + if (QUnit.is("String", o)) { + return "string"; + + } else if (QUnit.is("Boolean", o)) { + return "boolean"; + + } else if (QUnit.is("Number", o)) { + + if (isNaN(o)) { + return "nan"; + } else { + return "number"; + } + + } else if (typeof o === "undefined") { + return "undefined"; + + // consider: typeof null === object + } else if (o === null) { + return "null"; + + // consider: typeof [] === object + } else if (QUnit.is( "Array", o)) { + return "array"; + + // consider: typeof new Date() === object + } else if (QUnit.is( "Date", o)) { + return "date"; + + // consider: /./ instanceof Object; + // /./ instanceof RegExp; + // typeof /./ === "function"; // => false in IE and Opera, + // true in FF and Safari + } else if (QUnit.is( "RegExp", o)) { + return "regexp"; + + } else if (typeof o === "object") { + return "object"; + + } else if (QUnit.is( "Function", o)) { + return "function"; + } else { + return undefined; + } + } + + // Call the o related callback with the given arguments. + function bindCallbacks(o, callbacks, args) { + var prop = hoozit(o); + if (prop) { + if (hoozit(callbacks[prop]) === "function") { + return callbacks[prop].apply(callbacks, args); + } else { + return callbacks[prop]; // or undefined + } + } + } + + var callbacks = function () { + + // for string, boolean, number and null + function useStrictEquality(b, a) { + if (b instanceof a.constructor || a instanceof b.constructor) { + // to catch short annotaion VS 'new' annotation of a declaration + // e.g. var i = 1; + // var j = new Number(1); + return a == b; + } else { + return a === b; + } + } + + return { + "string": useStrictEquality, + "boolean": useStrictEquality, + "number": useStrictEquality, + "null": useStrictEquality, + "undefined": useStrictEquality, + + "nan": function (b) { + return isNaN(b); + }, + + "date": function (b, a) { + return hoozit(b) === "date" && a.valueOf() === b.valueOf(); + }, + + "regexp": function (b, a) { + return hoozit(b) === "regexp" && + a.source === b.source && // the regex itself + a.global === b.global && // and its modifers (gmi) ... + a.ignoreCase === b.ignoreCase && + a.multiline === b.multiline; + }, + + // - skip when the property is a method of an instance (OOP) + // - abort otherwise, + // initial === would have catch identical references anyway + "function": function () { + var caller = callers[callers.length - 1]; + return caller !== Object && + typeof caller !== "undefined"; + }, + + "array": function (b, a) { + var i; + var len; + + // b could be an object literal here + if ( ! (hoozit(b) === "array")) { + return false; + } + + len = a.length; + if (len !== b.length) { // safe and faster + return false; + } + for (i = 0; i < len; i++) { + if ( ! innerEquiv(a[i], b[i])) { + return false; + } + } + return true; + }, + + "object": function (b, a) { + var i; + var eq = true; // unless we can proove it + var aProperties = [], bProperties = []; // collection of strings + + // comparing constructors is more strict than using instanceof + if ( a.constructor !== b.constructor) { + return false; + } + + // stack constructor before traversing properties + callers.push(a.constructor); + + for (i in a) { // be strict: don't ensures hasOwnProperty and go deep + + aProperties.push(i); // collect a's properties + + if ( ! innerEquiv(a[i], b[i])) { + eq = false; + } + } + + callers.pop(); // unstack, we are done + + for (i in b) { + bProperties.push(i); // collect b's properties + } + + // Ensures identical properties name + return eq && innerEquiv(aProperties.sort(), bProperties.sort()); + } + }; + }(); + + innerEquiv = function () { // can take multiple arguments + var args = Array.prototype.slice.apply(arguments); + if (args.length < 2) { + return true; // end transition + } + + return (function (a, b) { + if (a === b) { + return true; // catch the most you can + } else if (a === null || b === null || typeof a === "undefined" || typeof b === "undefined" || hoozit(a) !== hoozit(b)) { + return false; // don't lose time with error prone cases + } else { + return bindCallbacks(a, callbacks, [b, a]); + } + + // apply transition with (1..n) arguments + })(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length -1)); + }; + + return innerEquiv; + +}(); + +/** + * jsDump + * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com + * Licensed under BSD (http://www.opensource.org/licenses/bsd-license.php) + * Date: 5/15/2008 + * @projectDescription Advanced and extensible data dumping for Javascript. + * @version 1.0.0 + * @author Ariel Flesler + * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html} + */ +QUnit.jsDump = (function() { + function quote( str ) { + return '"' + str.toString().replace(/"/g, '\\"') + '"'; + }; + function literal( o ) { + return o + ''; + }; + function join( pre, arr, post ) { + var s = jsDump.separator(), + base = jsDump.indent(), + inner = jsDump.indent(1); + if ( arr.join ) + arr = arr.join( ',' + s + inner ); + if ( !arr ) + return pre + post; + return [ pre, inner + arr, base + post ].join(s); + }; + function array( arr ) { + var i = arr.length, ret = Array(i); + this.up(); + while ( i-- ) + ret[i] = this.parse( arr[i] ); + this.down(); + return join( '[', ret, ']' ); + }; + + var reName = /^function (\w+)/; + + var jsDump = { + parse:function( obj, type ) { //type is used mostly internally, you can fix a (custom)type in advance + var parser = this.parsers[ type || this.typeOf(obj) ]; + type = typeof parser; + + return type == 'function' ? parser.call( this, obj ) : + type == 'string' ? parser : + this.parsers.error; + }, + typeOf:function( obj ) { + var type; + if ( obj === null ) { + type = "null"; + } else if (typeof obj === "undefined") { + type = "undefined"; + } else if (QUnit.is("RegExp", obj)) { + type = "regexp"; + } else if (QUnit.is("Date", obj)) { + type = "date"; + } else if (QUnit.is("Function", obj)) { + type = "function"; + } else if (QUnit.is("Array", obj)) { + type = "array"; + } else if (QUnit.is("Window", obj) || QUnit.is("global", obj)) { + type = "window"; + } else if (QUnit.is("HTMLDocument", obj)) { + type = "document"; + } else if (QUnit.is("HTMLCollection", obj) || QUnit.is("NodeList", obj)) { + type = "nodelist"; + } else if (/^\[object HTML/.test(Object.prototype.toString.call( obj ))) { + type = "node"; + } else { + type = typeof obj; + } + return type; + }, + separator:function() { + return this.multiline ? this.HTML ? '
' : '\n' : this.HTML ? ' ' : ' '; + }, + indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing + if ( !this.multiline ) + return ''; + var chr = this.indentChar; + if ( this.HTML ) + chr = chr.replace(/\t/g,' ').replace(/ /g,' '); + return Array( this._depth_ + (extra||0) ).join(chr); + }, + up:function( a ) { + this._depth_ += a || 1; + }, + down:function( a ) { + this._depth_ -= a || 1; + }, + setParser:function( name, parser ) { + this.parsers[name] = parser; + }, + // The next 3 are exposed so you can use them + quote:quote, + literal:literal, + join:join, + // + _depth_: 1, + // This is the list of parsers, to modify them, use jsDump.setParser + parsers:{ + window: '[Window]', + document: '[Document]', + error:'[ERROR]', //when no parser is found, shouldn't happen + unknown: '[Unknown]', + 'null':'null', + undefined:'undefined', + 'function':function( fn ) { + var ret = 'function', + name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE + if ( name ) + ret += ' ' + name; + ret += '('; + + ret = [ ret, this.parse( fn, 'functionArgs' ), '){'].join(''); + return join( ret, this.parse(fn,'functionCode'), '}' ); + }, + array: array, + nodelist: array, + arguments: array, + object:function( map ) { + var ret = [ ]; + this.up(); + for ( var key in map ) + ret.push( this.parse(key,'key') + ': ' + this.parse(map[key]) ); + this.down(); + return join( '{', ret, '}' ); + }, + node:function( node ) { + var open = this.HTML ? '<' : '<', + close = this.HTML ? '>' : '>'; + + var tag = node.nodeName.toLowerCase(), + ret = open + tag; + + for ( var a in this.DOMAttrs ) { + var val = node[this.DOMAttrs[a]]; + if ( val ) + ret += ' ' + a + '=' + this.parse( val, 'attribute' ); + } + return ret + close + open + '/' + tag + close; + }, + functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function + var l = fn.length; + if ( !l ) return ''; + + var args = Array(l); + while ( l-- ) + args[l] = String.fromCharCode(97+l);//97 is 'a' + return ' ' + args.join(', ') + ' '; + }, + key:quote, //object calls it internally, the key part of an item in a map + functionCode:'[code]', //function calls it internally, it's the content of the function + attribute:quote, //node calls it internally, it's an html attribute value + string:quote, + date:quote, + regexp:literal, //regex + number:literal, + 'boolean':literal + }, + DOMAttrs:{//attributes to dump from nodes, name=>realName + id:'id', + name:'name', + 'class':'className' + }, + HTML:true,//if true, entities are escaped ( <, >, \t, space and \n ) + indentChar:' ',//indentation unit + multiline:true //if true, items in a collection, are separated by a \n, else just a space. + }; + + return jsDump; +})(); + +})(this); diff --git a/node_modules/urix/.jshintrc b/node_modules/urix/.jshintrc index e722e469..9d1a6183 100644 --- a/node_modules/urix/.jshintrc +++ b/node_modules/urix/.jshintrc @@ -1,42 +1,42 @@ -{ - "bitwise": true, - "camelcase": true, - "curly": false, - "eqeqeq": true, - "es3": false, - "forin": true, - "immed": false, - "indent": false, - "latedef": "nofunc", - "newcap": false, - "noarg": true, - "noempty": true, - "nonew": false, - "plusplus": false, - "quotmark": true, - "undef": true, - "unused": "vars", - "strict": false, - "trailing": true, - "maxparams": 5, - "maxdepth": false, - "maxstatements": false, - "maxcomplexity": false, - "maxlen": 100, - - "asi": true, - "expr": true, - "globalstrict": true, - "smarttabs": true, - "sub": true, - - "node": true, - "globals": { - "describe": false, - "it": false, - "before": false, - "beforeEach": false, - "after": false, - "afterEach": false - } -} +{ + "bitwise": true, + "camelcase": true, + "curly": false, + "eqeqeq": true, + "es3": false, + "forin": true, + "immed": false, + "indent": false, + "latedef": "nofunc", + "newcap": false, + "noarg": true, + "noempty": true, + "nonew": false, + "plusplus": false, + "quotmark": true, + "undef": true, + "unused": "vars", + "strict": false, + "trailing": true, + "maxparams": 5, + "maxdepth": false, + "maxstatements": false, + "maxcomplexity": false, + "maxlen": 100, + + "asi": true, + "expr": true, + "globalstrict": true, + "smarttabs": true, + "sub": true, + + "node": true, + "globals": { + "describe": false, + "it": false, + "before": false, + "beforeEach": false, + "after": false, + "afterEach": false + } +} diff --git a/node_modules/urix/index.js b/node_modules/urix/index.js index 3fb79031..dc6ef270 100644 --- a/node_modules/urix/index.js +++ b/node_modules/urix/index.js @@ -1,17 +1,17 @@ -// Copyright 2014 Simon Lydell -// X11 (“MIT”) Licensed. (See LICENSE.) - -var path = require("path") - -"use strict" - -function urix(aPath) { - if (path.sep === "\\") { - return aPath - .replace(/\\/g, "/") - .replace(/^[a-z]:\/?/i, "/") - } - return aPath -} - -module.exports = urix +// Copyright 2014 Simon Lydell +// X11 (“MIT”) Licensed. (See LICENSE.) + +var path = require("path") + +"use strict" + +function urix(aPath) { + if (path.sep === "\\") { + return aPath + .replace(/\\/g, "/") + .replace(/^[a-z]:\/?/i, "/") + } + return aPath +} + +module.exports = urix diff --git a/node_modules/urix/package.json b/node_modules/urix/package.json index ce795d17..992e3295 100644 --- a/node_modules/urix/package.json +++ b/node_modules/urix/package.json @@ -1,25 +1,25 @@ -{ - "name": "urix", - "version": "0.1.0", - "author": "Simon Lydell", - "license": "MIT", - "description": "Makes Windows-style paths more unix and URI friendly.", - "main": "index.js", - "repository": "lydell/urix", - "keywords": [ - "path", - "url", - "uri", - "unix", - "windows", - "backslash", - "slash" - ], - "scripts": { - "test": "jshint index.js test/ && mocha" - }, - "devDependencies": { - "mocha": "^1.17.1", - "jshint": "^2.4.4" - } -} +{ + "name": "urix", + "version": "0.1.0", + "author": "Simon Lydell", + "license": "MIT", + "description": "Makes Windows-style paths more unix and URI friendly.", + "main": "index.js", + "repository": "lydell/urix", + "keywords": [ + "path", + "url", + "uri", + "unix", + "windows", + "backslash", + "slash" + ], + "scripts": { + "test": "jshint index.js test/ && mocha" + }, + "devDependencies": { + "mocha": "^1.17.1", + "jshint": "^2.4.4" + } +} diff --git a/node_modules/urix/readme.md b/node_modules/urix/readme.md index ac386f5d..b258b986 100644 --- a/node_modules/urix/readme.md +++ b/node_modules/urix/readme.md @@ -1,46 +1,46 @@ -[![Build Status](https://travis-ci.org/lydell/urix.png?branch=master)](https://travis-ci.org/lydell/urix) - -Overview -======== - -Makes Windows-style paths more unix and URI friendly. Useful if you work with -paths that eventually will be used in URLs. - -```js -var urix = require("urix") - -// On Windows: -urix("c:\\users\\you\\foo") -// /users/you/foo - -// On unix-like systems: -urix("c:\\users\\you\\foo") -// c:\users\you\foo -``` - - -Installation -============ - -`npm install urix` - -```js -var urix = require("urix") -``` - - -Usage -===== - -### `urix(path)` ### - -On Windows, replaces all backslashes with slashes and uses a slash instead of a -drive letter and a colon for absolute paths. - -On unix-like systems it is a no-op. - - -License -======= - -[The X11 (“MIT”) License](LICENSE). +[![Build Status](https://travis-ci.org/lydell/urix.png?branch=master)](https://travis-ci.org/lydell/urix) + +Overview +======== + +Makes Windows-style paths more unix and URI friendly. Useful if you work with +paths that eventually will be used in URLs. + +```js +var urix = require("urix") + +// On Windows: +urix("c:\\users\\you\\foo") +// /users/you/foo + +// On unix-like systems: +urix("c:\\users\\you\\foo") +// c:\users\you\foo +``` + + +Installation +============ + +`npm install urix` + +```js +var urix = require("urix") +``` + + +Usage +===== + +### `urix(path)` ### + +On Windows, replaces all backslashes with slashes and uses a slash instead of a +drive letter and a colon for absolute paths. + +On unix-like systems it is a no-op. + + +License +======= + +[The X11 (“MIT”) License](LICENSE). diff --git a/node_modules/urix/test/index.js b/node_modules/urix/test/index.js index b84b8f3e..5333f246 100644 --- a/node_modules/urix/test/index.js +++ b/node_modules/urix/test/index.js @@ -1,43 +1,43 @@ -// Copyright 2014 Simon Lydell -// X11 (“MIT”) Licensed. (See LICENSE.) - -var path = require("path") -var assert = require("assert") -var urix = require("../") - -"use stict" - -function test(testPath, expected) { - path.sep = "\\" - assert.equal(urix(testPath), expected) - path.sep = "/" - assert.equal(urix(testPath), testPath) -} - -describe("urix", function() { - - it("is a function", function() { - assert.equal(typeof urix, "function") - }) - - - it("converts backslashes to slashes", function() { - test("a\\b\\c", "a/b/c") - test("\\a\\b\\c", "/a/b/c") - test("a/b\\c", "a/b/c") - test("\\\\a\\\\\\b///c", "//a///b///c") - }) - - - it("changes the drive letter to a slash", function() { - test("c:\\a", "/a") - test("C:\\a", "/a") - test("z:\\a", "/a") - test("c:a", "/a") - test("c:/a", "/a") - test("c:\\\\a", "//a") - test("c://a", "//a") - test("c:\\//a", "///a") - }) - -}) +// Copyright 2014 Simon Lydell +// X11 (“MIT”) Licensed. (See LICENSE.) + +var path = require("path") +var assert = require("assert") +var urix = require("../") + +"use stict" + +function test(testPath, expected) { + path.sep = "\\" + assert.equal(urix(testPath), expected) + path.sep = "/" + assert.equal(urix(testPath), testPath) +} + +describe("urix", function() { + + it("is a function", function() { + assert.equal(typeof urix, "function") + }) + + + it("converts backslashes to slashes", function() { + test("a\\b\\c", "a/b/c") + test("\\a\\b\\c", "/a/b/c") + test("a/b\\c", "a/b/c") + test("\\\\a\\\\\\b///c", "//a///b///c") + }) + + + it("changes the drive letter to a slash", function() { + test("c:\\a", "/a") + test("C:\\a", "/a") + test("z:\\a", "/a") + test("c:a", "/a") + test("c:/a", "/a") + test("c:\\\\a", "//a") + test("c://a", "//a") + test("c:\\//a", "///a") + }) + +}) diff --git a/src/installer.ts b/src/installer.ts index 41a8029a..9aa3076d 100644 --- a/src/installer.ts +++ b/src/installer.ts @@ -41,10 +41,44 @@ function getOsString(platform: string): string { } } +function getFeatureVersion(version: string): string { + return version.replace('openjdk', ''); +} + +function getReleaseType(release_type: string): string { + switch (release_type) { + case 'releases': + return 'ga'; + case 'nightly': + return 'ea'; + default: + return release_type; + } +} + +function getAdoptOpenJdkUrl( + release_type: string, + version: string, + jvm_impl: string, + os: string, + arch: string, + heap_size: string, + release: string +): string { + const feature_version: string = getFeatureVersion(version); + const release_type_parsed: string = getReleaseType(release_type); + if (release == 'latest') { + return `https://api.adoptopenjdk.net/v3/binary/latest/${feature_version}/${release_type_parsed}/${os}/${arch}/jdk/${jvm_impl}/${heap_size}/adoptopenjdk`; + } else { + const release_name = encodeURIComponent(release); + return `https://api.adoptopenjdk.net/v3/binary/version/${release_name}/${os}/${arch}/jdk/${jvm_impl}/${heap_size}/adoptopenjdk`; + } +} + export async function getJava( release_type: string, version: string, - openjdk_impl: string, + jvm_impl: string, arch: string, heap_size: string, release: string @@ -52,7 +86,7 @@ export async function getJava( return downloadJavaBinary( release_type, version, - openjdk_impl, + jvm_impl, os, arch, heap_size, @@ -63,7 +97,7 @@ export async function getJava( async function downloadJavaBinary( release_type: string, version: string, - openjdk_impl: string, + jvm_impl: string, os: string, arch: string, heap_size: string, @@ -72,7 +106,7 @@ async function downloadJavaBinary( const versionSpec = getCacheVersionSpec( release_type, version, - openjdk_impl, + jvm_impl, os, heap_size, release @@ -84,7 +118,15 @@ async function downloadJavaBinary( } else { core.debug('Downloading JDK from AdoptOpenJDK'); const release_encoded = encodeURIComponent(release); - const url: string = `https://api.adoptopenjdk.net/v2/binary/${release_type}/${version}?type=jdk&openjdk_impl=${openjdk_impl}&os=${os}&arch=${arch}&release=${release_encoded}&heap_size=${heap_size}`; + const url: string = getAdoptOpenJdkUrl( + release_type, + version, + jvm_impl, + os, + arch, + heap_size, + release + ); const jdkFile = await tc.downloadTool(url); const compressedFileExtension = IS_WINDOWS ? '.zip' : '.tar.gz'; @@ -110,12 +152,12 @@ async function downloadJavaBinary( function getCacheVersionSpec( release_type: string, version: string, - openjdk_impl: string, + jvm_impl: string, os: string, heap_size: string, release: string ): string { - return `1.0.0-${release_type}-${version}-${openjdk_impl}-${heap_size}-${release}`; + return `1.0.0-${release_type}-${version}-${jvm_impl}-${heap_size}-${release}`; } async function extractFiles( diff --git a/src/setup-jdk.ts b/src/setup-jdk.ts index 93896046..a00a0d01 100644 --- a/src/setup-jdk.ts +++ b/src/setup-jdk.ts @@ -4,13 +4,13 @@ import * as path from 'path'; async function run() { try { - // Type of release, i. e. "releases" for stable builds or "nightly" for the most recent build. - const release_type = core.getInput('release_type') || 'releases'; - // OpenJDK version, example: "openjdk8", "openjdk11", "openjdk13". + // Type of release. Either a release version, known as General Availability ("ga") or an Early Access ("ea") + const release_type = core.getInput('release_type') || 'ga'; + // OpenJDK feature release version, example: "8", "11", "13". const javaVersion = core.getInput('java-version', {required: true}); // OpenJDK implementation, example: "hotspot", "openj9". const openjdk_impl = core.getInput('openjdk_impl') || 'hotspot'; - // Architecture of the JDK, example: "x64", "x32", "ppc64", "s390x", "ppc64le", "aarch64". + // Architecture of the JDK, example: "x64", "x32", "arm", "ppc64", "s390x", "ppc64le", "aarch64", "sparcv9". const arch = core.getInput('architecture', {required: false}) || 'x64'; // Heap size for OpenJ9, example: "normal", "large" (for heaps >=57 GiB). const heap_size = core.getInput('heap_size', {required: false}) || 'normal';