{"id":15633724,"url":"https://github.com/mmkal/ts","last_synced_at":"2025-04-08T09:08:59.346Z","repository":{"id":40394795,"uuid":"216366773","full_name":"mmkal/ts","owner":"mmkal","description":"Monorepo of typescript projects","archived":false,"fork":false,"pushed_at":"2024-12-08T18:54:42.000Z","size":49570,"stargazers_count":151,"open_issues_count":10,"forks_count":8,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-01T07:51:19.706Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mmkal.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-10-20T13:31:55.000Z","updated_at":"2024-07-28T13:08:58.000Z","dependencies_parsed_at":"2024-06-18T15:28:08.890Z","dependency_job_id":null,"html_url":"https://github.com/mmkal/ts","commit_stats":{"total_commits":461,"total_committers":11,"mean_commits":41.90909090909091,"dds":0.4143167028199566,"last_synced_commit":"842e8f7f10cd8ea4f85d0ff4b130f561c311bc2b"},"previous_names":[],"tags_count":185,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmkal%2Fts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmkal%2Fts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmkal%2Fts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmkal%2Fts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mmkal","download_url":"https://codeload.github.com/mmkal/ts/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247809962,"owners_count":20999816,"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-10-03T10:50:04.265Z","updated_at":"2025-04-08T09:08:59.314Z","avatar_url":"https://github.com/mmkal.png","language":"TypeScript","readme":"# ts\n\n[![Node CI](https://github.com/mmkal/ts/workflows/Node%20CI/badge.svg)](https://github.com/mmkal/ts/actions?query=workflow%3A%22Node+CI%22)\n[![codecov](https://codecov.io/gh/mmkal/ts/branch/main/graph/badge.svg)](https://codecov.io/gh/mmkal/ts)\n\nMonorepo of typescript projects.\n\n## Packages\n\n\u003e ⚠️⚠️ NOTE! I started this repo as a way to learn about monorepo tooling (specifically, rush). Some of the packages in it have become reasonably popular, and reasonably stable. So, I'm going to slowly move them out into their own repos, one by one. Once all are moved out this repo will be archived. ⚠️⚠️\n\n### Moved\n\n- [expect-type](https://github.com/mmkal/expect-type#readme) - Compile-time tests for types. Useful to make sure types don't regress into being overly-permissive as changes go in over time.\n- [eslint-plugin-codegen](https://github.com/mmkal/eslint-plugin-codegen#readme) - An eslint plugin for inline codegen, with presets for barrels, jsdoc to markdown and a monorepo workspace table of contents generator. Auto-fixes out of sync code.\n- [fs-syncer](https://github.com/mmkal/fs-syncer) - A helper to recursively read and write text files to a specified directory.\n\n### Still here\n\u003c!-- codegen:start {preset: monorepoTOC, sort: package.name} --\u003e\n- [io-ts-extra](https://github.com/mmkal/ts/tree/main/packages/io-ts-extra#readme) - Adds pattern matching, optional properties, and several other helpers and types, to io-ts.\n- [memorable-moniker](https://github.com/mmkal/ts/tree/main/packages/memorable-moniker#readme) - Name generator with some in-built dictionaries and presets.\n\u003c!-- codegen:end --\u003e\n\n### Development\n\nPackages are managed using [rush](https://rushjs.io/pages/developer/new_developer/). Make sure rush is installed:\n\n```bash\nnpm install --global @microsoft/rush\n```\n\nThen install, build, lint and test with:\n\n```bash\nrush update\nrush build\nrush lint\nrush test\n```\n\n`rush update` should be run when updating the main branch too.\n\n___\n\nAdd a dependency to a package (for example, adding lodash to fictional package in this monorepo `some-pkg`):\n\n```bash\ncd packages/some-pkg\nrush add --package lodash\nrush add --package @types/lodash --dev\n```\n\nYou can also manually edit package.json then run `rush update`.\n\nCreate a new package:\n\n```bash\ncd packages\nmkdir new-pkg\ncd new-pkg\nnode ../../tools/rig/init # sets up package.json, .eslintrc.js, tsconfig.json, jest.config.js\n```\n\n\u003c!-- todo: make this step unnecessary --\u003e\nThen open `rush.json`, find the `projects` array, and adda new entry: `{ \"packageName\": \"new-pkg\", \"projectFolder\": \"packages/new-pkg\" }`\n\n### Publishing \n[![publish](https://github.com/mmkal/ts/workflows/publish/badge.svg)](https://github.com/mmkal/ts/actions/workflows/publish.yml)\n\nPublishing is automated, but kicked off manually. The process is:\n\n- Changes to published packages in this repo should be proposed in a pull request\n- On every pull request, a [GitHub action](./.github/workflows/changes.yml) uses the `rush change` command to create a changefile:\n  - the change is based on the PR title and body:\n    - if the words \"BREAKING CHANGE\" appear anywhere, it's considered \"major\"\n    - if the PR title starts with \"chore\", or \"fix\", it's considered a \"patch\"\n    - otherwise, it's considered \"minor\"\n  - the created changefile is pushed to the PR's branch, and a comment is left on the PR (example [PR](https://github.com/mmkal/ts/pull/166), [comment](https://github.com/mmkal/ts/pull/166#issuecomment-694554963) and [change](https://github.com/mmkal/ts/commit/8d8c442fdd54dc6732bf56e9a074afea58dc8303))\n  - if the PR title or body is edited, or changes are pushed, the job will re-run and push a modification if necessary\n  - most of the time, no change is necessary and the job exits after no-oping\n  - if necessary, `rush change` can also be run locally to add additional messages - but ideally the PR title would be descriptive enough\n  - the changefile should be merged in along with the rest of the changes\n\nWhen a PR is merged, publishing is initiated by kicking off the [publish worfklow](https://github.com/mmkal/ts/actions/workflows/publish.yml):\n\n- Clicking \"Run workflow\" will start another [GitHub action](./.github/workflows/publish.yml):\n  - The workflow runs `rush publish`, which uses the changefiles merged with feature PRs, bumps versions and create git tags\n  - When the publish step succeeds, a custom script reads the generated `CHANGELOG.json` files to create a GitHub release\n\n\u003cdetails\u003e\n\u003csummary\u003eOld instructions\u003c/summary\u003e\n\nLinks to trees with previous iteration of publish instructions:\n\n- For creating canary releases: https://github.com/mmkal/ts/tree/fc5f2dd50a04439573bcfb1f4b7bf0cad59c1c59\n- For publishing to GitHub Packages' npm registry: https://github.com/mmkal/ts/tree/56bed6ba6c3fa7eca06c9f73adf104438e9b0f8a\n\n\u003c/details\u003e\n","funding_links":[],"categories":["🔧 Utilities \u0026 Miscellaneous"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmkal%2Fts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmmkal%2Fts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmkal%2Fts/lists"}