@template-tools/template-sync
Version:
Keep repository in sync with its template
426 lines (271 loc) • 15 kB
Markdown
[](https://www.npmjs.com/package/@template-tools/template-sync)
[](https://spdx.org/licenses/0BSD.html)
[](https://bundlejs.com/?q=@template-tools/template-sync)
[](https://npmjs.org/package/@template-tools/template-sync)
[](https://github.com/template-tools/template-sync/issues)
[](https://actions-badge.atrox.dev/template-tools/template-sync/goto)
[](https://github.com/prettier/prettier)
[](http://commitizen.github.io/cz-cli/)
[](https://snyk.io/test/github/template-tools/template-sync)
## template-sync
Keep repository in sync with its template.
Generates pull requests to bring a repository back in sync with its template.
So by making changes to the template and applying template-sync the target project will be updated accoring to the template.
Works with github and bitbucket.
This is the engine for cli operation please see [template-tools/template-sync-cli](https://github.com/template-tools/template-sync-cli)
Merges contents from template branch into destination branch handling some special cases for:
* Licenses - rewriting license years
* line set files like .npmignore and .gitignore - by merging both sets together
* package.json - merge (.\*)\[Dd]ependencies, engines and scripts
* rollup.conf.\*js - copy / rewrite + detect dev dependencies
* [\*.yaml - merge](doc/yaml/README.md)
* [.travis.yml - merge with hints](doc/travis/README.md)
* [\*.toml - merge](doc/toml/README.md)
* [\*.ini - merge](doc/ini/README.md)
* [\*.json - merge](doc/json/README.md)
* README.md - merge badges

## Some templates
* [arlac77/template-cli-app](https://github.com/arlac77/template-cli-app) *rollup* *ava* *travis*
* [arlac77/template-esm-only](https://github.com/arlac77/template-esm-only) *ava* *travis*
* [arlac77/template-svelte-component](https://github.com/arlac77/template-svelte-component) *svelte* *rollup* *testcafe* *travis*
* [arlac77/template-svelte-app](https://github.com/arlac77/template-svelte-app) *svelte* *rollup* *pkgbuild* *travis*
* [arlac77/template-kronos-component](https://github.com/arlac77/template-kronos-component) template-esm-only with node 14
* [arlac77/template-kronos-app](https://github.com/arlac77/template-kronos-app) node 14 + systemd
# API
<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
### Table of Contents
* [Context](#context)
* [Parameters](#parameters)
* [Properties](#properties)
* [targetBranch](#targetbranch)
* [initialize](#initialize)
* [execute](#execute)
* [commits](#commits)
* [executeBranch](#executebranch)
* [pullRequestBranch](#pullrequestbranch)
* [sortedKeys](#sortedkeys)
* [exportsConditionOrder](#exportsconditionorder)
* [Package](#package)
* [properties](#properties-1)
* [Parameters](#parameters-1)
* [Merger](#merger)
* [properties](#properties-2)
* [Parameters](#parameters-2)
* [commits](#commits-1)
* [Parameters](#parameters-3)
* [Merger](#merger-1)
* [Properties](#properties-3)
* [properties](#properties-4)
* [Parameters](#parameters-4)
* [commits](#commits-2)
* [Parameters](#parameters-5)
* [Readme](#readme)
* [MergeLineSet](#mergelineset)
* [Replace](#replace)
* [INI](#ini)
* [Skip](#skip)
* [Delete](#delete)
* [EntryMerger](#entrymerger)
* [Properties](#properties-5)
* [Template](#template)
* [Parameters](#parameters-6)
* [Properties](#properties-6)
* [shortKey](#shortkey)
* [entryMerger](#entrymerger-1)
* [Parameters](#parameters-7)
* [mergerFor](#mergerfor)
* [Parameters](#parameters-8)
* [\_templateFrom](#_templatefrom)
* [Parameters](#parameters-9)
* [updateUsedBy](#updateusedby)
* [Parameters](#parameters-10)
* [templateFor](#templatefor)
* [Parameters](#parameters-11)
* [ReplaceIfEmpty](#replaceifempty)
* [normalizeTemplateSources](#normalizetemplatesources)
* [Parameters](#parameters-12)
* [jspath](#jspath)
* [Parameters](#parameters-13)
* [actions2message](#actions2message)
* [Parameters](#parameters-14)
* [actions2messages](#actions2messages)
* [Parameters](#parameters-15)
## Context
**Extends LogLevelMixin(class \_Context {})**
Context prepared to execute one branch.
### Parameters
* `provider` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** 
* `targetBranch` **(Branch | [string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String))** 
* `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** (optional, default `{}`)
### Properties
* `ctx` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** 
* `files` **[Map](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Map)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String), [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)>** 
### targetBranch
Type: (Branch | [String](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String))
### initialize
Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<([Context](#context) | [undefined](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined))>** 
### execute
Generate Pull Requests.
Returns **AsyncIterable\<PullRequest>** 
### commits
Generate all commits from the template entry merges.
Returns **AsyncIterable\<Commit>** 
### executeBranch
Generate Pull Requests.
Returns **AsyncIterable\<PullRequest>** the actual PRs
## pullRequestBranch
Type: [String](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)
## sortedKeys
order in which json keys are written
## exportsConditionOrder
* **See**: {<https://nodejs.org/dist/latest/docs/api/packages.html#exports}>
Order in which exports are searched
## Package
**Extends Merger**
Merger for package.json
### properties
Deliver some key properties.
* name
* version
* description
* main
#### Parameters
* `entry` **ContentEntry** 
Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)>** 
## Merger
Mergable content
### properties
Deliver some key properties.
#### Parameters
* `entry` **ContentEntry** 
Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)>** extracted properties
### commits
Generate commits as result of merging two entries.
#### Parameters
* `context`  
* `destinationEntry`  
* `sourceEntry`  
* `options`  
Returns **AsyncIterable\<Commit>** 
## Merger
Type: [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)
### Properties
* `type` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** 
* `pattern` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** 
* `factory` **Class** 
* `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** 
### properties
Deliver some key properties.
#### Parameters
* `entry` **ContentEntry** 
Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)>** extracted properties
### commits
Generate commits as result of merging two entries.
#### Parameters
* `context`  
* `destinationEntry`  
* `sourceEntry`  
* `options`  
Returns **AsyncIterable\<Commit>** 
## Readme
**Extends Merger**
Injects badges into README.md.
## MergeLineSet
**Extends Merger**
## Replace
**Extends Merger**
Always overwrite entry from template
## INI
**Extends Merger**
Merge ini entries
## Skip
**Extends Merger**
Does not generate destination entry
## Delete
**Extends Merger**
Delete entry.
## EntryMerger
Type: [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)
### Properties
* `name` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** 
* `factory` **Class** 
* `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** 
## Template
**Extends LogLevelMixin(class {})**
### Parameters
* `context` **Conext** 
* `sources` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** 
* `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** (optional, default `{}`)
### Properties
* `context` **Conext** 
* `sources` **[Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** 
* `toBeRemovedSources` **[Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** 
* `mergers` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[Merger](#merger)>** 
* `branches` **[Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)\<Branch>** all used branches direct and inherited
* `keyBranches` **[Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)\<Branch>** branches used to define the template
### shortKey
Used to identify generated branch.
Returns **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** short template key
### entryMerger
Find a suitable merger for each entry
#### Parameters
* `entries` **Iterator\<ContentEntry>** 
Returns **Iterator<\[ContentEntry, [Merger](#merger)]>** 
### mergerFor
Find a suitable merger
#### Parameters
* `name` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** of the entry
Returns **[Merger](#merger)** 
### \_templateFrom
Load all templates and collects the entries.
#### Parameters
* `sources` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** branch names
* `inheritencePath` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)\<Branch>** who was requesting us (optional, default `[]`)
Returns **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** package as merged from sources
### updateUsedBy
Updates usedBy section of the template branch.
#### Parameters
* `targetBranch` **Branch** template to be updated
* `templateSources` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** original branch identifiers (even with deletion hints)
* `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** as passed to commitIntoPullRequest
Returns **AsyncIterator\<PullRequest>** 
### templateFor
Load a template.
#### Parameters
* `context` **[Context](#context)** 
* `sources` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** 
* `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** 
## ReplaceIfEmpty
**Extends Merger**
Overwrites none existing entries from template.
## normalizeTemplateSources
Remove duplicate sources.
Sources staring with '-' will be removed
### Parameters
* `sources` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** 
* `remove` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** (optional, default `[]`)
Returns **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** normalized sources
## jspath
### Parameters
* `object`  
* `path`  
* `cb`  
## actions2message
### Parameters
* `actions`  
* `prefix` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** 
* `name` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** 
Returns **any** actions as one string lines ordered by scope
## actions2messages
### Parameters
* `actions`  
* `prefix` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** 
* `name` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** 
# install
With [npm](http://npmjs.org) do:
```shell
npm install -g @template-tools/sync-cli
```
# license
BSD-2-Clause