{"id":21377707,"url":"https://github.com/quobject/tap-to-html","last_synced_at":"2025-06-16T01:39:24.111Z","repository":{"id":65514490,"uuid":"62523053","full_name":"Quobject/tap-to-html","owner":"Quobject","description":"A Test-Anything-Protocol (tap) stream transformer to html","archived":false,"fork":false,"pushed_at":"2017-08-30T20:38:45.000Z","size":112,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-28T20:10:23.929Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/Quobject.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-07-04T01:28:34.000Z","updated_at":"2019-10-14T06:13:26.000Z","dependencies_parsed_at":"2023-01-26T21:05:14.639Z","dependency_job_id":null,"html_url":"https://github.com/Quobject/tap-to-html","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Quobject/tap-to-html","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Quobject%2Ftap-to-html","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Quobject%2Ftap-to-html/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Quobject%2Ftap-to-html/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Quobject%2Ftap-to-html/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Quobject","download_url":"https://codeload.github.com/Quobject/tap-to-html/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Quobject%2Ftap-to-html/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260082694,"owners_count":22956328,"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":[],"created_at":"2024-11-22T09:23:25.064Z","updated_at":"2025-06-16T01:39:24.087Z","avatar_url":"https://github.com/Quobject.png","language":"TypeScript","readme":"# tap-to-html\nA Test-Anything-Protocol (tap) stream transformer to html\n\n[![NPM](https://nodei.co/npm/tap-to-html.png?downloads=true\u0026downloadRank=true)](https://nodei.co/npm/tap-to-html/)\n[![NPM](https://nodei.co/npm-dl/tap-to-html.png?months=6\u0026height=3)](https://nodei.co/npm/tap-to-html/)\n\n[![NPM version][npm-image]][npm-url]\n[![NPM downloads][downloads-image]][downloads-url]\n[![Build status][travis-image]][travis-url]\n\n## Installation\n\n    npm install tap-to-html\n    \n## Usage\n\n### Javascript\n\n```js\nvar tapToHtml = new require('tap-to-html').TapToHtml();\nvar tapToHtmlstream = tapToHtml.stream();\n\nsourceStream.pipe(tapToHtmlstream).pipe(writeStream);\n```\n\n### Typescript\n\n```js\nimport { TapToHtml } from 'tap-to-html';\n\nconst tapToHtml = new TapToHtml();\n\nconst tapToHtmlstream = tapToHtml.stream();\nsourceStream.pipe(tapToHtmlstream).pipe(writeStream);\n```\n\n## Example 1\n\n### input\n\n```txt\nTAP version 13\n# testling.baseconfig_for_spec.ts\n# get value\nok 1 has key buildtype\n# testling.context.ts\n# constructor\nok 2 cloudconfig\nok 3 keyspath\nok 4 workingpath\nok 60 device\nok 61 ebsSize\nok 62 ebsVolumeType\n# testling.core.quhnb_docker.ts\n# constructor\n# testling.core.vpc_options.ts\n# constructor\nok 63 vpcId\nok 64 securityGroupId\n\n1..64\n# tests 64\n# pass  64\n\n# ok\n```\n\n### output\n\n```html\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n\u003chead\u003e\n    \u003ctitle\u003eTap To Html\u003c/title\u003e\n    \u003clink rel=\"stylesheet\" href=\"bootstrap.min.css\"\u003e\n    \u003cscript src=\"jquery.min.js\"\u003e\u003c/script\u003e\n    \u003cscript src=\"bootstrap.min.js\"\u003e\u003c/script\u003e\n    \u003cstyle\u003e\n        .error {\n            background-color: #ff0000;\n            color: #ffffff;\n            font-size: 24px;\n            font-weight: bold;\n        }\n        .ok {\n            background-color: #71eb3d;\n        }\n        .errorbody {\n            background-color: #ff0000;\n        }\n        .okbody {\n            background-color: #00ff00;\n        }\n        .container {\n            background-color: #ffffff;\n            margin-top: 40px;\n        }\n        h3 {\n            font-family: \"Times New Roman\";\n            font-size: 20px;\n        }\n        p {\n            font-family: \"Courier New\";\n            font-size: 20px;\n        }\n        .yaml {\n            background-color: #f8dada;\n            font-size: 20px;\n        }  \n        .toprow {\n            height: 10px;\n        }  \n        .summary {\n            margin: 20px;            \n        }  \n        span.label {\n             font-size: 20px;             \n        }   \n    \u003c/style\u003e\n    \u003cscript\u003e\n        $(document).ready(function () {\n            setInterval(function () {\n                location.reload();\n            }, 4000);\n        });\n    \u003c/script\u003e\n\u003c/head\u003e\n\u003cbody class=\"okbody\"\u003e\n    \u003cdiv class=\"container\"\u003e\n        \u003cdiv class=\"row toprow\"\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"row\"\u003e\n            \u003cdiv class=\"col-md-2\"\u003e\n                \u003cspan class=\"label label-default\"\u003eTests 64\u003c/span\u003e  \n            \u003c/div\u003e\n            \u003cdiv class=\"col-md-2\"\u003e\n                \u003cspan class=\"label label-success\"\u003ePass 64\u003c/span\u003e                        \n            \u003c/div\u003e\n            \u003cdiv class=\"col-md-2\"\u003e\n                \u003cspan class=\"label label-danger\"\u003eFail 0\u003c/span\u003e\n            \u003c/div\u003e\n            \u003cdiv class=\"col-md-6\"\u003e7:36:02 AM\n            \u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"row summary\"\u003e\n           \n        \u003c/div\u003e\n        \u003cdiv class=\"row\"\u003e\n           \u003cbr\u003e\n\u003cp\u003e# testling.baseconfig_for_spec.ts\u003c/p\u003e\n\u003cp\u003e# get value\u003c/p\u003e\n\u003cp class=\"ok\"\u003eok 1 has key buildtype\u003c/p\u003e\n\u003cp\u003e# testling.context.ts\u003c/p\u003e\n\u003cp\u003e# constructor\u003c/p\u003e\n\u003cp class=\"ok\"\u003eok 2 cloudconfig\u003c/p\u003e\n\u003cp class=\"ok\"\u003eok 3 keyspath\u003c/p\u003e\n\u003cp class=\"ok\"\u003eok 4 workingpath\u003c/p\u003e\n\u003cp class=\"ok\"\u003eok 60 device\u003c/p\u003e\n\u003cp class=\"ok\"\u003eok 61 ebsSize\u003c/p\u003e\n\u003cp class=\"ok\"\u003eok 62 ebsVolumeType\u003c/p\u003e\n\u003cp\u003e# testling.core.quhnb_docker.ts\u003c/p\u003e\n\u003cp\u003e# constructor\u003c/p\u003e\n\u003cp\u003e# testling.core.vpc_options.ts\u003c/p\u003e\n\u003cp\u003e# constructor\u003c/p\u003e\n\u003cp class=\"ok\"\u003eok 63 vpcId\u003c/p\u003e\n\u003cp class=\"ok\"\u003eok 64 securityGroupId\u003c/p\u003e\n\u003cbr\u003e\n\u003cp\u003e# tests 64\u003c/p\u003e\n\u003cp\u003e# pass  64\u003c/p\u003e\n\u003cbr\u003e\n\u003cp\u003e# ok\u003c/p\u003e\n\u003cbr\u003e\n        \u003c/div\u003e\n    \u003c/div\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n```\n\n![Example1](./images/example1.png)\n\n\n## Example 2\n\n### input\n\n```txt\nTAP version 13\n# testling.core.ebs_options.ts\n# constructor\nok 57 machineName\nok 62 ebsVolumeType\n# testling.core.quhnb_docker.ts\n# constructor\n# testling.core.vpc_options.ts\n# constructor\nnot ok 63 vpcId\n  ---\n    operator: equal\n    expected: 'vpc id2'\n    actual:   'vpc id'\n  ...\nok 64 securityGroupId\n\n1..64\n# tests 64\n# pass  63\n# fail  1\n```\n\n### output\n\n```html\n\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n\u003chead\u003e\n    \u003ctitle\u003eTap To Html\u003c/title\u003e\n    \u003clink rel=\"stylesheet\" href=\"bootstrap.min.css\"\u003e\n    \u003cscript src=\"jquery.min.js\"\u003e\u003c/script\u003e\n    \u003cscript src=\"bootstrap.min.js\"\u003e\u003c/script\u003e\n    \u003cstyle\u003e\n        .error {\n            background-color: #ff0000;\n            color: #ffffff;\n            font-size: 24px;\n            font-weight: bold;\n        }\n        .ok {\n            background-color: #71eb3d;\n        }\n        .errorbody {\n            background-color: #ff0000;\n        }\n        .okbody {\n            background-color: #00ff00;\n        }\n        .container {\n            background-color: #ffffff;\n            margin-top: 40px;\n        }\n        h3 {\n            font-family: \"Times New Roman\";\n            font-size: 20px;\n        }\n        p {\n            font-family: \"Courier New\";\n            font-size: 20px;\n        }\n        .yaml {\n            background-color: #f8dada;\n            font-size: 20px;\n        }  \n        .toprow {\n            height: 10px;\n        }  \n        .summary {\n            margin: 20px;            \n        }  \n        span.label {\n             font-size: 20px;             \n        }   \n    \u003c/style\u003e\n    \u003cscript\u003e\n        $(document).ready(function () {\n            setInterval(function () {\n                location.reload();\n            }, 4000);\n        });\n    \u003c/script\u003e\n\u003c/head\u003e\n\u003cbody class=\"errorbody\"\u003e\n    \u003cdiv class=\"container\"\u003e\n        \u003cdiv class=\"row toprow\"\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"row\"\u003e\n            \u003cdiv class=\"col-md-2\"\u003e\n                \u003cspan class=\"label label-default\"\u003eTests 64\u003c/span\u003e  \n            \u003c/div\u003e\n            \u003cdiv class=\"col-md-2\"\u003e\n                \u003cspan class=\"label label-success\"\u003ePass 63\u003c/span\u003e                        \n            \u003c/div\u003e\n            \u003cdiv class=\"col-md-2\"\u003e\n                \u003cspan class=\"label label-danger\"\u003eFail 1\u003c/span\u003e\n            \u003c/div\u003e\n            \u003cdiv class=\"col-md-6\"\u003e7:40:50 AM\n            \u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"row summary\"\u003e\n           \u003cp class=\"error\"\u003e# testling.core.quhnb_docker.ts# constructor# testling.core.vpc_options.ts# constructor\u003c/p\u003e\u003cp class=\"error\"\u003enot ok 63 vpcId\u003c/p\u003e\n\u003cpre class=\"yaml\"\u003e\n  ---\n    operator: equal\n    expected: 'vpc id2'\n    actual:   'vpc id'\n  ...\n\u003c/pre\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"row\"\u003e\n           \u003cbr\u003e\n\u003cp\u003e# testling.core.ebs_options.ts\u003c/p\u003e\n\u003cp\u003e# constructor\u003c/p\u003e\n\u003cp class=\"ok\"\u003eok 57 machineName\u003c/p\u003e\n\u003cp class=\"ok\"\u003eok 62 ebsVolumeType\u003c/p\u003e\n\u003cp\u003e# testling.core.quhnb_docker.ts\u003c/p\u003e\n\u003cp\u003e# constructor\u003c/p\u003e\n\u003cp\u003e# testling.core.vpc_options.ts\u003c/p\u003e\n\u003cp\u003e# constructor\u003c/p\u003e\n\u003cp class=\"error\"\u003e# testling.core.quhnb_docker.ts# constructor# testling.core.vpc_options.ts# constructor\u003c/p\u003e\u003cp class=\"error\"\u003enot ok 63 vpcId\u003c/p\u003e\n\u003cpre class=\"yaml\"\u003e\n  ---\n    operator: equal\n    expected: 'vpc id2'\n    actual:   'vpc id'\n  ...\n\u003c/pre\u003e\n\u003cp class=\"ok\"\u003eok 64 securityGroupId\u003c/p\u003e\n\u003cbr\u003e\n\u003cp\u003e# tests 64\u003c/p\u003e\n\u003cp\u003e# pass  63\u003c/p\u003e\n\u003cp\u003e# fail  1\u003c/p\u003e\n\u003cbr\u003e\n        \u003c/div\u003e\n    \u003c/div\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n\n```\n\n![Example2](./images/example2.png)\n\n## License\n\nMIT\n\n[npm-image]: https://img.shields.io/npm/v/tap-to-html.svg?style=flat\n[npm-url]: https://npmjs.org/package/tap-to-html\n[downloads-image]: https://img.shields.io/npm/dm/tap-to-html.svg?style=flat\n[downloads-url]: https://npmjs.org/package/tap-to-html\n[travis-image]: https://api.travis-ci.org/Quobject/tap-to-html.svg\n[travis-url]: https://travis-ci.org/Quobject/tap-to-html/\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquobject%2Ftap-to-html","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquobject%2Ftap-to-html","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquobject%2Ftap-to-html/lists"}