{"id":18974645,"url":"https://github.com/asd-xiv/library-stack-node","last_synced_at":"2026-04-16T10:35:16.826Z","repository":{"id":84514852,"uuid":"291430053","full_name":"asd-xiv/library-stack-node","owner":"asd-xiv","description":"Library Stack for Node.js projects","archived":false,"fork":false,"pushed_at":"2022-12-23T09:34:25.000Z","size":1551,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-02T13:18:06.493Z","etag":null,"topics":["benchmark","c8","circleci","commitlint","coveralls","eslint","esm","lintstaged","nodejs","prettier","semantic-release","starter","tape","template","typescript"],"latest_commit_sha":null,"homepage":"","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/asd-xiv.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-08-30T08:25:02.000Z","updated_at":"2021-11-28T12:04:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"e1c1fc59-74b1-427a-a07c-8e71455debbb","html_url":"https://github.com/asd-xiv/library-stack-node","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/asd-xiv/library-stack-node","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asd-xiv%2Flibrary-stack-node","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asd-xiv%2Flibrary-stack-node/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asd-xiv%2Flibrary-stack-node/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asd-xiv%2Flibrary-stack-node/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/asd-xiv","download_url":"https://codeload.github.com/asd-xiv/library-stack-node/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asd-xiv%2Flibrary-stack-node/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31882619,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T09:23:21.276Z","status":"ssl_error","status_checked_at":"2026-04-16T09:23:15.028Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["benchmark","c8","circleci","commitlint","coveralls","eslint","esm","lintstaged","nodejs","prettier","semantic-release","starter","tape","template","typescript"],"created_at":"2024-11-08T15:15:40.282Z","updated_at":"2026-04-16T10:35:16.819Z","avatar_url":"https://github.com/asd-xiv.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable first-line-h1 line-length --\u003e\n\n[![Coverage Status](https://coveralls.io/repos/github/andreidmt/library-stack-node/badge.svg)](https://coveralls.io/github/andreidmt/library-stack-node)\n\n# Library Stack for Node.js projects\n\n\u003e **library stack**  \n\u003e _noun_\n\u003e\n\u003e Multiple libraries and services configured and composed together with the\n\u003e purpose of automating common development practices: __compilation__,\n\u003e __linting__, __typechecking__, __testing__, __test coverage__,\n\u003e __benchmarking__ and __releasing__.\n\n- :godmode: **Composition over hierarchy** - While similar to a\n  [Framework](https://en.wikipedia.org/wiki/Software_framework), providing an\n  opinionated ways of handling certain development topics, it intentionally\n  leaves visible the containing libraries details - configuration file, npm\n  scripts, commit hooks etc.\n\n- :honeybee: :ocean: **Continuous stack refactoring** - Configuration freedom\n  and choice over their application core libraries, focusing on __zero\n  lock-in__ and __experimentation__ with new libraries and workflows.\n\n## Table of contents\n\n\u003c!-- vim-markdown-toc GFM --\u003e\n\n- [How to use](#how-to-use)\n- [Responsibilities](#responsibilities)\n  - [Compile](#compile)\n    - [Tools](#tools)\n    - [Scripts](#scripts)\n  - [Lint](#lint)\n  - [Typecheck](#typecheck)\n  - [Test](#test)\n    - [All tests one time](#all-tests-one-time)\n    - [All tests when something inside `src` changes](#all-tests-when-something-inside-src-changes)\n  - [Test coverage](#test-coverage)\n  - [Benchmark](#benchmark)\n  - [Release](#release)\n- [Changelog](#changelog)\n\n\u003c!-- vim-markdown-toc --\u003e\n\n## How to use\n\n## Responsibilities\n\n### Compile\n\nCompile TypeScript files inside `src` folder, with type definitions and source\nmaps.\n\nCreate bundles for both ESM and CommonJS modules. Use `package.json` fields,\n`main` and `module`, to point to the appropriate bundle depending on who is\nconsuming it.\n\n#### Tools\n\n1. [**typescript**](https://github.com/microsoft/TypeScript) -\n   [`tsconfig.json`](tsconfig.json)  \n  A superset of JavaScript that compiles to clean JavaScript output.\n\n1. [**swc**](https://github.com/swc-project/swc) - [`.swcrc`](.swcrc)  \n  A super-fast compiler written in Rust; producing widely-supported JavaScript\n  from modern standards and typescript.\n\n1. [**swc-register**](https://github.com/Songkeys/swc-register) - Transpile\n   JSX, TypeScript and esnext features on the fly with `swc`. It will respect\n   your `tsconfig.json` and `.swcrc` if provided.  \n\n#### Scripts\n\n```bash\n# \"build.types\": \"tsc --emitDeclarationOnly --outDir dist-types\",\n# \"build.js-esm\": \"swc src --out-dir dist-esm --config module.type=es6\",\n# \"build.js-cjs\": \"swc src --out-dir dist-cjs --config module.type=commonjs\",\n# \"prebuild\": \"rm -rf dist-cjs dist-esm dist-types\",\n# \"build\": \"npm run build.js-esm \u0026\u0026 npm run build.js-cjs \u0026\u0026 npm run build.types\",\nnpm run build\n```\n\n### Lint\n\n1. [**eslint**](https://github.com/eslint/eslint) - [`.eslintrc`](.eslintrc)  \n  Find and fix problems in your JavaScript code.\n\n1. [**prettier**](https://github.com/prettier/prettier) -\n   [`.prettierrc`](.prettierrc)  \n  Opinionated code formatter. Enforces a consistent style by parsing your\n  code and re-printing it with its own rules that take the maximum line length\n  into account, wrapping code when necessary.\n\n1. [**markdownlint**](https://github.com/igorshubovych/markdownlint-cli) -\n   [`.markdownlintrc`](.markdownlintrc)  \n  Style checker and lint tool for Markdown/CommonMark files.\n\n1. [**commitlint**](https://github.com/conventional-changelog/commitlint) -\n[`.commitlintrc`](.commitlintrc)  \n  Check your commit messages meet the [conventional commit\n  format](https://www.conventionalcommits.org).\n\n1. [**lint-staged**](https://github.com/okonet/lint-staged) -\n[`.lintstagedrc`](.lintstagedrc)  \n  Run linters against staged git files and don't let :hankey: slip into your\n  codebase!\n\n```bash\n# \"lint.js\": \"eslint --quiet src\",\n# \"lint.md\": \"markdownlint '*.md' --ignore CHANGELOG.md\",\n# \"lint\": \"npm run lint.js \u0026\u0026 npm run lint.md\",\nnpm run lint\n```\n\n### Typecheck\n\n1. [**typescript**](https://github.com/microsoft/TypeScript) - [`.tscrc`](.tscrc)  \n  A superset of JavaScript that compiles to clean JavaScript output.\n\n```bash\n# \"typecheck\": \"tsc --noEmit\",\nnpm run typecheck\n```\n\n### Test\n\n1. [**tape**](https://github.com/substack/tape)\n   [TAP](https://en.wikipedia.org/wiki/Test_Anything_Protocol) producing test\n   harness for node and browsers.\n\n1. [**tap-nirvana**](https://github.com/inadarei/tap-nirvana)  \n  Tap Nirvana is a proper diffing reporter for TAP.\n\n1. [**nodemon**](https://github.com/remy/nodemon/)  \n  Monitor changes in your application and automatically run an npm script -\n  perfect for development.\n\n#### All tests one time\n\n```bash\n# \"test\": \"tape -r swc-register 'src/*.test.ts' 'src/**/*.test.ts' | tap-nirvana\",\nnpm run test\n```\n\n#### All tests when something inside `src` changes\n\n```bash\n# \"tdd\": \"nodemon --watch src --ext js,ts,json --exec 'npm test'\",\nnpm run tdd\n```\n\n### Test coverage\n\n![tape running all test files inside src folder](/docs/screenshot-test.png)\n\n1. [**c8**](https://github.com/bcoe/c8) - [`.c8rc`](.c8rc)  \n  Output coverage reports using Node.js' built in coverage.\n\n1. [**coveralls.io**](https://coveralls.io/)  \n  Service for test coverage reporting.  \n  \nUse either `.coveralls.yml` or `COVERALLS_REPO_TOKEN` environment variable to\nsubmit the reports to your project, see [Coveralls Currently Supports These\nCIs](https://docs.coveralls.io/supported-ci-services) for details.  \n\n```bash\n# \"precoverage\": \"rm -rf coverage\",\n# \"coverage\": \"c8 npm test \u0026\u0026 c8 report --reporter=text-lcov | coveralls\",\nnpm run coverage\n```\n\n### Benchmark\n\n![benchmark suite code (left) and output](/docs/screenshot-benchmark.png)\n\n1. [**benny**](https://github.com/caderek/benny)  \n  A dead simple benchmarking framework for JS/TS libs.\n\n```bash\n# \"prebenchmark\": \"rm -rf benchmark\",\n# \"benchmark\": \"node -r swc-register src/**/*.bench.ts\",\nnpm run benchmark\n```\n\n### Release\n\n1. [**semantic-release**](https://github.com/semantic-release/semantic-release)  \n  Fully automated version management and package publishing.\n\n1. [**CircleCI**](https://circleci.com) - [`.circleci/config.yml`](.circleci/config.yml)  \n  Continuous integration platform.\n\n## Changelog\n\nSee the [releases section](https://github.com/andreidmt/library-stack-node) for\ndetails.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasd-xiv%2Flibrary-stack-node","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fasd-xiv%2Flibrary-stack-node","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasd-xiv%2Flibrary-stack-node/lists"}