{"_id":"@aljendro/serverless-appsync-simulator","_rev":"2-5f253f2ff554ffc9e03c3e200c9cc200","name":"@aljendro/serverless-appsync-simulator","dist-tags":{"latest":"0.13.1"},"versions":{"0.13.0":{"name":"@aljendro/serverless-appsync-simulator","version":"0.13.0","main":"lib/index.js","author":{"name":"bboure"},"license":"MIT","private":false,"description":"Offline support for serverless-appsync-plugin","repository":{"type":"git","url":"git+https://github.com/Aljendro/serverless-appsync-simulator.git"},"scripts":{"lint":"eslint","tests":"jest","build":"babel src/ -d lib/ --delete-dir-on-start --ignore '**/__tests__'","prepare":"yarn run build","start-dev":"yarn run build -w --verbose"},"dependencies":{"amplify-appsync-simulator":"^1.23.9","@aljendro/amplify-nodejs-function-runtime-provider":"^1.6.0","aws-sdk":"^2.792.0","axios":"^0.21.0","babel-jest":"^26.6.3","cfn-resolver-lib":"^1.1.7","dataloader":"^2.0.0","fb-watchman":"^2.0.1","jest":"^26.6.3","lodash":"^4.17.20","merge-graphql-schemas":"^1.5.8"},"devDependencies":{"@babel/cli":"^7.12.1","@babel/core":"^7.12.3","@babel/plugin-transform-modules-commonjs":"^7.12.1","@babel/preset-env":"^7.12.1","@semantic-release/git":"^9.0.0","all-contributors-cli":"^6.19.0","babel-eslint":"^10.1.0","babel-plugin-inline-import":"^3.0.0","eslint":"^7.13.0","eslint-config-prettier":"^7.0.0","eslint-plugin-prettier":"^3.2.0","prettier":"^2.2.1","semantic-release":"^17.3.0"},"release":{"branch":"master","plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/npm","@semantic-release/git","@semantic-release/github"]},"keywords":["serverless","serverless framework","serverless plugin","serverless local","serverless offline","api gateway","lambda","dynamodb","dynamodb local","appsync"],"licenseText":"MIT License\n\nCopyright (c) 2019 Benoît Bouré\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"@aljendro/serverless-appsync-simulator@0.13.0","dist":{"shasum":"fb93856b259b994793ee0bf2e4c25f0053a2b6d6","integrity":"sha512-7fehFpcAGAGmCt49CKyiMMq9Kfs1p+7PodiCm4v2T01aSLHH6zmVBhvWf3a1c8IREoTaC/wR4Ld18GZDNHH3Lw==","tarball":"https://registry.npmjs.org/@aljendro/serverless-appsync-simulator/-/serverless-appsync-simulator-0.13.0.tgz","fileCount":11,"unpackedSize":37410,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVX6LCRA9TVsSAnZWagAA9m8P/iCcl0W5VKREC6y5ZCi/\nkwtZl4WLqlZqX9WPrHdoma6Aqx1sPnZjtJWK5QiMO8zwAAZuCx9Wl6M5ISc9\nikhEBxw0sncFm/6o2y4Anc+RS7pbcQ6JEM4e+lRM8eePKszD53i8ktYCj85J\nRalI9//SDXpRoVTNexKP06UUNOtjy0hxms3MXJ4a2ts3JAzrEYOF0hQ+cFxZ\nPbbQffgOMjAS5v2l8u/bHgz9NJIeT7O4CvmAiyc85z+kZzsRQ/AvdSsX2uFD\nN6+lGzBCa3c2ekKuowEx7GcjSdtgUjWX+V8NmbtHeI8MoAk6spI9U0kFoogz\n9inllLm0XrlK7pMR+B9oiHB4olPtPFKUY9fPZF6WUuyBDmEiJRUphDJb+B+H\nd2z8v+MqOABwMVnbkaTDM9EvVjhSzHuHtsXAGqfFH+DVN5V3UiT3u3OTxpiz\nEpC1qZ66AY2w/zm/xKFFnhDolr2bDZcFaonNCQg5ozclcBm4DoaDKNohati1\nD85jawPM4f41rFxMMbdwuvtpO46mCycodpjYK+nftjKuE2csFiVbH/Sbbm+S\nN0208wABIzDBDAz1RGH7sAvPJiKBUbAjJsg+Dp08nYsKLOCCSUt97gEnbiKX\n/bCaZvSdXvHeM5nDmsKs//tOo38Kgqrr9Nd4SyrnzX5Y2WQ1KPF1CCLf0yIV\nKZZr\r\n=CEXr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBbWsBbZosgkIjg1qhl02UHAUVlDYjaabjUTmv7MvEyoAiEA7aLyiN5NfkLhiKv4VrVbUTMRLxiG7mwuVXzHsmBvuIk="}]},"_npmUser":{"name":"aljendro","email":"alejandro.alvarado0650144@gmail.com"},"directories":{},"maintainers":[{"name":"aljendro","email":"alejandro.alvarado0650144@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/serverless-appsync-simulator_0.13.0_1616215690972_0.6922593398236723"},"_hasShrinkwrap":false},"0.13.1":{"name":"@aljendro/serverless-appsync-simulator","version":"0.13.1","main":"lib/index.js","author":{"name":"bboure"},"license":"MIT","private":false,"description":"Offline support for serverless-appsync-plugin","repository":{"type":"git","url":"git+https://github.com/Aljendro/serverless-appsync-simulator.git"},"scripts":{"lint":"eslint","tests":"jest","build":"babel src/ -d lib/ --delete-dir-on-start --ignore '**/__tests__'","prepare":"yarn run build","start-dev":"yarn run build -w --verbose"},"dependencies":{"amplify-appsync-simulator":"^1.23.9","@aljendro/amplify-nodejs-function-runtime-provider":"^1.6.1","aws-sdk":"^2.792.0","axios":"^0.21.0","babel-jest":"^26.6.3","cfn-resolver-lib":"^1.1.7","dataloader":"^2.0.0","fb-watchman":"^2.0.1","jest":"^26.6.3","lodash":"^4.17.20","merge-graphql-schemas":"^1.5.8"},"devDependencies":{"@babel/cli":"^7.12.1","@babel/core":"^7.12.3","@babel/plugin-transform-modules-commonjs":"^7.12.1","@babel/preset-env":"^7.12.1","@semantic-release/git":"^9.0.0","all-contributors-cli":"^6.19.0","babel-eslint":"^10.1.0","babel-plugin-inline-import":"^3.0.0","eslint":"^7.13.0","eslint-config-prettier":"^7.0.0","eslint-plugin-prettier":"^3.2.0","prettier":"^2.2.1","semantic-release":"^17.3.0"},"release":{"branch":"master","plugins":["@semantic-release/commit-analyzer","@semantic-release/release-notes-generator","@semantic-release/npm","@semantic-release/git","@semantic-release/github"]},"keywords":["serverless","serverless framework","serverless plugin","serverless local","serverless offline","api gateway","lambda","dynamodb","dynamodb local","appsync"],"licenseText":"MIT License\n\nCopyright (c) 2019 Benoît Bouré\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"@aljendro/serverless-appsync-simulator@0.13.1","dist":{"shasum":"f61a090ff4a092239159d30c5ee80ab8bec1fff7","integrity":"sha512-JhTwRRzu+Gz5cfqKv1479bRGH+6mioA3ApO7ggFQ9ZH6Htni17kZo4UFCx4FP5+HeagnorPqxdf9b0oX487NXg==","tarball":"https://registry.npmjs.org/@aljendro/serverless-appsync-simulator/-/serverless-appsync-simulator-0.13.1.tgz","fileCount":11,"unpackedSize":37410,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWViiCRA9TVsSAnZWagAA0YsP/AwbCgY4UTvfceJTz2aM\ndPg1Jd20XzVTiYnjUH0LonEENHspejoOUySEBrdkoTZPMFBwjwVLdBytCNmA\nm9AWqBn5NdwRWkWVY5e/RlHlmTaffMbLiY0wDUOP9OS40XcqS+H61+8hpIGs\nTrN0p/Yh+FRwNNtTEEW34+rzzDgA6rP8Ng8kuVsW/cL1OnP/Qsql28M9fhaL\nf25SNXHogvEm2YqNVJfC6YWzMnhZ2o6y/Z9sGS1HpO2vNgIi+4BW9jFG3BtR\ncPp6Bczyb/7y11IvMYcPOmj6cre6pL/kWgxh1npXzqk/+bmWSHCRrdh2NGzH\nSNN4QbT4oSLpkpxRup65uZjVwbliyKz4/S0slfSkV5GB54NZ9goC/Jww4Muv\nSAQsh5ZdNXxr8gnErO3+CoICqnpQlN14Gpm09GwfvTsoPjgyn9qiy7yASBFS\ntc3vZ9dKxOVV2+4HqrfZQ0L+EgzrBcs/yt0Q/MZwetmqFxZvT1wqy7lu2P/y\nZrYvh/QAo+ZWjawmOyaW4mni7bA73KdUfnI8mBfoNWwCXPF0GuEik2t1bWm6\ndj+BzymLmta/q3eAbAdqgwyIZqcw7M/4PVRb1ycxMvT1f2XRF+7sNEJWuM8+\nIg9JJ8/NHCESkEldn65Kau/+LSsuRjrxi4qusMqnofPHwBSkzaI7Iw9+8mkS\nTpWT\r\n=sTrh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIANocprXS0UrQcN6TBryofaYsVl9RzBZVYQrnzbHCvjsAiEAx+nIdVvR2T09FIttgXRqNRRLSYfAMJffkB9/WNBNKSE="}]},"_npmUser":{"name":"aljendro","email":"alejandro.alvarado0650144@gmail.com"},"directories":{},"maintainers":[{"name":"aljendro","email":"alejandro.alvarado0650144@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/serverless-appsync-simulator_0.13.1_1616468130147_0.7569666022417112"},"_hasShrinkwrap":false}},"time":{"created":"2021-03-20T04:48:10.907Z","0.13.0":"2021-03-20T04:48:11.146Z","modified":"2022-04-04T13:28:44.220Z","0.13.1":"2021-03-23T02:55:30.321Z"},"maintainers":[{"name":"aljendro","email":"alejandro.alvarado0650144@gmail.com"}],"description":"Offline support for serverless-appsync-plugin","keywords":["serverless","serverless framework","serverless plugin","serverless local","serverless offline","api gateway","lambda","dynamodb","dynamodb local","appsync"],"repository":{"type":"git","url":"git+https://github.com/Aljendro/serverless-appsync-simulator.git"},"author":{"name":"bboure"},"license":"MIT","readme":"[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) ![Release](https://github.com/bboure/serverless-appsync-simulator/workflows/Release/badge.svg) <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->\n[![All Contributors](https://img.shields.io/badge/all_contributors-12-orange.svg?style=flat-square)](#contributors-)\n<!-- ALL-CONTRIBUTORS-BADGE:END -->\n\nThis serverless plugin is a wrapper for [amplify-appsync-simulator](https://github.com/aws-amplify/amplify-cli/tree/master/packages/amplify-appsync-simulator) made for testing AppSync APIs built with [serverless-appsync-plugin](https://github.com/sid88in/serverless-appsync-plugin).\n\n# Requires\n\n- [serverless framework](https://github.com/serverless/serverless)\n- [serverless-appsync-plugin](https://github.com/sid88in/serverless-appsync-plugin)\n- [serverless-offline](https://github.com/dherault/serverless-offline)\n- [serverless-dynamodb-local](https://github.com/99xt/serverless-dynamodb-local) (when using dynamodb resolvers only)\n\n# Install\n\n```bash\nnpm install serverless-appsync-simulator\n# or\nyarn add serverless-appsync-simulator\n```\n\n# Usage\n\nThis plugin relies on your serverless yml file and on the `serverless-offline` plugin.\n\n```yml\nplugins:\n  - serverless-dynamodb-local # only if you need dynamodb resolvers and you don't have an external dynamodb\n  - serverless-appsync-simulator\n  - serverless-offline\n```\n\n**Note:** Order is important `serverless-appsync-simulator` must go **before** `serverless-offline`\n\nTo start the simulator, run the following command:\n\n```bash\nsls offline start\n```\n\nYou should see in the logs something like:\n\n```bash\n...\nServerless: AppSync endpoint: http://localhost:20002/graphql\nServerless: GraphiQl: http://localhost:20002\n...\n```\n\n# Configuration\n\nPut options under `custom.appsync-simulator` in your `serverless.yml` file\n\n| option                   | default                    | description                                                                                                                                                         |\n| ------------------------ | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| apiKey                   | `0123456789`               | When using `API_KEY` as authentication type, the key to authenticate to the endpoint.                                                                               |\n| port                     | 20002                      | AppSync operations port                                                                                                                                             |\n| wsPort                   | 20003                      | AppSync subscriptions port                                                                                                                                          |\n| location                 | . (base directory)         | Location of the lambda functions handlers.                                                                                                                          |\n| lambda.loadLocalEnv      | false                      | If `true`, all environment variables (`$ env`) will be accessible from the resolver function. Read more in section [Environment variables](#environment-variables). |\n| refMap                   | {}                         | A mapping of [resource resolutions](#resource-cloudformation-functions-resolution) for the `Ref` function                                                           |\n| getAttMap                | {}                         | A mapping of [resource resolutions](#resource-cloudformation-functions-resolution) for the `GetAtt` function                                                        |\n| importValueMap           | {}                         | A mapping of [resource resolutions](#resource-cloudformation-functions-resolution) for the `ImportValue` function                                                   |\n| functions                | {}                         | A mapping of [external functions](#functions) for providing invoke url for external fucntions                                                                       |\n| dynamoDb.endpoint        | http://localhost:8000      | Dynamodb endpoint. Specify it if you're not using serverless-dynamodb-local. Otherwise, port is taken from dynamodb-local conf                                      |\n| dynamoDb.region          | localhost                  | Dynamodb region. Specify it if you're connecting to a remote Dynamodb intance.                                                                                      |\n| dynamoDb.accessKeyId     | DEFAULT_ACCESS_KEY         | AWS Access Key ID to access DynamoDB                                                                                                                                |\n| dynamoDb.secretAccessKey | DEFAULT_SECRET             | AWS Secret Key to access DynamoDB                                                                                                                                   |\n| dynamoDb.sessionToken    | DEFAULT_ACCESS_TOKEEN      | AWS Session Token to access DynamoDB, only if you have  temporary security credentials configured on AWS                                                            |\n| dynamoDb.*               |                            | You can add every configuration accepted by [DynamoDB SDK](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#constructor-property)                                                                                |\n| watch                    | - \\*.graphql<br/> - \\*.vtl | Array of glob patterns to watch for hot-reloading.                                                                                                                  |\n\nExample:\n\n```yml\ncustom:\n  appsync-simulator:\n    location: '.webpack/service' # use webpack build directory\n    dynamoDb:\n      endpoint: 'http://my-custom-dynamo:8000'\n```\n\n# Hot-reloading\n\nBy default, the simulator will hot-relad when changes to `*.graphql` or `*.vtl` files are detected.\nChanges to `*.yml` files are not supported (yet? - this is a Serverless Framework limitation). You will need to restart the simulator each time you change yml files.\n\nHot-reloading relies on [watchman](https://facebook.github.io/watchman). Make sure it is [installed](https://facebook.github.io/watchman/docs/install.html) on your system.\n\nYou can change the files being watched with the `watch` option.\nOr you can opt-out by leaving an emptry array or set the option to `false`.\n\nNote: Functions should not require hot-reloading, unless you are using a transpiler or a bundler (such as webpack, babel or typescript), un which case you should delegate hot-reloading to that instead.\n\n# Resource CloudFormation functions resolution\n\nThis plugin supports _some_ resources resolution from the `Ref`, `Fn::GetAtt` and `Fn::ImportValue` functions\nin your yaml file. It also supports _some_ other Cfn functions such as `Fn::Join`, `Fb::Sub`, etc.\n\n**Note:** Under the hood, this features relies on the [cfn-resolver-lib](https://github.com/robessog/cfn-resolver-lib) package. For more info on supported cfn functions, refer to [the documentation](https://github.com/robessog/cfn-resolver-lib/blob/master/README.md)\n\n## Basic usage\n\nYou can reference resources in your functions' environment variables (that will be accessible from your lambda functions) or datasource definitions.\nThe plugin will automatically resolve them for you.\n\n```yaml\nprovider:\n  environment:\n    BUCKET_NAME:\n      Ref: MyBucket # resolves to `my-bucket-name`\n\nresources:\n  Resources:\n    MyDbTable:\n      Type: AWS::DynamoDB::Table\n      Properties:\n        TableName: myTable\n      ...\n    MyBucket:\n      Type: AWS::S3::Bucket\n      Properties:\n        BucketName: my-bucket-name\n    ...\n\n# in your appsync config\ndataSources:\n  - type: AMAZON_DYNAMODB\n    name: dynamosource\n    config:\n      tableName:\n        Ref: MyDbTable # resolves to `myTable`\n```\n\n## Override (or mock) values\n\nSometimes, some references **cannot** be resolved, as they come from an _Output_ from Cloudformation; or you might want to use mocked values in your local environment.\n\nIn those cases, you can define (or override) those values using the `refMap`, `getAttMap` and `importValueMap` options.\n\n- `refMap` takes a mapping of _resource name_ to _value_ pairs\n- `getAttMap` takes a mapping of _resource name_ to _attribute/values_ pairs\n- `importValueMap` takes a mapping of _import name_ to _values_ pairs\n\nExample:\n\n```yaml\ncustom:\n  appsync-simulator:\n    refMap:\n      # Override `MyDbTable` resolution from the previous example.\n      MyDbTable: 'mock-myTable'\n    getAttMap:\n      # define ElasticSearchInstance DomainName\n      ElasticSearchInstance:\n        DomainEndpoint: 'localhost:9200'\n    importValueMap:\n      other-service-api-url: 'https://other.api.url.com/graphql'\n\n# in your appsync config\ndataSources:\n  - type: AMAZON_ELASTICSEARCH\n    name: elasticsource\n    config:\n      # endpoint resolves as 'http://localhost:9200'\n      endpoint:\n        Fn::Join:\n          - ''\n          - - https://\n            - Fn::GetAtt:\n                - ElasticSearchInstance\n                - DomainEndpoint\n```\n\n### Key-value mock notation\n\nIn some special cases you will need to use key-value mock nottation.\nGood example can be case when you need to include serverless stage value (`${self:provider.stage}`) in the import name.\n\n_This notation can be used with all mocks - `refMap`, `getAttMap` and `importValueMap`_\n\n```yaml\nprovider:\n  environment:\n    FINISH_ACTIVITY_FUNCTION_ARN:\n      Fn::ImportValue: other-service-api-${self:provider.stage}-url\n\ncustom:\n  serverless-appsync-simulator:\n    importValueMap:\n      - key: other-service-api-${self:provider.stage}-url\n        value: 'https://other.api.url.com/graphql'\n```\n\n## Environment variables\n\n```yaml\ncustom:\n  appsync-simulator:\n    lambda:\n      loadLocalEnv: true\n```\n\nIf `true`, all environment variables (`$ env`) will be accessible from the resolver function.\n\nIf `false`, only environment variables defined in `serverless.yml` will be accessible from the resolver function.\n\n> _Note: `serverless.yml` environment variables have higher priority than local environment variables. Thus some of your local environment variables, could get overridden by environment variables from `serverless.yml`._\n\n## Limitations\n\nThis plugin only tries to resolve the following parts of the yml tree:\n\n- `provider.environment`\n- `functions[*].environment`\n- `custom.appSync`\n\nIf you have the need of resolving others, feel free to open an issue and explain your use case.\n\nFor now, the supported resources to be automatically resovled by `Ref:` are:\n\n- DynamoDb tables\n- S3 Buckets\n\nFeel free to open a PR or an issue to extend them as well.\n\n# External functions\n\nWhen a function is not defined withing the current serverless file you can still call it by providing an invoke url which should point to a REST method. Make sure you specify \"get\" or \"post\" for the method. Default is \"get\", but you probably want \"post\".\n\n```yaml\ncustom:\n  appsync-simulator:\n    functions:\n      addUser:\n        url: http://localhost:3016/2015-03-31/functions/addUser/invocations\n        method: post\n      addPost:\n        url: https://jsonplaceholder.typicode.com/posts\n        method: post\n```\n\n# Supported Resolver types\n\nThis plugin supports resolvers implemented by `amplify-appsync-simulator`, as well as custom resolvers.\n\n**From Aws Amplify:**\n\n- NONE\n- AWS_LAMBDA\n- AMAZON_DYNAMODB\n- PIPELINE\n\n**Implemented by this plugin**\n\n- AMAZON_ELASTIC_SEARCH\n- HTTP\n\n**Not Supported / TODO**\n\n- RELATIONAL_DATABASE\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://twitter.com/Benoit_Boure\"><img src=\"https://avatars0.githubusercontent.com/u/7089997?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Benoît Bouré</b></sub></a><br /><a href=\"https://github.com/bboure/serverless-appsync-simulator/commits?author=bboure\" title=\"Code\">💻</a></td>\n    <td align=\"center\"><a href=\"http://filip.pyrek.cz/\"><img src=\"https://avatars1.githubusercontent.com/u/6282843?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Filip Pýrek</b></sub></a><br /><a href=\"https://github.com/bboure/serverless-appsync-simulator/commits?author=FilipPyrek\" title=\"Code\">💻</a></td>\n    <td align=\"center\"><a href=\"https://github.com/marcoreni\"><img src=\"https://avatars2.githubusercontent.com/u/2797489?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Marco Reni</b></sub></a><br /><a href=\"https://github.com/bboure/serverless-appsync-simulator/commits?author=marcoreni\" title=\"Code\">💻</a></td>\n    <td align=\"center\"><a href=\"https://egordmitriev.net/\"><img src=\"https://avatars3.githubusercontent.com/u/4254771?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Egor Dmitriev</b></sub></a><br /><a href=\"https://github.com/bboure/serverless-appsync-simulator/commits?author=EgorDm\" title=\"Code\">💻</a></td>\n    <td align=\"center\"><a href=\"https://github.com/stschwark\"><img src=\"https://avatars3.githubusercontent.com/u/900253?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Steffen Schwark</b></sub></a><br /><a href=\"https://github.com/bboure/serverless-appsync-simulator/commits?author=stschwark\" title=\"Code\">💻</a></td>\n    <td align=\"center\"><a href=\"https://github.com/moelholm\"><img src=\"https://avatars2.githubusercontent.com/u/8393156?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Nicky Moelholm</b></sub></a><br /><a href=\"https://github.com/bboure/serverless-appsync-simulator/commits?author=moelholm\" title=\"Code\">💻</a></td>\n    <td align=\"center\"><a href=\"https://github.com/daisuke-awaji\"><img src=\"https://avatars0.githubusercontent.com/u/20736455?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>g-awa</b></sub></a><br /><a href=\"https://github.com/bboure/serverless-appsync-simulator/commits?author=daisuke-awaji\" title=\"Code\">💻</a></td>\n  </tr>\n  <tr>\n    <td align=\"center\"><a href=\"https://github.com/LMulveyCM\"><img src=\"https://avatars0.githubusercontent.com/u/39565663?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Lee Mulvey</b></sub></a><br /><a href=\"https://github.com/bboure/serverless-appsync-simulator/commits?author=LMulveyCM\" title=\"Code\">💻</a></td>\n    <td align=\"center\"><a href=\"https://github.com/JimmyHurrah\"><img src=\"https://avatars1.githubusercontent.com/u/6367753?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Jimmy Hurrah</b></sub></a><br /><a href=\"https://github.com/bboure/serverless-appsync-simulator/commits?author=JimmyHurrah\" title=\"Code\">💻</a></td>\n    <td align=\"center\"><a href=\"https://abda.la/\"><img src=\"https://avatars1.githubusercontent.com/u/219340?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Abdala</b></sub></a><br /><a href=\"#ideas-abdala\" title=\"Ideas, Planning, & Feedback\">🤔</a></td>\n    <td align=\"center\"><a href=\"https://github.com/alexandrusavin\"><img src=\"https://avatars2.githubusercontent.com/u/1612455?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Alexandru Savin</b></sub></a><br /><a href=\"https://github.com/bboure/serverless-appsync-simulator/commits?author=alexandrusavin\" title=\"Documentation\">📖</a></td>\n    <td align=\"center\"><a href=\"https://github.com/Scale93\"><img src=\"https://avatars.githubusercontent.com/u/36473880?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Scale93</b></sub></a><br /><a href=\"https://github.com/bboure/serverless-appsync-simulator/commits?author=Scale93\" title=\"Code\">💻</a> <a href=\"https://github.com/bboure/serverless-appsync-simulator/commits?author=Scale93\" title=\"Documentation\">📖</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md"}