@build-script/package-tools 0.0.4 → 0.0.5
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/lib/command-file-map.generated.d.ts +2 -1
- package/lib/command-file-map.generated.d.ts.map +1 -1
- package/lib/command-file-map.generated.js +2 -1
- package/lib/command-file-map.generated.js.map +1 -1
- package/lib/commands/detect-package-change.d.ts.map +1 -1
- package/lib/commands/detect-package-change.js +3 -1
- package/lib/commands/detect-package-change.js.map +1 -1
- package/lib/commands/monorepo-bump-version.d.ts.map +1 -1
- package/lib/commands/monorepo-bump-version.js +13 -23
- package/lib/commands/monorepo-bump-version.js.map +1 -1
- package/lib/commands/monorepo-cnpm-sync.d.ts.map +1 -1
- package/lib/commands/monorepo-cnpm-sync.js +12 -2
- package/lib/commands/monorepo-cnpm-sync.js.map +1 -1
- package/lib/commands/monorepo-invalid.d.ts.map +1 -1
- package/lib/commands/monorepo-invalid.js +4 -2
- package/lib/commands/monorepo-invalid.js.map +1 -1
- package/lib/commands/monorepo-link-binaries.d.ts +22 -0
- package/lib/commands/monorepo-link-binaries.d.ts.map +1 -0
- package/lib/commands/monorepo-link-binaries.js +146 -0
- package/lib/commands/monorepo-link-binaries.js.map +1 -0
- package/lib/commands/monorepo-publish.d.ts.map +1 -1
- package/lib/commands/monorepo-publish.js +32 -35
- package/lib/commands/monorepo-publish.js.map +1 -1
- package/lib/commands/monorepo-tsconfig.d.ts.map +1 -1
- package/lib/commands/monorepo-tsconfig.js.map +1 -1
- package/lib/commands/monorepo-upgrade.d.ts.map +1 -1
- package/lib/commands/monorepo-upgrade.js +4 -2
- package/lib/commands/monorepo-upgrade.js.map +1 -1
- package/lib/commands/run-if-version-mismatch.d.ts.map +1 -1
- package/lib/commands/run-if-version-mismatch.js +6 -4
- package/lib/commands/run-if-version-mismatch.js.map +1 -1
- package/lib/commands/test.d.ts.map +1 -1
- package/lib/commands/test.js +3 -1
- package/lib/commands/test.js.map +1 -1
- package/lib/common/cache/native.npm.js +2 -2
- package/lib/common/cache/native.npm.js.map +1 -1
- package/lib/common/functions/cli.d.ts +3 -0
- package/lib/common/functions/cli.d.ts.map +1 -1
- package/lib/common/functions/cli.js.map +1 -1
- package/lib/common/git/git.d.ts.map +1 -1
- package/lib/common/git/git.js +3 -3
- package/lib/common/git/git.js.map +1 -1
- package/lib/common/package-manager/driver.abstract.d.ts +3 -3
- package/lib/common/package-manager/driver.abstract.d.ts.map +1 -1
- package/lib/common/package-manager/driver.abstract.js +2 -4
- package/lib/common/package-manager/driver.abstract.js.map +1 -1
- package/lib/common/package-manager/driver.pnpm.d.ts.map +1 -1
- package/lib/common/package-manager/driver.pnpm.js +6 -3
- package/lib/common/package-manager/driver.pnpm.js.map +1 -1
- package/lib/common/package-manager/functions.d.ts.map +1 -1
- package/lib/common/package-manager/functions.js.map +1 -1
- package/lib/common/package-manager/package-manager.d.ts +2 -2
- package/lib/common/package-manager/package-manager.d.ts.map +1 -1
- package/lib/common/package-manager/package-manager.js +0 -3
- package/lib/common/package-manager/package-manager.js.map +1 -1
- package/lib/common/package-manager/proxy.js +1 -1
- package/lib/common/package-manager/proxy.js.map +1 -1
- package/lib/common/shared-jobs/clear-cache.d.ts +3 -0
- package/lib/common/shared-jobs/clear-cache.d.ts.map +1 -0
- package/lib/common/shared-jobs/clear-cache.js +14 -0
- package/lib/common/shared-jobs/clear-cache.js.map +1 -0
- package/lib/common/shared-jobs/cnpm-sync.d.ts +0 -2
- package/lib/common/shared-jobs/cnpm-sync.d.ts.map +1 -1
- package/lib/common/shared-jobs/cnpm-sync.js +1 -22
- package/lib/common/shared-jobs/cnpm-sync.js.map +1 -1
- package/lib/common/taball/decompress.d.ts.map +1 -1
- package/lib/common/taball/decompress.js +4 -1
- package/lib/common/taball/decompress.js.map +1 -1
- package/lib/common/taball/file-download.js +1 -6
- package/lib/common/taball/file-download.js.map +1 -1
- package/lib/common/temp-work-folder.d.ts +2 -2
- package/lib/common/temp-work-folder.d.ts.map +1 -1
- package/lib/common/temp-work-folder.js.map +1 -1
- package/lib/common/version.generated.d.ts +2 -2
- package/lib/common/version.generated.js +2 -2
- package/lib/main.js +1 -1
- package/lib/main.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -12
- package/src/command-file-map.generated.ts +2 -1
- package/src/command-file-map.generator.ts +2 -2
- package/src/commands/detect-package-change.ts +3 -1
- package/src/commands/monorepo-bump-version.ts +17 -28
- package/src/commands/monorepo-cnpm-sync.ts +14 -2
- package/src/commands/monorepo-invalid.ts +4 -2
- package/src/commands/monorepo-link-binaries.ts +168 -0
- package/src/commands/monorepo-publish.ts +39 -48
- package/src/commands/monorepo-tsconfig.ts +1 -2
- package/src/commands/monorepo-upgrade.ts +4 -3
- package/src/commands/run-if-version-mismatch.ts +7 -7
- package/src/commands/test.ts +3 -1
- package/src/common/cache/native.npm.ts +2 -2
- package/src/common/functions/cli.ts +3 -0
- package/src/common/git/git.ts +4 -9
- package/src/common/package-manager/driver.abstract.ts +4 -7
- package/src/common/package-manager/driver.pnpm.ts +8 -3
- package/src/common/package-manager/functions.ts +2 -12
- package/src/common/package-manager/package-manager.ts +3 -13
- package/src/common/package-manager/proxy.ts +1 -1
- package/src/common/shared-jobs/clear-cache.ts +14 -0
- package/src/common/shared-jobs/cnpm-sync.ts +1 -25
- package/src/common/taball/decompress.ts +3 -1
- package/src/common/taball/file-download.ts +3 -14
- package/src/common/temp-work-folder.ts +2 -2
- package/src/common/version.generated.ts +2 -2
- package/src/common/version.generator.ts +1 -1
- package/src/main.ts +2 -14
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@build-script/package-tools",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.5",
|
|
5
5
|
"bin": {
|
|
6
6
|
"package-tools": "./load.js",
|
|
7
7
|
"njspkg": "./load.js"
|
|
@@ -21,14 +21,14 @@
|
|
|
21
21
|
"source-map-support": "^0.5.21",
|
|
22
22
|
"targz": "^1.0.1",
|
|
23
23
|
"tiny-async-pool": "^2.1.0",
|
|
24
|
-
"@build-script/monorepo-lib": "^0.0.
|
|
25
|
-
"@idlebox/
|
|
26
|
-
"@idlebox/
|
|
27
|
-
"@idlebox/
|
|
28
|
-
"@idlebox/
|
|
29
|
-
"@idlebox/
|
|
30
|
-
"@idlebox/node": "^1.4.
|
|
31
|
-
"@idlebox/dependency-graph": "^0.0.
|
|
24
|
+
"@build-script/monorepo-lib": "^0.0.4",
|
|
25
|
+
"@idlebox/args": "^0.0.12",
|
|
26
|
+
"@idlebox/ensure-symlink": "^1.0.35",
|
|
27
|
+
"@idlebox/common": "^1.4.17",
|
|
28
|
+
"@idlebox/logger": "^0.0.5",
|
|
29
|
+
"@idlebox/json-edit": "^0.0.4",
|
|
30
|
+
"@idlebox/node": "^1.4.10",
|
|
31
|
+
"@idlebox/dependency-graph": "^0.0.4"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@rushstack/heft": "^0.74.0",
|
|
@@ -41,10 +41,10 @@
|
|
|
41
41
|
"@types/targz": "^1.0.5",
|
|
42
42
|
"@types/tiny-async-pool": "^2.0.3",
|
|
43
43
|
"@types/tinycolor2": "^1.4.6",
|
|
44
|
-
"@build-script/codegen": "^1.0.
|
|
44
|
+
"@build-script/codegen": "^1.0.5",
|
|
45
|
+
"@build-script/single-dog-asset": "^1.0.38",
|
|
45
46
|
"@internal/local-rig": "^1.0.1",
|
|
46
|
-
"@
|
|
47
|
-
"@mpis/run": "^0.0.4"
|
|
47
|
+
"@mpis/run": "^0.0.5"
|
|
48
48
|
},
|
|
49
49
|
"license": "MIT",
|
|
50
50
|
"author": "GongT <admin@gongt.me>",
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* GENERATED FILE, DO NOT MODIFY
|
|
8
8
|
* 这是生成的文件,千万不要修改
|
|
9
9
|
*
|
|
10
|
-
* @build-script/codegen 1.0.
|
|
10
|
+
* @build-script/codegen 1.0.5 - The Simple Code Generater
|
|
11
11
|
* https://github.com/GongT/baobao
|
|
12
12
|
*
|
|
13
13
|
******************************************************************************/
|
|
@@ -17,6 +17,7 @@ export default {
|
|
|
17
17
|
"monorepo-bump-version": "./commands/monorepo-bump-version.js",
|
|
18
18
|
"monorepo-cnpm-sync": "./commands/monorepo-cnpm-sync.js",
|
|
19
19
|
"monorepo-invalid": "./commands/monorepo-invalid.js",
|
|
20
|
+
"monorepo-link-binaries": "./commands/monorepo-link-binaries.js",
|
|
20
21
|
"monorepo-list": "./commands/monorepo-list.js",
|
|
21
22
|
"monorepo-publish": "./commands/monorepo-publish.js",
|
|
22
23
|
"monorepo-tsconfig": "./commands/monorepo-tsconfig.js",
|
|
@@ -5,8 +5,8 @@ import { resolve } from 'node:path';
|
|
|
5
5
|
export async function generate(ctx: GenerateContext) {
|
|
6
6
|
const map = {};
|
|
7
7
|
const root = resolve(__dirname, 'commands');
|
|
8
|
-
ctx.watchFiles(root
|
|
9
|
-
ctx.watchFiles(root
|
|
8
|
+
ctx.watchFiles(`${root}/**/*.ts`);
|
|
9
|
+
ctx.watchFiles(`${root}/`);
|
|
10
10
|
for (const name of readdirSync(root)) {
|
|
11
11
|
if (!name.endsWith('.ts')) {
|
|
12
12
|
continue;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createWorkspaceOrPackage } from '@build-script/monorepo-lib';
|
|
1
2
|
import { logger } from '@idlebox/logger';
|
|
2
3
|
import { printLine } from '@idlebox/node';
|
|
3
4
|
import { argv, CommandDefine, isJsonOutput, pArgS } from '../common/functions/cli.js';
|
|
@@ -20,7 +21,8 @@ export class Command extends CommandDefine {
|
|
|
20
21
|
export async function main() {
|
|
21
22
|
const autoInc = argv.flag('--bump');
|
|
22
23
|
|
|
23
|
-
const
|
|
24
|
+
const workspace = await createWorkspaceOrPackage();
|
|
25
|
+
const pm = await createPackageManager(PackageManagerUsageKind.Read, workspace);
|
|
24
26
|
|
|
25
27
|
const pkgJson = await pm.loadPackageJson();
|
|
26
28
|
const { changedFiles, hasChange, remoteVersion } = await executeChangeDetect(pm, {});
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { createWorkspace, type IPackageInfo, type MonorepoWorkspace } from '@build-script/monorepo-lib';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { humanDate } from '@idlebox/common';
|
|
3
|
+
import { Job, JobGraphBuilder } from '@idlebox/dependency-graph';
|
|
4
4
|
import { logger } from '@idlebox/logger';
|
|
5
5
|
import { makeRe } from 'minimatch';
|
|
6
|
-
import { inspect } from 'node:util';
|
|
7
6
|
import { argv, CommandDefine, CSI } from '../common/functions/cli.js';
|
|
8
7
|
import { PackageManagerUsageKind } from '../common/package-manager/driver.abstract.js';
|
|
9
8
|
import { increaseVersion } from '../common/package-manager/package-json.js';
|
|
@@ -23,31 +22,26 @@ export class Command extends CommandDefine {
|
|
|
23
22
|
};
|
|
24
23
|
}
|
|
25
24
|
|
|
26
|
-
interface
|
|
25
|
+
interface IPayload {
|
|
27
26
|
readonly index: number;
|
|
28
27
|
readonly length: number;
|
|
29
28
|
readonly options: ReturnType<typeof options>;
|
|
30
29
|
readonly changedPackages: string[];
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
class BumpVersionJob
|
|
34
|
-
private readonly _onSuccess = new Emitter<void>();
|
|
35
|
-
public readonly onSuccess = this._onSuccess.event;
|
|
36
|
-
|
|
37
|
-
private readonly _onFailed = new Emitter<Error>();
|
|
38
|
-
public readonly onFailed = this._onFailed.event;
|
|
39
|
-
|
|
40
|
-
private readonly _onRunning = new Emitter<void>();
|
|
41
|
-
public readonly onRunning = this._onRunning.event;
|
|
42
|
-
|
|
32
|
+
class BumpVersionJob extends Job<void> {
|
|
43
33
|
constructor(
|
|
44
|
-
|
|
34
|
+
name: string,
|
|
35
|
+
deps: readonly string[],
|
|
36
|
+
private readonly payload: IPayload,
|
|
45
37
|
private readonly project: IPackageInfo,
|
|
46
38
|
private readonly workspace: MonorepoWorkspace,
|
|
47
|
-
) {
|
|
39
|
+
) {
|
|
40
|
+
super(name, deps);
|
|
41
|
+
}
|
|
48
42
|
|
|
49
|
-
async
|
|
50
|
-
const { index, length, options, changedPackages } = this.
|
|
43
|
+
protected override async _execute() {
|
|
44
|
+
const { index, length, options, changedPackages } = this.payload;
|
|
51
45
|
const w = length.toFixed(0).length;
|
|
52
46
|
console.log(`📦 [${(index + 1).toFixed(0).padStart(w)}/${length}] ${this.project.name}`);
|
|
53
47
|
if (this.project.packageJson.private && !options.allowPrivate) {
|
|
@@ -85,18 +79,13 @@ class BumpVersionJob implements IWatchEvents {
|
|
|
85
79
|
}
|
|
86
80
|
}
|
|
87
81
|
}
|
|
88
|
-
|
|
89
|
-
[inspect.custom]() {
|
|
90
|
-
// TODO
|
|
91
|
-
return '~~~~~~~~';
|
|
92
|
-
}
|
|
93
82
|
}
|
|
94
83
|
|
|
95
84
|
function options() {
|
|
96
85
|
const excludes = argv.multiple('--exclude');
|
|
97
86
|
let excludeReg: RegExp | undefined;
|
|
98
87
|
if (excludes.length > 0) {
|
|
99
|
-
|
|
88
|
+
const regTxt = [];
|
|
100
89
|
for (const exclude of excludes) {
|
|
101
90
|
const match = makeRe(exclude, { platform: 'linux' });
|
|
102
91
|
if (!match) {
|
|
@@ -135,7 +124,7 @@ export async function main() {
|
|
|
135
124
|
await workspace.decoupleDependencies();
|
|
136
125
|
const projects = await workspace.listPackages();
|
|
137
126
|
|
|
138
|
-
const graph = new
|
|
127
|
+
const graph = new JobGraphBuilder(1, logger);
|
|
139
128
|
|
|
140
129
|
const opts = options();
|
|
141
130
|
|
|
@@ -146,9 +135,9 @@ export async function main() {
|
|
|
146
135
|
if (!project.packageJson.name) continue;
|
|
147
136
|
|
|
148
137
|
graph.addNode(
|
|
149
|
-
project.packageJson.name,
|
|
150
|
-
[],
|
|
151
138
|
new BumpVersionJob(
|
|
139
|
+
project.packageJson.name,
|
|
140
|
+
[],
|
|
152
141
|
{
|
|
153
142
|
index,
|
|
154
143
|
length: projects.length,
|
|
@@ -163,7 +152,7 @@ export async function main() {
|
|
|
163
152
|
index++;
|
|
164
153
|
}
|
|
165
154
|
|
|
166
|
-
await graph.startup();
|
|
155
|
+
await graph.finalize().startup();
|
|
167
156
|
|
|
168
157
|
console.log(`🎉 所有任务完成,共修改了 ${changedPackages.length} 个包`);
|
|
169
158
|
}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { createWorkspace } from '@build-script/monorepo-lib';
|
|
2
2
|
import { argv } from '@idlebox/args/default';
|
|
3
3
|
import { CommandDefine, isQuiet, pDesc } from '../common/functions/cli.js';
|
|
4
|
-
import {
|
|
4
|
+
import { PackageManagerUsageKind } from '../common/package-manager/driver.abstract.js';
|
|
5
|
+
import { createPackageManager } from '../common/package-manager/package-manager.js';
|
|
6
|
+
import { clearNpmMetaCache } from '../common/shared-jobs/clear-cache.js';
|
|
7
|
+
import { cnpmSyncNames } from '../common/shared-jobs/cnpm-sync.js';
|
|
5
8
|
|
|
6
9
|
export class Command extends CommandDefine {
|
|
7
10
|
protected override _usage = '';
|
|
@@ -15,5 +18,14 @@ export async function main() {
|
|
|
15
18
|
|
|
16
19
|
const dry = argv.flag('--dry') > 0;
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
const names = list
|
|
22
|
+
.filter((e) => {
|
|
23
|
+
return !!e.packageJson.name && !e.packageJson.private;
|
|
24
|
+
})
|
|
25
|
+
.map((e) => e.packageJson.name);
|
|
26
|
+
|
|
27
|
+
await cnpmSyncNames(names, isQuiet, dry);
|
|
28
|
+
|
|
29
|
+
const pm = await createPackageManager(PackageManagerUsageKind.Read, workspace);
|
|
30
|
+
await clearNpmMetaCache(pm, names);
|
|
19
31
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createWorkspace } from '@build-script/monorepo-lib';
|
|
1
2
|
import { logger } from '@idlebox/logger';
|
|
2
3
|
import { CommandDefine } from '../common/functions/cli.js';
|
|
3
4
|
import { PackageManagerUsageKind } from '../common/package-manager/driver.abstract.js';
|
|
@@ -10,10 +11,11 @@ export class Command extends CommandDefine {
|
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
export async function main() {
|
|
13
|
-
const
|
|
14
|
+
const workspace = await createWorkspace();
|
|
15
|
+
const packageManager = await createPackageManager(PackageManagerUsageKind.Read, workspace);
|
|
14
16
|
const cache = await packageManager.createCacheHandler();
|
|
15
17
|
|
|
16
|
-
const list = await
|
|
18
|
+
const list = await workspace.listPackages();
|
|
17
19
|
|
|
18
20
|
logger.log('删除%d个项目在 %s 的npm缓存', list.length, cache.path);
|
|
19
21
|
for (const data of list) {
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { createWorkspace, type MonorepoWorkspace } from '@build-script/monorepo-lib';
|
|
2
|
+
import { argv } from '@idlebox/args/default';
|
|
3
|
+
import type { DeepReadonly, IPackageJson } from '@idlebox/common';
|
|
4
|
+
import { ensureLinkTargetSync } from '@idlebox/ensure-symlink';
|
|
5
|
+
import { logger } from '@idlebox/logger';
|
|
6
|
+
import { relativePath } from '@idlebox/node';
|
|
7
|
+
import { readFileSync } from 'node:fs';
|
|
8
|
+
import { basename, resolve } from 'node:path';
|
|
9
|
+
import { CommandDefine, pArgS } from '../common/functions/cli.js';
|
|
10
|
+
|
|
11
|
+
export class Command extends CommandDefine {
|
|
12
|
+
protected override _usage = `${pArgS('--from=...')} ${pArgS('--recursive')}`;
|
|
13
|
+
protected override _description = '将monorepo中每个项目的bins连接到当前项目的 ./node_modules/.bin';
|
|
14
|
+
protected override _help = '存在bin同名时,monorepo项目优先于npm包';
|
|
15
|
+
protected override _arguments = {
|
|
16
|
+
'--from': {
|
|
17
|
+
flag: false,
|
|
18
|
+
description: '将<value>视为各个项目的直接依赖 (必须是至少一个项目的依赖,否则找不到)',
|
|
19
|
+
},
|
|
20
|
+
'--transparent': {
|
|
21
|
+
flag: false,
|
|
22
|
+
description: '将<value>的所有直接依赖视为此项目的直接依赖',
|
|
23
|
+
},
|
|
24
|
+
'--recursive': { flag: true, description: '在每个项目中运行,而非当前项目' },
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
interface BinaryDefine {
|
|
29
|
+
readonly name: string;
|
|
30
|
+
readonly absolutePath: string;
|
|
31
|
+
}
|
|
32
|
+
interface IJobContext {
|
|
33
|
+
readonly packageRoot: string;
|
|
34
|
+
readonly deps: readonly BinaryDefine[];
|
|
35
|
+
readonly globalDeps: readonly BinaryDefine[];
|
|
36
|
+
readonly monorepo: readonly BinaryDefine[];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export async function main() {
|
|
40
|
+
const recursiveMode = argv.flag('--recursive') > 0;
|
|
41
|
+
|
|
42
|
+
const workspace = await createWorkspace();
|
|
43
|
+
|
|
44
|
+
const localPackages = [];
|
|
45
|
+
const projectList = await workspace.listPackages();
|
|
46
|
+
for (const pkg of projectList) {
|
|
47
|
+
if (!pkg.packageJson.name) continue;
|
|
48
|
+
localPackages.push(pkg.packageJson.name);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const additionalPackages = new Set(argv.multiple('--from'));
|
|
52
|
+
for (const projectName of argv.multiple('--transparent')) {
|
|
53
|
+
const proj = await workspace.getPackage(projectName);
|
|
54
|
+
if (!proj) {
|
|
55
|
+
throw new Error(`missing transparent project: ${projectName}`);
|
|
56
|
+
}
|
|
57
|
+
for (const item of depNames(proj.packageJson)) {
|
|
58
|
+
additionalPackages.add(item);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
for (const name of additionalPackages) {
|
|
63
|
+
if (await workspace.getPackage(name)) {
|
|
64
|
+
throw new Error('--from can not be a local package');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const locals = await createBins(workspace, localPackages);
|
|
69
|
+
const globals = await createBins(workspace, [...additionalPackages]);
|
|
70
|
+
|
|
71
|
+
if (recursiveMode) {
|
|
72
|
+
for (const pkg of projectList) {
|
|
73
|
+
const current = await createBins(workspace, depNames(pkg.packageJson));
|
|
74
|
+
await execute({
|
|
75
|
+
deps: current,
|
|
76
|
+
globalDeps: globals,
|
|
77
|
+
monorepo: locals,
|
|
78
|
+
packageRoot: pkg.absolute,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
} else {
|
|
82
|
+
const pkg = await workspace.getNearestPackage(process.cwd());
|
|
83
|
+
const current = await createBins(workspace, depNames(pkg.packageJson));
|
|
84
|
+
await execute({
|
|
85
|
+
deps: current,
|
|
86
|
+
globalDeps: globals,
|
|
87
|
+
monorepo: locals,
|
|
88
|
+
packageRoot: pkg.absolute,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async function execute(ctx: IJobContext) {
|
|
94
|
+
logger.log`linking binaries in project long<${ctx.packageRoot}>`;
|
|
95
|
+
|
|
96
|
+
const final = new Map<string, string>();
|
|
97
|
+
for (const list of [ctx.globalDeps, ctx.deps, ctx.monorepo]) {
|
|
98
|
+
for (const bin of list) {
|
|
99
|
+
final.set(bin.name, bin.absolutePath);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const dry = argv.flag('--dry') > 0;
|
|
104
|
+
const bindir = resolve(ctx.packageRoot, 'node_modules/.bin');
|
|
105
|
+
for (const [name, target] of final) {
|
|
106
|
+
const link = `${bindir}/${name}`;
|
|
107
|
+
const rel = relativePath(bindir, target);
|
|
108
|
+
if (dry) {
|
|
109
|
+
logger.success(`Would link ${link} -> ${rel}`);
|
|
110
|
+
} else {
|
|
111
|
+
const ch = ensureLinkTargetSync(rel, link);
|
|
112
|
+
if (ch) {
|
|
113
|
+
logger.success`symlink: ${name} -> ${rel}`;
|
|
114
|
+
} else {
|
|
115
|
+
logger.debug`unchanged: ${name} -> ${rel}`;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function depNames(pkgJson: DeepReadonly<IPackageJson>) {
|
|
122
|
+
const o = Object.assign({}, pkgJson.dependencies, pkgJson.devDependencies, pkgJson.optionalDependencies);
|
|
123
|
+
const r: string[] = [];
|
|
124
|
+
for (const [name, version] of Object.entries(o)) {
|
|
125
|
+
if (version.startsWith('workspace:')) {
|
|
126
|
+
} else {
|
|
127
|
+
r.push(name);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return r;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
async function createBins(workspace: MonorepoWorkspace, names: string[]) {
|
|
134
|
+
const bins: BinaryDefine[] = [];
|
|
135
|
+
const packageList = workspace.listPackages();
|
|
136
|
+
|
|
137
|
+
for (const want of names) {
|
|
138
|
+
for (const proj of await packageList) {
|
|
139
|
+
if (proj.name === want) {
|
|
140
|
+
makeBinMap(bins, proj.absolute, proj.packageJson);
|
|
141
|
+
}
|
|
142
|
+
const deps = depNames(proj.packageJson);
|
|
143
|
+
if (deps.includes(want)) {
|
|
144
|
+
const depRoot = resolve(proj.absolute, 'node_modules', want);
|
|
145
|
+
const pkgJson: IPackageJson = JSON.parse(readFileSync(resolve(depRoot, 'package.json'), 'utf-8'));
|
|
146
|
+
makeBinMap(bins, depRoot, pkgJson);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return bins;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function makeBinMap(result: BinaryDefine[], absolute: string, json: DeepReadonly<IPackageJson>) {
|
|
155
|
+
if (!json.bin) return;
|
|
156
|
+
|
|
157
|
+
let bins: Record<string, string> = {};
|
|
158
|
+
if (typeof json.bin === 'string') {
|
|
159
|
+
bins[basename(json.name)] = json.bin;
|
|
160
|
+
} else {
|
|
161
|
+
bins = json.bin;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
for (const [name, path] of Object.entries(bins)) {
|
|
165
|
+
const absolutePath = resolve(absolute, path);
|
|
166
|
+
result.push({ name, absolutePath });
|
|
167
|
+
}
|
|
168
|
+
}
|
|
@@ -1,20 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createWorkspace,
|
|
3
|
-
normalizePackageName,
|
|
4
|
-
type IPackageInfo,
|
|
5
|
-
type MonorepoWorkspace,
|
|
6
|
-
} from '@build-script/monorepo-lib';
|
|
1
|
+
import { createWorkspace, normalizePackageName, type IPackageInfo, type MonorepoWorkspace } from '@build-script/monorepo-lib';
|
|
7
2
|
import { Emitter, prettyPrintError } from '@idlebox/common';
|
|
8
|
-
import {
|
|
3
|
+
import { Job, JobGraphBuilder } from '@idlebox/dependency-graph';
|
|
9
4
|
import { logger } from '@idlebox/logger';
|
|
10
5
|
import { commandInPath, emptyDir, writeFileIfChangeSync } from '@idlebox/node';
|
|
11
|
-
import { cpSync, existsSync } from 'fs';
|
|
12
|
-
import { resolve } from 'path';
|
|
13
|
-
import { inspect } from 'util';
|
|
6
|
+
import { cpSync, existsSync } from 'node:fs';
|
|
7
|
+
import { resolve } from 'node:path';
|
|
14
8
|
import { argv, CommandDefine, CSI, pArgS } from '../common/functions/cli.js';
|
|
15
9
|
import { PackageManagerUsageKind } from '../common/package-manager/driver.abstract.js';
|
|
16
10
|
import { increaseVersion } from '../common/package-manager/package-json.js';
|
|
17
11
|
import { createPackageManager } from '../common/package-manager/package-manager.js';
|
|
12
|
+
import { clearNpmMetaCache } from '../common/shared-jobs/clear-cache.js';
|
|
18
13
|
import { cnpmSyncNames } from '../common/shared-jobs/cnpm-sync.js';
|
|
19
14
|
import { executeChangeDetect } from '../common/shared-jobs/detect-change-job.js';
|
|
20
15
|
|
|
@@ -29,14 +24,14 @@ export class Command extends CommandDefine {
|
|
|
29
24
|
};
|
|
30
25
|
}
|
|
31
26
|
|
|
32
|
-
interface
|
|
27
|
+
interface IPayload {
|
|
33
28
|
readonly index: number;
|
|
34
29
|
readonly length: number;
|
|
35
30
|
readonly options: ReturnType<typeof options>;
|
|
36
31
|
}
|
|
37
32
|
|
|
38
33
|
let indexDisplay = 0;
|
|
39
|
-
class BuildPackageJob
|
|
34
|
+
class BuildPackageJob extends Job<void> {
|
|
40
35
|
private readonly _onSuccess = new Emitter<void>();
|
|
41
36
|
public readonly onSuccess = this._onSuccess.event;
|
|
42
37
|
|
|
@@ -49,13 +44,17 @@ class BuildPackageJob implements IWatchEvents {
|
|
|
49
44
|
private shouldPublish = '';
|
|
50
45
|
|
|
51
46
|
constructor(
|
|
52
|
-
|
|
47
|
+
name: string,
|
|
48
|
+
deps: readonly string[],
|
|
49
|
+
private readonly payload: IPayload,
|
|
53
50
|
private readonly project: IPackageInfo,
|
|
54
51
|
private readonly workspace: MonorepoWorkspace,
|
|
55
52
|
) {
|
|
53
|
+
super(name, deps);
|
|
54
|
+
|
|
56
55
|
this.onSuccess(() => {
|
|
57
56
|
indexDisplay++;
|
|
58
|
-
const { length } = this.
|
|
57
|
+
const { length } = this.payload;
|
|
59
58
|
const w = length.toFixed(0).length;
|
|
60
59
|
console.log(`${CSI}K📦 [${indexDisplay.toFixed(0).padStart(w)}/${length}] ${this.project.name}`);
|
|
61
60
|
console.log(this.logText.join('\n'));
|
|
@@ -63,7 +62,7 @@ class BuildPackageJob implements IWatchEvents {
|
|
|
63
62
|
});
|
|
64
63
|
this.onFailed((e) => {
|
|
65
64
|
indexDisplay++;
|
|
66
|
-
const { length } = this.
|
|
65
|
+
const { length } = this.payload;
|
|
67
66
|
const w = length.toFixed(0).length;
|
|
68
67
|
console.log(`${CSI}K📦 [${indexDisplay.toFixed(0).padStart(w)}/${length}] ${this.project.name}`);
|
|
69
68
|
console.log(this.logText.join('\n'));
|
|
@@ -72,26 +71,20 @@ class BuildPackageJob implements IWatchEvents {
|
|
|
72
71
|
});
|
|
73
72
|
}
|
|
74
73
|
|
|
75
|
-
get name() {
|
|
76
|
-
return this.project.name;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
74
|
getPackagePath() {
|
|
80
75
|
return this.shouldPublish || undefined;
|
|
81
76
|
}
|
|
82
77
|
|
|
83
|
-
async
|
|
78
|
+
protected override async _execute() {
|
|
84
79
|
this._onRunning.fire();
|
|
85
80
|
this.log(` 🔍 ${CSI}38;5;14m检查包${CSI}0m`);
|
|
86
81
|
|
|
87
82
|
const pm = await createPackageManager(PackageManagerUsageKind.Write, this.workspace, this.project.absolute);
|
|
88
83
|
const { changedFiles, hasChange, remoteVersion } = await executeChangeDetect(pm, {});
|
|
89
|
-
|
|
84
|
+
const shouldPublish = hasChange || changedFiles.length > 0;
|
|
90
85
|
let localVersion = this.project.packageJson.version;
|
|
91
86
|
|
|
92
|
-
this.log(
|
|
93
|
-
` 👀 ${changedFiles.length} 个文件有修改: ${changedFiles.slice(0, 3).join(', ')}${changedFiles.length > 3 ? ' ...' : ''}`,
|
|
94
|
-
);
|
|
87
|
+
this.log(` 👀 ${changedFiles.length} 个文件有修改: ${changedFiles.slice(0, 3).join(', ')}${changedFiles.length > 3 ? ' ...' : ''}`);
|
|
95
88
|
if (hasChange) {
|
|
96
89
|
const packageJson = await pm.loadPackageJson();
|
|
97
90
|
localVersion = await increaseVersion(packageJson, remoteVersion || '0.0.0');
|
|
@@ -105,10 +98,7 @@ class BuildPackageJob implements IWatchEvents {
|
|
|
105
98
|
|
|
106
99
|
this.log(` 🔄 打包文件`);
|
|
107
100
|
|
|
108
|
-
const tempFile = resolve(
|
|
109
|
-
this.workspace.temp,
|
|
110
|
-
`publish/${normalizePackageName(this.project.name)}-${localVersion}.tgz`,
|
|
111
|
-
);
|
|
101
|
+
const tempFile = resolve(this.workspace.temp, `publish/${normalizePackageName(this.project.name)}-${localVersion}.tgz`);
|
|
112
102
|
this.shouldPublish = await pm.pack(tempFile);
|
|
113
103
|
|
|
114
104
|
if (remoteVersion) {
|
|
@@ -123,11 +113,6 @@ class BuildPackageJob implements IWatchEvents {
|
|
|
123
113
|
log(text: string) {
|
|
124
114
|
this.logText.push(text);
|
|
125
115
|
}
|
|
126
|
-
|
|
127
|
-
[inspect.custom]() {
|
|
128
|
-
// TODO
|
|
129
|
-
return '~~~~~~~~';
|
|
130
|
-
}
|
|
131
116
|
}
|
|
132
117
|
|
|
133
118
|
function options() {
|
|
@@ -147,16 +132,11 @@ export async function main() {
|
|
|
147
132
|
|
|
148
133
|
const projects = await workspace.listPackages();
|
|
149
134
|
|
|
150
|
-
const concurrency = argv.flag(['--debug', '-d']) > 0 ? 1 : 10;
|
|
135
|
+
const concurrency = 1; // argv.flag(['--debug', '-d']) > 0 ? 1 : 10;
|
|
151
136
|
if (concurrency === 1) {
|
|
152
137
|
logger.warn`由于设置了--debug参数,运行模式改为单线程`;
|
|
153
138
|
}
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
function debugSummary() {
|
|
157
|
-
const info = graph.debugFormatSummary();
|
|
158
|
-
process.stderr.write(`${CSI}K${info}\r`);
|
|
159
|
-
}
|
|
139
|
+
const builder = new JobGraphBuilder(concurrency, logger);
|
|
160
140
|
|
|
161
141
|
const opts = options();
|
|
162
142
|
|
|
@@ -166,7 +146,7 @@ export async function main() {
|
|
|
166
146
|
if (project.packageJson.private) {
|
|
167
147
|
console.log(`📦 ${project.name}`);
|
|
168
148
|
console.log(` 🛑 跳过,private=true: ${project.name}`);
|
|
169
|
-
|
|
149
|
+
builder.addEmptyNode(project.name);
|
|
170
150
|
return false;
|
|
171
151
|
}
|
|
172
152
|
|
|
@@ -176,6 +156,8 @@ export async function main() {
|
|
|
176
156
|
let index = 0;
|
|
177
157
|
for (const project of shouldPublishProjects) {
|
|
178
158
|
const job = new BuildPackageJob(
|
|
159
|
+
project.name,
|
|
160
|
+
project.devDependencies,
|
|
179
161
|
{
|
|
180
162
|
index,
|
|
181
163
|
length: shouldPublishProjects.length,
|
|
@@ -188,16 +170,22 @@ export async function main() {
|
|
|
188
170
|
job.onRunning(debugSummary);
|
|
189
171
|
job.onSuccess(debugSummary);
|
|
190
172
|
job.onFailed(debugSummary);
|
|
191
|
-
|
|
173
|
+
builder.addNode(job);
|
|
192
174
|
|
|
193
175
|
index++;
|
|
194
176
|
}
|
|
195
177
|
|
|
178
|
+
const graph = builder.finalize();
|
|
179
|
+
|
|
180
|
+
function debugSummary() {
|
|
181
|
+
const info = graph?.debugFormatSummary();
|
|
182
|
+
process.stderr.write(`${CSI}K${info}\r`);
|
|
183
|
+
}
|
|
196
184
|
await graph.startup();
|
|
197
185
|
|
|
198
186
|
const packageToPublish: { name: string; pack: string }[] = [];
|
|
199
187
|
for (const id of graph.overallOrder) {
|
|
200
|
-
const node = graph.
|
|
188
|
+
const node = graph.getNodeByName(id);
|
|
201
189
|
if (!(node instanceof BuildPackageJob)) continue;
|
|
202
190
|
|
|
203
191
|
const pack = node.getPackagePath();
|
|
@@ -215,17 +203,17 @@ export async function main() {
|
|
|
215
203
|
const npmrc = workspace.getNpmRCPath(true);
|
|
216
204
|
if (existsSync(npmrc)) {
|
|
217
205
|
cpSync(npmrc, resolve(temp, '.npmrc'));
|
|
218
|
-
writeFileIfChangeSync(resolve(temp, 'package.json'), '{}');
|
|
219
206
|
}
|
|
207
|
+
writeFileIfChangeSync(resolve(temp, 'package.json'), '{}');
|
|
220
208
|
|
|
221
209
|
const w = packageToPublish.length.toFixed(0).length;
|
|
222
|
-
|
|
210
|
+
const published: string[] = [];
|
|
223
211
|
|
|
224
212
|
try {
|
|
225
213
|
index = 1;
|
|
226
214
|
for (const { name, pack } of packageToPublish) {
|
|
227
215
|
console.log(`📦 [${index.toFixed(0).padStart(w)}/${packageToPublish.length}] ${name}`);
|
|
228
|
-
const r = await pm.uploadTarball(pack);
|
|
216
|
+
const r = await pm.uploadTarball(pack, temp);
|
|
229
217
|
if (r.published) {
|
|
230
218
|
console.log(` 👌 已发布新版本 ${r.version}`);
|
|
231
219
|
} else {
|
|
@@ -241,8 +229,11 @@ export async function main() {
|
|
|
241
229
|
logger.error`发布过程中发生错误: ${e instanceof Error ? e.message : e}`;
|
|
242
230
|
throw e;
|
|
243
231
|
} finally {
|
|
244
|
-
if (await commandInPath('cnpm')) {
|
|
245
|
-
await cnpmSyncNames(published, true)
|
|
232
|
+
if (published.length > 0 && (await commandInPath('cnpm'))) {
|
|
233
|
+
await cnpmSyncNames(published, true);
|
|
234
|
+
|
|
235
|
+
const pm = await createPackageManager(PackageManagerUsageKind.Read, workspace);
|
|
236
|
+
await clearNpmMetaCache(pm, published);
|
|
246
237
|
}
|
|
247
238
|
}
|
|
248
239
|
}
|
|
@@ -10,8 +10,7 @@ import { argv, CommandDefine, pArgS } from '../common/functions/cli.js';
|
|
|
10
10
|
export class Command extends CommandDefine {
|
|
11
11
|
protected override _usage = `${pArgS('--dev')}`;
|
|
12
12
|
protected override _description = '为所有项目的 tsconfig.json 添加 references 字段';
|
|
13
|
-
protected override _help =
|
|
14
|
-
`查找tsconfig.json和src/tsconfig.json\n 如果不在这里,可以在package.json中设置exports['./tsconfig.json'] = './xxxx'`;
|
|
13
|
+
protected override _help = `查找tsconfig.json和src/tsconfig.json\n 如果不在这里,可以在package.json中设置exports['./tsconfig.json'] = './xxxx'`;
|
|
15
14
|
protected override _arguments = {
|
|
16
15
|
'--dev': { flag: true, description: '也将devDependencies中的包添加到references中' },
|
|
17
16
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { createWorkspace, type IPackageInfo } from '@build-script/monorepo-lib';
|
|
2
2
|
import { loadJsonFile, writeJsonFileBack } from '@idlebox/json-edit';
|
|
3
3
|
import { logger } from '@idlebox/logger';
|
|
4
4
|
import { resolve } from 'node:path';
|
|
@@ -17,8 +17,9 @@ export async function main() {
|
|
|
17
17
|
const dryRun = argv.flag('--dry') > 0;
|
|
18
18
|
const skipUpdate = argv.flag('--skip-update') > 0;
|
|
19
19
|
|
|
20
|
-
const
|
|
21
|
-
const
|
|
20
|
+
const workspace = await createWorkspace();
|
|
21
|
+
const packageManager = await createPackageManager(PackageManagerUsageKind.Read, workspace);
|
|
22
|
+
const projects = await workspace.listPackages();
|
|
22
23
|
|
|
23
24
|
logger.log('Collecting local project versions:');
|
|
24
25
|
const alldeps: Record<string, string> = {};
|