one-way-git-sync 3.1.2 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -11
- package/dist/index.js +37 -21
- package/dist/index.js.map +1 -1
- package/package.json +43 -40
package/README.md
CHANGED
|
@@ -14,26 +14,30 @@ It provides three features:
|
|
|
14
14
|
|
|
15
15
|
### Initial Usage
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
you need to run `init` subcommand to add an initial sync commit
|
|
17
|
+
Because `one-way-git-sync` finds a sync commit from the commit history of the dest repo,
|
|
18
|
+
you need to run `init` subcommand to add an initial sync commit to the dest repo
|
|
19
19
|
by replacing all the files of the dest repo with those of src repo at first.
|
|
20
20
|
The sample command is as follows:
|
|
21
21
|
|
|
22
22
|
```
|
|
23
|
-
yarn one-way-git-sync init \
|
|
24
|
-
-d
|
|
23
|
+
yarn dlx one-way-git-sync init \
|
|
24
|
+
-d git@github.com:WillBooster/sample-of-one-way-git-sync.git \
|
|
25
25
|
-p https://github.com/WillBooster/one-way-git-sync/commits/
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
+
If you have no permission to write `git@github.com:WillBooster/sample-of-one-way-git-sync.git`,
|
|
29
|
+
please try `https://oauth2:<GitHub Personal Access Token>@github.com/WillBooster/sample-of-one-way-git-sync.git`.
|
|
30
|
+
`<GitHub Personal Access Token>` should be like `ghp_...Gnm61dm4rh`.
|
|
31
|
+
|
|
28
32
|
### Usual Usage
|
|
29
33
|
|
|
30
34
|
If the last commit in the dest repo is a sync commit,
|
|
31
|
-
`one-way-git-sync` safely
|
|
35
|
+
`one-way-git-sync` safely synchronizes the dest repo with the src repo.
|
|
32
36
|
The sample command is as follows:
|
|
33
37
|
|
|
34
38
|
```
|
|
35
|
-
yarn one-way-git-sync \
|
|
36
|
-
-d
|
|
39
|
+
yarn dlx one-way-git-sync \
|
|
40
|
+
-d git@github.com:WillBooster/sample-of-one-way-git-sync.git \
|
|
37
41
|
-p https://github.com/WillBooster/one-way-git-sync/commits/
|
|
38
42
|
```
|
|
39
43
|
|
|
@@ -47,11 +51,11 @@ The sample commands are as follows:
|
|
|
47
51
|
|
|
48
52
|
1. `yarn one-way-git-sync` fails then you notice there exist conflict commits
|
|
49
53
|
2. `cd one-way-git-sync`
|
|
50
|
-
3. `git remote add upstream
|
|
54
|
+
3. `git remote add upstream git@github.com:WillBooster/sample-of-one-way-git-sync.git`
|
|
51
55
|
4. `git merge --allow-unrelated-histories upstream/main`
|
|
52
56
|
5. ```
|
|
53
|
-
yarn one-way-git-sync --force \
|
|
54
|
-
-d
|
|
57
|
+
yarn dlx one-way-git-sync --force \
|
|
58
|
+
-d git@github.com:WillBooster/sample-of-one-way-git-sync.git \
|
|
55
59
|
-p https://github.com/WillBooster/one-way-git-sync/commits/
|
|
56
60
|
```
|
|
57
61
|
|
|
@@ -60,4 +64,4 @@ The sample commands are as follows:
|
|
|
60
64
|
- [sample-of-one-way-git-sync](https://github.com/WillBooster/sample-of-one-way-git-sync): an example synchronized repository.
|
|
61
65
|
- [release.yml](.github/workflows/release.yml): releases a new npm package and add a tag automatically in this repository using `semantic-release`.
|
|
62
66
|
- [sync.yml](.github/workflows/sync.yml): it synchronizes `sample-of-one-way-git-sync` repository using `one-way-git-sync` when a new version is released.
|
|
63
|
-
- [force-sync.yml](.github/workflows/force
|
|
67
|
+
- [force-sync.yml](.github/workflows/sync-force.yml): we can manually trigger this workflow which forces synchronizing `sample-of-one-way-git-sync` repository.
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,7 @@ var child_process = require('child_process');
|
|
|
8
8
|
var fsp = require('fs/promises');
|
|
9
9
|
var path = require('path');
|
|
10
10
|
var fse = require('fs-extra');
|
|
11
|
+
var micromatch = require('micromatch');
|
|
11
12
|
var simpleGit = require('simple-git');
|
|
12
13
|
var winston = require('winston');
|
|
13
14
|
|
|
@@ -18,6 +19,7 @@ var child_process__default = /*#__PURE__*/_interopDefaultLegacy(child_process);
|
|
|
18
19
|
var fsp__default = /*#__PURE__*/_interopDefaultLegacy(fsp);
|
|
19
20
|
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
|
|
20
21
|
var fse__default = /*#__PURE__*/_interopDefaultLegacy(fse);
|
|
22
|
+
var micromatch__default = /*#__PURE__*/_interopDefaultLegacy(micromatch);
|
|
21
23
|
var simpleGit__default = /*#__PURE__*/_interopDefaultLegacy(simpleGit);
|
|
22
24
|
|
|
23
25
|
const logger = winston.createLogger({
|
|
@@ -31,7 +33,6 @@ const logger = winston.createLogger({
|
|
|
31
33
|
});
|
|
32
34
|
|
|
33
35
|
const syncDirPath = path__default["default"].join('node_modules', '.temp', 'sync-git-repo');
|
|
34
|
-
const ignoreNames = ['.git', 'node_modules'];
|
|
35
36
|
async function sync(opts, init) {
|
|
36
37
|
await fsp__default["default"].mkdir(syncDirPath, {
|
|
37
38
|
recursive: true
|
|
@@ -48,20 +49,29 @@ async function sync(opts, init) {
|
|
|
48
49
|
async function syncCore(destRepoPath, opts, init) {
|
|
49
50
|
var _srcLog$latest, _opts$prefix;
|
|
50
51
|
|
|
51
|
-
|
|
52
|
-
'--
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
const cloneOpts = {
|
|
53
|
+
'--single-branch': undefined
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
if (!opts.force) {
|
|
57
|
+
cloneOpts['--depth'] = 1;
|
|
58
|
+
}
|
|
56
59
|
|
|
57
60
|
if (opts.branch) {
|
|
58
|
-
|
|
59
|
-
await dstGit.checkout(opts.branch);
|
|
60
|
-
} catch (_) {
|
|
61
|
-
await dstGit.checkoutLocalBranch(opts.branch);
|
|
62
|
-
}
|
|
61
|
+
cloneOpts['--branch'] = opts.branch;
|
|
63
62
|
}
|
|
64
63
|
|
|
64
|
+
try {
|
|
65
|
+
await simpleGit__default["default"]().clone(opts.dest, destRepoPath, cloneOpts);
|
|
66
|
+
} catch (e) {
|
|
67
|
+
if (!init) throw e;
|
|
68
|
+
delete cloneOpts['--single-branch'];
|
|
69
|
+
await simpleGit__default["default"]().clone(opts.dest, destRepoPath, cloneOpts);
|
|
70
|
+
simpleGit__default["default"](destRepoPath).checkout(['-b', opts.branch]);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
logger.verbose(`Cloned a destination repo on ${destRepoPath}`);
|
|
74
|
+
const dstGit = simpleGit__default["default"](destRepoPath);
|
|
65
75
|
const dstLog = await dstGit.log();
|
|
66
76
|
let from;
|
|
67
77
|
|
|
@@ -87,7 +97,7 @@ async function syncCore(destRepoPath, opts, init) {
|
|
|
87
97
|
'--first-parent': undefined
|
|
88
98
|
} : undefined);
|
|
89
99
|
} catch (e) {
|
|
90
|
-
logger.error(
|
|
100
|
+
logger.error(`Failed to get source commit history: ${e.stack}`);
|
|
91
101
|
return false;
|
|
92
102
|
}
|
|
93
103
|
|
|
@@ -100,16 +110,14 @@ async function syncCore(destRepoPath, opts, init) {
|
|
|
100
110
|
|
|
101
111
|
const [destFiles, srcFiles] = await Promise.all([fsp__default["default"].readdir(destRepoPath), fsp__default["default"].readdir('.')]);
|
|
102
112
|
|
|
103
|
-
for (const destFile of destFiles) {
|
|
104
|
-
if (ignoreNames.includes(destFile)) continue;
|
|
113
|
+
for (const destFile of micromatch__default["default"].not(destFiles, opts['ignore-patterns'])) {
|
|
105
114
|
await fsp__default["default"].rm(path__default["default"].join(destRepoPath, destFile), {
|
|
106
115
|
recursive: true,
|
|
107
116
|
force: true
|
|
108
117
|
});
|
|
109
118
|
}
|
|
110
119
|
|
|
111
|
-
for (const srcFile of srcFiles) {
|
|
112
|
-
if (ignoreNames.includes(srcFile)) continue;
|
|
120
|
+
for (const srcFile of micromatch__default["default"].not(srcFiles, opts['ignore-patterns'])) {
|
|
113
121
|
fse__default["default"].copySync(srcFile, path__default["default"].join(destRepoPath, srcFile));
|
|
114
122
|
}
|
|
115
123
|
|
|
@@ -137,7 +145,7 @@ async function syncCore(destRepoPath, opts, init) {
|
|
|
137
145
|
logger.verbose(`Created a commit: ${title}`);
|
|
138
146
|
logger.verbose(` with body: ${body}`);
|
|
139
147
|
} catch (e) {
|
|
140
|
-
logger.error(
|
|
148
|
+
logger.error(`Failed to commit changes: ${e.stack}\`);`);
|
|
141
149
|
return false;
|
|
142
150
|
}
|
|
143
151
|
|
|
@@ -148,7 +156,7 @@ async function syncCore(destRepoPath, opts, init) {
|
|
|
148
156
|
await dstGit.addTag(destTag);
|
|
149
157
|
logger.verbose(`Created a tag: ${destTag}`);
|
|
150
158
|
} catch (e) {
|
|
151
|
-
logger.error(
|
|
159
|
+
logger.error(`Failed to commit changes: ${e.stack}\`);`);
|
|
152
160
|
return false;
|
|
153
161
|
}
|
|
154
162
|
}
|
|
@@ -167,11 +175,11 @@ async function syncCore(destRepoPath, opts, init) {
|
|
|
167
175
|
});
|
|
168
176
|
}
|
|
169
177
|
} catch (e) {
|
|
170
|
-
logger.error(
|
|
178
|
+
logger.error(`Failed to push the commit: ${e.stack}`);
|
|
171
179
|
return false;
|
|
172
180
|
}
|
|
173
181
|
|
|
174
|
-
logger.verbose('Pushed
|
|
182
|
+
logger.verbose('Pushed the commit');
|
|
175
183
|
return true;
|
|
176
184
|
}
|
|
177
185
|
|
|
@@ -189,7 +197,7 @@ function extractCommitHash(logResult) {
|
|
|
189
197
|
}
|
|
190
198
|
}
|
|
191
199
|
|
|
192
|
-
logger.error(
|
|
200
|
+
logger.error(`No sync commit: ${logResult.all[0].message}`);
|
|
193
201
|
return;
|
|
194
202
|
}
|
|
195
203
|
|
|
@@ -244,6 +252,14 @@ const yargsOptions = {
|
|
|
244
252
|
type: 'boolean',
|
|
245
253
|
describe: 'Create version tag (e.g. v1.31.5). It could be a non-unique tag.'
|
|
246
254
|
},
|
|
255
|
+
'ignore-patterns': {
|
|
256
|
+
type: 'string',
|
|
257
|
+
alias: 'i',
|
|
258
|
+
describe: `Exclude the files whose path matches one of the given patterns.
|
|
259
|
+
The patterns are processed by micromatch (https://github.com/micromatch/micromatch).
|
|
260
|
+
You may specify the option multiple times. Default value is ['.git', '.github', 'node_modules']`,
|
|
261
|
+
default: ['.git', '.github', 'node_modules']
|
|
262
|
+
},
|
|
247
263
|
dry: {
|
|
248
264
|
type: 'boolean',
|
|
249
265
|
describe: 'Enable dry-run mode.'
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/logger.ts","../src/index.ts","../src/initCommand.ts","../src/syncCommand.ts","../src/yargsOptions.ts","../src/cli.ts"],"sourcesContent":["import { createLogger, format, transports } from 'winston';\n\nexport const logger = createLogger({\n transports: [\n new transports.Console({\n format: format.cli({ colors: { error: 'red' } }),\n }),\n ],\n});\n","import child_process from 'child_process';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport fse from 'fs-extra';\nimport simpleGit, { SimpleGit } from 'simple-git';\nimport type { LogResult } from 'simple-git/typings/response';\nimport { InferredOptionTypes } from 'yargs';\n\nimport { logger } from './logger';\nimport { yargsOptions } from './yargsOptions';\n\nconst syncDirPath = path.join('node_modules', '.temp', 'sync-git-repo');\nconst ignoreNames = ['.git', 'node_modules'];\n\nexport async function sync(opts: InferredOptionTypes<typeof yargsOptions>, init: boolean): Promise<void> {\n await fsp.mkdir(syncDirPath, { recursive: true });\n const dirPath = await fsp.mkdtemp(path.join(syncDirPath, 'repo-'));\n const ret = await syncCore(dirPath, opts, init);\n await fsp.rm(dirPath, { recursive: true, force: true });\n process.exit(ret ? 0 : 1);\n}\n\nasync function syncCore(\n destRepoPath: string,\n opts: InferredOptionTypes<typeof yargsOptions>,\n init: boolean\n): Promise<boolean> {\n await simpleGit().clone(opts.dest, destRepoPath, opts.force ? undefined : { '--depth': 1 });\n logger.verbose('Cloned a destination repo');\n\n const dstGit: SimpleGit = simpleGit(destRepoPath);\n if (opts.branch) {\n try {\n await dstGit.checkout(opts.branch);\n } catch (_) {\n await dstGit.checkoutLocalBranch(opts.branch);\n }\n }\n const dstLog = await dstGit.log();\n\n let from: string | undefined;\n if (!init) {\n from = extractCommitHash(dstLog);\n if (!from) {\n logger.error('No valid commit in destination repo');\n return false;\n }\n logger.verbose(`Extracted a valid commit: ${from}`);\n }\n\n const srcGit: SimpleGit = simpleGit();\n let srcLog: LogResult;\n try {\n // '--first-parent' hides children commits of merge commits\n srcLog = await srcGit.log(from ? { from, to: 'HEAD', '--first-parent': undefined } : undefined);\n } catch (e) {\n logger.error('Failed to get source commit history:', e);\n return false;\n }\n\n const latestHash = srcLog.latest?.hash;\n if (!latestHash) {\n logger.info('No synchronizable commit');\n return true;\n }\n\n const [destFiles, srcFiles] = await Promise.all([fsp.readdir(destRepoPath), fsp.readdir('.')]);\n for (const destFile of destFiles) {\n if (ignoreNames.includes(destFile)) continue;\n await fsp.rm(path.join(destRepoPath, destFile), { recursive: true, force: true });\n }\n for (const srcFile of srcFiles) {\n if (ignoreNames.includes(srcFile)) continue;\n fse.copySync(srcFile, path.join(destRepoPath, srcFile));\n }\n await dstGit.add('-A');\n\n let srcTag = '';\n if (opts['tag-hash'] || opts['tag-version']) {\n // e.g. `--abbrev=0` changes `v1.31.5-2-gcdde507` to `v1.31.5`\n const describeCommand = `git describe --tags --always ${opts['tag-version'] ? '--abbrev=0' : ''}`;\n srcTag = child_process.execSync(describeCommand).toString().trim();\n }\n let prefix = opts.prefix ?? '';\n if (prefix && !prefix.endsWith('/')) {\n prefix += '/';\n }\n const link = `${prefix}${latestHash}`;\n const title = srcTag ? `sync ${srcTag} (${link})` : `sync ${link}`;\n const body = init\n ? `Initialize one-way-git-sync by replacing all the files with those of ${opts.dest}`\n : srcLog.all.map((l) => `* ${l.message}`).join('\\n\\n');\n try {\n await dstGit.commit(`${title}\\n\\n${body}`);\n logger.verbose(`Created a commit: ${title}`);\n logger.verbose(` with body: ${body}`);\n } catch (e) {\n logger.error('Failed to commit changes:', e);\n return false;\n }\n\n const destTag = srcTag || opts.tag;\n if (destTag) {\n try {\n await dstGit.addTag(destTag);\n logger.verbose(`Created a tag: ${destTag}`);\n } catch (e) {\n logger.error('Failed to commit changes:', e);\n return false;\n }\n }\n\n if (opts.dry) {\n logger.verbose('Finished dry run');\n return true;\n }\n\n try {\n await dstGit.push();\n if (destTag) {\n await dstGit.push({ '--tags': null });\n }\n } catch (e) {\n logger.error('Failed to push a commit:', e);\n return false;\n }\n\n logger.verbose('Pushed a commit');\n return true;\n}\n\nfunction extractCommitHash(logResult: LogResult): string | undefined {\n if (logResult.all.length === 0) {\n logger.error('No commit history');\n return;\n }\n\n for (const log of logResult.all) {\n const [head, ...words] = log.message.replace(/[()]/g, '').split(/[\\s/]/);\n if (head === 'sync' && words.length) {\n return words[words.length - 1];\n }\n }\n logger.error('No sync commit: ', logResult.all[0]);\n return;\n}\n","import type { CommandModule, InferredOptionTypes } from 'yargs';\n\nimport { yargsOptions } from './yargsOptions';\n\nimport { sync } from './index';\n\nexport const initCommand: CommandModule<unknown, InferredOptionTypes<typeof yargsOptions>> = {\n command: 'init',\n describe: 'Initialize a destination git repository',\n async handler(argv) {\n await sync(argv, true);\n },\n};\n","import type { CommandModule, InferredOptionTypes } from 'yargs';\n\nimport { yargsOptions } from './yargsOptions';\n\nimport { sync } from './index';\n\nexport const syncCommand: CommandModule<unknown, InferredOptionTypes<typeof yargsOptions>> = {\n command: 'sync',\n describe: 'Synchronize a destination git repository with a source git repository',\n async handler(argv) {\n await sync(argv, false);\n },\n};\n","export const yargsOptions = {\n dest: {\n type: 'string',\n alias: 'd',\n describe: 'A URL of a destination git repository.',\n demand: true,\n },\n prefix: {\n type: 'string',\n alias: 'p',\n describe: `A prefix of a commit hash used to generate a commit title, e.g. 'sync <prefix>/<hash>'.\n A typical value is like 'https://github.com/WillBooster/one-way-git-sync/commits'`,\n },\n branch: {\n type: 'string',\n alias: 'b',\n describe: 'Specify branch of destination repo.',\n },\n tag: {\n type: 'string',\n alias: 't',\n describe: 'Specify tag to be created in destination repo.',\n },\n 'tag-hash': {\n type: 'boolean',\n describe: 'Create version+hash tag (e.g. v1.31.5-2-gcdde507). It should be a unique tag.',\n },\n 'tag-version': {\n type: 'boolean',\n describe: 'Create version tag (e.g. v1.31.5). It could be a non-unique tag.',\n },\n dry: {\n type: 'boolean',\n describe: 'Enable dry-run mode.',\n },\n force: {\n type: 'boolean',\n describe: 'Force to overwrite the destination git repository.',\n },\n verbose: {\n type: 'boolean',\n alias: 'v',\n describe: 'Show details logs.',\n },\n} as const;\n","import { hideBin } from 'yargs/helpers';\nimport yargs from 'yargs/yargs';\n\nimport { initCommand } from './initCommand';\nimport { logger } from './logger';\nimport { syncCommand } from './syncCommand';\nimport { yargsOptions } from './yargsOptions';\n\nexport async function cli(argv: string[]): Promise<void> {\n await yargs(hideBin(argv))\n .options(yargsOptions)\n .middleware((argv) => {\n logger.level = argv.verbose ? 'verbose' : 'info';\n })\n .command(initCommand)\n .command(syncCommand).argv;\n}\n"],"names":["logger","createLogger","transports","Console","format","cli","colors","error","syncDirPath","path","join","ignoreNames","sync","opts","init","fsp","mkdir","recursive","dirPath","mkdtemp","ret","syncCore","rm","force","process","exit","destRepoPath","simpleGit","clone","dest","undefined","verbose","dstGit","branch","checkout","_","checkoutLocalBranch","dstLog","log","from","extractCommitHash","srcGit","srcLog","to","e","latestHash","latest","hash","info","destFiles","srcFiles","Promise","all","readdir","destFile","includes","srcFile","fse","copySync","add","srcTag","describeCommand","child_process","execSync","toString","trim","prefix","endsWith","link","title","body","map","l","message","commit","destTag","tag","addTag","dry","push","logResult","length","head","words","replace","split","initCommand","command","describe","handler","argv","syncCommand","yargsOptions","type","alias","demand","yargs","hideBin","options","middleware","level"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/logger.ts","../src/index.ts","../src/initCommand.ts","../src/syncCommand.ts","../src/yargsOptions.ts","../src/cli.ts"],"sourcesContent":["import { createLogger, format, transports } from 'winston';\n\nexport const logger = createLogger({\n transports: [\n new transports.Console({\n format: format.cli({ colors: { error: 'red' } }),\n }),\n ],\n});\n","import child_process from 'child_process';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport fse from 'fs-extra';\nimport micromatch from 'micromatch';\nimport type { LogResult, TaskOptions } from 'simple-git';\nimport simpleGit, { SimpleGit } from 'simple-git';\nimport { InferredOptionTypes } from 'yargs';\n\nimport { logger } from './logger';\nimport { yargsOptions } from './yargsOptions';\n\nconst syncDirPath = path.join('node_modules', '.temp', 'sync-git-repo');\n\nexport async function sync(opts: InferredOptionTypes<typeof yargsOptions>, init: boolean): Promise<void> {\n await fsp.mkdir(syncDirPath, { recursive: true });\n const dirPath = await fsp.mkdtemp(path.join(syncDirPath, 'repo-'));\n const ret = await syncCore(dirPath, opts, init);\n await fsp.rm(dirPath, { recursive: true, force: true });\n process.exit(ret ? 0 : 1);\n}\n\nasync function syncCore(\n destRepoPath: string,\n opts: InferredOptionTypes<typeof yargsOptions>,\n init: boolean\n): Promise<boolean> {\n const cloneOpts: Record<string, any> = { '--single-branch': undefined };\n if (!opts.force) {\n cloneOpts['--depth'] = 1;\n }\n if (opts.branch) {\n cloneOpts['--branch'] = opts.branch;\n }\n try {\n await simpleGit().clone(opts.dest, destRepoPath, cloneOpts);\n } catch (e) {\n if (!init) throw e;\n\n delete cloneOpts['--single-branch'];\n await simpleGit().clone(opts.dest, destRepoPath, cloneOpts);\n simpleGit(destRepoPath).checkout(['-b', opts.branch] as TaskOptions);\n }\n logger.verbose(`Cloned a destination repo on ${destRepoPath}`);\n\n const dstGit: SimpleGit = simpleGit(destRepoPath);\n const dstLog = await dstGit.log();\n\n let from: string | undefined;\n if (!init) {\n from = extractCommitHash(dstLog);\n if (!from) {\n logger.error('No valid commit in destination repo');\n return false;\n }\n logger.verbose(`Extracted a valid commit: ${from}`);\n }\n\n const srcGit: SimpleGit = simpleGit();\n let srcLog: LogResult;\n try {\n // '--first-parent' hides children commits of merge commits\n srcLog = await srcGit.log(from ? { from, to: 'HEAD', '--first-parent': undefined } : undefined);\n } catch (e) {\n logger.error(`Failed to get source commit history: ${(e as Error).stack}`);\n return false;\n }\n\n const latestHash = srcLog.latest?.hash;\n if (!latestHash) {\n logger.info('No synchronizable commit');\n return true;\n }\n\n const [destFiles, srcFiles] = await Promise.all([fsp.readdir(destRepoPath), fsp.readdir('.')]);\n for (const destFile of micromatch.not(destFiles, opts['ignore-patterns'])) {\n await fsp.rm(path.join(destRepoPath, destFile), { recursive: true, force: true });\n }\n for (const srcFile of micromatch.not(srcFiles, opts['ignore-patterns'])) {\n fse.copySync(srcFile, path.join(destRepoPath, srcFile));\n }\n await dstGit.add('-A');\n\n let srcTag = '';\n if (opts['tag-hash'] || opts['tag-version']) {\n // e.g. `--abbrev=0` changes `v1.31.5-2-gcdde507` to `v1.31.5`\n const describeCommand = `git describe --tags --always ${opts['tag-version'] ? '--abbrev=0' : ''}`;\n srcTag = child_process.execSync(describeCommand).toString().trim();\n }\n let prefix = opts.prefix ?? '';\n if (prefix && !prefix.endsWith('/')) {\n prefix += '/';\n }\n const link = `${prefix}${latestHash}`;\n const title = srcTag ? `sync ${srcTag} (${link})` : `sync ${link}`;\n const body = init\n ? `Initialize one-way-git-sync by replacing all the files with those of ${opts.dest}`\n : srcLog.all.map((l) => `* ${l.message}`).join('\\n\\n');\n try {\n await dstGit.commit(`${title}\\n\\n${body}`);\n logger.verbose(`Created a commit: ${title}`);\n logger.verbose(` with body: ${body}`);\n } catch (e) {\n logger.error(`Failed to commit changes: ${(e as Error).stack}\\`);`);\n return false;\n }\n\n const destTag = srcTag || opts.tag;\n if (destTag) {\n try {\n await dstGit.addTag(destTag);\n logger.verbose(`Created a tag: ${destTag}`);\n } catch (e) {\n logger.error(`Failed to commit changes: ${(e as Error).stack}\\`);`);\n return false;\n }\n }\n\n if (opts.dry) {\n logger.verbose('Finished dry run');\n return true;\n }\n\n try {\n await dstGit.push();\n if (destTag) {\n await dstGit.push({ '--tags': null });\n }\n } catch (e) {\n logger.error(`Failed to push the commit: ${(e as Error).stack}`);\n return false;\n }\n\n logger.verbose('Pushed the commit');\n return true;\n}\n\nfunction extractCommitHash(logResult: LogResult): string | undefined {\n if (logResult.all.length === 0) {\n logger.error('No commit history');\n return;\n }\n\n for (const log of logResult.all) {\n const [head, ...words] = log.message.replace(/[()]/g, '').split(/[\\s/]/);\n if (head === 'sync' && words.length) {\n return words[words.length - 1];\n }\n }\n logger.error(`No sync commit: ${logResult.all[0].message}`);\n return;\n}\n","import type { CommandModule, InferredOptionTypes } from 'yargs';\n\nimport { yargsOptions } from './yargsOptions';\n\nimport { sync } from './index';\n\nexport const initCommand: CommandModule<unknown, InferredOptionTypes<typeof yargsOptions>> = {\n command: 'init',\n describe: 'Initialize a destination git repository',\n async handler(argv) {\n await sync(argv, true);\n },\n};\n","import type { CommandModule, InferredOptionTypes } from 'yargs';\n\nimport { yargsOptions } from './yargsOptions';\n\nimport { sync } from './index';\n\nexport const syncCommand: CommandModule<unknown, InferredOptionTypes<typeof yargsOptions>> = {\n command: 'sync',\n describe: 'Synchronize a destination git repository with a source git repository',\n async handler(argv) {\n await sync(argv, false);\n },\n};\n","export const yargsOptions = {\n dest: {\n type: 'string',\n alias: 'd',\n describe: 'A URL of a destination git repository.',\n demand: true,\n },\n prefix: {\n type: 'string',\n alias: 'p',\n describe: `A prefix of a commit hash used to generate a commit title, e.g. 'sync <prefix>/<hash>'.\n A typical value is like 'https://github.com/WillBooster/one-way-git-sync/commits'`,\n },\n branch: {\n type: 'string',\n alias: 'b',\n describe: 'Specify branch of destination repo.',\n },\n tag: {\n type: 'string',\n alias: 't',\n describe: 'Specify tag to be created in destination repo.',\n },\n 'tag-hash': {\n type: 'boolean',\n describe: 'Create version+hash tag (e.g. v1.31.5-2-gcdde507). It should be a unique tag.',\n },\n 'tag-version': {\n type: 'boolean',\n describe: 'Create version tag (e.g. v1.31.5). It could be a non-unique tag.',\n },\n 'ignore-patterns': {\n type: 'string',\n alias: 'i',\n describe: `Exclude the files whose path matches one of the given patterns.\n The patterns are processed by micromatch (https://github.com/micromatch/micromatch).\n You may specify the option multiple times. Default value is ['.git', '.github', 'node_modules']`,\n default: ['.git', '.github', 'node_modules'],\n },\n dry: {\n type: 'boolean',\n describe: 'Enable dry-run mode.',\n },\n force: {\n type: 'boolean',\n describe: 'Force to overwrite the destination git repository.',\n },\n verbose: {\n type: 'boolean',\n alias: 'v',\n describe: 'Show details logs.',\n },\n} as const;\n","import { hideBin } from 'yargs/helpers';\nimport yargs from 'yargs/yargs';\n\nimport { initCommand } from './initCommand';\nimport { logger } from './logger';\nimport { syncCommand } from './syncCommand';\nimport { yargsOptions } from './yargsOptions';\n\nexport async function cli(argv: string[]): Promise<void> {\n await yargs(hideBin(argv))\n .options(yargsOptions)\n .middleware((argv) => {\n logger.level = argv.verbose ? 'verbose' : 'info';\n })\n .command(initCommand)\n .command(syncCommand).argv;\n}\n"],"names":["logger","createLogger","transports","Console","format","cli","colors","error","syncDirPath","path","join","sync","opts","init","fsp","mkdir","recursive","dirPath","mkdtemp","ret","syncCore","rm","force","process","exit","destRepoPath","cloneOpts","undefined","branch","simpleGit","clone","dest","e","checkout","verbose","dstGit","dstLog","log","from","extractCommitHash","srcGit","srcLog","to","stack","latestHash","latest","hash","info","destFiles","srcFiles","Promise","all","readdir","destFile","micromatch","not","srcFile","fse","copySync","add","srcTag","describeCommand","child_process","execSync","toString","trim","prefix","endsWith","link","title","body","map","l","message","commit","destTag","tag","addTag","dry","push","logResult","length","head","words","replace","split","initCommand","command","describe","handler","argv","syncCommand","yargsOptions","type","alias","demand","default","yargs","hideBin","options","middleware","level"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAEO,MAAMA,MAAM,GAAGC,oBAAY,CAAC;AACjCC,EAAAA,UAAU,EAAE,CACV,IAAIA,kBAAU,CAACC,OAAf,CAAuB;AACrBC,IAAAA,MAAM,EAAEA,cAAM,CAACC,GAAP,CAAW;AAAEC,MAAAA,MAAM,EAAE;AAAEC,QAAAA,KAAK,EAAE;AAAT;AAAV,KAAX;AADa,GAAvB,CADU;AADqB,CAAD,CAA3B;;ACWP,MAAMC,WAAW,GAAGC,wBAAI,CAACC,IAAL,CAAU,cAAV,EAA0B,OAA1B,EAAmC,eAAnC,CAApB;AAEO,eAAeC,IAAf,CAAoBC,IAApB,EAAoEC,IAApE,EAAkG;AACvG,QAAMC,uBAAG,CAACC,KAAJ,CAAUP,WAAV,EAAuB;AAAEQ,IAAAA,SAAS,EAAE;AAAb,GAAvB,CAAN;AACA,QAAMC,OAAO,GAAG,MAAMH,uBAAG,CAACI,OAAJ,CAAYT,wBAAI,CAACC,IAAL,CAAUF,WAAV,EAAuB,OAAvB,CAAZ,CAAtB;AACA,QAAMW,GAAG,GAAG,MAAMC,QAAQ,CAACH,OAAD,EAAUL,IAAV,EAAgBC,IAAhB,CAA1B;AACA,QAAMC,uBAAG,CAACO,EAAJ,CAAOJ,OAAP,EAAgB;AAAED,IAAAA,SAAS,EAAE,IAAb;AAAmBM,IAAAA,KAAK,EAAE;AAA1B,GAAhB,CAAN;AACAC,EAAAA,OAAO,CAACC,IAAR,CAAaL,GAAG,GAAG,CAAH,GAAO,CAAvB;AACD;;AAED,eAAeC,QAAf,CACEK,YADF,EAEEb,IAFF,EAGEC,IAHF,EAIoB;AAAA;;AAClB,QAAMa,SAA8B,GAAG;AAAE,uBAAmBC;AAArB,GAAvC;;AACA,MAAI,CAACf,IAAI,CAACU,KAAV,EAAiB;AACfI,IAAAA,SAAS,CAAC,SAAD,CAAT,GAAuB,CAAvB;AACD;;AACD,MAAId,IAAI,CAACgB,MAAT,EAAiB;AACfF,IAAAA,SAAS,CAAC,UAAD,CAAT,GAAwBd,IAAI,CAACgB,MAA7B;AACD;;AACD,MAAI;AACF,UAAMC,6BAAS,GAAGC,KAAZ,CAAkBlB,IAAI,CAACmB,IAAvB,EAA6BN,YAA7B,EAA2CC,SAA3C,CAAN;AACD,GAFD,CAEE,OAAOM,CAAP,EAAU;AACV,QAAI,CAACnB,IAAL,EAAW,MAAMmB,CAAN;AAEX,WAAON,SAAS,CAAC,iBAAD,CAAhB;AACA,UAAMG,6BAAS,GAAGC,KAAZ,CAAkBlB,IAAI,CAACmB,IAAvB,EAA6BN,YAA7B,EAA2CC,SAA3C,CAAN;AACAG,IAAAA,6BAAS,CAACJ,YAAD,CAAT,CAAwBQ,QAAxB,CAAiC,CAAC,IAAD,EAAOrB,IAAI,CAACgB,MAAZ,CAAjC;AACD;;AACD5B,EAAAA,MAAM,CAACkC,OAAP,CAAgB,gCAA+BT,YAAa,EAA5D;AAEA,QAAMU,MAAiB,GAAGN,6BAAS,CAACJ,YAAD,CAAnC;AACA,QAAMW,MAAM,GAAG,MAAMD,MAAM,CAACE,GAAP,EAArB;AAEA,MAAIC,IAAJ;;AACA,MAAI,CAACzB,IAAL,EAAW;AACTyB,IAAAA,IAAI,GAAGC,iBAAiB,CAACH,MAAD,CAAxB;;AACA,QAAI,CAACE,IAAL,EAAW;AACTtC,MAAAA,MAAM,CAACO,KAAP,CAAa,qCAAb;AACA,aAAO,KAAP;AACD;;AACDP,IAAAA,MAAM,CAACkC,OAAP,CAAgB,6BAA4BI,IAAK,EAAjD;AACD;;AAED,QAAME,MAAiB,GAAGX,6BAAS,EAAnC;AACA,MAAIY,MAAJ;;AACA,MAAI;AACF;AACAA,IAAAA,MAAM,GAAG,MAAMD,MAAM,CAACH,GAAP,CAAWC,IAAI,GAAG;AAAEA,MAAAA,IAAF;AAAQI,MAAAA,EAAE,EAAE,MAAZ;AAAoB,wBAAkBf;AAAtC,KAAH,GAAuDA,SAAtE,CAAf;AACD,GAHD,CAGE,OAAOK,CAAP,EAAU;AACVhC,IAAAA,MAAM,CAACO,KAAP,CAAc,wCAAwCyB,CAAD,CAAaW,KAAM,EAAxE;AACA,WAAO,KAAP;AACD;;AAED,QAAMC,UAAU,qBAAGH,MAAM,CAACI,MAAV,mDAAG,eAAeC,IAAlC;;AACA,MAAI,CAACF,UAAL,EAAiB;AACf5C,IAAAA,MAAM,CAAC+C,IAAP,CAAY,0BAAZ;AACA,WAAO,IAAP;AACD;;AAED,QAAM,CAACC,SAAD,EAAYC,QAAZ,IAAwB,MAAMC,OAAO,CAACC,GAAR,CAAY,CAACrC,uBAAG,CAACsC,OAAJ,CAAY3B,YAAZ,CAAD,EAA4BX,uBAAG,CAACsC,OAAJ,CAAY,GAAZ,CAA5B,CAAZ,CAApC;;AACA,OAAK,MAAMC,QAAX,IAAuBC,8BAAU,CAACC,GAAX,CAAeP,SAAf,EAA0BpC,IAAI,CAAC,iBAAD,CAA9B,CAAvB,EAA2E;AACzE,UAAME,uBAAG,CAACO,EAAJ,CAAOZ,wBAAI,CAACC,IAAL,CAAUe,YAAV,EAAwB4B,QAAxB,CAAP,EAA0C;AAAErC,MAAAA,SAAS,EAAE,IAAb;AAAmBM,MAAAA,KAAK,EAAE;AAA1B,KAA1C,CAAN;AACD;;AACD,OAAK,MAAMkC,OAAX,IAAsBF,8BAAU,CAACC,GAAX,CAAeN,QAAf,EAAyBrC,IAAI,CAAC,iBAAD,CAA7B,CAAtB,EAAyE;AACvE6C,IAAAA,uBAAG,CAACC,QAAJ,CAAaF,OAAb,EAAsB/C,wBAAI,CAACC,IAAL,CAAUe,YAAV,EAAwB+B,OAAxB,CAAtB;AACD;;AACD,QAAMrB,MAAM,CAACwB,GAAP,CAAW,IAAX,CAAN;AAEA,MAAIC,MAAM,GAAG,EAAb;;AACA,MAAIhD,IAAI,CAAC,UAAD,CAAJ,IAAoBA,IAAI,CAAC,aAAD,CAA5B,EAA6C;AAC3C;AACA,UAAMiD,eAAe,GAAI,gCAA+BjD,IAAI,CAAC,aAAD,CAAJ,GAAsB,YAAtB,GAAqC,EAAG,EAAhG;AACAgD,IAAAA,MAAM,GAAGE,iCAAa,CAACC,QAAd,CAAuBF,eAAvB,EAAwCG,QAAxC,GAAmDC,IAAnD,EAAT;AACD;;AACD,MAAIC,MAAM,mBAAGtD,IAAI,CAACsD,MAAR,uDAAkB,EAA5B;;AACA,MAAIA,MAAM,IAAI,CAACA,MAAM,CAACC,QAAP,CAAgB,GAAhB,CAAf,EAAqC;AACnCD,IAAAA,MAAM,IAAI,GAAV;AACD;;AACD,QAAME,IAAI,GAAI,GAAEF,MAAO,GAAEtB,UAAW,EAApC;AACA,QAAMyB,KAAK,GAAGT,MAAM,GAAI,QAAOA,MAAO,KAAIQ,IAAK,GAA3B,GAAiC,QAAOA,IAAK,EAAjE;AACA,QAAME,IAAI,GAAGzD,IAAI,GACZ,wEAAuED,IAAI,CAACmB,IAAK,EADrE,GAEbU,MAAM,CAACU,GAAP,CAAWoB,GAAX,CAAgBC,CAAD,IAAQ,KAAIA,CAAC,CAACC,OAAQ,EAArC,EAAwC/D,IAAxC,CAA6C,MAA7C,CAFJ;;AAGA,MAAI;AACF,UAAMyB,MAAM,CAACuC,MAAP,CAAe,GAAEL,KAAM,OAAMC,IAAK,EAAlC,CAAN;AACAtE,IAAAA,MAAM,CAACkC,OAAP,CAAgB,qBAAoBmC,KAAM,EAA1C;AACArE,IAAAA,MAAM,CAACkC,OAAP,CAAgB,gBAAeoC,IAAK,EAApC;AACD,GAJD,CAIE,OAAOtC,CAAP,EAAU;AACVhC,IAAAA,MAAM,CAACO,KAAP,CAAc,6BAA6ByB,CAAD,CAAaW,KAAM,MAA7D;AACA,WAAO,KAAP;AACD;;AAED,QAAMgC,OAAO,GAAGf,MAAM,IAAIhD,IAAI,CAACgE,GAA/B;;AACA,MAAID,OAAJ,EAAa;AACX,QAAI;AACF,YAAMxC,MAAM,CAAC0C,MAAP,CAAcF,OAAd,CAAN;AACA3E,MAAAA,MAAM,CAACkC,OAAP,CAAgB,kBAAiByC,OAAQ,EAAzC;AACD,KAHD,CAGE,OAAO3C,CAAP,EAAU;AACVhC,MAAAA,MAAM,CAACO,KAAP,CAAc,6BAA6ByB,CAAD,CAAaW,KAAM,MAA7D;AACA,aAAO,KAAP;AACD;AACF;;AAED,MAAI/B,IAAI,CAACkE,GAAT,EAAc;AACZ9E,IAAAA,MAAM,CAACkC,OAAP,CAAe,kBAAf;AACA,WAAO,IAAP;AACD;;AAED,MAAI;AACF,UAAMC,MAAM,CAAC4C,IAAP,EAAN;;AACA,QAAIJ,OAAJ,EAAa;AACX,YAAMxC,MAAM,CAAC4C,IAAP,CAAY;AAAE,kBAAU;AAAZ,OAAZ,CAAN;AACD;AACF,GALD,CAKE,OAAO/C,CAAP,EAAU;AACVhC,IAAAA,MAAM,CAACO,KAAP,CAAc,8BAA8ByB,CAAD,CAAaW,KAAM,EAA9D;AACA,WAAO,KAAP;AACD;;AAED3C,EAAAA,MAAM,CAACkC,OAAP,CAAe,mBAAf;AACA,SAAO,IAAP;AACD;;AAED,SAASK,iBAAT,CAA2ByC,SAA3B,EAAqE;AACnE,MAAIA,SAAS,CAAC7B,GAAV,CAAc8B,MAAd,KAAyB,CAA7B,EAAgC;AAC9BjF,IAAAA,MAAM,CAACO,KAAP,CAAa,mBAAb;AACA;AACD;;AAED,OAAK,MAAM8B,GAAX,IAAkB2C,SAAS,CAAC7B,GAA5B,EAAiC;AAC/B,UAAM,CAAC+B,IAAD,EAAO,GAAGC,KAAV,IAAmB9C,GAAG,CAACoC,OAAJ,CAAYW,OAAZ,CAAoB,OAApB,EAA6B,EAA7B,EAAiCC,KAAjC,CAAuC,OAAvC,CAAzB;;AACA,QAAIH,IAAI,KAAK,MAAT,IAAmBC,KAAK,CAACF,MAA7B,EAAqC;AACnC,aAAOE,KAAK,CAACA,KAAK,CAACF,MAAN,GAAe,CAAhB,CAAZ;AACD;AACF;;AACDjF,EAAAA,MAAM,CAACO,KAAP,CAAc,mBAAkByE,SAAS,CAAC7B,GAAV,CAAc,CAAd,EAAiBsB,OAAQ,EAAzD;AACA;AACD;;AClJM,MAAMa,WAA6E,GAAG;AAC3FC,EAAAA,OAAO,EAAE,MADkF;AAE3FC,EAAAA,QAAQ,EAAE,yCAFiF;;AAG3F,QAAMC,OAAN,CAAcC,IAAd,EAAoB;AAClB,UAAM/E,IAAI,CAAC+E,IAAD,EAAO,IAAP,CAAV;AACD;;AAL0F,CAAtF;;ACAA,MAAMC,WAA6E,GAAG;AAC3FJ,EAAAA,OAAO,EAAE,MADkF;AAE3FC,EAAAA,QAAQ,EAAE,uEAFiF;;AAG3F,QAAMC,OAAN,CAAcC,IAAd,EAAoB;AAClB,UAAM/E,IAAI,CAAC+E,IAAD,EAAO,KAAP,CAAV;AACD;;AAL0F,CAAtF;;ACNA,MAAME,YAAY,GAAG;AAC1B7D,EAAAA,IAAI,EAAE;AACJ8D,IAAAA,IAAI,EAAE,QADF;AAEJC,IAAAA,KAAK,EAAE,GAFH;AAGJN,IAAAA,QAAQ,EAAE,wCAHN;AAIJO,IAAAA,MAAM,EAAE;AAJJ,GADoB;AAO1B7B,EAAAA,MAAM,EAAE;AACN2B,IAAAA,IAAI,EAAE,QADA;AAENC,IAAAA,KAAK,EAAE,GAFD;AAGNN,IAAAA,QAAQ,EAAG;AACf;AAJU,GAPkB;AAa1B5D,EAAAA,MAAM,EAAE;AACNiE,IAAAA,IAAI,EAAE,QADA;AAENC,IAAAA,KAAK,EAAE,GAFD;AAGNN,IAAAA,QAAQ,EAAE;AAHJ,GAbkB;AAkB1BZ,EAAAA,GAAG,EAAE;AACHiB,IAAAA,IAAI,EAAE,QADH;AAEHC,IAAAA,KAAK,EAAE,GAFJ;AAGHN,IAAAA,QAAQ,EAAE;AAHP,GAlBqB;AAuB1B,cAAY;AACVK,IAAAA,IAAI,EAAE,SADI;AAEVL,IAAAA,QAAQ,EAAE;AAFA,GAvBc;AA2B1B,iBAAe;AACbK,IAAAA,IAAI,EAAE,SADO;AAEbL,IAAAA,QAAQ,EAAE;AAFG,GA3BW;AA+B1B,qBAAmB;AACjBK,IAAAA,IAAI,EAAE,QADW;AAEjBC,IAAAA,KAAK,EAAE,GAFU;AAGjBN,IAAAA,QAAQ,EAAG;AACf;AACA,+GALqB;AAMjBQ,IAAAA,OAAO,EAAE,CAAC,MAAD,EAAS,SAAT,EAAoB,cAApB;AANQ,GA/BO;AAuC1BlB,EAAAA,GAAG,EAAE;AACHe,IAAAA,IAAI,EAAE,SADH;AAEHL,IAAAA,QAAQ,EAAE;AAFP,GAvCqB;AA2C1BlE,EAAAA,KAAK,EAAE;AACLuE,IAAAA,IAAI,EAAE,SADD;AAELL,IAAAA,QAAQ,EAAE;AAFL,GA3CmB;AA+C1BtD,EAAAA,OAAO,EAAE;AACP2D,IAAAA,IAAI,EAAE,SADC;AAEPC,IAAAA,KAAK,EAAE,GAFA;AAGPN,IAAAA,QAAQ,EAAE;AAHH;AA/CiB,CAArB;;ACQA,eAAenF,GAAf,CAAmBqF,IAAnB,EAAkD;AACvD,QAAMO,yBAAK,CAACC,eAAO,CAACR,IAAD,CAAR,CAAL,CACHS,OADG,CACKP,YADL,EAEHQ,UAFG,CAESV,IAAD,IAAU;AACpB1F,IAAAA,MAAM,CAACqG,KAAP,GAAeX,IAAI,CAACxD,OAAL,GAAe,SAAf,GAA2B,MAA1C;AACD,GAJG,EAKHqD,OALG,CAKKD,WALL,EAMHC,OANG,CAMKI,WANL,EAMkBD,IANxB;AAOD;;;;"}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"git",
|
|
6
6
|
"sync"
|
|
7
7
|
],
|
|
8
|
-
"repository": "
|
|
8
|
+
"repository": "github:WillBooster/one-way-git-sync",
|
|
9
9
|
"license": "Apache-2.0",
|
|
10
10
|
"author": "WillBooster Inc.",
|
|
11
11
|
"bin": "./bin/index.js",
|
|
@@ -20,65 +20,68 @@
|
|
|
20
20
|
"_postinstall": "husky install",
|
|
21
21
|
"lint": "eslint --color \"./{src,__tests__}/**/*.{cjs,js,jsx,mjs,ts,tsx}\"",
|
|
22
22
|
"lint-fix": "yarn lint --fix",
|
|
23
|
-
"
|
|
23
|
+
"prepack": "pinst --disable",
|
|
24
|
+
"postpack": "pinst --enable",
|
|
24
25
|
"prettify": "prettier --color --write \"**/{.*/,}*.{cjs,css,htm,html,js,json,json5,jsx,md,mjs,scss,ts,tsx,vue,yaml,yml}\" \"!**/test-fixtures/**\"",
|
|
25
|
-
"
|
|
26
|
+
"release": "yarn build && semantic-release",
|
|
26
27
|
"start": "babel-node -x .js,.jsx,.es6,.es,.ts -- src/start.ts",
|
|
27
28
|
"start-prod": "yarn build && yarn one-way-git-sync",
|
|
28
29
|
"typecheck": "tsc --noEmit --Pretty"
|
|
29
30
|
},
|
|
30
31
|
"prettier": "@willbooster/prettier-config",
|
|
32
|
+
"resolutions": {
|
|
33
|
+
"npm/chalk": "^4.1.2"
|
|
34
|
+
},
|
|
31
35
|
"dependencies": {
|
|
32
36
|
"fs-extra": "10.0.0",
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
37
|
+
"micromatch": "4.0.4",
|
|
38
|
+
"simple-git": "3.2.6",
|
|
39
|
+
"winston": "3.6.0",
|
|
40
|
+
"yargs": "17.3.1"
|
|
36
41
|
},
|
|
37
42
|
"devDependencies": {
|
|
38
|
-
"@babel/core": "7.
|
|
39
|
-
"@babel/helper-plugin-utils": "7.16.
|
|
40
|
-
"@babel/node": "7.16.
|
|
41
|
-
"@babel/plugin-proposal-class-properties": "7.16.
|
|
42
|
-
"@babel/plugin-proposal-numeric-separator": "7.16.
|
|
43
|
-
"@babel/preset-env": "7.16.
|
|
44
|
-
"@babel/preset-typescript": "7.16.
|
|
43
|
+
"@babel/core": "7.17.5",
|
|
44
|
+
"@babel/helper-plugin-utils": "7.16.7",
|
|
45
|
+
"@babel/node": "7.16.8",
|
|
46
|
+
"@babel/plugin-proposal-class-properties": "7.16.7",
|
|
47
|
+
"@babel/plugin-proposal-numeric-separator": "7.16.7",
|
|
48
|
+
"@babel/preset-env": "7.16.11",
|
|
49
|
+
"@babel/preset-typescript": "7.16.7",
|
|
45
50
|
"@rollup/plugin-babel": "5.3.0",
|
|
46
51
|
"@rollup/plugin-commonjs": "21.0.1",
|
|
47
|
-
"@rollup/plugin-node-resolve": "13.1.
|
|
48
|
-
"@types/eslint": "8.
|
|
52
|
+
"@rollup/plugin-node-resolve": "13.1.3",
|
|
53
|
+
"@types/eslint": "8.4.1",
|
|
49
54
|
"@types/fs-extra": "9.0.13",
|
|
50
55
|
"@types/micromatch": "4.0.2",
|
|
51
56
|
"@types/semantic-release": "17.2.3",
|
|
52
|
-
"@types/yargs": "17.0.
|
|
53
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
54
|
-
"@typescript-eslint/parser": "5.
|
|
55
|
-
"@willbooster/eslint-config-ts": "
|
|
56
|
-
"@willbooster/prettier-config": "
|
|
57
|
-
"@willbooster/renovate-config": "
|
|
57
|
+
"@types/yargs": "17.0.8",
|
|
58
|
+
"@typescript-eslint/eslint-plugin": "5.12.1",
|
|
59
|
+
"@typescript-eslint/parser": "5.12.1",
|
|
60
|
+
"@willbooster/eslint-config-ts": "9.0.0",
|
|
61
|
+
"@willbooster/prettier-config": "9.0.0",
|
|
62
|
+
"@willbooster/renovate-config": "9.2.0",
|
|
58
63
|
"babel-plugin-transform-remove-console": "6.9.4",
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"eslint": "
|
|
64
|
-
"eslint-
|
|
65
|
-
"eslint-
|
|
66
|
-
"eslint-plugin-
|
|
64
|
+
"conventional-changelog-conventionalcommits": "4.6.3",
|
|
65
|
+
"core-js": "3.21.1",
|
|
66
|
+
"eslint": "8.9.0",
|
|
67
|
+
"eslint-config-prettier": "8.4.0",
|
|
68
|
+
"eslint-import-resolver-typescript": "2.5.0",
|
|
69
|
+
"eslint-plugin-import": "2.25.4",
|
|
70
|
+
"eslint-plugin-sort-class-members": "1.14.1",
|
|
71
|
+
"eslint-plugin-sort-destructure-keys": "1.4.0",
|
|
67
72
|
"husky": "7.0.4",
|
|
68
|
-
"lint-staged": "12.
|
|
69
|
-
"
|
|
70
|
-
"pinst": "2.1.6",
|
|
71
|
-
"power-assert": "1.6.1",
|
|
73
|
+
"lint-staged": "12.3.4",
|
|
74
|
+
"pinst": "3.0.0",
|
|
72
75
|
"prettier": "2.5.1",
|
|
73
|
-
"rollup": "2.
|
|
74
|
-
"rollup-plugin-node-externals": "
|
|
75
|
-
"semantic-release": "
|
|
76
|
-
"sort-package-json": "1.
|
|
77
|
-
"typescript": "4.5.
|
|
76
|
+
"rollup": "2.67.3",
|
|
77
|
+
"rollup-plugin-node-externals": "4.0.0",
|
|
78
|
+
"semantic-release": "19.0.2",
|
|
79
|
+
"sort-package-json": "1.54.0",
|
|
80
|
+
"typescript": "4.5.5"
|
|
78
81
|
},
|
|
79
82
|
"engines": {
|
|
80
83
|
"node": ">=14"
|
|
81
84
|
},
|
|
82
|
-
"packageManager": "yarn@3.
|
|
83
|
-
"version": "3.
|
|
85
|
+
"packageManager": "yarn@3.2.0",
|
|
86
|
+
"version": "3.3.0"
|
|
84
87
|
}
|