{"id":13516028,"url":"https://github.com/AnomalyInnovations/serverless-bundle","last_synced_at":"2025-03-31T05:31:13.895Z","repository":{"id":39620124,"uuid":"174438690","full_name":"AnomalyInnovations/serverless-bundle","owner":"AnomalyInnovations","description":"Optimized packages for ES6 and TypeScript Node.js Lambda functions without any configuration.","archived":false,"fork":false,"pushed_at":"2023-12-04T14:00:45.000Z","size":4103,"stargazers_count":531,"open_issues_count":174,"forks_count":153,"subscribers_count":8,"default_branch":"master","last_synced_at":"2024-04-14T06:16:05.849Z","etag":null,"topics":["aws","es6","eslint","lambda","nodejs","serverless","serverless-plugin","typescript","webpack"],"latest_commit_sha":null,"homepage":"https://serverless-stack.com/chapters/package-lambdas-with-serverless-bundle.html","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AnomalyInnovations.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"github":"jayair","patreon":"serverless_stack"}},"created_at":"2019-03-07T23:58:03.000Z","updated_at":"2024-04-06T18:45:15.000Z","dependencies_parsed_at":"2024-01-13T19:26:20.107Z","dependency_job_id":"fa446df7-320b-4d3c-8b7d-ff3f50e0f6b2","html_url":"https://github.com/AnomalyInnovations/serverless-bundle","commit_stats":{"total_commits":339,"total_committers":49,"mean_commits":6.918367346938775,"dds":"0.38053097345132747","last_synced_commit":"e1ae01aa5e644fc835d1a473e4b32b6396af4c17"},"previous_names":[],"tags_count":65,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnomalyInnovations%2Fserverless-bundle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnomalyInnovations%2Fserverless-bundle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnomalyInnovations%2Fserverless-bundle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnomalyInnovations%2Fserverless-bundle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AnomalyInnovations","download_url":"https://codeload.github.com/AnomalyInnovations/serverless-bundle/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242506448,"owners_count":20140378,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","es6","eslint","lambda","nodejs","serverless","serverless-plugin","typescript","webpack"],"created_at":"2024-08-01T05:01:18.385Z","updated_at":"2025-03-31T05:31:11.877Z","avatar_url":"https://github.com/AnomalyInnovations.png","language":"JavaScript","readme":"# serverless-bundle [![Build Status](https://img.shields.io/github/actions/workflow/status/AnomalyInnovations/serverless-bundle/ci.yml?branch=master)](https://github.com/AnomalyInnovations/serverless-bundle/actions/workflows/ci.yml) [![npm](https://img.shields.io/npm/v/serverless-bundle.svg)](https://www.npmjs.com/package/serverless-bundle)\n\nserverless-bundle is a [Serverless Framework](https://www.serverless.com) plugin that optimally packages your ES6 or TypeScript Node.js Lambda functions with sensible defaults so you **don't have to maintain your own Webpack configs**. It uses the [serverless-webpack](https://www.github.com/serverless-heaven/serverless-webpack) plugin internally.\n\n- Only one dependency\n- Supports ES6 and TypeScript\n- Generates optimized packages\n- Linting Lambda functions using [ESLint](https://eslint.org)\n- Supports transpiling unit tests with [babel-jest](https://github.com/facebook/jest/tree/master/packages/babel-jest)\n- Source map support for proper error messages\n- Support [esbuild](https://esbuild.github.io) and [esbuild-loader](https://github.com/privatenumber/esbuild-loader) for faster builds\n\nAnd all this works without having to install Webpack, Babel, ESLint, esbuild, etc. or manage any of their configs. Simply add serverless-bundle to your app and you are done!\n\n```diff\n-    \"eslint\"\n-    \"webpack\"\n-    \"ts-loader\"\n-    \"typescript\"\n-    \"css-loader\"\n-    \"graphql-tag\"\n-    \"@babel/core\"\n-    \"babel-eslint\"\n-    \"babel-loader\"\n-    \"eslint-loader\"\n-    \"esbuild-loader\"\n-    \"@babel/runtime\"\n-    \"@babel/preset-env\"\n-    \"serverless-webpack\"\n-    \"source-map-support\"\n-    \"webpack-node-externals\"\n-    \"eslint-config-strongloop\"\n-    \"tsconfig-paths-webpack-plugin\"\n-    \"fork-ts-checker-webpack-plugin\"\n-    \"@babel/plugin-transform-runtime\"\n-    \"babel-plugin-source-map-support\"\n\n+    \"serverless-bundle\"\n```\n\nYou can [read more about this over on the SST Guide](https://sst.dev/chapters/package-lambdas-with-serverless-bundle.html).\n\n---\n\n💥 The `serverless-bundle` team recently launched the [SST](https://github.com/serverless-stack/sst). SST makes it easy to build serverless apps by letting you [test your Lambda functions live](https://docs.sst.dev/live-lambda-development). It's based on the many of ideas behind `serverless-bundle`.\n\n---\n\n## Table of Contents\n- [Getting Started](#getting-started)\n- [Usage](#usage)\n- [Options](#options)\n  - [Advanced Options](#advanced-options)\n  - [TypeScript](#typescript)\n  - [Package Specific Config](#package-specific-config)\n  - [Nested Services](#nested-services)\n  - [CSS and SASS Files](#css-and-sass-files)\n  - [Support for pem, txt, and other raw files](#support-for-pem-txt-and-other-raw-files)\n  - [Externals](#externals)\n  - [Externals vs forceExclude](#externals-vs-forceexclude)\n  - [Generating a stats file](#generating-stats-files)\n- [Support](#support)\n- [Running Locally](#running-locally)\n\n\n## Getting Started\n\nInstall the `serverless-bundle` plugin using:\n\n```bash\n$ npm install --save-dev serverless-bundle\n```\n\nThen add it to your `serverless.yml`.\n\n```yaml\nplugins:\n  - serverless-bundle\n```\n\nTo run your tests using the same Babel config used in the plugin add the following to your `package.json`:\n\n```json\n\"scripts\": {\n  \"test\": \"serverless-bundle test\"\n}\n```\n\nWe also have a couple of template repos to help you get started:\n- [Serverless Node.js Starter](https://github.com/AnomalyInnovations/serverless-nodejs-starter)\n- [Serverless TypeScript Starter](https://github.com/AnomalyInnovations/serverless-typescript-starter)\n\n## Usage\n\nOnce installed and added to your `serverless.yml`, serverless-bundle will automatically package your functions using Webpack when you run the various serverless commands.\n\n## Options\n\nYou can configure the following through your `serverless.yml`. Note that, these are **all optional**.\n\n```yaml\ncustom:\n  bundle:\n    sourcemaps: true                # Enable source maps\n    caching: true                   # Enable Webpack caching\n    concurrency: 5                  # Set desired concurrency, defaults to the number of available cores\n    stats: false                    # Don't print out any Webpack output\n    linting: true                   # Enable linting as a part of the build process\n    generateStatsFiles: false       # Creates stats files that could be used for bundle analyzing, more below\n    esbuild: false                  # Use esbuild-loader instead of babel or ts for faster builds\n    disableForkTsChecker: false     # Disable the ForkTsChecker plugin, more below\n    tsConfig: \"tsconfig.json\"       # Path to your 'tsconfig.json', if it's not in the root\n    forceInclude:                   # Optional list of NPM packages that need to be included\n      - mysql                         # Only necessary if packages are included dynamically\n    ignorePackages:                 # Ignore building any of the following packages\n      - hiredis                       # For ex, hiredis needs to be ignored if using redis\n    externals:                      # Set non Webpack compatible packages as externals\n      - isomorphic-webcrypto          # They'll be included in the node_modules/, more below\n    forceExclude:                   # Don't include these in the package\n      - chrome-aws-lambda             # Because it'll be provided through a Lambda Layer\n    excludeFiles: \"**/*.test.ts\"    # Exclude files from Webpack that match the glob\n    fixPackages:                    # Include fixes for specific packages\n      - \"formidable@1.x\"              # For ex, formidable@1.x doesn't work by default with Webpack\n    copyFiles:                      # Copy any additional files to the generated package\n      - from: 'public/*'              # Where the files are currently\n        to: './'                      # Where in the package should they go\n    aliases:                        # Create an alias to 'import' modules easily with a custom path\n      - Lib: custom-lib/src/lib       # For ex, replace the long 'custom-lib/src/lib' with 'Lib'\n    packager: npm                   # Specify a packager, 'npm' or 'yarn'. Defaults to 'npm'.\n    packagerOptions:                # Run a custom script in the package process\n      scripts:                        # https://github.com/serverless-heaven/serverless-webpack#custom-scripts\n        - echo hello \u003e test\n    nodeModulesRelativeDir: '../'   # Useful for monorepos if you have your node_modules in the root directory\n                                      # https://github.com/serverless-heaven/serverless-webpack#node-modules--externals \n    rawFileExtensions:              # An array of file extensions to import using the Webpack raw-loader.\n      - csv                         # Defaults to ['pem', 'txt']\n    minifyOptions:                  # Options for ESBuildMinifyPlugin (https://esbuild.github.io/api/#simple-options)\n      keepNames: true               # Disable symbol name mangling during minification\n    experiments:                    # Give the ability to activate and try out experimental features of Webpack\n\n```\n\n### Advanced Options\n\n- ESLint\n\n  This plugin uses [eslint-config-strongloop](https://github.com/strongloop/eslint-config-strongloop). You can [override this](https://eslint.org/docs/user-guide/configuring) by placing your own `.eslintrc.json` with the rules you'd like to use. If you'd like to ignore specific files, you can use a `.eslintignore` file.\n\n- Customizing Babel and Webpack configs\n\n  This plugin does not support customizing the Babel and Webpack configs, since [serverless-webpack](https://www.github.com/serverless-heaven/serverless-webpack) does a pretty good job with that. However, if you think the default config is missing some key features, feel free to open an issue about it.\n\n- Supporting specific packages\n\n  Certain packages like (`formidable@1.x`) do not work with Webpack without customizing the config. To support these packages, we use the `fixPackages` option. This allows us to customize the Webpack config without having folks learn about the internals of Webpack, or maintaining their own complicated configs. If a specific package doesn't work without customizing the Webpack config, add to the `fixPackages` option and submit a PR.\n\n- Packager scripts\n\n  The `packagerOptions.scripts` option allows [serverless-webpack](https://github.com/serverless-heaven/serverless-webpack#custom-scripts) to run a custom script in the packaging process. This is useful for installing any platform specific binaries. See below for the `sharp` package.\n\n- Aliases\n\n  Import paths can get very long when dealing with complicated directory structures in monorepo apps. The `aliases` option allows you to define a shorter version. So if you have an import that looks like:\n\n  ``` js\n  import Utility from '../../custom-lib/src/lib/utility';\n  ```\n\n  Adding the following. Where `src/utilities` is the path from the project root.\n\n  ``` yml\n  custom:\n    bundle:\n      aliases:\n        - \"Lib\": custom-lib/src/lib\n  ```\n\n  This would allow you to instead import using the following, from anywhere in your project.\n\n  ``` js\n  import Utility from 'Lib/utility';\n  ```\n\n  To use aliases in your tests you'll need to use Jest's [`moduleNameMapper`](https://jestjs.io/docs/en/configuration#modulenamemapper-objectstring-string--arraystring). Add the following your `package.json`:\n\n  ``` json\n  \"jest\": {\n    \"moduleNameMapper\": {\n      \"Lib(.*)$\": \"\u003crootDir\u003e/custom-lib/src/lib/$1\"\n    }\n  }\n  ```\n\n- Excluding modules from bundling\n\n  In some cases it might be neccessary to exclude certain modules from bundling with Webpack. This can be achieved by setting the module alias to `false`:\n\n  ``` yml\n  custom:\n    bundle:\n      aliases:\n        - \"module-name\": false\n  ```\n\n  The `aliases` option is explained in detail in the [Webpack documentation](https://webpack.js.org/configuration/resolve/#resolvealias).\n\n- Usage with WebStorm\n\n  Here is some info on how to get this plugin to support running tests in WebStorm — https://github.com/AnomalyInnovations/serverless-bundle/issues/5#issuecomment-582237396\n\n- Alternative Jest Result Processor\n\n  For CI services (like Atlassian Bamboo CI) that do not work with Jest test results, start by installing [jest-mocha-reporter](https://www.npmjs.com/package/jest-mocha-reporter).\n\n  To set the `testResultsProcessor` option, add `\"testResultsProcessor\": \"jest-mocha-reporter\"` to the Jest section in your `package.json`. You should see the default command line output when running `npm run test`, but you should also get a `test-report.json`.\n\n  To test the `reporters` option, add `\"reporters\": [\"jest-mocha-reporter\"]` instead. This should result in the same file as above but without the command line output.\n\n### TypeScript\n\nIf serverless-bundle detects a `tsconfig.json` in your service root, it'll enable TypeScript.\n\nYou can also change where your _tsconfig_ is.\n\n``` yml\ncustom:\n  bundle:\n    tsConfig: 'tsconfig.special.json'\n```\n\n#### Module and Targets\n\nSetting the `module` to `commonjs` or `target` to `es3` or `es5` conflicts with the [babel-plugin-source-map-support plugin](https://www.npmjs.com/package/babel-plugin-source-map-support) that serverless-bundle uses for adding source maps. It'll cause imports in your code to error out with something like this:\n\n``` bash\nTypeError: fileName.functionName is not a function\n```\n\nSo if serverless-bundle detects these in your `tsconfig.json`, it'll print the following warning.\n\n``` bash\nserverless-bundle: CommonJS, ES3, or ES5 are not supported\n```\n\nMore on [this issue here](https://github.com/AnomalyInnovations/serverless-bundle/issues/124).\n\n#### ForkTsCheckerWebpackPlugin\n\nBy default serverless-bundle uses the [ForkTsCheckerWebpackPlugin](https://github.com/TypeStrong/fork-ts-checker-webpack-plugin) to speed up builds by running type checking in a separate process. However, this combined with Serverless Framework's `package: individually: true` option means that to packages each Lambda function, a separate type checking process is started. Concurrently, starting many such processes can cause your build process to run out of memory.\n\nTo disabled this, add the following to your config.\n\n``` yml\ncustom:\n  bundle:\n    disableForkTsChecker: true\n```\n\n### Package Specific Config\n\nThe packages below need some additional config to make them work.\n\n#### Knex.js\n\nThe [knex.js](http://knexjs.org) module is automatically excluded from the bundle since it's not compatible with Webpack. However, you need to force include the specific database provider package since these are dynamically included. Use the `forceInclude` option to pass in a list of packages that you want included. For example, to include `mysql` use the following:\n\n``` yml\ncustom:\n  bundle:\n    forceInclude:\n      - mysql\n```\n\n#### sharp\n\nThe [sharp](http://sharp.pixelplumbing.com/en/stable/install/#aws-lambda) package needs to include a specific binary before package. Use the `packagerOptions.scripts` for this.\n\n``` yml\ncustom:\n  bundle:\n    packagerOptions:\n      scripts:\n        - rm -rf node_modules/sharp \u0026\u0026 npm install --arch=x64 --platform=linux --target=10.15.0 sharp\n```\n\n#### pg\n\nThe [pg](https://github.com/brianc/node-postgres/tree/master/packages/pg) package optionally includes `pg-native` that needs to be ignored from Webpack. Use the `ignorePackages` option to do this.\n\n```yml\ncustom:\n  bundle:\n    ignorePackages:\n      - pg-native\n```\n\n#### redis\n\nThe [redis](https://github.com/NodeRedis/node_redis) package optionally includes `hiredis` that needs to be ignored from Webpack. Use the `ignorePackages` option to do this.\n\n```yml\ncustom:\n  bundle:\n    ignorePackages:\n      - hiredis\n```\n\n#### Sequelize\n\nTo use the [Sequelize](https://github.com/sequelize/sequelize) package along with [pg](https://github.com/brianc/node-postgres/tree/master/packages/pg), you'll need to ignore it from Webpack and using the `dialectModule` option. [Read more](https://github.com/AnomalyInnovations/serverless-bundle/issues/45#issuecomment-594237314) here.\n\nIn your `serverless.yml`:\n\n```yml\ncustom:\n  bundle:\n    ignorePackages:\n      - pg-native\n```\n\nAnd in your Lambda code:\n\n``` js\nconst sequelize = new Sequelize(\n  process.env.DB_NAME,\n  process.env.DB_USERNAME,\n  process.env.DB_PASSWORD,\n  {\n    host: process.env.DB_HOST,\n    dialect: process.env.DB_DIALECT,\n    dialectModule: pg\n  }\n);\n```\n\n#### Formidable 1.x\n\n[Formidable 1.x](https://github.com/node-formidable/formidable/issues/337#issuecomment-579610313) doesn't work with Webpack by default. We have a fix that we apply to the Webpack config for it to work. To apply the fix use the following:\n\n``` yml\ncustom:\n  bundle:\n    fixPackages:\n      - \"formidable@1.x\"\n```\n\nIf enabled, Webpack adds the following definition to work with Formidable — `{ \"global.GENTLY\": false }`.\n\n### Nested Services\n\nIt's common in [Serverless monorepo](https://serverless-stack.com/chapters/organizing-serverless-projects.html) setups that the plugins are installed at the root level and referenced in the individual services. Take the following project setup:\n\n```\npackage.json          // Here serverless-bundle is installed\n/service1\n  |- package.json     // Can run npm test from here, referring to parent `package.json`\n  |- handler.js\n  |- handler.test.js\n  |- serverless.yml   // Uses serverless-bundle plugin\n/service2\n  |- package.json     // Can run npm test from here, referring to parent `package.json`\n  |- handler.js\n  |- handler.test.js\n  |- serverless.yml   // Uses serverless-bundle plugin\n```\n\nRunning Serverless commands (`deploy`, `package`, etc.) from the services directories are supported out of the box. To get your tests to run correctly, you need to do the following.\n\nIn the root `package.json` use the following `test` script:\n\n```json\n\"scripts\": {\n  \"test\": \"serverless-bundle test\"\n}\n```\n\nAnd in `service1/package.json` use this `test` script:\n\n``` json\n\"scripts\": {\n  \"test\": \"npm --prefix ./../ test service1\"\n},\n```\n\nThis tells serverless-bundle (in the root) to only run the tests inside the `service1/` directory. As opposed to the entire project.\n\n### CSS and SASS Files\n\nServerless Bundle automatically supports importing css and scss using the [isomorphic-style-loader](https://github.com/kriasoft/isomorphic-style-loader).\n\n``` js\nimport \"./assets/style.css\";\nimport \"./assets/style.scss\";\n```\n\n### Support for pem, txt, and other raw files\n\nServerless Bundle automatically supports importing `.pem` and `.txt`, using the [Webpack raw-loader](https://webpack.js.org/loaders/raw-loader/).\n\n``` js\nimport \"./assets/key.pem\";\nimport \"./assets/text.txt\";\n```\n\nIf you need load additional files using the raw-loader, you can use the `rawFileExtensions` config option.\n\n``` yml\ncustom:\n  bundle:\n    rawFileExtensions:\n      - csv\n```\n\n### Externals\n\nThe `externals` option takes a list of packages or `all`. By default this is set to `[\"knex\", \"sharp\"]`.\n\nPackages listed in `externals` are ignored by Webpack. They are instead added in the `node_modules/` directory of the Lambda .zip file. These usually include npm packages that are not supported by Webpack.\n\nThe `all` option allows you to list all the packages in YOUR `node_modules/` directory as externals. This might be useful in cases where they are just too many to list. Or you are using something like [EJS](https://ejs.co) that implicitly requires a long list of packages that are not supported by Webpack.\n\nNote that, adding a package to the `externals` list might make your Lambda .zip file larger. This is because the entire package directory is zipped. Instead of using Webpack to just include the code that is necessary. So it's advisable to avoid using the `all` option.\n\nIf you think we should add to the default list of externals, open a PR.\n\nExample of specifying a list of packages:\n\n``` yml\ncustom:\n  bundle:\n    externals:\n      - knex\n      - sharp\n```\n\nExample of using the `all` option:\n\n``` yml\ncustom:\n  bundle:\n    externals: all\n```\n\n### Externals vs forceExclude vs excludeFiles\n\nThe three options (`externals`, `forceExclude`, and `excludeFiles`) look similar but have some subtle differences. Let's look at them in detail:\n\n- `externals`\n\n  These are packages that need to be included in the Lambda package (the .zip file that's sent to AWS). But they are not compatible with Webpack. So they are marked as `externals` to tell Webpack not bundle them.\n\n- `forceExclude`\n\n  These packages are available in the Lambda runtime. Either by default (in the case of `aws-sdk`) or through a Lambda layer that you might be using. So these are not included in the Lambda package. And they are also marked as `externals`. Meaning that packages that are in `forceExclude` are automatically added to the `externals` list as well. By default, `aws-sdk` is listed in the `forceExclude` when `runtime` is lower than `nodejs18.x`.\n\n- `excludeFiles`\n\n  These are a glob of files that can be excluded from the function resolution. This happens when you have multiple files that are in the same directory and Serverless Framework tries to use them as a function handler. For example, if you have a `index.js` and a `index.test.js` and your function is pointing to `index`, you'll get a warning saying, `WARNING: More than one matching handlers found for index. Using index.js`. To fix this, use `excludeFiles: **/*.test.js`.\n\n### Generating stats files\n\nUse the `generateStatsFiles` option if you want to analyze your bundle size. This option, if set to `true`, will\nenable the generation of a `bundle_stats.json` and a `bundle_stats.html` in the output directory, using the\n[webpack-bundle-analyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) plugin.\n\n## Support\n\n- Open a [new issue](https://github.com/AnomalyInnovations/serverless-bundle/issues/new) if you've found a bug or have some suggestions.\n- Or submit a pull request!\n\n## Running Locally\n\nTo run this project locally, clone the repo and initialize the project.\n\n```bash\n$ git clone https://github.com/AnomalyInnovations/serverless-bundle\n$ cd serverless-bundle\n$ npm install\n```\n\nRun all the tests.\n\n```bash\n$ npm test\n```\n\nTo test the `serverless-bundle test` command.\n\n```bash\n$ npm run test scripts\n```\n\nTo install locally in another project.\n\n```bash\n$ npm install /path/to/serverless-bundle\n```\n\n## Releases\n\n1. Label the PRs with `breaking`, `enhancement`, `bug`, `documentation`, or `internal`\n2. Merge the PRs\n3. Generate changelog `npm run changelog`\n4. Draft a new release with the changelog\n5. Up the version based on the PR labels `npm version \u003cmajor|minor|patch\u003e`\n6. Push the tag `git push origin \u003ctag_name\u003e`\n7. Publish to npm `npm publish`\n8. Update the tag in release and publish release notes\n\n## Thanks\n\nThis plugin would not be possible without the amazing [serverless-webpack](https://github.com/serverless-heaven/serverless-webpack) plugin and the ideas and code from [Create React App](https://www.github.com/facebook/create-react-app).\n\n---\n\nThis plugin is maintained by [SST](https://sst.dev).\n","funding_links":["https://github.com/sponsors/jayair","https://patreon.com/serverless_stack"],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAnomalyInnovations%2Fserverless-bundle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAnomalyInnovations%2Fserverless-bundle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAnomalyInnovations%2Fserverless-bundle/lists"}