{"_id":"@abxvn/tasks","_rev":"6-ebacdeedc1887bf5ed08d69b7cb4b22d","name":"@abxvn/tasks","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@abxvn/tasks","version":"1.0.0","description":"Light-weight and fast priority based task runner","license":"MIT","main":"./index.js","types":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/abxvnvn/source.git","directory":"packages/tasks"},"keywords":["abx","tasks","priority","runner"],"author":{"name":"Hung Luu","email":"hungluu2106@gmail.com"},"bugs":{"url":"https://github.com/abxvnvn/source/issues?q=is%3Aopen+is%3Aissue+label%3A%22package%3Atasks%22"},"homepage":"https://github.com/abxvnvn/source/tree/main/packages/tasks#readme","_id":"@abxvn/tasks@1.0.0","_integrity":"sha512-RDuEzj3ubpwFUTymKAaaQpoqHQPGJmr0zdXNVMOu7J9xHlnZLuOVAVkmzUkEYK182/Q65De+1jjaRUPl9oE8Eg==","_resolved":"/private/var/folders/0_/q3400kzn4kbflmypl6nnsf4m0000gn/T/a508e795d88f1369122c904f6eb3647c/abxvn-tasks-1.0.0.tgz","_from":"file:abxvn-tasks-1.0.0.tgz","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-RDuEzj3ubpwFUTymKAaaQpoqHQPGJmr0zdXNVMOu7J9xHlnZLuOVAVkmzUkEYK182/Q65De+1jjaRUPl9oE8Eg==","shasum":"ef5a3bb966cb344900b8fa0a13683c162738957f","tarball":"https://registry.npmjs.org/@abxvn/tasks/-/tasks-1.0.0.tgz","fileCount":4,"unpackedSize":9143,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOPXlCmNm1E7quumksn5hR8TGKT9BmV9eS+X6HQjyj1wIhAP9Yqm36KJr8kZyH2aoJwxGc1lpl4s5z1aAVtgvbOYcG"}]},"_npmUser":{"name":"hungluu","email":"luuhug@gmail.com"},"directories":{},"maintainers":[{"name":"hungluu","email":"luuhug@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tasks_1.0.0_1703651714286_0.7255197632037875"},"_hasShrinkwrap":false},"1.0.1":{"name":"@abxvn/tasks","version":"1.0.1","description":"Light-weight and fast priority based task runner","license":"MIT","main":"./index.js","types":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/abxvn/source.git","directory":"packages/tasks"},"keywords":["abx","tasks","priority","runner"],"author":{"name":"Hung Luu","email":"hungluu2106@gmail.com"},"bugs":{"url":"https://github.com/abxvn/source/issues?q=is%3Aopen+is%3Aissue+label%3A%22package%3Atasks%22"},"homepage":"https://github.com/abxvn/source/tree/main/packages/tasks#readme","_id":"@abxvn/tasks@1.0.1","_integrity":"sha512-e4zUZHEut4Bgb53Efp/RZgT5CVbX2xzMsFrw/sllsPeAUcqWfqv5FAHNlK0BPhniigTZzIiqCpH2LXyVK48AGQ==","_resolved":"/private/var/folders/0_/q3400kzn4kbflmypl6nnsf4m0000gn/T/885ad015ca7332c20ffaa8be24d01531/abxvn-tasks-1.0.1.tgz","_from":"file:abxvn-tasks-1.0.1.tgz","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-e4zUZHEut4Bgb53Efp/RZgT5CVbX2xzMsFrw/sllsPeAUcqWfqv5FAHNlK0BPhniigTZzIiqCpH2LXyVK48AGQ==","shasum":"3c8115e0dd888631f31746cc0277536fa25db241","tarball":"https://registry.npmjs.org/@abxvn/tasks/-/tasks-1.0.1.tgz","fileCount":4,"unpackedSize":9165,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCK8ZBYtbHaZ368Uat27mDPbt+ewslcspCSwbeZFbx7cAIgQCp2bUlUk9dB4k9aIBiTqd+Nad+ux0SSw6DuxcLFBi4="}]},"_npmUser":{"name":"hungluu","email":"luuhug@gmail.com"},"directories":{},"maintainers":[{"name":"hungluu","email":"luuhug@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tasks_1.0.1_1703656738085_0.9009424013507548"},"_hasShrinkwrap":false},"1.1.0":{"name":"@abxvn/tasks","version":"1.1.0","description":"Light-weight and fast priority based task runner","license":"MIT","repository":{"type":"git","url":"git+https://github.com/abxvn/source.git","directory":"packages/tasks"},"keywords":["abx","tasks","priority","runner"],"author":{"name":"Hung Luu","email":"hungluu2106@gmail.com"},"bugs":{"url":"https://github.com/abxvn/source/issues?q=is%3Aopen+is%3Aissue+label%3A%22package%3Atasks%22"},"homepage":"https://github.com/abxvn/source/tree/main/packages/tasks#readme","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"}},"_id":"@abxvn/tasks@1.1.0","_integrity":"sha512-nhi8JJhZ6KmBlH8K+mqIVSFTgEgotyzP8QCfpnDYvkOv9QEIx56RCirCZ1KDyh999y95YBc6xI6wRxIXo202EQ==","_resolved":"/private/var/folders/0_/q3400kzn4kbflmypl6nnsf4m0000gn/T/c89f34cf5cefc72890e0e906b014011e/abxvn-tasks-1.1.0.tgz","_from":"file:abxvn-tasks-1.1.0.tgz","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-nhi8JJhZ6KmBlH8K+mqIVSFTgEgotyzP8QCfpnDYvkOv9QEIx56RCirCZ1KDyh999y95YBc6xI6wRxIXo202EQ==","shasum":"fe3f56de7104ed572888159647e8f8c4d13b72d5","tarball":"https://registry.npmjs.org/@abxvn/tasks/-/tasks-1.1.0.tgz","fileCount":11,"unpackedSize":18187,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICmDmN+KE7yB6Cq5uDkrXySVqF5Oo5fW7hOm6tDQ/X8FAiBSgtDupCeTBfIys9jZBqawee0JXuBsofbPhnXfHRmFbg=="}]},"_npmUser":{"name":"hungluu","email":"luuhug@gmail.com"},"directories":{},"maintainers":[{"name":"hungluu","email":"luuhug@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tasks_1.1.0_1706244323709_0.07862963646904708"},"_hasShrinkwrap":false},"1.1.1":{"name":"@abxvn/tasks","version":"1.1.1","description":"Light-weight and fast priority based task runner","license":"MIT","repository":{"type":"git","url":"git+https://github.com/abxvn/source.git","directory":"packages/tasks"},"keywords":["abx","tasks","priority","runner"],"author":{"name":"Hung Luu","email":"hungluu2106@gmail.com"},"bugs":{"url":"https://github.com/abxvn/source/issues?q=is%3Aopen+is%3Aissue+label%3A%22package%3Atasks%22"},"homepage":"https://github.com/abxvn/source/tree/main/packages/tasks#readme","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/index.d.ts"}},"_id":"@abxvn/tasks@1.1.1","_integrity":"sha512-GaLSWRYVJWbzCjP0fp9eataP/A7TAeTrprm6x49cD+Iaok1RujXPlDZhdLTUMeF9RqLV2v1zzTpC4FUbP4Thpg==","_resolved":"/private/var/folders/0_/q3400kzn4kbflmypl6nnsf4m0000gn/T/4091180597c9f41e6f782805812ff79f/abxvn-tasks-1.1.1.tgz","_from":"file:abxvn-tasks-1.1.1.tgz","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-GaLSWRYVJWbzCjP0fp9eataP/A7TAeTrprm6x49cD+Iaok1RujXPlDZhdLTUMeF9RqLV2v1zzTpC4FUbP4Thpg==","shasum":"9c4afa6be7e49ec8354926bb2f431dcd2f5ac976","tarball":"https://registry.npmjs.org/@abxvn/tasks/-/tasks-1.1.1.tgz","fileCount":11,"unpackedSize":18223,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGqBm2fQZfgJOY/3lSz5eFRDduCA/6X5WmPvnC7ySv2gIhAJW1aJwgTb4enMs2nr5gLkzpHOuAkYZmX8W7aamS1mPz"}]},"_npmUser":{"name":"hungluu","email":"luuhug@gmail.com"},"directories":{},"maintainers":[{"name":"hungluu","email":"luuhug@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tasks_1.1.1_1706245279572_0.18373074522496435"},"_hasShrinkwrap":false},"1.1.2":{"name":"@abxvn/tasks","version":"1.1.2","description":"Light-weight and fast priority based task runner","license":"MIT","repository":{"type":"git","url":"git+https://github.com/abxvn/source.git","directory":"packages/tasks"},"keywords":["abx","tasks","priority","runner"],"author":{"name":"Hung Luu","email":"hungluu2106@gmail.com"},"bugs":{"url":"https://github.com/abxvn/source/issues?q=is%3Aopen+is%3Aissue+label%3A%22package%3Atasks%22"},"homepage":"https://github.com/abxvn/source/tree/main/packages/tasks#readme","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/index.d.ts"}},"_id":"@abxvn/tasks@1.1.2","_integrity":"sha512-ddgO7DuPHAkEHO1HfnSAV7VRGUAUwVYIAo/MWzrsOSOYgApOcXp/qadX53cD3XxTH7A2E6qHtFGIacPheSBLKQ==","_resolved":"/private/var/folders/0_/q3400kzn4kbflmypl6nnsf4m0000gn/T/ea7fc45c61fcfbbe890badebe97fcdd3/abxvn-tasks-1.1.2.tgz","_from":"file:abxvn-tasks-1.1.2.tgz","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-ddgO7DuPHAkEHO1HfnSAV7VRGUAUwVYIAo/MWzrsOSOYgApOcXp/qadX53cD3XxTH7A2E6qHtFGIacPheSBLKQ==","shasum":"4fbfc275e09116da6793fd6c5ddcb08ace84ca08","tarball":"https://registry.npmjs.org/@abxvn/tasks/-/tasks-1.1.2.tgz","fileCount":11,"unpackedSize":18219,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAuoTec3STcb58IUt+Aiiu8gCW6Osd1dWHtXqp1jIKeYAiEA4Wy2Tgrf2SR2xXuTUdWQdi60lEzaEyC+Zp7VZPUxKcw="}]},"_npmUser":{"name":"hungluu","email":"luuhug@gmail.com"},"directories":{},"maintainers":[{"name":"hungluu","email":"luuhug@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tasks_1.1.2_1706512962210_0.40066562756696755"},"_hasShrinkwrap":false},"1.1.3":{"name":"@abxvn/tasks","version":"1.1.3","description":"Light-weight and fast priority based task runner","license":"MIT","repository":{"type":"git","url":"git+https://github.com/abxvn/source.git","directory":"packages/tasks"},"keywords":["abx","tasks","priority","runner"],"author":{"name":"Hung Luu","email":"hungluu2106@gmail.com"},"bugs":{"url":"https://github.com/abxvn/source/issues?q=is%3Aopen+is%3Aissue+label%3A%22package%3Atasks%22"},"homepage":"https://github.com/abxvn/source/tree/main/packages/tasks#readme","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/index.d.ts"}},"_id":"@abxvn/tasks@1.1.3","_integrity":"sha512-LMtZVW/TfEdmYw8dnftOObqXqQgv2ZPBRowmOvnV17qzNXjBv4ET4qBLmT4gkfPghn2rAGqP7PTBTua4NYnVyA==","_resolved":"/private/var/folders/0_/q3400kzn4kbflmypl6nnsf4m0000gn/T/14d4a07af8febdc320fd98983cbe225c/abxvn-tasks-1.1.3.tgz","_from":"file:abxvn-tasks-1.1.3.tgz","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-LMtZVW/TfEdmYw8dnftOObqXqQgv2ZPBRowmOvnV17qzNXjBv4ET4qBLmT4gkfPghn2rAGqP7PTBTua4NYnVyA==","shasum":"f49725dc26aa8f1785b333f4154108f70f6348a9","tarball":"https://registry.npmjs.org/@abxvn/tasks/-/tasks-1.1.3.tgz","fileCount":11,"unpackedSize":19000,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICpT2L7MyQKO5EsrM0TssHeZlqYX9o5wF0yZTX7jrqbYAiEA3R2mbdUIaXwxS/fCxCeHkJsCxeWnI0hvfm4v0hTx9I4="}]},"_npmUser":{"name":"hungluu","email":"luuhug@gmail.com"},"directories":{},"maintainers":[{"name":"hungluu","email":"luuhug@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tasks_1.1.3_1706667460391_0.2556863462764585"},"_hasShrinkwrap":false},"1.2.0":{"name":"@abxvn/tasks","version":"1.2.0","description":"Light-weight and fast priority based task runner","license":"MIT","repository":{"type":"git","url":"git+https://github.com/abxvn/source.git","directory":"packages/tasks"},"keywords":["abx","tasks","priority","runner"],"author":{"name":"Hung Luu","email":"hungluu2106@gmail.com"},"bugs":{"url":"https://github.com/abxvn/source/issues?q=is%3Aopen+is%3Aissue+label%3A%22package%3Atasks%22"},"homepage":"https://github.com/abxvn/source/tree/main/packages/tasks#readme","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/index.d.ts"}},"_id":"@abxvn/tasks@1.2.0","_integrity":"sha512-tRMvD3Z0Opq3Kpfjf9byL080tzgPoRmrlA6PMXFhBo4kwDunIkqHQ6qBhxdGCujI8qOSAiAbKTRyCt929Crm9A==","_resolved":"/private/var/folders/0_/q3400kzn4kbflmypl6nnsf4m0000gn/T/1917ce81abe8407c59266b845c885732/abxvn-tasks-1.2.0.tgz","_from":"file:abxvn-tasks-1.2.0.tgz","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-tRMvD3Z0Opq3Kpfjf9byL080tzgPoRmrlA6PMXFhBo4kwDunIkqHQ6qBhxdGCujI8qOSAiAbKTRyCt929Crm9A==","shasum":"325a9a6980aafe3627abb7f2c7f4c69e1df37e01","tarball":"https://registry.npmjs.org/@abxvn/tasks/-/tasks-1.2.0.tgz","fileCount":11,"unpackedSize":20666,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPtdC3NSG26oVmOKCODpezjFE5TyU5F5fer3kQTNdZdgIhAJFwp18TwIsgNa/QjmHeUBSim1TBiZ3fbmWw6BIRX/t9"}]},"_npmUser":{"name":"hungluu","email":"luuhug@gmail.com"},"directories":{},"maintainers":[{"name":"hungluu","email":"luuhug@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tasks_1.2.0_1706945936974_0.7215134857634289"},"_hasShrinkwrap":false}},"time":{"created":"2023-12-27T04:35:14.186Z","1.0.0":"2023-12-27T04:35:14.444Z","modified":"2024-02-03T07:38:57.288Z","1.0.1":"2023-12-27T05:58:58.235Z","1.1.0":"2024-01-26T04:45:23.853Z","1.1.1":"2024-01-26T05:01:19.728Z","1.1.2":"2024-01-29T07:22:42.373Z","1.1.3":"2024-01-31T02:17:40.567Z","1.2.0":"2024-02-03T07:38:57.114Z"},"maintainers":[{"name":"hungluu","email":"luuhug@gmail.com"}],"description":"Light-weight and fast priority based task runner","homepage":"https://github.com/abxvn/source/tree/main/packages/tasks#readme","keywords":["abx","tasks","priority","runner"],"repository":{"type":"git","url":"git+https://github.com/abxvn/source.git","directory":"packages/tasks"},"author":{"name":"Hung Luu","email":"hungluu2106@gmail.com"},"bugs":{"url":"https://github.com/abxvn/source/issues?q=is%3Aopen+is%3Aissue+label%3A%22package%3Atasks%22"},"license":"MIT","readme":"@abxvn/tasks\n=====\n[![build][badge-build]][changelog]\n[![version][npm-version-badge]][npm-url]\n[![downloads][npm-downloads-badge]][npm-url]\n\nA priority based task runner which is:\n- Type safed\n- Extremely fast\n- Light-weight\n- No dependencies\n\n**Table of contents**\n* [Installation](#installation)\n* [Usage](#usage)\n  + [Add and run tasks](#add-and-run-tasks)\n  + [Default task priorities](#default-task-priorities)\n  + [Provide task context](#provide-task-context)\n  + [Custom task type](#custom-task-type)\n* [Changelog](#changelog)\n* [Contribution](#contribution)\n\nInstallation\n-----\nPick **one of** these commands to install:\n```\npnpm add @abxvn/tasks\nyarn add @abxvn/tasks\nnpm install --save @abxvn/tasks\n```\n\nUsage\n-----\n\n### Add and run tasks\n\nTasks can be provided with optional `id` and `context`, can be add to the task registry like this:\n\n```typescript\nimport { TaskEmitter, TaskPriority } from '@abxvn/tasks'\n\nconst tasks = new TaskEmitter()\n\n// `execute` is example function\n// if not priority provided, default to TaskPriority.NORMAL\nconst normalPriorityTask = { execute } \nconst lowPriorityTask = { execute, priority: TaskPriority.LOW }\nconst hightPriorityTask = { execute, priority: TaskPriority.HIGH }\n\ntasks.add(normalPriorityTask)\ntasks.add(lowPriorityTask)\ntasks.add(hightPriorityTask)\n\n// Execute tasks\n// Execution order will be hightPriorityTask > normalPriorityTask > lowPriorityTask\ntasks.next()\n```\n\n### Default task priorities\n\n```\n// From highest to lowest\nexport const TaskPriority = {\n  INSTANT: 1,\n  HIGH: 2,\n  NORMAL: 3,\n  LOW: 4,\n  IDLE: 5\n} as const\n```\n\n### Provide task context\n\nIf a task context is provided, when the time comes, it will be `execute` with the context\n\n```typescript\n// `execute` is example function\nconst execute = ({ name }) => console.log(name)\nconst taskWithContext = { execute, context: { name: 'Hello' } }\n\ntasks.add(taskWithContext)\ntasks.next() // console.log 'Hello'\n```\n\n### Custom task type\n\nYou can customize task type, or its context and priority types too:\n\n```typescript\nimport { ITask, EventEmitter } from '@abxvn/tasks`\n\ntype ICustomContextType = {...} | undefined\ntype ICustomPriorityType = {...}\n\ntype ICustomTaskType1 = ITask<ICustomContextType>\ntype ICustomTaskType2 = ITask<ICustomContextType, ICustomPriorityType>\ninterface ICustomTaskType3 extends ITask { ... }\n\nconst tasks1 = new EventEmitter<ICustomTaskType1>()\nconst tasks2 = new EventEmitter<ICustomTaskType2>()\nconst tasks2 = new EventEmitter<ICustomTaskType3>()\n```\n\n### Introduce sub task after task\n\nNew sub tasks can be added into queue inside a task execution\n\n```typescript\n// `execute` is example function\nconst subtaskExecute = () => console.log('subtask')\n// current task emitter can be accessed here too\nconst taskExecute = (_, taskEmitter) => {\n  console.log('task')\n  taskEmitter.add({ execute: subtaskExecute })\n}\n\ntasks.add({ execute: taskExecute })\ntasks.next()\n// console.log 'task'\n// console.log 'subtask'\n```\n\n### Retry a failed task\n\nA failed task can be retried by catching failed tasks. You can implement that logic freely on the way you desire. Here is an example:\n\n```typescript\nconst tasks = new TaskEmitter({\n  onItemError: (task, error) => {\n    if (shouldRetry(task)) {\n      // retry task by re-pushing it back to queue\n      // with lower priority\n      tasks.add({ ...task, priority: TaskPriority.LOW })\n    }\n  }\n})\n```\n\nChangelog\n-----\nSee [CHANGELOG.md][changelog]\n\nContribution\n-----\n\nAll PRs and ideas for improvement are welcomed. \n\nIf you got any issues using this package, don't hesitate to create new [🐞 Bug report][issues] with a proper `package:<name>` label.\n\nFeel free to clone this project, make changes that your feel necessary and pull request anytime you want.\n\nInstall dependencies and run development build:\n```\npnpm install\npnpm start\n```\n\n**Working on your first Pull Request?**\n\nYou can learn how from this free video series: [How to Contribute to an Open Source Project on GitHub](https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github)\n\nTo help you get your feet wet and get you familiar with our contribution process, we have a list of good first issues that contain bugs that have a relatively limited scope. This is a great place to get started.\n\n-----\nCheers 🍻\n\n[changelog]: https://github.com/abxvn/source/blob/main/packages/tasks/CHANGELOG.md\n[issues]: https://github.com/abxvn/source/issues?q=is%3Aopen+is%3Aissue+label%3Apackage%3Atasks\n[good-first]: https://github.com/abxvn/source/issues?q=is%3Aopen+is%3Aissue+label%3Aflag%3Agood-first\n[badge-build]: https://github.com/abxvn/source/actions/workflows/build.yaml/badge.svg\n[npm-url]: https://www.npmjs.com/package/@abxvn/tasks\n[npm-downloads-badge]: https://img.shields.io/npm/dw/@abxvn/tasks\n[npm-version-badge]: https://img.shields.io/npm/v/@abxvn/tasks\n\n","readmeFilename":"README.md"}