{"id":24524323,"url":"https://github.com/devonfw/ts-merger","last_synced_at":"2025-04-14T12:54:20.206Z","repository":{"id":37734331,"uuid":"90964298","full_name":"devonfw/ts-merger","owner":"devonfw","description":null,"archived":false,"fork":false,"pushed_at":"2023-02-28T22:36:43.000Z","size":872,"stargazers_count":7,"open_issues_count":7,"forks_count":14,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-03-28T02:04:39.549Z","etag":null,"topics":["typescript"],"latest_commit_sha":null,"homepage":null,"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/devonfw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2017-05-11T09:53:24.000Z","updated_at":"2025-02-08T01:29:09.000Z","dependencies_parsed_at":"2023-07-18T06:21:42.560Z","dependency_job_id":null,"html_url":"https://github.com/devonfw/ts-merger","commit_stats":{"total_commits":218,"total_committers":19,"mean_commits":"11.473684210526315","dds":0.7018348623853211,"last_synced_commit":"2bbe5fc6e6fbd166d489ad5e143a2ef8c422e6d3"},"previous_names":["oasp/ts-merger"],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devonfw%2Fts-merger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devonfw%2Fts-merger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devonfw%2Fts-merger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devonfw%2Fts-merger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devonfw","download_url":"https://codeload.github.com/devonfw/ts-merger/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248402525,"owners_count":21097331,"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":["typescript"],"created_at":"2025-01-22T04:19:23.303Z","updated_at":"2025-04-14T12:54:20.164Z","avatar_url":"https://github.com/devonfw.png","language":"TypeScript","readme":"# TS-Merger\nGeneric TypeScript Merger\n\n[![build status](https://travis-ci.com/devonfw/ts-merger.svg?branch=master)](https://travis-ci.com/github/devonfw/ts-merger)\n\n## Usage\n\n```javascript\nlet tsm = require('@devonfw/ts-merger');\nlet mergedCode: string = tsm.merge(baseContents, patchContents, patchOverrides);\n```\n\nBeing:\n- baseContents: contents of the base in a string\n- patchContents: contents of the patch in a string\n- patchOverrides(**true**/**false**): Being false, base will have priority in case of conflicts. With true, patch will have priority.  \n\n### Example\n```javascript\nlet tsm = require('@devonfw/ts-merger');\nlet mergedCode: string = tsm.merge(baseContents, pathContents, patchOverrides);\n```\n\n## Features\n\nThe merger allows merging of this node kinds:\n\n- ImportDeclaration\n- ExportDeclaration\n- ClassDeclaration\n- InterfaceDeclaration\n- Decorator\n- FunctionDeclaration\n- MethodDeclaration\n- Parameter\n- BodyMethod\n- PropertyAssignment\n- PropertyDeclaration\n- Constructor\n- ArrayLiteralExpression\n- ObjectLiteralExpression\n- CallExpression\n- VariableAssignment\n\nThis version allows merging of TypeScript files that follow this structure:\n\n- Array of imports\n- Array of functions\n- Array of variables\n- Array of classes\n\n##Examples\n\n**Base file**\n```javascript\nimport a from 'b';\nimport f from 'g';\n\nclass Example1 {\n    private propertyFromBase: string;\n\n    oneMethod() {\n        let variable = 'base';\n    }\n}\n```\n\n**Patch file**\n\n```javascript\nimport c from 'd';\nimport h from 'g';\n\nclass Example1 {\n    private propertyFromPatch: number;\n\n    oneMethod() {\n        let variable = 'patch';\n    }\n\n    anotherMethod(){}\n}\n\nclass AnotherClass {}\n```\n**Resultant merged code (patchOverrides=false)**\n\n```javascript\nimport a from 'b';\nimport c from 'd';\nimport { f, h } from 'g';\n\nclass Example1 {\n    private propertyFromBase: string;\n    private propertyFromPatch: number;\n\n    oneMethod() {\n        let variable = 'base';\n    }\n\n    anotherMethod(){}\n}\n\nclass AnotherClass {}\n```\n\n**Resulting merged code (patchOverrides=true)**\n\n```javascript\nimport a from 'b';\nimport c from 'd';\nimport { f, h } from 'g';\n\nclass Example1 {\n    private propertyFromBase: string;\n    private propertyFromPatch: number;\n\n    oneMethod() {\n        let variable = 'patch';\n    }\n\n    anotherMethod(){}\n}\n\nclass AnotherClass {}\n```\n\n## Future version\n\nNext releases will include merge support for:\n\n- Comments support\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevonfw%2Fts-merger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevonfw%2Fts-merger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevonfw%2Fts-merger/lists"}