@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.
Files changed (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +136 -0
  3. package/config/rig.json +6 -0
  4. package/lib/command-file-map.generated.d.ts +23 -0
  5. package/lib/command-file-map.generated.d.ts.map +1 -0
  6. package/lib/command-file-map.generated.js +27 -0
  7. package/lib/command-file-map.generated.js.map +1 -0
  8. package/lib/commands/detect-package-change.d.ts +14 -0
  9. package/lib/commands/detect-package-change.d.ts.map +1 -0
  10. package/lib/commands/detect-package-change.js +55 -0
  11. package/lib/commands/detect-package-change.js.map +1 -0
  12. package/lib/commands/monorepo-bump-version.d.ts +22 -0
  13. package/lib/commands/monorepo-bump-version.d.ts.map +1 -0
  14. package/lib/commands/monorepo-bump-version.js +121 -0
  15. package/lib/commands/monorepo-bump-version.js.map +1 -0
  16. package/lib/commands/monorepo-cnpm-sync.d.ts +8 -0
  17. package/lib/commands/monorepo-cnpm-sync.d.ts.map +1 -0
  18. package/lib/commands/monorepo-cnpm-sync.js +16 -0
  19. package/lib/commands/monorepo-cnpm-sync.js.map +1 -0
  20. package/lib/commands/monorepo-invalid.d.ts +8 -0
  21. package/lib/commands/monorepo-invalid.d.ts.map +1 -0
  22. package/lib/commands/monorepo-invalid.js +19 -0
  23. package/lib/commands/monorepo-invalid.js.map +1 -0
  24. package/lib/commands/monorepo-list.d.ts +22 -0
  25. package/lib/commands/monorepo-list.d.ts.map +1 -0
  26. package/lib/commands/monorepo-list.js +40 -0
  27. package/lib/commands/monorepo-list.js.map +1 -0
  28. package/lib/commands/monorepo-publish.d.ts +22 -0
  29. package/lib/commands/monorepo-publish.d.ts.map +1 -0
  30. package/lib/commands/monorepo-publish.js +178 -0
  31. package/lib/commands/monorepo-publish.js.map +1 -0
  32. package/lib/commands/monorepo-tsconfig.d.ts +14 -0
  33. package/lib/commands/monorepo-tsconfig.d.ts.map +1 -0
  34. package/lib/commands/monorepo-tsconfig.js +131 -0
  35. package/lib/commands/monorepo-tsconfig.js.map +1 -0
  36. package/lib/commands/monorepo-upgrade.d.ts +8 -0
  37. package/lib/commands/monorepo-upgrade.d.ts.map +1 -0
  38. package/lib/commands/monorepo-upgrade.js +110 -0
  39. package/lib/commands/monorepo-upgrade.js.map +1 -0
  40. package/lib/commands/run-if-version-mismatch.d.ts +23 -0
  41. package/lib/commands/run-if-version-mismatch.d.ts.map +1 -0
  42. package/lib/commands/run-if-version-mismatch.js +64 -0
  43. package/lib/commands/run-if-version-mismatch.js.map +1 -0
  44. package/lib/commands/sync-my-readme.d.ts +9 -0
  45. package/lib/commands/sync-my-readme.d.ts.map +1 -0
  46. package/lib/commands/sync-my-readme.js +51 -0
  47. package/lib/commands/sync-my-readme.js.map +1 -0
  48. package/lib/commands/test.d.ts +9 -0
  49. package/lib/commands/test.d.ts.map +1 -0
  50. package/lib/commands/test.js +16 -0
  51. package/lib/commands/test.js.map +1 -0
  52. package/lib/common/cache/escape-package-path.d.ts +2 -0
  53. package/lib/common/cache/escape-package-path.d.ts.map +1 -0
  54. package/lib/common/cache/escape-package-path.js +7 -0
  55. package/lib/common/cache/escape-package-path.js.map +1 -0
  56. package/lib/common/cache/native.npm.d.ts +50 -0
  57. package/lib/common/cache/native.npm.d.ts.map +1 -0
  58. package/lib/common/cache/native.npm.js +162 -0
  59. package/lib/common/cache/native.npm.js.map +1 -0
  60. package/lib/common/functions/cli.d.ts +85 -0
  61. package/lib/common/functions/cli.d.ts.map +1 -0
  62. package/lib/common/functions/cli.js +110 -0
  63. package/lib/common/functions/cli.js.map +1 -0
  64. package/lib/common/functions/global-lifecycle.d.ts +5 -0
  65. package/lib/common/functions/global-lifecycle.d.ts.map +1 -0
  66. package/lib/common/functions/global-lifecycle.js +34 -0
  67. package/lib/common/functions/global-lifecycle.js.map +1 -0
  68. package/lib/common/git/git.d.ts +12 -0
  69. package/lib/common/git/git.d.ts.map +1 -0
  70. package/lib/common/git/git.js +65 -0
  71. package/lib/common/git/git.js.map +1 -0
  72. package/lib/common/package-manager/constant.d.ts +2 -0
  73. package/lib/common/package-manager/constant.d.ts.map +1 -0
  74. package/lib/common/package-manager/constant.js +2 -0
  75. package/lib/common/package-manager/constant.js.map +1 -0
  76. package/lib/common/package-manager/driver.abstract.d.ts +41 -0
  77. package/lib/common/package-manager/driver.abstract.d.ts.map +1 -0
  78. package/lib/common/package-manager/driver.abstract.js +138 -0
  79. package/lib/common/package-manager/driver.abstract.js.map +1 -0
  80. package/lib/common/package-manager/driver.npm.d.ts +7 -0
  81. package/lib/common/package-manager/driver.npm.d.ts.map +1 -0
  82. package/lib/common/package-manager/driver.npm.js +11 -0
  83. package/lib/common/package-manager/driver.npm.js.map +1 -0
  84. package/lib/common/package-manager/driver.pnpm.d.ts +7 -0
  85. package/lib/common/package-manager/driver.pnpm.d.ts.map +1 -0
  86. package/lib/common/package-manager/driver.pnpm.js +83 -0
  87. package/lib/common/package-manager/driver.pnpm.js.map +1 -0
  88. package/lib/common/package-manager/functions.d.ts +13 -0
  89. package/lib/common/package-manager/functions.d.ts.map +1 -0
  90. package/lib/common/package-manager/functions.js +95 -0
  91. package/lib/common/package-manager/functions.js.map +1 -0
  92. package/lib/common/package-manager/package-json.d.ts +5 -0
  93. package/lib/common/package-manager/package-json.d.ts.map +1 -0
  94. package/lib/common/package-manager/package-json.js +50 -0
  95. package/lib/common/package-manager/package-json.js.map +1 -0
  96. package/lib/common/package-manager/package-manager.d.ts +5 -0
  97. package/lib/common/package-manager/package-manager.d.ts.map +1 -0
  98. package/lib/common/package-manager/package-manager.js +27 -0
  99. package/lib/common/package-manager/package-manager.js.map +1 -0
  100. package/lib/common/package-manager/proxy.d.ts +5 -0
  101. package/lib/common/package-manager/proxy.d.ts.map +1 -0
  102. package/lib/common/package-manager/proxy.js +116 -0
  103. package/lib/common/package-manager/proxy.js.map +1 -0
  104. package/lib/common/shared-jobs/cnpm-sync.d.ts +4 -0
  105. package/lib/common/shared-jobs/cnpm-sync.d.ts.map +1 -0
  106. package/lib/common/shared-jobs/cnpm-sync.js +52 -0
  107. package/lib/common/shared-jobs/cnpm-sync.js.map +1 -0
  108. package/lib/common/shared-jobs/detect-change-job.d.ts +12 -0
  109. package/lib/common/shared-jobs/detect-change-job.d.ts.map +1 -0
  110. package/lib/common/shared-jobs/detect-change-job.js +52 -0
  111. package/lib/common/shared-jobs/detect-change-job.js.map +1 -0
  112. package/lib/common/shared-jobs/publish-package-version-job.d.ts +4 -0
  113. package/lib/common/shared-jobs/publish-package-version-job.d.ts.map +1 -0
  114. package/lib/common/shared-jobs/publish-package-version-job.js +40 -0
  115. package/lib/common/shared-jobs/publish-package-version-job.js.map +1 -0
  116. package/lib/common/taball/decompress.d.ts +2 -0
  117. package/lib/common/taball/decompress.d.ts.map +1 -0
  118. package/lib/common/taball/decompress.js +39 -0
  119. package/lib/common/taball/decompress.js.map +1 -0
  120. package/lib/common/taball/file-download.d.ts +15 -0
  121. package/lib/common/taball/file-download.d.ts.map +1 -0
  122. package/lib/common/taball/file-download.js +137 -0
  123. package/lib/common/taball/file-download.js.map +1 -0
  124. package/lib/common/temp-work-folder.d.ts +20 -0
  125. package/lib/common/temp-work-folder.d.ts.map +1 -0
  126. package/lib/common/temp-work-folder.js +68 -0
  127. package/lib/common/temp-work-folder.js.map +1 -0
  128. package/lib/common/version.generated.d.ts +12 -0
  129. package/lib/common/version.generated.d.ts.map +1 -0
  130. package/lib/common/version.generated.js +17 -0
  131. package/lib/common/version.generated.js.map +1 -0
  132. package/lib/main.d.ts +2 -0
  133. package/lib/main.d.ts.map +1 -0
  134. package/lib/main.js +115 -0
  135. package/lib/main.js.map +1 -0
  136. package/lib/tsconfig.tsbuildinfo +1 -0
  137. package/load.js +12 -0
  138. package/package.json +59 -0
  139. package/src/command-file-map.generated.ts +28 -0
  140. package/src/command-file-map.generator.ts +23 -0
  141. package/src/commands/detect-package-change.ts +57 -0
  142. package/src/commands/monorepo-bump-version.ts +152 -0
  143. package/src/commands/monorepo-cnpm-sync.ts +19 -0
  144. package/src/commands/monorepo-invalid.ts +22 -0
  145. package/src/commands/monorepo-list.ts +46 -0
  146. package/src/commands/monorepo-publish.ts +227 -0
  147. package/src/commands/monorepo-tsconfig.ts +156 -0
  148. package/src/commands/monorepo-upgrade.ts +131 -0
  149. package/src/commands/run-if-version-mismatch.ts +78 -0
  150. package/src/commands/sync-my-readme.ts +56 -0
  151. package/src/commands/test.ts +18 -0
  152. package/src/common/cache/escape-package-path.ts +6 -0
  153. package/src/common/cache/native.npm.ts +206 -0
  154. package/src/common/functions/cli.ts +145 -0
  155. package/src/common/functions/global-lifecycle.ts +40 -0
  156. package/src/common/git/git.ts +75 -0
  157. package/src/common/package-manager/constant.ts +1 -0
  158. package/src/common/package-manager/driver.abstract.ts +162 -0
  159. package/src/common/package-manager/driver.npm.ts +13 -0
  160. package/src/common/package-manager/driver.pnpm.ts +113 -0
  161. package/src/common/package-manager/functions.ts +117 -0
  162. package/src/common/package-manager/package-json.ts +56 -0
  163. package/src/common/package-manager/package-manager.ts +46 -0
  164. package/src/common/package-manager/proxy.ts +129 -0
  165. package/src/common/shared-jobs/cnpm-sync.ts +57 -0
  166. package/src/common/shared-jobs/detect-change-job.ts +76 -0
  167. package/src/common/shared-jobs/publish-package-version-job.ts +46 -0
  168. package/src/common/taball/decompress.ts +41 -0
  169. package/src/common/taball/file-download.ts +166 -0
  170. package/src/common/temp-work-folder.ts +80 -0
  171. package/src/common/version.generated.ts +18 -0
  172. package/src/common/version.generator.ts +15 -0
  173. package/src/global.d.ts +17 -0
  174. package/src/main.ts +144 -0
  175. 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":"AAAA,OAAO,EACN,eAAe,EACf,oBAAoB,GAGpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAqB,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAEjF,MAAM,OAAO,OAAQ,SAAQ,aAAa;IACtB,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;IACjD,YAAY,GAAG,yBAAyB,CAAC;IACzC,KAAK,GAAG,EAAE,CAAC;IACX,UAAU,GAAG;QAC/B,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE;QAChD,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,0BAA0B,EAAE;QAChE,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE;KAC9D,CAAC;CACF;AAQD,IAAI,YAAY,GAAG,CAAC,CAAC;AACrB,MAAM,eAAe;IAaF;IACA;IACA;IAdD,UAAU,GAAG,IAAI,OAAO,EAAQ,CAAC;IAClC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAEjC,SAAS,GAAG,IAAI,OAAO,EAAS,CAAC;IAClC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IAE/B,UAAU,GAAG,IAAI,OAAO,EAAQ,CAAC;IAClC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAE1C,aAAa,GAAG,EAAE,CAAC;IAE3B,YACkB,KAAa,EACb,OAAqB,EACrB,SAA4B;QAF5B,UAAK,GAAL,KAAK,CAAQ;QACb,YAAO,GAAP,OAAO,CAAc;QACrB,cAAS,GAAT,SAAS,CAAmB;QAE7C,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;YACnB,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;YAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1F,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;YACnB,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;YAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1F,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACrC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,cAAc;QACb,OAAO,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,cAAc,GAAG,IAAI,CAAC,CAAC;QAE7C,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5G,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,mBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACrF,IAAI,aAAa,GAAG,SAAS,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QACzD,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;QAEpD,IAAI,SAAS,EAAE,CAAC;YACf,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,eAAe,EAAE,CAAC;YAC/C,YAAY,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,aAAa,IAAI,OAAO,CAAC,CAAC;YAC5E,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;YACpB,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,gBAAgB,GAAG,MAAM,CAAC,CAAC;YAChD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO;QACR,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAExB,MAAM,QAAQ,GAAG,OAAO,CACvB,IAAI,CAAC,SAAS,CAAC,IAAI,EACnB,WAAW,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,YAAY,MAAM,CACxE,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE7C,IAAI,aAAa,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,cAAc,aAAa,GAAG,CAAC,CAAC;QAC7F,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAEgB,OAAO,GAAa,EAAE,CAAC;IACxC,GAAG,CAAC,IAAY;QACf,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,CAAC,OAAO,CAAC,MAAM,CAAC;QACf,OAAO;QACP,OAAO,UAAU,CAAC;IACnB,CAAC;CACD;AAED,SAAS,OAAO;IACf,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEtC,OAAO;QACN,MAAM,EAAE,MAAM;KACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI;IACzB,MAAM,SAAS,GAAG,MAAM,eAAe,EAAE,CAAC;IAC1C,MAAM,SAAS,CAAC,oBAAoB,EAAE,CAAC;IAEvC,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAErB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;IAEhD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAI,sBAAsB,CAAkB,WAAW,EAAE,MAAM,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,MAAM,qBAAqB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QACzD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAE5C,IAAI,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,2BAA2B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACvD,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,KAAK,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,OAAO,IAAI,qBAAqB,EAAE,CAAC;QAC7C,KAAK,CAAC,OAAO,CACZ,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,eAAe,EACvB,IAAI,eAAe,CAClB;YACC,KAAK;YACL,MAAM,EAAE,qBAAqB,CAAC,MAAM;YACpC,OAAO,EAAE,IAAI;SACb,EACD,OAAO,EACP,SAAS,CACT,CACD,CAAC;QAEF,KAAK,EAAE,CAAC;IACT,CAAC;IAED,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IAEtB,MAAM,gBAAgB,GAAqC,EAAE,CAAC;IAC9D,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC,IAAI,YAAY,eAAe,CAAC;YAAE,SAAS;QAEjD,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,cAAc,gBAAgB,CAAC,MAAM,SAAS,CAAC,CAAC;IAE5D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5B,OAAO;IACR,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACtF,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QACvC,qBAAqB,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACpD,IAAI,SAAS,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,gBAAgB,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QAC7F,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3C,CAAC;IACF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;IAErD,IAAI,MAAM,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC9B,CAAC"}
@@ -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