{"id":17242749,"url":"https://github.com/imcuttle/tranz","last_synced_at":"2025-03-26T03:24:43.728Z","repository":{"id":45113106,"uuid":"150767712","full_name":"imcuttle/tranz","owner":"imcuttle","description":"The framework for transform anything","archived":false,"fork":false,"pushed_at":"2022-01-07T14:23:35.000Z","size":123,"stargazers_count":1,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-18T15:05:30.310Z","etag":null,"topics":["child-process","commit-message","transfom"],"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/imcuttle.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":"2018-09-28T16:32:56.000Z","updated_at":"2018-10-15T03:22:42.000Z","dependencies_parsed_at":"2022-08-31T05:10:59.889Z","dependency_job_id":null,"html_url":"https://github.com/imcuttle/tranz","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imcuttle%2Ftranz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imcuttle%2Ftranz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imcuttle%2Ftranz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imcuttle%2Ftranz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imcuttle","download_url":"https://codeload.github.com/imcuttle/tranz/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245581545,"owners_count":20638996,"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":["child-process","commit-message","transfom"],"created_at":"2024-10-15T06:13:58.552Z","updated_at":"2025-03-26T03:24:43.688Z","avatar_url":"https://github.com/imcuttle.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tranz\n\n[![Build status](https://img.shields.io/travis/imcuttle/tranz/master.svg?style=flat-square)](https://travis-ci.org/imcuttle/tranz)\n[![Test coverage](https://img.shields.io/codecov/c/github/imcuttle/tranz.svg?style=flat-square)](https://codecov.io/github/imcuttle/tranz?branch=master)\n[![NPM version](https://img.shields.io/npm/v/tranz.svg?style=flat-square)](https://www.npmjs.com/package/tranz)\n[![NPM Downloads](https://img.shields.io/npm/dm/tranz.svg?style=flat-square\u0026maxAge=43200)](https://www.npmjs.com/package/tranz)\n[![Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://prettier.io/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg?style=flat-square)](https://conventionalcommits.org)\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fimcuttle%2Ftranz.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fimcuttle%2Ftranz?ref=badge_shield)\n\nThe framework for transform anything\n\n## Feature\n\n- Allow running shell script as processor\n- Allow concurrent multi-processor for fast speed\n- Support runtime configuration\n\n## Where use it?\n\n- Transform git commit message for your self own processor.\n\n  Use it with [husky (Git hooks made easy)](https://github.com/typicode/husky)\n\n  ```json\n  {\n    \"tranz\": {\n      \"processors\": [\"echo \\\"$(cat)\\n\\nbranch: $(git rev-parse --abbrev-ref HEAD)\\\"\"]\n    },\n    \"husky\": {\n      \"hooks\": {\n        \"commit-msg\": \"npx tranz $HUSKY_GIT_PARAMS --write\"\n      }\n    }\n  }\n  ```\n\n  Then the end of commit message would be appended with current branch name.\n\n## Installation\n\n```bash\nnpm install tranz\n# or use yarn\nyarn add tranz\n```\n\n## Usage\n\n### Package\n\n#### `tranz(input: any, processors: Array\u003cFunction | [string, any] | string\u003e, options?): Promise\u003cany\u003e`\n\n- `index.js`\n\n```javascript\nimport { join } from 'path'\nimport tranz from 'tranz'\n\ntranz(\n  'abc',\n  [\n    // function\n    require('./lib/wrapper')({ c: '-' }),\n    // return Processor[]\n    require('./lib/multi-wrapper')({ c: 0 }),\n    // [moduleId: string, options: any]\n    ['./wrapper', { c: '_' }],\n    // module name with query string\n    './wrapper?c=$',\n    // shell script\n    // get input from stdin\n    // output from stdout\n    'echo $(cat)-abc'\n  ],\n  {\n    // Resolve processor path's base dir\n    // Default: $PWD\n    cwd: join(__dirname, 'lib'),\n    // Whether run tranz parallelly\n    // Note: parallel mode could enabled when all of the processor is typeof `string` (serializable)\n    // Default: false\n    parallel: false,\n    // Search runtime configuration.\n    // e.g. 1. `tranz` field in `package.json`\n    //      2. file named `.tranzrc`\n    //      3. file named `.tranzrc.js`\n    // Default: true\n    userc: true\n    // It's useful about below multi-config\n    // name: 'foo'\n  }\n).then(output =\u003e {\n  console.log(output)\n})\n\n// Output:\n// $_10-abc-01_$-abc\n```\n\n- `lib/wrapper.js`\n\n```javascript\nmodule.exports = ({ c }) =\u003e\n  function(input) {\n    // this.cwd === __dirname\n    // this.parallel === false\n    // this.userc === true\n    // `this` is equals to options shallowly\n\n    return `${c}${input}${c}`\n  }\n```\n\n- `lib/multi-wrapper.js`\n\n```javascript\nmodule.exports = ({ c }) =\u003e [input =\u003e `${c}${input}${c}`, input =\u003e Promise.resolve(`${c + 1}${input}${c + 1}`)]\n```\n\n### CLI\n\n```\nnpm i tranz -D\nnpx tranz -h\n\ntranz -i $PWD -p ./upper\ncat $PWD | tranz -p ./upper\n```\n\n### RC Config\n\n- `package.json`\n\n```json\n{\n  \"tranz\": {\n    \"processors\": [\n      [\n        \"../processor-wrapper\",\n        {\n          \"char\": \"abc\"\n        }\n      ],\n      \"../processor-upper\",\n      \"module-p-fix?q=halala\"\n    ],\n    \"parallel\": false\n  }\n}\n```\n\n### Bulit-in Processor\n\nSee [source code](src/presets)\n\n- \\_json-parse - run `JSON.parse(input, reviver?)`\n- \\_json-stringify - run `JSON.stringify(input, replacer?, space?)`\n\n#### Example\n\n```javascript\ntranz({ key: 'foo' }, [['_json-stringify', { space: 2 }]]).then(output =\u003e {\n  // {\n  //   \"key\": \"foo\"\n  // }\n})\n```\n\n### Processor Inheritance\n\nWrite the processor as follow:\n\n```javascript\n// This processor depends `./upper` and `./trimLeft` processor\nmodule.exports = opts =\u003e [require('./upper')({}), [require.resolve('./trimLeft'), {}]]\n```\n\n### Multi-tranz config in rc config\n\n- `package.json`\n\n  ```json\n  {\n    \"tranz\": {\n      \"foo\": {\n        \"processors\": [\"echo foo\"],\n        \"parallel\": true\n      },\n      \"processors\": [\"echo default\"],\n      \"parallel\": false\n    }\n  }\n  ```\n\n- Run command in shell\n  ```bash\n  tranz --input=\"\" # echo default\n  tranz --input=\"\" --name=\"foo\" # echo foo\n  ```\n\n## Tests\n\n### Unit\n\n```bash\nnpm test\n```\n\n### Benchmark\n\n```bash\nnpm run benchmark\n```\n\n## Roadmap\n\n- [ ] file write [tranz-globs]\n- [ ] file glob [tranz-globs]\n- [ ] ignore files [tranz-globs]\n\n## Related\n\n## Authors\n\nThis library is written and maintained by imcuttle, \u003ca href=\"mailto:moyuyc95@gmail.com\"\u003emoyuyc95@gmail.com\u003c/a\u003e.\n\n## License\n\nMIT\n\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fimcuttle%2Ftranz.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fimcuttle%2Ftranz?ref=badge_large)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimcuttle%2Ftranz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimcuttle%2Ftranz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimcuttle%2Ftranz/lists"}