{"id":19219631,"url":"https://github.com/squirrel-forge/node-cfx","last_synced_at":"2026-04-10T23:10:38.512Z","repository":{"id":57162147,"uuid":"377564383","full_name":"squirrel-forge/node-cfx","owner":"squirrel-forge","description":"Node stdout/console styler, replace the basic console methods and allow for coloured output.","archived":false,"fork":false,"pushed_at":"2022-01-28T00:15:48.000Z","size":301,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-17T07:39:20.782Z","etag":null,"topics":["ascii","cli","colors","console","javascript","node","nodejs","output","stdout","styling","terminal"],"latest_commit_sha":null,"homepage":"","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/squirrel-forge.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2021-06-16T16:42:37.000Z","updated_at":"2022-01-23T20:54:47.000Z","dependencies_parsed_at":"2022-09-06T11:41:00.858Z","dependency_job_id":null,"html_url":"https://github.com/squirrel-forge/node-cfx","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/squirrel-forge/node-cfx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/squirrel-forge%2Fnode-cfx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/squirrel-forge%2Fnode-cfx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/squirrel-forge%2Fnode-cfx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/squirrel-forge%2Fnode-cfx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/squirrel-forge","download_url":"https://codeload.github.com/squirrel-forge/node-cfx/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/squirrel-forge%2Fnode-cfx/sbom","scorecard":{"id":843385,"data":{"date":"2025-08-11","repo":{"name":"github.com/squirrel-forge/node-cfx","commit":"26effa47332a4055786feb299bc45bfc0c6b5bcc"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/24 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-23T20:56:34.596Z","repository_id":57162147,"created_at":"2025-08-23T20:56:34.597Z","updated_at":"2025-08-23T20:56:34.597Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280893651,"owners_count":26409289,"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","status":"online","status_checked_at":"2025-10-25T02:00:06.499Z","response_time":81,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["ascii","cli","colors","console","javascript","node","nodejs","output","stdout","styling","terminal"],"created_at":"2024-11-09T14:32:18.967Z","updated_at":"2025-10-25T02:16:57.598Z","avatar_url":"https://github.com/squirrel-forge.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# @squirrel-forge/node-cfx\n\nNode stdout/console styler, replace the basic *console* methods and allow for coloured output.\n\n## Install\n\n```\nnpm i @squirrel-forge/node-cfx\n```\n\n## Example output\n![@squirrel-forge/node-cfx example text output](https://raw.githubusercontent.com/squirrel-forge/node-cfx/main/squirrel-forge-node-cfx-test-output.png)\n\n## Usage\n\nGetting and using a default instance.\n```javascript\nconst { cfx } = require( '@squirrel-forge/node-cfx' );\ncfx.log( '[ul][fgreen]underlined green text[re]' );\n```\n\nDefault styled output.\n```javascript\ncfx.success( 'success' );\ncfx.error( 'error' );\ncfx.warn( 'warning' );\ncfx.info( 'info' );\n```\n\nObjects will not be styled, but outputted in plain, so you may mix arguments like with the console object.\n```javascript\ncfx.success( 'success', { some : 'object' }, 'another message' );\n```\n\nGet a styled string:\n```javascript\nconst str = cfx.setStyle( '[ul][fgreen]underlined green text[re]' ); // \\x1b[4m\\x1b[32munderlined green text\\x1b[0m\n```\n\nTo enable automatic prefixing with the current timestamp set the *prependTime* property:\n```javascript\ncfx.prependTime = true;\n```\n\nTo change the timestamp style, use the *timestampPrefix* and *timestampSuffix* properties:\n```javascript\ncfx.timestampPrefix = '[fwhite][[re][th]';\ncfx.timestampSuffix = '[re][fwhite]][re] ';\n```\n\nSetting a custom timestamp format, see [time-stamp](https://www.npmjs.com/package/time-stamp) for details.\n```javascript\ncfx.timestampFormat = 'YYYY-MM-DD HH:mm:ss';\n```\n\n## Styling options\n\n### Control and text style\n\n| Code | Control | Code | Text      |\n|------|---------|------|-----------|\n| [re] | Reset   | [bo] | Bold      |\n| [rv] | Reverse | [th] | Thin      |\n| -    | -       | [ul] | Underline |\n| -    | -       | [bl] | Blink     |\n| -    | -       | [hd] | Hidden    |\n\n### Text and background colors\n\n|  Text      | Background | Color   |\n|------------|------------|---------|\n| [fblack]   | [bblack]   | Black   |\n| [fred]     | [bred]     | Red     |\n| [fgreen]   | [bgreen]   | Green   |\n| [fyellow]  | [byellow]  | Yellow  |\n| [fblue]    | [bblue]    | Blue    |\n| [fmagenta] | [bmagenta] | Magenta |\n| [fcyan]    | [bcyan]    | Cyan    |\n| [fwhite]   | [bwhite]   | White   |\n\n## Overriding default styles\n\nDefault styles and reset.\n```javascript\ncfx.style = {\n    error : '[bred][fwhite] ',\n    warn : '[byellow][fblack] ',\n    info : '[bblack][fcyan] ',\n    success : '[bgreen][fblack] ',\n};\nthis.styleReset = ' [re]';\n```\n\nDefault reset, used when no other reset is passed to the internal *_write* method, useful when making your own style methods.\n```javascript\ncfx.defaultReset = ' [re]';\n```\n\n## Creating a custom instance\n\n```javascript\nconst { ASCIIREF, OutputStyler } = require( '@squirrel-forge/node-cfx' );\nconst myCfx = new OutputStyler( ASCIIREF, console );\n```\n\n## Extending the styler\n\n```javascript\nconst { ASCIIREF, OutputStyler } = require( '@squirrel-forge/node-cfx' );\n\n// Extended styler class\nclass MyOutputStyler extends OutputStyler {\n\n    constructor() {\n        super( ASCIIREF, console );\n        \n        // Extend the constructor or set default options\n    }\n\n    // Add override or extend any methods\n}\n```\n\n## Issues and docs\n\nIf you encounter any issues, please report [here](https://github.com/squirrel-forge/node-cfx/issues).\n\n---\nCheck the sourcecode on [github](https://github.com/squirrel-forge/node-cfx) for detailed comments.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsquirrel-forge%2Fnode-cfx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsquirrel-forge%2Fnode-cfx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsquirrel-forge%2Fnode-cfx/lists"}