@build-script/package-tools 0.0.1
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/LICENSE +21 -0
- package/README.md +136 -0
- package/config/rig.json +6 -0
- package/lib/command-file-map.generated.d.ts +23 -0
- package/lib/command-file-map.generated.d.ts.map +1 -0
- package/lib/command-file-map.generated.js +27 -0
- package/lib/command-file-map.generated.js.map +1 -0
- package/lib/commands/detect-package-change.d.ts +14 -0
- package/lib/commands/detect-package-change.d.ts.map +1 -0
- package/lib/commands/detect-package-change.js +55 -0
- package/lib/commands/detect-package-change.js.map +1 -0
- package/lib/commands/monorepo-bump-version.d.ts +22 -0
- package/lib/commands/monorepo-bump-version.d.ts.map +1 -0
- package/lib/commands/monorepo-bump-version.js +121 -0
- package/lib/commands/monorepo-bump-version.js.map +1 -0
- package/lib/commands/monorepo-cnpm-sync.d.ts +8 -0
- package/lib/commands/monorepo-cnpm-sync.d.ts.map +1 -0
- package/lib/commands/monorepo-cnpm-sync.js +16 -0
- package/lib/commands/monorepo-cnpm-sync.js.map +1 -0
- package/lib/commands/monorepo-invalid.d.ts +8 -0
- package/lib/commands/monorepo-invalid.d.ts.map +1 -0
- package/lib/commands/monorepo-invalid.js +19 -0
- package/lib/commands/monorepo-invalid.js.map +1 -0
- package/lib/commands/monorepo-list.d.ts +22 -0
- package/lib/commands/monorepo-list.d.ts.map +1 -0
- package/lib/commands/monorepo-list.js +40 -0
- package/lib/commands/monorepo-list.js.map +1 -0
- package/lib/commands/monorepo-publish.d.ts +22 -0
- package/lib/commands/monorepo-publish.d.ts.map +1 -0
- package/lib/commands/monorepo-publish.js +178 -0
- package/lib/commands/monorepo-publish.js.map +1 -0
- package/lib/commands/monorepo-tsconfig.d.ts +14 -0
- package/lib/commands/monorepo-tsconfig.d.ts.map +1 -0
- package/lib/commands/monorepo-tsconfig.js +131 -0
- package/lib/commands/monorepo-tsconfig.js.map +1 -0
- package/lib/commands/monorepo-upgrade.d.ts +8 -0
- package/lib/commands/monorepo-upgrade.d.ts.map +1 -0
- package/lib/commands/monorepo-upgrade.js +110 -0
- package/lib/commands/monorepo-upgrade.js.map +1 -0
- package/lib/commands/run-if-version-mismatch.d.ts +23 -0
- package/lib/commands/run-if-version-mismatch.d.ts.map +1 -0
- package/lib/commands/run-if-version-mismatch.js +64 -0
- package/lib/commands/run-if-version-mismatch.js.map +1 -0
- package/lib/commands/sync-my-readme.d.ts +9 -0
- package/lib/commands/sync-my-readme.d.ts.map +1 -0
- package/lib/commands/sync-my-readme.js +51 -0
- package/lib/commands/sync-my-readme.js.map +1 -0
- package/lib/commands/test.d.ts +9 -0
- package/lib/commands/test.d.ts.map +1 -0
- package/lib/commands/test.js +16 -0
- package/lib/commands/test.js.map +1 -0
- package/lib/common/cache/escape-package-path.d.ts +2 -0
- package/lib/common/cache/escape-package-path.d.ts.map +1 -0
- package/lib/common/cache/escape-package-path.js +7 -0
- package/lib/common/cache/escape-package-path.js.map +1 -0
- package/lib/common/cache/native.npm.d.ts +50 -0
- package/lib/common/cache/native.npm.d.ts.map +1 -0
- package/lib/common/cache/native.npm.js +162 -0
- package/lib/common/cache/native.npm.js.map +1 -0
- package/lib/common/functions/cli.d.ts +85 -0
- package/lib/common/functions/cli.d.ts.map +1 -0
- package/lib/common/functions/cli.js +110 -0
- package/lib/common/functions/cli.js.map +1 -0
- package/lib/common/functions/global-lifecycle.d.ts +5 -0
- package/lib/common/functions/global-lifecycle.d.ts.map +1 -0
- package/lib/common/functions/global-lifecycle.js +34 -0
- package/lib/common/functions/global-lifecycle.js.map +1 -0
- package/lib/common/git/git.d.ts +12 -0
- package/lib/common/git/git.d.ts.map +1 -0
- package/lib/common/git/git.js +65 -0
- package/lib/common/git/git.js.map +1 -0
- package/lib/common/package-manager/constant.d.ts +2 -0
- package/lib/common/package-manager/constant.d.ts.map +1 -0
- package/lib/common/package-manager/constant.js +2 -0
- package/lib/common/package-manager/constant.js.map +1 -0
- package/lib/common/package-manager/driver.abstract.d.ts +41 -0
- package/lib/common/package-manager/driver.abstract.d.ts.map +1 -0
- package/lib/common/package-manager/driver.abstract.js +138 -0
- package/lib/common/package-manager/driver.abstract.js.map +1 -0
- package/lib/common/package-manager/driver.npm.d.ts +7 -0
- package/lib/common/package-manager/driver.npm.d.ts.map +1 -0
- package/lib/common/package-manager/driver.npm.js +11 -0
- package/lib/common/package-manager/driver.npm.js.map +1 -0
- package/lib/common/package-manager/driver.pnpm.d.ts +7 -0
- package/lib/common/package-manager/driver.pnpm.d.ts.map +1 -0
- package/lib/common/package-manager/driver.pnpm.js +83 -0
- package/lib/common/package-manager/driver.pnpm.js.map +1 -0
- package/lib/common/package-manager/functions.d.ts +13 -0
- package/lib/common/package-manager/functions.d.ts.map +1 -0
- package/lib/common/package-manager/functions.js +95 -0
- package/lib/common/package-manager/functions.js.map +1 -0
- package/lib/common/package-manager/package-json.d.ts +5 -0
- package/lib/common/package-manager/package-json.d.ts.map +1 -0
- package/lib/common/package-manager/package-json.js +50 -0
- package/lib/common/package-manager/package-json.js.map +1 -0
- package/lib/common/package-manager/package-manager.d.ts +5 -0
- package/lib/common/package-manager/package-manager.d.ts.map +1 -0
- package/lib/common/package-manager/package-manager.js +27 -0
- package/lib/common/package-manager/package-manager.js.map +1 -0
- package/lib/common/package-manager/proxy.d.ts +5 -0
- package/lib/common/package-manager/proxy.d.ts.map +1 -0
- package/lib/common/package-manager/proxy.js +116 -0
- package/lib/common/package-manager/proxy.js.map +1 -0
- package/lib/common/shared-jobs/cnpm-sync.d.ts +4 -0
- package/lib/common/shared-jobs/cnpm-sync.d.ts.map +1 -0
- package/lib/common/shared-jobs/cnpm-sync.js +52 -0
- package/lib/common/shared-jobs/cnpm-sync.js.map +1 -0
- package/lib/common/shared-jobs/detect-change-job.d.ts +12 -0
- package/lib/common/shared-jobs/detect-change-job.d.ts.map +1 -0
- package/lib/common/shared-jobs/detect-change-job.js +52 -0
- package/lib/common/shared-jobs/detect-change-job.js.map +1 -0
- package/lib/common/shared-jobs/publish-package-version-job.d.ts +4 -0
- package/lib/common/shared-jobs/publish-package-version-job.d.ts.map +1 -0
- package/lib/common/shared-jobs/publish-package-version-job.js +40 -0
- package/lib/common/shared-jobs/publish-package-version-job.js.map +1 -0
- package/lib/common/taball/decompress.d.ts +2 -0
- package/lib/common/taball/decompress.d.ts.map +1 -0
- package/lib/common/taball/decompress.js +39 -0
- package/lib/common/taball/decompress.js.map +1 -0
- package/lib/common/taball/file-download.d.ts +15 -0
- package/lib/common/taball/file-download.d.ts.map +1 -0
- package/lib/common/taball/file-download.js +137 -0
- package/lib/common/taball/file-download.js.map +1 -0
- package/lib/common/temp-work-folder.d.ts +20 -0
- package/lib/common/temp-work-folder.d.ts.map +1 -0
- package/lib/common/temp-work-folder.js +68 -0
- package/lib/common/temp-work-folder.js.map +1 -0
- package/lib/common/version.generated.d.ts +12 -0
- package/lib/common/version.generated.d.ts.map +1 -0
- package/lib/common/version.generated.js +17 -0
- package/lib/common/version.generated.js.map +1 -0
- package/lib/main.d.ts +2 -0
- package/lib/main.d.ts.map +1 -0
- package/lib/main.js +115 -0
- package/lib/main.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/load.js +12 -0
- package/package.json +59 -0
- package/src/command-file-map.generated.ts +28 -0
- package/src/command-file-map.generator.ts +23 -0
- package/src/commands/detect-package-change.ts +57 -0
- package/src/commands/monorepo-bump-version.ts +152 -0
- package/src/commands/monorepo-cnpm-sync.ts +19 -0
- package/src/commands/monorepo-invalid.ts +22 -0
- package/src/commands/monorepo-list.ts +46 -0
- package/src/commands/monorepo-publish.ts +227 -0
- package/src/commands/monorepo-tsconfig.ts +156 -0
- package/src/commands/monorepo-upgrade.ts +131 -0
- package/src/commands/run-if-version-mismatch.ts +78 -0
- package/src/commands/sync-my-readme.ts +56 -0
- package/src/commands/test.ts +18 -0
- package/src/common/cache/escape-package-path.ts +6 -0
- package/src/common/cache/native.npm.ts +206 -0
- package/src/common/functions/cli.ts +145 -0
- package/src/common/functions/global-lifecycle.ts +40 -0
- package/src/common/git/git.ts +75 -0
- package/src/common/package-manager/constant.ts +1 -0
- package/src/common/package-manager/driver.abstract.ts +162 -0
- package/src/common/package-manager/driver.npm.ts +13 -0
- package/src/common/package-manager/driver.pnpm.ts +113 -0
- package/src/common/package-manager/functions.ts +117 -0
- package/src/common/package-manager/package-json.ts +56 -0
- package/src/common/package-manager/package-manager.ts +46 -0
- package/src/common/package-manager/proxy.ts +129 -0
- package/src/common/shared-jobs/cnpm-sync.ts +57 -0
- package/src/common/shared-jobs/detect-change-job.ts +76 -0
- package/src/common/shared-jobs/publish-package-version-job.ts +46 -0
- package/src/common/taball/decompress.ts +41 -0
- package/src/common/taball/file-download.ts +166 -0
- package/src/common/temp-work-folder.ts +80 -0
- package/src/common/version.generated.ts +18 -0
- package/src/common/version.generator.ts +15 -0
- package/src/global.d.ts +17 -0
- package/src/main.ts +144 -0
- package/src/tsconfig.json +11 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { createWorkspace, normalizePackageName, } from '@build-script/monorepo-lib';
|
|
2
|
+
import { Emitter, prettyPrintError } from '@idlebox/common';
|
|
3
|
+
import { BuilderDependencyGraph } from '@idlebox/dependency-graph';
|
|
4
|
+
import { logger } from '@idlebox/logger';
|
|
5
|
+
import { commandInPath, emptyDir, writeFileIfChangeSync } from '@idlebox/node';
|
|
6
|
+
import { cpSync, existsSync } from 'fs';
|
|
7
|
+
import { resolve } from 'path';
|
|
8
|
+
import { inspect } from 'util';
|
|
9
|
+
import { argv, CommandDefine, CSI, pArgS } from '../common/functions/cli.js';
|
|
10
|
+
import { PackageManagerUsageKind } from '../common/package-manager/driver.abstract.js';
|
|
11
|
+
import { increaseVersion } from '../common/package-manager/package-json.js';
|
|
12
|
+
import { createPackageManager } from '../common/package-manager/package-manager.js';
|
|
13
|
+
import { cnpmSyncNames } from '../common/shared-jobs/cnpm-sync.js';
|
|
14
|
+
import { executeChangeDetect } from '../common/shared-jobs/detect-change-job.js';
|
|
15
|
+
export class Command extends CommandDefine {
|
|
16
|
+
_usage = `${pArgS('--debug')} ${pArgS('--dry')}`;
|
|
17
|
+
_description = '在monorepo中按照依赖顺序发布修改过的包';
|
|
18
|
+
_help = '';
|
|
19
|
+
_arguments = {
|
|
20
|
+
'--debug': { flag: true, description: '详细输出模式' },
|
|
21
|
+
'--dry': { flag: true, description: '仅检查修改,不发布(仍会修改version字段)' },
|
|
22
|
+
'--private': { flag: false, description: '即使private=true也执行' },
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
let indexDisplay = 0;
|
|
26
|
+
class BuildPackageJob {
|
|
27
|
+
state;
|
|
28
|
+
project;
|
|
29
|
+
workspace;
|
|
30
|
+
_onSuccess = new Emitter();
|
|
31
|
+
onSuccess = this._onSuccess.event;
|
|
32
|
+
_onFailed = new Emitter();
|
|
33
|
+
onFailed = this._onFailed.event;
|
|
34
|
+
_onRunning = new Emitter();
|
|
35
|
+
onRunning = this._onRunning.event;
|
|
36
|
+
shouldPublish = '';
|
|
37
|
+
constructor(state, project, workspace) {
|
|
38
|
+
this.state = state;
|
|
39
|
+
this.project = project;
|
|
40
|
+
this.workspace = workspace;
|
|
41
|
+
this.onSuccess(() => {
|
|
42
|
+
indexDisplay++;
|
|
43
|
+
const { length } = this.state;
|
|
44
|
+
const w = length.toFixed(0).length;
|
|
45
|
+
console.log(`📦 [${indexDisplay.toFixed(0).padStart(w)}/${length}] ${this.project.name}`);
|
|
46
|
+
console.log(this.logText.join('\n'));
|
|
47
|
+
this.logText.length = 0;
|
|
48
|
+
});
|
|
49
|
+
this.onFailed((e) => {
|
|
50
|
+
indexDisplay++;
|
|
51
|
+
const { length } = this.state;
|
|
52
|
+
const w = length.toFixed(0).length;
|
|
53
|
+
console.log(`📦 [${indexDisplay.toFixed(0).padStart(w)}/${length}] ${this.project.name}`);
|
|
54
|
+
console.log(this.logText.join('\n'));
|
|
55
|
+
prettyPrintError('❌pack failed', e);
|
|
56
|
+
this.logText.length = 0;
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
get name() {
|
|
60
|
+
return this.project.name;
|
|
61
|
+
}
|
|
62
|
+
getPackagePath() {
|
|
63
|
+
return this.shouldPublish || undefined;
|
|
64
|
+
}
|
|
65
|
+
async execute() {
|
|
66
|
+
this._onRunning.fire();
|
|
67
|
+
this.log(` 🔍 ${CSI}38;5;14m检查包${CSI}0m`);
|
|
68
|
+
const pm = await createPackageManager(PackageManagerUsageKind.Write, this.workspace, this.project.absolute);
|
|
69
|
+
const { changedFiles, hasChange, remoteVersion } = await executeChangeDetect(pm, {});
|
|
70
|
+
let shouldPublish = hasChange || changedFiles.length > 0;
|
|
71
|
+
let localVersion = this.project.packageJson.version;
|
|
72
|
+
if (hasChange) {
|
|
73
|
+
const packageJson = await pm.loadPackageJson();
|
|
74
|
+
localVersion = await increaseVersion(packageJson, remoteVersion || '0.0.0');
|
|
75
|
+
this.log(' ✍️ 已修改本地包版本\n');
|
|
76
|
+
}
|
|
77
|
+
if (!shouldPublish) {
|
|
78
|
+
this.log(` ✨ ${CSI}38;5;10m未发现修改${CSI}0m\n`);
|
|
79
|
+
this._onSuccess.fire();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
this.log(` 🔄 打包文件`);
|
|
83
|
+
const tempFile = resolve(this.workspace.temp, `publish/${normalizePackageName(this.project.name)}-${localVersion}.tgz`);
|
|
84
|
+
this.shouldPublish = await pm.pack(tempFile);
|
|
85
|
+
if (remoteVersion) {
|
|
86
|
+
this.log(` 🎈 即将发布新版本 "${this.project.packageJson.version}" 以更新远程版本 "${remoteVersion}"`);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.log(` 🎈 即将发布初始版本 "${this.project.packageJson.version}"`);
|
|
90
|
+
}
|
|
91
|
+
this._onSuccess.fire();
|
|
92
|
+
}
|
|
93
|
+
logText = [];
|
|
94
|
+
log(text) {
|
|
95
|
+
this.logText.push(text);
|
|
96
|
+
}
|
|
97
|
+
[inspect.custom]() {
|
|
98
|
+
// TODO
|
|
99
|
+
return '~~~~~~~~';
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function options() {
|
|
103
|
+
const dryRun = argv.flag('--dry') > 0;
|
|
104
|
+
return {
|
|
105
|
+
dryRun: dryRun,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
export async function main() {
|
|
109
|
+
const workspace = await createWorkspace();
|
|
110
|
+
await workspace.decoupleDependencies();
|
|
111
|
+
const temp = resolve(workspace.temp, 'publish');
|
|
112
|
+
await emptyDir(temp);
|
|
113
|
+
const projects = await workspace.listPackages();
|
|
114
|
+
const concurrency = argv.flag(['--debug', '-d']) > 0 ? 1 : 10;
|
|
115
|
+
const graph = new BuilderDependencyGraph(concurrency, logger);
|
|
116
|
+
const opts = options();
|
|
117
|
+
const shouldPublishProjects = projects.filter((project) => {
|
|
118
|
+
if (!project.packageJson.name)
|
|
119
|
+
return false;
|
|
120
|
+
if (project.packageJson.private) {
|
|
121
|
+
console.log(`📦 ${project.name}`);
|
|
122
|
+
console.log(` 🛑 跳过,private=true: ${project.name}`);
|
|
123
|
+
graph.addEmptyNode(project.name);
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
return true;
|
|
127
|
+
});
|
|
128
|
+
let index = 0;
|
|
129
|
+
for (const project of shouldPublishProjects) {
|
|
130
|
+
graph.addNode(project.name, project.devDependencies, new BuildPackageJob({
|
|
131
|
+
index,
|
|
132
|
+
length: shouldPublishProjects.length,
|
|
133
|
+
options: opts,
|
|
134
|
+
}, project, workspace));
|
|
135
|
+
index++;
|
|
136
|
+
}
|
|
137
|
+
await graph.startup();
|
|
138
|
+
const packageToPublish = [];
|
|
139
|
+
for (const id of graph.overallOrder) {
|
|
140
|
+
const node = graph.getNodeData(id);
|
|
141
|
+
if (!(node instanceof BuildPackageJob))
|
|
142
|
+
continue;
|
|
143
|
+
const pack = node.getPackagePath();
|
|
144
|
+
if (!pack)
|
|
145
|
+
continue;
|
|
146
|
+
packageToPublish.push({ name: node.name, pack });
|
|
147
|
+
}
|
|
148
|
+
console.log(`✅ 打包阶段结束,有 ${packageToPublish.length} 个包需要发布`);
|
|
149
|
+
if (opts.dryRun) {
|
|
150
|
+
console.log(`中断并退出(--dry)`);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const pm = await createPackageManager(PackageManagerUsageKind.Write, workspace, temp);
|
|
154
|
+
const npmrc = workspace.getNpmRCPath(true);
|
|
155
|
+
if (existsSync(npmrc)) {
|
|
156
|
+
cpSync(npmrc, resolve(temp, '.npmrc'));
|
|
157
|
+
writeFileIfChangeSync(resolve(temp, 'package.json'), '{}');
|
|
158
|
+
}
|
|
159
|
+
const w = packageToPublish.length.toFixed(0).length;
|
|
160
|
+
let published = [];
|
|
161
|
+
for (const { name, pack } of packageToPublish) {
|
|
162
|
+
console.log(`📦 [${(index + 1).toFixed(0).padStart(w)}/${packageToPublish.length}] ${name}`);
|
|
163
|
+
const r = await pm.uploadTarball(pack);
|
|
164
|
+
if (r.published) {
|
|
165
|
+
console.log(` 👌 已发布新版本 ${r.version}`);
|
|
166
|
+
published.push(name);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
console.log(` 🤔 版本号未改变 ${r.version}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
console.log(`🎉 所有任务完成,共发布了 ${published.length} 个包`);
|
|
173
|
+
if (await commandInPath('cnpm')) {
|
|
174
|
+
await cnpmSyncNames(published, true).catch();
|
|
175
|
+
}
|
|
176
|
+
console.log(` 🐱 已同步到 cnpm`);
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=monorepo-publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monorepo-publish.js","sourceRoot":"","sources":["../../src/commands/monorepo-publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CommandDefine } from '../common/functions/cli.js';
|
|
2
|
+
export declare class Command extends CommandDefine {
|
|
3
|
+
protected _usage: string;
|
|
4
|
+
protected _description: string;
|
|
5
|
+
protected _help: string;
|
|
6
|
+
protected _arguments: {
|
|
7
|
+
'--dev': {
|
|
8
|
+
flag: boolean;
|
|
9
|
+
description: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export declare function main(): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=monorepo-tsconfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monorepo-tsconfig.d.ts","sourceRoot":"","sources":["../../src/commands/monorepo-tsconfig.ts"],"names":[],"mappings":"AAOA,OAAO,EAAQ,aAAa,EAAS,MAAM,4BAA4B,CAAC;AAExE,qBAAa,OAAQ,SAAQ,aAAa;IACzC,UAAmB,MAAM,SAAuB;IAChD,UAAmB,YAAY,SAA2C;IAC1E,UAAmB,KAAK,SACiF;IACzG,UAAmB,UAAU;;;;;MAE3B;CACF;AAQD,wBAAsB,IAAI,kBA+GzB"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { createWorkspace } from '@build-script/monorepo-lib';
|
|
2
|
+
import { resolveExportPath } from '@idlebox/common';
|
|
3
|
+
import { loadJsonFile, writeJsonFile, writeJsonFileBack } from '@idlebox/json-edit';
|
|
4
|
+
import { logger } from '@idlebox/logger';
|
|
5
|
+
import { relativePath } from '@idlebox/node';
|
|
6
|
+
import { existsSync } from 'node:fs';
|
|
7
|
+
import { dirname, resolve } from 'node:path';
|
|
8
|
+
import { argv, CommandDefine, pArgS } from '../common/functions/cli.js';
|
|
9
|
+
export class Command extends CommandDefine {
|
|
10
|
+
_usage = `${pArgS('--dev')}`;
|
|
11
|
+
_description = '为所有项目的 tsconfig.json 添加 references 字段';
|
|
12
|
+
_help = `查找tsconfig.json和src/tsconfig.json\n 如果不在这里,可以在package.json中设置exports['./tsconfig.json'] = './xxxx'`;
|
|
13
|
+
_arguments = {
|
|
14
|
+
'--dev': { flag: true, description: '也将devDependencies中的包添加到references中' },
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const path_element_id = 'package-tools/monorepo-tsconfig';
|
|
18
|
+
export async function main() {
|
|
19
|
+
const includeDev = argv.flag('--dev') > 0;
|
|
20
|
+
const repo = await createWorkspace();
|
|
21
|
+
try {
|
|
22
|
+
await repo.requireGitClean();
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
logger.fatal(e.message);
|
|
26
|
+
}
|
|
27
|
+
const list = await repo.listPackages();
|
|
28
|
+
const configAbsMap = new Map();
|
|
29
|
+
const projNameMap = new Map();
|
|
30
|
+
// repo.root
|
|
31
|
+
logger.log(`在${list.length}个项目中搜索tsconfig.json文件...`);
|
|
32
|
+
for (const proj of list) {
|
|
33
|
+
projNameMap.set(proj.name, proj);
|
|
34
|
+
if (typeof proj.packageJson.exports === 'object' && proj.packageJson.exports['./tsconfig.json']) {
|
|
35
|
+
const file = resolveExportPath(proj.packageJson.exports['./tsconfig.json'], ['default']);
|
|
36
|
+
if (file) {
|
|
37
|
+
configAbsMap.set(proj, resolve(proj.absolute, file));
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
let file = resolve(proj.absolute, 'tsconfig.json');
|
|
42
|
+
if (existsSync(file)) {
|
|
43
|
+
configAbsMap.set(proj, file);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
file = resolve(proj.absolute, 'src', 'tsconfig.json');
|
|
47
|
+
if (existsSync(file)) {
|
|
48
|
+
configAbsMap.set(proj, file);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
logger.log(`未找到${proj.name}的tsconfig.json文件`);
|
|
52
|
+
}
|
|
53
|
+
const batchSave = new Map();
|
|
54
|
+
for (const [proj, tsconfig] of configAbsMap.entries()) {
|
|
55
|
+
logger.log(`正在处理${proj.name}的tsconfig.json文件...`);
|
|
56
|
+
const tsconfigJson = await loadJsonFile(tsconfig);
|
|
57
|
+
batchSave.set(proj, tsconfigJson);
|
|
58
|
+
if (!tsconfigJson.references)
|
|
59
|
+
tsconfigJson.references = [];
|
|
60
|
+
const references = tsconfigJson.references;
|
|
61
|
+
const workspaceDeps = filterByLink(proj.packageJson.dependencies);
|
|
62
|
+
if (includeDev) {
|
|
63
|
+
workspaceDeps.push(...filterByLink(proj.packageJson.devDependencies));
|
|
64
|
+
}
|
|
65
|
+
const knownPaths = [];
|
|
66
|
+
for (const name of workspaceDeps) {
|
|
67
|
+
const depProj = projNameMap.get(name);
|
|
68
|
+
if (!depProj) {
|
|
69
|
+
throw new Error(`在${proj.name}的package.json中存在未知依赖项目:${name}`);
|
|
70
|
+
}
|
|
71
|
+
const depTsconfig = configAbsMap.get(depProj);
|
|
72
|
+
if (!depTsconfig)
|
|
73
|
+
continue;
|
|
74
|
+
const path = relativePath(dirname(tsconfig), depTsconfig);
|
|
75
|
+
const added = addToSet(references, path);
|
|
76
|
+
if (added)
|
|
77
|
+
logger.log(` - 添加${path}`);
|
|
78
|
+
knownPaths.push(path);
|
|
79
|
+
}
|
|
80
|
+
for (const ref of references.toReversed()) {
|
|
81
|
+
if (ref.$id !== path_element_id)
|
|
82
|
+
continue;
|
|
83
|
+
if (knownPaths.includes(ref.path))
|
|
84
|
+
continue;
|
|
85
|
+
// 删除不再引用
|
|
86
|
+
const index = references.lastIndexOf(ref);
|
|
87
|
+
references.splice(index, 1);
|
|
88
|
+
logger.log(` - 删除${ref.path}`);
|
|
89
|
+
}
|
|
90
|
+
if (references.length === 0) {
|
|
91
|
+
tsconfigJson.references = undefined;
|
|
92
|
+
logger.log(` - 删除references字段`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
for (const [proj, tsconfigJson] of batchSave.entries()) {
|
|
96
|
+
const ch = await writeJsonFileBack(tsconfigJson);
|
|
97
|
+
logger.log(` - ${proj.name} ${ch ? '已修改' : '未修改'} tsconfig.json`);
|
|
98
|
+
}
|
|
99
|
+
const rootTsconfig = resolve(repo.root, 'tsconfig.everything.json');
|
|
100
|
+
const references = [];
|
|
101
|
+
for (const tsconfig of configAbsMap.values()) {
|
|
102
|
+
references.push({ path: relativePath(repo.root, tsconfig) });
|
|
103
|
+
}
|
|
104
|
+
await writeJsonFile(rootTsconfig, {
|
|
105
|
+
compilerOptions: {
|
|
106
|
+
esModuleInterop: true,
|
|
107
|
+
outDir: './lib',
|
|
108
|
+
moduleResolution: 'Node',
|
|
109
|
+
module: 'ESNext',
|
|
110
|
+
target: 'ESNext',
|
|
111
|
+
},
|
|
112
|
+
references,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
function addToSet(set, value) {
|
|
116
|
+
if (set.some((item) => item.path === value)) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
set.push({ $id: path_element_id, path: value });
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
function filterByLink(dependencies) {
|
|
123
|
+
// 只保留引用workspace的
|
|
124
|
+
if (!dependencies)
|
|
125
|
+
return [];
|
|
126
|
+
return Object.keys(dependencies).filter((dep) => {
|
|
127
|
+
const version = dependencies[dep];
|
|
128
|
+
return version.startsWith('workspace:');
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=monorepo-tsconfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monorepo-tsconfig.js","sourceRoot":"","sources":["../../src/commands/monorepo-tsconfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CommandDefine } from '../common/functions/cli.js';
|
|
2
|
+
export declare class Command extends CommandDefine {
|
|
3
|
+
protected _usage: string;
|
|
4
|
+
protected _description: string;
|
|
5
|
+
protected _help: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function main(): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=monorepo-upgrade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monorepo-upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/monorepo-upgrade.ts"],"names":[],"mappings":"AAIA,OAAO,EAAQ,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAKjE,qBAAa,OAAQ,SAAQ,aAAa;IACzC,UAAmB,MAAM,SAAM;IAC/B,UAAmB,YAAY,SAA4B;IAC3D,UAAmB,KAAK,SAAuB;CAC/C;AAED,wBAAsB,IAAI,kBA4DzB"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { loadJsonFile, writeJsonFileBack } from '@idlebox/json-edit';
|
|
2
|
+
import { logger } from '@idlebox/logger';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
import { argv, CommandDefine } from '../common/functions/cli.js';
|
|
5
|
+
import { PackageManagerUsageKind } from '../common/package-manager/driver.abstract.js';
|
|
6
|
+
import { resolveNpm, splitAliasVersion, splitPackageSpecSimple } from '../common/package-manager/functions.js';
|
|
7
|
+
import { createPackageManager } from '../common/package-manager/package-manager.js';
|
|
8
|
+
export class Command extends CommandDefine {
|
|
9
|
+
_usage = '';
|
|
10
|
+
_description = '更新monorepo中各个项目的所有依赖版本';
|
|
11
|
+
_help = '被更新的包必须没有或者用^作为前缀';
|
|
12
|
+
}
|
|
13
|
+
export async function main() {
|
|
14
|
+
const dryRun = argv.flag('--dry') > 0;
|
|
15
|
+
const skipUpdate = argv.flag('--skip-update') > 0;
|
|
16
|
+
const packageManager = await createPackageManager(PackageManagerUsageKind.Read);
|
|
17
|
+
const projects = await packageManager.workspace.listPackages();
|
|
18
|
+
logger.log('Collecting local project versions:');
|
|
19
|
+
const alldeps = {};
|
|
20
|
+
for (const project of projects) {
|
|
21
|
+
const myDeps = { ...project.packageJson.dependencies, ...project.packageJson.devDependencies };
|
|
22
|
+
Object.assign(alldeps, filterDependencyToUpgrade(myDeps));
|
|
23
|
+
const size = Object.keys(myDeps).length;
|
|
24
|
+
logger.log(` * ${project.name} - ${size} dep${size > 1 ? 's' : ''}`);
|
|
25
|
+
}
|
|
26
|
+
logger.log('Resolving npm registry:');
|
|
27
|
+
const map = await resolveNpm(new Map(Object.entries(alldeps)));
|
|
28
|
+
logger.log('Write changed files:');
|
|
29
|
+
let hasSomeChange = 0;
|
|
30
|
+
for (const project of projects) {
|
|
31
|
+
const packageJson = await loadJsonFile(resolve(project.absolute, 'package.json'));
|
|
32
|
+
let numChange = 0;
|
|
33
|
+
numChange += update(project, packageJson.dependencies, map);
|
|
34
|
+
numChange += update(project, packageJson.devDependencies, map);
|
|
35
|
+
if (dryRun) {
|
|
36
|
+
logger.log(` * ${project.name} - ${numChange} change${numChange > 1 ? 's' : ''}`);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
const changed = await writeJsonFileBack(packageJson);
|
|
40
|
+
if (changed) {
|
|
41
|
+
logger.log(` * ${project.name} - ${numChange} change${numChange > 1 ? 's' : ''}`);
|
|
42
|
+
}
|
|
43
|
+
hasSomeChange += numChange;
|
|
44
|
+
}
|
|
45
|
+
if (dryRun) {
|
|
46
|
+
logger.log('dry-run: quit now.');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (hasSomeChange === 0) {
|
|
50
|
+
logger.log('OHHHH! No update!');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
logger.log('Delete temp file(s):');
|
|
54
|
+
if (skipUpdate) {
|
|
55
|
+
logger.warn(`You should run "${packageManager.binary} update" now`);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
await packageManager.install();
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* @param target 被更新的dependencies对象
|
|
62
|
+
* @param map 解析后的版本号表
|
|
63
|
+
*/
|
|
64
|
+
function update(project, target, map) {
|
|
65
|
+
let changed = 0;
|
|
66
|
+
logger.log(`updating: ${project.name}`);
|
|
67
|
+
if (!target)
|
|
68
|
+
return changed;
|
|
69
|
+
for (const [name, currVer] of Object.entries(target)) {
|
|
70
|
+
if (currVer.startsWith('workspace:'))
|
|
71
|
+
continue;
|
|
72
|
+
let newVer = map.get(name);
|
|
73
|
+
if (currVer.startsWith('npm:')) {
|
|
74
|
+
// package alias
|
|
75
|
+
const [alias] = splitPackageSpecSimple(currVer.substring(4));
|
|
76
|
+
newVer = map.get(alias);
|
|
77
|
+
if (!newVer) {
|
|
78
|
+
// console.log(' - no version [%s] current [%s]', item, target[item]);
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
newVer = `npm:${alias}@${newVer}`;
|
|
82
|
+
}
|
|
83
|
+
if (currVer === newVer)
|
|
84
|
+
continue;
|
|
85
|
+
if (newVer) {
|
|
86
|
+
console.log(' - update package [%s] from [%s] to [%s]', name, currVer, newVer);
|
|
87
|
+
target[name] = newVer;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
// console.log(' - no version [%s] current [%s]', item, target[item]);
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
changed++;
|
|
94
|
+
}
|
|
95
|
+
return changed;
|
|
96
|
+
}
|
|
97
|
+
function filterDependencyToUpgrade(map) {
|
|
98
|
+
const clone = {};
|
|
99
|
+
for (const [name, version] of Object.entries(map)) {
|
|
100
|
+
if (version === '*' || version === '') {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const [alias, ver] = splitAliasVersion(version);
|
|
104
|
+
if (ver) {
|
|
105
|
+
clone[alias || name] = ver;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return clone;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=monorepo-upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monorepo-upgrade.js","sourceRoot":"","sources":["../../src/commands/monorepo-upgrade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { IArgsReaderApi } from '@idlebox/args';
|
|
2
|
+
import { CommandDefine } from '../common/functions/cli.js';
|
|
3
|
+
export declare class Command extends CommandDefine {
|
|
4
|
+
protected _usage: string;
|
|
5
|
+
protected _description: string;
|
|
6
|
+
protected _help: string;
|
|
7
|
+
protected _arguments: {
|
|
8
|
+
'--no-cache': {
|
|
9
|
+
flag: boolean;
|
|
10
|
+
description: string;
|
|
11
|
+
};
|
|
12
|
+
'--flush': {
|
|
13
|
+
flag: boolean;
|
|
14
|
+
description: string;
|
|
15
|
+
};
|
|
16
|
+
'--newer': {
|
|
17
|
+
flag: boolean;
|
|
18
|
+
description: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export declare function main(argv: IArgsReaderApi): Promise<0 | 22>;
|
|
23
|
+
//# sourceMappingURL=run-if-version-mismatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-if-version-mismatch.d.ts","sourceRoot":"","sources":["../../src/commands/run-if-version-mismatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAMpD,OAAO,EAAE,aAAa,EAA8B,MAAM,4BAA4B,CAAC;AAMvF,qBAAa,OAAQ,SAAQ,aAAa;IACzC,UAAmB,MAAM,SAAqF;IAC9G,UAAmB,YAAY,SAAmB;IAClD,UAAmB,KAAK,SAEvB;IACD,UAAmB,UAAU;;;;;;;;;;;;;MAI3B;CACF;AACD,wBAAsB,IAAI,CAAC,IAAI,EAAE,cAAc,mBAqD9C"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { logger } from '@idlebox/logger';
|
|
2
|
+
import { checkChildProcessResult } from '@idlebox/node';
|
|
3
|
+
import { execa } from 'execa';
|
|
4
|
+
import { lt } from 'semver';
|
|
5
|
+
import { CacheMode } from '../common/cache/native.npm.js';
|
|
6
|
+
import { CommandDefine, distTagInput, pArgS, pDesc } from '../common/functions/cli.js';
|
|
7
|
+
import { PackageManagerUsageKind } from '../common/package-manager/driver.abstract.js';
|
|
8
|
+
import { createPackageManager } from '../common/package-manager/package-manager.js';
|
|
9
|
+
process.env.COREPACK_ENABLE_STRICT = '0';
|
|
10
|
+
export class Command extends CommandDefine {
|
|
11
|
+
_usage = `${pArgS('--no-cache')} ${pArgS('--flush')} \x1B[38;5;9m--\x1B[0m command to run`;
|
|
12
|
+
_description = '如果版本号改变,则运行命令';
|
|
13
|
+
_help = `${pDesc('如果package.json中的version与npm上的版本(latest)不一致,则运行命令')}
|
|
14
|
+
注意: 命令行中的"--"是必须的
|
|
15
|
+
`;
|
|
16
|
+
_arguments = {
|
|
17
|
+
'--no-cache': { flag: true, description: '禁用缓存' },
|
|
18
|
+
'--flush': { flag: true, description: '程序成功退出时自动删除npm缓存' },
|
|
19
|
+
'--newer': { flag: true, description: '只有在本地版本号大于远程版本号时才运行(默认只要不同就运行)' },
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export async function main(argv) {
|
|
23
|
+
const noCache = argv.flag('--no-cache') > 0;
|
|
24
|
+
const flushCache = argv.flag('--flush') > 0;
|
|
25
|
+
const onlyNewer = argv.flag('--newer') > 0;
|
|
26
|
+
const commands = argv.unused();
|
|
27
|
+
if (commands.length === 0 || !process.argv.includes('--')) {
|
|
28
|
+
logger.error('参数中必须包含"--",并且后面跟随要运行的命令。\n 示例: run-if-version-mismatch --quiet -- pnpm publish');
|
|
29
|
+
return 22;
|
|
30
|
+
}
|
|
31
|
+
logger.debug('即将运行命令: %s', commands.join(' '));
|
|
32
|
+
const packageManager = await createPackageManager(PackageManagerUsageKind.Read);
|
|
33
|
+
const packagePath = await packageManager.workspace.getNearestPackage(process.cwd());
|
|
34
|
+
logger.log('工作目录: %s', packagePath);
|
|
35
|
+
const packageJson = await packageManager.loadPackageJson();
|
|
36
|
+
logger.log('包名: %s', packageJson.name);
|
|
37
|
+
const cache = await packageManager.createCacheHandler();
|
|
38
|
+
const pkg = await cache.fetchVersion(packageJson.name, distTagInput, noCache ? CacheMode.ForceNew : CacheMode.Normal);
|
|
39
|
+
const rversion = pkg?.version;
|
|
40
|
+
logger.log('远程版本: %s', rversion);
|
|
41
|
+
if (rversion) {
|
|
42
|
+
if (rversion === packageJson.version) {
|
|
43
|
+
logger.log('本地版本 (%s) === 远程版本 (%s),无需操作,直接退出。', packageJson.version, rversion);
|
|
44
|
+
return 0;
|
|
45
|
+
}
|
|
46
|
+
if (onlyNewer && lt(packageJson.version, rversion)) {
|
|
47
|
+
logger.log('本地版本 (%s) < 远程版本 (%s),无需操作,直接退出。', packageJson.version, rversion);
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
logger.log('本地版本 (%s) !== 远程版本 (%s),开始执行命令!', packageJson.version, rversion);
|
|
52
|
+
const r = await execa(commands[0], commands.slice(1), {
|
|
53
|
+
cwd: packagePath,
|
|
54
|
+
stdout: 'inherit',
|
|
55
|
+
stderr: 'inherit',
|
|
56
|
+
});
|
|
57
|
+
checkChildProcessResult(r);
|
|
58
|
+
if (flushCache) {
|
|
59
|
+
logger.log('刷新npm缓存...');
|
|
60
|
+
await cache.deleteMetadata(packageJson.name);
|
|
61
|
+
}
|
|
62
|
+
return 0;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=run-if-version-mismatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-if-version-mismatch.js","sourceRoot":"","sources":["../../src/commands/run-if-version-mismatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CommandDefine } from '../common/functions/cli.js';
|
|
2
|
+
export declare class Command extends CommandDefine {
|
|
3
|
+
protected _usage: string;
|
|
4
|
+
protected _description: string;
|
|
5
|
+
protected _help: string;
|
|
6
|
+
isHidden: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function main(): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=sync-my-readme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-my-readme.d.ts","sourceRoot":"","sources":["../../src/commands/sync-my-readme.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,qBAAa,OAAQ,SAAQ,aAAa;IACzC,UAAmB,MAAM,SAAM;IAC/B,UAAmB,YAAY,SAAY;IAC3C,UAAmB,KAAK,SAAM;IACd,QAAQ,UAAQ;CAChC;AAED,wBAAsB,IAAI,kBA2CzB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { findUpUntilSync, writeFileIfChangeSync } from '@idlebox/node';
|
|
2
|
+
import { execaNode } from 'execa';
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
import { CommandDefine } from '../common/functions/cli.js';
|
|
5
|
+
export class Command extends CommandDefine {
|
|
6
|
+
_usage = '';
|
|
7
|
+
_description = '内部开发命令';
|
|
8
|
+
_help = '';
|
|
9
|
+
isHidden = true;
|
|
10
|
+
}
|
|
11
|
+
export async function main() {
|
|
12
|
+
const result = await execaNode(process.argv[1], ['--help'], { all: true, encoding: 'utf8', stdio: 'pipe' });
|
|
13
|
+
const usageText = result.all.trim().replace(/\u001b.+?m/gu, '');
|
|
14
|
+
const readmeFile = findUpUntilSync({ file: 'README.md', from: import.meta.dirname });
|
|
15
|
+
if (!readmeFile) {
|
|
16
|
+
throw new Error('README.md not found');
|
|
17
|
+
}
|
|
18
|
+
const content = readFileSync(readmeFile, { encoding: 'utf8' }).split('\n');
|
|
19
|
+
const output_lines = [];
|
|
20
|
+
const start = '```text id="usage"';
|
|
21
|
+
const end = '```';
|
|
22
|
+
let found_start = false;
|
|
23
|
+
let found_end = false;
|
|
24
|
+
for (const line of content) {
|
|
25
|
+
if (!found_start && line === start) {
|
|
26
|
+
output_lines.push(line);
|
|
27
|
+
output_lines.push(usageText);
|
|
28
|
+
found_start = true;
|
|
29
|
+
}
|
|
30
|
+
else if (found_start && !found_end) {
|
|
31
|
+
if (line === end) {
|
|
32
|
+
output_lines.push(line);
|
|
33
|
+
found_end = true;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
output_lines.push(line);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (!found_start || !found_end) {
|
|
41
|
+
throw new Error(`Cannot find usage section in ${readmeFile}`);
|
|
42
|
+
}
|
|
43
|
+
const ch = writeFileIfChangeSync(readmeFile, output_lines.join('\n'));
|
|
44
|
+
if (ch) {
|
|
45
|
+
console.log(`Updated ${readmeFile}`);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
console.log(`No changes made to ${readmeFile}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=sync-my-readme.js.map
|