From 68d948d5d2d34556894e6bb340620d3d4b4681d6 Mon Sep 17 00:00:00 2001 From: Collin Meadows Date: Thu, 7 Mar 2024 14:31:55 -0500 Subject: [PATCH 1/2] Fix ReferenceError: Headers is not defined --- package-lock.json | 273 ++++++++++++++++-- package.json | 1 + .../routes/invocations/invocationsRoute.js | 1 + 3 files changed, 244 insertions(+), 31 deletions(-) diff --git a/package-lock.json b/package-lock.json index afda3ade3..d27164c08 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,6 +28,7 @@ "jsonschema": "^1.4.1", "jszip": "^3.10.1", "luxon": "^3.4.4", + "node-fetch": "^3.3.2", "node-schedule": "^2.1.1", "p-memoize": "^7.1.1", "p-retry": "^6.2.0", @@ -1888,6 +1889,26 @@ "node": ">=10" } }, + "node_modules/@serverless/dashboard-plugin/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/@serverless/dashboard-plugin/node_modules/open": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", @@ -1919,6 +1940,28 @@ "node": ">=10" } }, + "node_modules/@serverless/dashboard-plugin/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/@serverless/dashboard-plugin/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/@serverless/dashboard-plugin/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/@serverless/dashboard-plugin/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -2302,6 +2345,44 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@serverless/utils/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@serverless/utils/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/@serverless/utils/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/@serverless/utils/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -5155,6 +5236,14 @@ "node": ">=8" } }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, "node_modules/data-urls": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", @@ -6896,6 +6985,28 @@ "pend": "~1.2.0" } }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -7139,6 +7250,17 @@ "node": ">= 6" } }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/formidable": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", @@ -10265,42 +10387,39 @@ "node": ">= 0.10.5" } }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "dependencies": { - "whatwg-url": "^5.0.0" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, "node_modules/node-preload": { @@ -10432,6 +10551,26 @@ "node": ">=10" } }, + "node_modules/npm-registry-utilities/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/npm-registry-utilities/node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -10447,6 +10586,28 @@ "node": ">=10" } }, + "node_modules/npm-registry-utilities/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/npm-registry-utilities/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/npm-registry-utilities/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/npm-registry-utilities/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -12462,6 +12623,26 @@ "node": ">=10" } }, + "node_modules/serverless/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/serverless/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -12514,6 +12695,12 @@ "node": ">=6" } }, + "node_modules/serverless/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, "node_modules/serverless/node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", @@ -12527,6 +12714,22 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/serverless/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/serverless/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/serverless/node_modules/ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", @@ -13792,6 +13995,14 @@ "defaults": "^1.0.3" } }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", diff --git a/package.json b/package.json index 18c1ecf77..ada2c6aa9 100644 --- a/package.json +++ b/package.json @@ -93,6 +93,7 @@ "jsonschema": "^1.4.1", "jszip": "^3.10.1", "luxon": "^3.4.4", + "node-fetch": "^3.3.2", "node-schedule": "^2.1.1", "p-memoize": "^7.1.1", "p-retry": "^6.2.0", diff --git a/src/lambda/routes/invocations/invocationsRoute.js b/src/lambda/routes/invocations/invocationsRoute.js index 9c100c640..f5f3ae012 100644 --- a/src/lambda/routes/invocations/invocationsRoute.js +++ b/src/lambda/routes/invocations/invocationsRoute.js @@ -1,4 +1,5 @@ import { Buffer } from "node:buffer" +import { Headers } from "node-fetch" import InvocationsController from "./InvocationsController.js" const { parse } = JSON From 0638427beab134c19021dba375f07a6555b179eb Mon Sep 17 00:00:00 2001 From: Collin Meadows Date: Thu, 7 Mar 2024 14:47:18 -0500 Subject: [PATCH 2/2] Adding self to README --- README.md | 115 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 80 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 78a202a59..392d73938 100644 --- a/README.md +++ b/README.md @@ -40,38 +40,83 @@ This plugin is updated by its users, I just do maintenance and ensure that PRs a ## Documentation -- [Installation](#installation) -- [Usage and command line options](#usage-and-command-line-options) -- [Run modes](#run-modes) -- [Invoke Lambda](#invoke-lambda) -- [The `process.env.IS_OFFLINE` variable](#the-processenvis_offline-variable) -- [Docker and Layers](#docker-and-layers) -- [Authorizers](#authorizers) - - [Token authorizers](#token-authorizers) - - [Custom authorizers](#custom-authorizers) - - [Remote authorizers](#remote-authorizers) - - [JWT authorizers](#jwt-authorizers) - - [Serverless plugin authorizers](#serverless-plugin-authorizers) -- [Custom headers](#custom-headers) -- [Environment variables](#environment-variables) -- [AWS API Gateway Features](#aws-api-gateway-features) - - [Velocity Templates](#velocity-templates) - - [Velocity nuances](#velocity-nuances) - - [CORS](#cors) - - [Catch-all Path Variables](#catch-all-path-variables) - - [ANY method](#any-method) - - [Lambda and Lambda Proxy Integrations](#lambda-and-lambda-proxy-integrations) - - [HTTP Proxy](#http-proxy) - - [Response parameters](#response-parameters) -- [WebSocket](#websocket) -- [Debug process](#debug-process) -- [Resource permissions and AWS profile](#resource-permissions-and-aws-profile) -- [Simulation quality](#simulation-quality) -- [Usage with other plugins](#usage-with-other-plugins) -- [Credits and inspiration](#credits-and-inspiration) -- [License](#license) -- [Contributing](#contributing) -- [Contributors](#contributors) +- [Serverless Offline](#serverless-offline) + - [Documentation](#documentation) + - [Installation](#installation) + - [Usage and command line options](#usage-and-command-line-options) + - [corsAllowHeaders](#corsallowheaders) + - [corsAllowOrigin](#corsalloworigin) + - [corsDisallowCredentials](#corsdisallowcredentials) + - [corsExposedHeaders](#corsexposedheaders) + - [disableCookieValidation](#disablecookievalidation) + - [dockerHost](#dockerhost) + - [dockerHostServicePath](#dockerhostservicepath) + - [dockerNetwork](#dockernetwork) + - [dockerReadOnly](#dockerreadonly) + - [enforceSecureCookies](#enforcesecurecookies) + - [host](#host) + - [httpPort](#httpport) + - [httpsProtocol](#httpsprotocol) + - [ignoreJWTSignature](#ignorejwtsignature) + - [lambdaPort](#lambdaport) + - [layersDir](#layersdir) + - [localEnvironment](#localenvironment) + - [noAuth](#noauth) + - [noPrependStageInUrl](#noprependstageinurl) + - [noTimeout](#notimeout) + - [prefix](#prefix) + - [reloadHandler](#reloadhandler) + - [resourceRoutes](#resourceroutes) + - [terminateIdleLambdaTime](#terminateidlelambdatime) + - [useDocker](#usedocker) + - [useInProcess](#useinprocess) + - [webSocketHardTimeout](#websockethardtimeout) + - [webSocketIdleTimeout](#websocketidletimeout) + - [websocketPort](#websocketport) + - [Run modes](#run-modes) + - [node.js](#nodejs) + - [worker-threads (default)](#worker-threads-default) + - [in-process](#in-process) + - [docker](#docker) + - [Python, Ruby, Go, Java (incl. Kotlin, Groovy, Scala)](#python-ruby-go-java-incl-kotlin-groovy-scala) + - [Invoke Lambda](#invoke-lambda) + - [The `process.env.IS_OFFLINE` variable](#the-processenvis_offline-variable) + - [Docker and Layers](#docker-and-layers) + - [Additional Options](#additional-options) + - [dockerHost](#dockerhost-1) + - [dockerHostServicePath](#dockerhostservicepath-1) + - [dockerNetwork](#dockernetwork-1) + - [dockerReadOnly](#dockerreadonly-1) + - [layersDir](#layersdir-1) + - [Authorizers](#authorizers) + - [Token authorizers](#token-authorizers) + - [Custom authorizers](#custom-authorizers) + - [Remote authorizers](#remote-authorizers) + - [JWT authorizers](#jwt-authorizers) + - [Serverless plugin authorizers](#serverless-plugin-authorizers) + - [Custom headers](#custom-headers) + - [Environment variables](#environment-variables) + - [AWS API Gateway Features](#aws-api-gateway-features) + - [Velocity Templates](#velocity-templates) + - [Velocity nuances](#velocity-nuances) + - [CORS](#cors) + - [Catch-all Path Variables](#catch-all-path-variables) + - [ANY method](#any-method) + - [Lambda and Lambda Proxy Integrations](#lambda-and-lambda-proxy-integrations) + - [HTTP Proxy](#http-proxy) + - [Response parameters](#response-parameters) + - [WebSocket](#websocket) + - [Debug process](#debug-process) + - [Interactive Debugging with Visual Studio Code (VSC)](#interactive-debugging-with-visual-studio-code-vsc) + - [Step 1 : Adding a launch configuration in IDE](#step-1--adding-a-launch-configuration-in-ide) + - [Step2 : Adding a debug script](#step2--adding-a-debug-script) + - [Resource permissions and AWS profile](#resource-permissions-and-aws-profile) + - [Simulation quality](#simulation-quality) + - [Usage with other plugins](#usage-with-other-plugins) + - [Credits and inspiration](#credits-and-inspiration) + - [License](#license) + - [Contributing](#contributing) + - [Contributors](#contributors) ## Installation @@ -983,6 +1028,6 @@ We try to follow [Airbnb's JavaScript Style Guide](https://github.com/airbnb/jav | :---------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------ | | [m0ppers](https://github.com/m0ppers) | [footballencarta](https://github.com/footballencarta) | [bryanvaz](https://github.com/bryanvaz) | [njyjn](https://github.com/njyjn) | [kdybicz](https://github.com/kdybicz) | -| [ericctsf](https://github.com/ericctsf) | [brazilianbytes](https://github.com/brazilianbytes) | -| :------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------: | -| [ericctsf](https://github.com/erictsf) | [brazilianbytes](https://github.com/brazilianbytes) | +| [ericctsf](https://github.com/ericctsf) | [brazilianbytes](https://github.com/brazilianbytes) | [cmeadows](https://github.com/cmeadows) +| :---------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: | +| [ericctsf](https://github.com/erictsf) | [brazilianbytes](https://github.com/brazilianbytes) | [cmeadows](https://github.com/cmeadows) |