@downcity/city 1.1.23 → 1.1.24
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.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `city update
|
|
2
|
+
* `city update`:更新当前全局安装来源对应的 Downcity CLI。
|
|
3
3
|
*
|
|
4
4
|
* 关键点(中文)
|
|
5
5
|
* - 优先根据当前 CLI 所在的全局模块目录,自动判断是 npm 还是 pnpm 安装。
|
|
@@ -17,9 +17,10 @@ export interface UpdateCommandOptions {
|
|
|
17
17
|
manager?: UpdateManager | "auto";
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
20
|
+
* 检测当前 CLI 实际安装来源的包名。
|
|
21
21
|
*/
|
|
22
|
-
export declare function
|
|
22
|
+
export declare function detectInstalledPackageName(): string;
|
|
23
|
+
export declare function buildGlobalUpdateInvocation(manager: UpdateManager, packageName: string): {
|
|
23
24
|
command: string;
|
|
24
25
|
args: string[];
|
|
25
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Update.d.ts","sourceRoot":"","sources":["../../../src/cli/shared/Update.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;CAClC;
|
|
1
|
+
{"version":3,"file":"Update.d.ts","sourceRoot":"","sources":["../../../src/cli/shared/Update.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;CAClC;AAgCD;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,MAAM,GAClB;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAYA;AAED;;GAEG;AACH,wBAAgB,mCAAmC,CAAC,MAAM,EAAE;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,aAAa,GAAG,IAAI,CAQvB;AA8BD;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,aAAa,CAQ5D;AAmBD;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAkDf"}
|
package/bin/cli/shared/Update.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `city update
|
|
2
|
+
* `city update`:更新当前全局安装来源对应的 Downcity CLI。
|
|
3
3
|
*
|
|
4
4
|
* 关键点(中文)
|
|
5
5
|
* - 优先根据当前 CLI 所在的全局模块目录,自动判断是 npm 还是 pnpm 安装。
|
|
@@ -13,20 +13,50 @@ import { fileURLToPath } from "url";
|
|
|
13
13
|
import { emitCliBlock } from "./CliReporter.js";
|
|
14
14
|
import { CliError } from "./CliError.js";
|
|
15
15
|
import { runWithSpinner } from "../../utils/cli/Spinner.js";
|
|
16
|
-
const
|
|
16
|
+
const FALLBACK_GLOBAL_PACKAGE_NAME = "downcity";
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* 解析当前 CLI 安装包根目录。
|
|
19
|
+
*
|
|
20
|
+
* 关键点(中文)
|
|
21
|
+
* - 开发态路径是 `src/cli/shared`,构建后路径是 `bin/cli/shared`。
|
|
22
|
+
* - 两种目录结构都可以通过回退三级拿到 package 根目录。
|
|
19
23
|
*/
|
|
20
|
-
|
|
24
|
+
function resolveInstalledPackageRoot() {
|
|
25
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
26
|
+
const __dirname = path.dirname(__filename);
|
|
27
|
+
return path.resolve(__dirname, "../../..");
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 读取当前 CLI 实际对应的 npm 包名。
|
|
31
|
+
*/
|
|
32
|
+
function readInstalledPackageName(packageRoot) {
|
|
33
|
+
try {
|
|
34
|
+
const packageJsonPath = path.join(packageRoot, "package.json");
|
|
35
|
+
const raw = fs.readFileSync(packageJsonPath, "utf8");
|
|
36
|
+
const parsed = JSON.parse(raw);
|
|
37
|
+
const packageName = typeof parsed.name === "string" ? parsed.name.trim() : "";
|
|
38
|
+
return packageName || FALLBACK_GLOBAL_PACKAGE_NAME;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return FALLBACK_GLOBAL_PACKAGE_NAME;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 检测当前 CLI 实际安装来源的包名。
|
|
46
|
+
*/
|
|
47
|
+
export function detectInstalledPackageName() {
|
|
48
|
+
return readInstalledPackageName(resolveInstalledPackageRoot());
|
|
49
|
+
}
|
|
50
|
+
export function buildGlobalUpdateInvocation(manager, packageName) {
|
|
21
51
|
if (manager === "pnpm") {
|
|
22
52
|
return {
|
|
23
53
|
command: "pnpm",
|
|
24
|
-
args: ["add", "-g", `${
|
|
54
|
+
args: ["add", "-g", `${packageName}@latest`],
|
|
25
55
|
};
|
|
26
56
|
}
|
|
27
57
|
return {
|
|
28
58
|
command: "npm",
|
|
29
|
-
args: ["install", "-g", `${
|
|
59
|
+
args: ["install", "-g", `${packageName}@latest`],
|
|
30
60
|
};
|
|
31
61
|
}
|
|
32
62
|
/**
|
|
@@ -74,9 +104,7 @@ function readGlobalRoot(manager) {
|
|
|
74
104
|
* 自动判断当前全局安装使用的包管理器。
|
|
75
105
|
*/
|
|
76
106
|
export function detectInstalledUpdateManager() {
|
|
77
|
-
const
|
|
78
|
-
const __dirname = path.dirname(__filename);
|
|
79
|
-
const packageRoot = path.resolve(__dirname, "../..");
|
|
107
|
+
const packageRoot = resolveInstalledPackageRoot();
|
|
80
108
|
const detected = resolveUpdateManagerFromGlobalRoots({
|
|
81
109
|
packageRoot,
|
|
82
110
|
npmRoot: readGlobalRoot("npm") || undefined,
|
|
@@ -104,10 +132,11 @@ async function runCommand(command, args) {
|
|
|
104
132
|
* update 命令入口。
|
|
105
133
|
*/
|
|
106
134
|
export async function updateCommand(options = {}) {
|
|
135
|
+
const packageName = detectInstalledPackageName();
|
|
107
136
|
const manager = options.manager && options.manager !== "auto"
|
|
108
137
|
? options.manager
|
|
109
138
|
: detectInstalledUpdateManager();
|
|
110
|
-
const invocation = buildGlobalUpdateInvocation(manager);
|
|
139
|
+
const invocation = buildGlobalUpdateInvocation(manager, packageName);
|
|
111
140
|
emitCliBlock({
|
|
112
141
|
tone: "accent",
|
|
113
142
|
title: "Updating downcity",
|
|
@@ -123,7 +152,7 @@ export async function updateCommand(options = {}) {
|
|
|
123
152
|
],
|
|
124
153
|
});
|
|
125
154
|
try {
|
|
126
|
-
await runWithSpinner(() => runCommand(invocation.command, invocation.args), { text: `Installing ${
|
|
155
|
+
await runWithSpinner(() => runCommand(invocation.command, invocation.args), { text: `Installing ${packageName}@latest via ${manager}...` });
|
|
127
156
|
}
|
|
128
157
|
catch (error) {
|
|
129
158
|
throw new CliError({
|
|
@@ -137,7 +166,7 @@ export async function updateCommand(options = {}) {
|
|
|
137
166
|
facts: [
|
|
138
167
|
{
|
|
139
168
|
label: "Package",
|
|
140
|
-
value: `${
|
|
169
|
+
value: `${packageName}@latest`,
|
|
141
170
|
},
|
|
142
171
|
{
|
|
143
172
|
label: "Manager",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Update.js","sourceRoot":"","sources":["../../../src/cli/shared/Update.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAcxD,MAAM,
|
|
1
|
+
{"version":3,"file":"Update.js","sourceRoot":"","sources":["../../../src/cli/shared/Update.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/cli/shared/Update.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `city update
|
|
2
|
+
* `city update`:更新当前全局安装来源对应的 Downcity CLI。
|
|
3
3
|
*
|
|
4
4
|
* 关键点(中文)
|
|
5
5
|
* - 优先根据当前 CLI 所在的全局模块目录,自动判断是 npm 还是 pnpm 安装。
|
|
@@ -27,25 +27,60 @@ export interface UpdateCommandOptions {
|
|
|
27
27
|
manager?: UpdateManager | "auto";
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
const
|
|
30
|
+
const FALLBACK_GLOBAL_PACKAGE_NAME = "downcity";
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
|
-
*
|
|
33
|
+
* 解析当前 CLI 安装包根目录。
|
|
34
|
+
*
|
|
35
|
+
* 关键点(中文)
|
|
36
|
+
* - 开发态路径是 `src/cli/shared`,构建后路径是 `bin/cli/shared`。
|
|
37
|
+
* - 两种目录结构都可以通过回退三级拿到 package 根目录。
|
|
38
|
+
*/
|
|
39
|
+
function resolveInstalledPackageRoot(): string {
|
|
40
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
41
|
+
const __dirname = path.dirname(__filename);
|
|
42
|
+
return path.resolve(__dirname, "../../..");
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* 读取当前 CLI 实际对应的 npm 包名。
|
|
34
47
|
*/
|
|
35
|
-
|
|
48
|
+
function readInstalledPackageName(packageRoot: string): string {
|
|
49
|
+
try {
|
|
50
|
+
const packageJsonPath = path.join(packageRoot, "package.json");
|
|
51
|
+
const raw = fs.readFileSync(packageJsonPath, "utf8");
|
|
52
|
+
const parsed = JSON.parse(raw) as { name?: unknown };
|
|
53
|
+
const packageName = typeof parsed.name === "string" ? parsed.name.trim() : "";
|
|
54
|
+
return packageName || FALLBACK_GLOBAL_PACKAGE_NAME;
|
|
55
|
+
} catch {
|
|
56
|
+
return FALLBACK_GLOBAL_PACKAGE_NAME;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* 检测当前 CLI 实际安装来源的包名。
|
|
62
|
+
*/
|
|
63
|
+
export function detectInstalledPackageName(): string {
|
|
64
|
+
return readInstalledPackageName(resolveInstalledPackageRoot());
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function buildGlobalUpdateInvocation(
|
|
68
|
+
manager: UpdateManager,
|
|
69
|
+
packageName: string,
|
|
70
|
+
): {
|
|
36
71
|
command: string;
|
|
37
72
|
args: string[];
|
|
38
73
|
} {
|
|
39
74
|
if (manager === "pnpm") {
|
|
40
75
|
return {
|
|
41
76
|
command: "pnpm",
|
|
42
|
-
args: ["add", "-g", `${
|
|
77
|
+
args: ["add", "-g", `${packageName}@latest`],
|
|
43
78
|
};
|
|
44
79
|
}
|
|
45
80
|
|
|
46
81
|
return {
|
|
47
82
|
command: "npm",
|
|
48
|
-
args: ["install", "-g", `${
|
|
83
|
+
args: ["install", "-g", `${packageName}@latest`],
|
|
49
84
|
};
|
|
50
85
|
}
|
|
51
86
|
|
|
@@ -98,9 +133,7 @@ function readGlobalRoot(manager: UpdateManager): string | null {
|
|
|
98
133
|
* 自动判断当前全局安装使用的包管理器。
|
|
99
134
|
*/
|
|
100
135
|
export function detectInstalledUpdateManager(): UpdateManager {
|
|
101
|
-
const
|
|
102
|
-
const __dirname = path.dirname(__filename);
|
|
103
|
-
const packageRoot = path.resolve(__dirname, "../..");
|
|
136
|
+
const packageRoot = resolveInstalledPackageRoot();
|
|
104
137
|
const detected = resolveUpdateManagerFromGlobalRoots({
|
|
105
138
|
packageRoot,
|
|
106
139
|
npmRoot: readGlobalRoot("npm") || undefined,
|
|
@@ -132,11 +165,12 @@ async function runCommand(command: string, args: string[]): Promise<void> {
|
|
|
132
165
|
export async function updateCommand(
|
|
133
166
|
options: UpdateCommandOptions = {},
|
|
134
167
|
): Promise<void> {
|
|
168
|
+
const packageName = detectInstalledPackageName();
|
|
135
169
|
const manager =
|
|
136
170
|
options.manager && options.manager !== "auto"
|
|
137
171
|
? options.manager
|
|
138
172
|
: detectInstalledUpdateManager();
|
|
139
|
-
const invocation = buildGlobalUpdateInvocation(manager);
|
|
173
|
+
const invocation = buildGlobalUpdateInvocation(manager, packageName);
|
|
140
174
|
|
|
141
175
|
emitCliBlock({
|
|
142
176
|
tone: "accent",
|
|
@@ -156,7 +190,7 @@ export async function updateCommand(
|
|
|
156
190
|
try {
|
|
157
191
|
await runWithSpinner(
|
|
158
192
|
() => runCommand(invocation.command, invocation.args),
|
|
159
|
-
{ text: `Installing ${
|
|
193
|
+
{ text: `Installing ${packageName}@latest via ${manager}...` },
|
|
160
194
|
);
|
|
161
195
|
} catch (error) {
|
|
162
196
|
throw new CliError({
|
|
@@ -171,7 +205,7 @@ export async function updateCommand(
|
|
|
171
205
|
facts: [
|
|
172
206
|
{
|
|
173
207
|
label: "Package",
|
|
174
|
-
value: `${
|
|
208
|
+
value: `${packageName}@latest`,
|
|
175
209
|
},
|
|
176
210
|
{
|
|
177
211
|
label: "Manager",
|