{"_id":"@clarityhub/serverless-simple-router","_rev":"1-2ffc451f15131c2bf3a97e0e0c614f60","name":"@clarityhub/serverless-simple-router","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@clarityhub/serverless-simple-router","version":"1.0.0","description":"Simple lambda router for Node serverless","main":"build/index.js","repository":{"url":"git+https://github.com/clarityhub/serverless-simple-router.git","type":"git"},"bugs":{"url":"https://github.com/clarityhub/serverless-simple-router/issues"},"directories":{"build":"build"},"scripts":{"lint":"eslint src tests","build":"babel ./src --out-dir ./build","test":"jest","test:watch":"jest --watch","test:coverage":"npm run test -- --collectCoverageFrom=\"./src/**/*\" --ci --watchAll=false --coverage"},"husky":{"hooks":{"pre-commit":"run-p lint test","pre-push":"run-p lint test"}},"author":{"name":"Clarity Hub Open Source","email":"opensource@clarityhub.io"},"license":"MIT","dependencies":{"middy":"^0.36.0","url-pattern":"^1.0.3"},"devDependencies":{"@babel/cli":"^7.12.10","@babel/core":"^7.12.10","@babel/node":"^7.12.10","@babel/plugin-transform-runtime":"^7.12.10","@babel/preset-env":"^7.12.11","@babel/runtime-corejs2":"^7.12.5","babel-eslint":"^10.1.0","eslint":"^7.16.0","eslint-config-airbnb":"^18.2.1","eslint-config-clarity-hub":"^3.0.0","eslint-import-resolver-webpack":"^0.13.0","eslint-plugin-import":"^2.22.1","eslint-plugin-security":"^1.4.0","husky":"^4.3.6","jest":"^26.6.3","nodemon":"^2.0.6","npm-run-all":"^4.1.5"},"gitHead":"564da88fb46d93660bd4d186b66b36ad1b5a22cc","homepage":"https://github.com/clarityhub/serverless-simple-router#readme","_id":"@clarityhub/serverless-simple-router@1.0.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-hD07zWwcWjV6eeu5dDRbWzGFKrYCLLblYaX2yETF/0g0P2J2+eDqq9WowDHiTQQeUxlVp+o00t6cFnsv+u9wbw==","shasum":"f1f79892d3af5e495ec7cb9863d2e0d339a75088","tarball":"https://registry.npmjs.org/@clarityhub/serverless-simple-router/-/serverless-simple-router-1.0.0.tgz","fileCount":16,"unpackedSize":32621,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3k2VCRA9TVsSAnZWagAArysP/1idik0k/yj0wHwOJvUU\nde0c05oH9cs0AWqDuXZ44b59NIu8iUZUVyiwIsjWuf5DlIl6mbbgAAKLYMzF\noM1zB8/f10HFbKBDsqw+WY0jWoNC+yluQRveD7xDReRW7EI+JmRWBHYeVI6H\nUP9y3PI95J7bBdotewmAkbeu+sgjLZgAgSWlmShbHjzmkXa2Qif6s5wjeKVc\nYZVC2xyPng6zFYsN5kdO/xOT+9Db5qLNr5z+BpWexUNWrAvemX2LFee/mbmc\nvdhVykp4hk9OYXf2KnA9VjXaTnL6WrCGEN42tt/1DbKVhJmj2msbrl11QtAO\nyjSgUrcDslcaLbSJ5PfAriCZU3mGD1lQ55XTSW9Q6K2TH1ajs7VUNzMhiiBu\nfeAR3iFQb5w0Nx1yKXaab1aOKNO4hU++i+h0/ySXLFOEbTQyZDLz6iVWnbFP\n7Q//ti0Ixm982o+XqHTAHDYt9vWvyRZoQ1BbEFRlbB6bvQmyeFbN1Ym9Ec0/\nm+lUWKiT7skrr6LC82A3StW2I3NFjlLTSfXJZeRWufxW0z3RcVdhindXAZRF\nme+lNplEjugVZjaZO7U0bFHFJtahRR2/klDqTLT1/CsaBTuOnhKsIEujujuQ\nkF5F5oVAkfzkGQ5JDVeEJPwGWLYL9tzK8AEmXhqJ95DV2RhgUpCmjCWCG+L6\n8Z94\r\n=be/e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBADor8RHhs2z+aOa7Iwi6eGYRW52lVzFn0SoR0UbuUgAiEA7PY7jrvopHXGnZ2lSddqaiWvgFOH4OOeaJgNqPBLQ1E="}]},"_npmUser":{"name":"idmontie","email":"idmontie@gmail.com"},"maintainers":[{"name":"idmontie","email":"idmontie@gmail.com"},{"name":"loukitzanna","email":"anna@clarityhub.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/serverless-simple-router_1.0.0_1608404373172_0.7454661621959693"},"_hasShrinkwrap":false}},"time":{"created":"2020-12-19T18:59:33.012Z","1.0.0":"2020-12-19T18:59:33.304Z","modified":"2022-04-04T23:12:46.641Z"},"maintainers":[{"name":"idmontie","email":"idmontie@gmail.com"},{"name":"loukitzanna","email":"anna@clarityhub.io"}],"description":"Simple lambda router for Node serverless","homepage":"https://github.com/clarityhub/serverless-simple-router#readme","repository":{"url":"git+https://github.com/clarityhub/serverless-simple-router.git","type":"git"},"author":{"name":"Clarity Hub Open Source","email":"opensource@clarityhub.io"},"bugs":{"url":"https://github.com/clarityhub/serverless-simple-router/issues"},"license":"MIT","readme":"# @clarityhub/serverless-simple-router\n\n![Node.js CI](https://github.com/clarityhub/serverless-simple-router/workflows/Node.js%20CI/badge.svg)\n\nA simple router solution for managing many routes from one lambda in a\nserverless context.\n\n```bash\nnpm i --save @clarityhub/serverless-simple-router\n```\n\n## Basic Usage\n\nIn these examples, we route paths to our router function using the \nfollowing **serverless.yml** configuration:\n\n```yml\nservice: example\nprovider:\n  name: aws\n  runtime: nodejs12.x\nfunctions:\n    root:\n    handler: src/router.default\n    events:\n      - http:\n          path: /\n          method: any\n          cors: true\n      - http:\n          path: /{proxy+}\n          method: any\n          cors: true\n```\n\n### Using Simple Routes\n\nYou can use the router to map routes to objects and methods:\n\n```js\nimport { Router } from '@clarityhub/serverless-simple-router';\n\nconst tasks = {\n    getAll(event, context, cb) {\n        cb({ statusCode: 200 });\n    },\n    get(event, context, cb) {\n        cb({ statusCode: 200 });\n    },\n    create(event, context, cb) {\n        cb({ statusCode: 200 });\n    },\n    update(event, context, cb) {\n        const id = event.pathParameter.id;\n        cb({ statusCode: 200 });\n    },\n    delete(event, context, cb) {\n        const id = event.pathParameter.id;\n        cb({ statusCode: 200 });\n    },\n};\n\nconst routes = new Router();\nroutes.get('/tasks', tasks, 'getAll');\nroutes.post('/tasks', tasks, 'create');\nroutes.get('/tasks/:id', tasks, 'get');\nroutes.put('/tasks/:id', tasks, 'update');\nroutes.delete('/tasks/:id', tasks, 'delete');\nexport default routes.exec();\n```\n\n### Using Resources\n\nYou can use resources to simplify routes:\n\n```js\n// The routes above can be simplified to:\nroutes.resource('/tasks', tasks);\n```\n\n### Using RouteBuilder\n\nTo handle more complex routes with [middy](https://github.com/middyjs/middy) middleware support, you can use the `RouteBuilder` to create routes and resources.\n\nUsing RouteBuilder also lets you write async code without worrying about\ncallbacks.\n\n```js\nimport { Router, RouteBuilder } from '@clarityhub/serverless-simple-router';\n\nclass TaskController {\n    async getAll() {\n        return [];\n    }\n    async create() {\n        return {};\n    }\n}\n\n// Create 1 route\nroutes.get('/tasks', RouteBuilder.method(TaskController, 'getAll'));\n\n// Add middy Middleware\nconst middyMiddleware = [httpHeaderNormalizer(), cors(), bodyParser()];\nroutes.create('/tasks', RouteBuilder.method(TaskController, 'create', middyMiddleware));\n\n// You can also use RouteBuilder with a resource:\nroutes.resource('/tasks', RouteBuilder.crud(TaskController, middyMiddleware));\n\nexport default routes.exec();\n```\n\n### RBAC with RouteBuilder\n\nSince RBAC is a common pattern, we added a simplified version to the `RouteBuilder` automatically. The rbac object will be passed to middy middleware for you to evaluate:\n\n```js\nfunction useRbac(options) {\n    return {\n        async before({ context }) {\n            // Demonstration by adding rbac options to context\n            context.rbac = options.rbac;\n        },\n    };\n}\n\nclass Tasks {\n    create({ context }) {\n        return context.rbac;\n    }\n}\n\n/*\n    When this route is called, it will return:\n    { resource: 'tasks', action: 'create' }\n*/\nroutes.create('/tasks', RouteBuilder.method(TaskController, 'create', [useRbac], { rbac: 'tasks' }));\n```\n\n## API\n\n### Router\n\n`new Router(options)`\n\nCreate a new router object\n\n* `options` - object\n  * `urlOptions` – takes properties from [url-pattern](https://www.npmjs.com/package/url-pattern).\n  * `notFoundResponse` – what to return when a route is not found. Defaults to JSON 404 response.\n\n`[method](path: String, obj: Object, objMethod: String)`\n\nAdd a handler using an object and object name. Supported methods are `get`, `post`, `put`, `delete`, `patch`.\n\nPaths can take simple params as well. Example: `/tasks/:id`. The `id` param will be available via `event.pathParameter.id`.\n\n`[method](path: String, routeBuilderMethod: RouteBuilderMethod)`\n\nAdd a handler using a RouteBuilder.\n\n`resource(path: String, obj: Object)`\n\nAdd a set of handlers for get, geAll, create, update, and delete.\n\n`resource(path: String, routeBuilderCrud: RouterBuilderCrud)`\n\nAdd a set of handlers using a RouteBuilder.\n\n`exec(): Function`\n\nReturns a function for you to pass back to the lambda.\n\n#### RouteBuilder\n\n`RouteBuilder.method(Controller: Class, method: String, additionalMiddleware: Array<Middy>, options: Object)`\n\nCreate a single RouteBuilderMethod using a Class (not an instance/object).\n\n\n`RouteBuilder.crud(Controller: Class, additionalMiddleware: Array<Middy>, options: Object)`\n\nCreate a RouteBuilderCrud using a Class (not an instance/object).\n\n## Developing\n\nYou can run tests via the cli:\n\n```bash\nnpm run test\n```\n\n## License\n\nMIT Licensed\n","readmeFilename":"README.md"}