Skip to content

Commit 54e2d1c

Browse files
committed
fix globalconfig middleware
1 parent c8984fb commit 54e2d1c

File tree

2 files changed

+29
-13
lines changed

2 files changed

+29
-13
lines changed

deno.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "1.0.12",
2+
"version": "1.0.13",
33
"name": "@napi/cli",
44
"exports": "./src/index.ts",
55
"nodeModulesDir": "auto",

src/cli/middlewares/globalConfig.ts

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { Arguments } from "yargs-types";
2-
import { join } from "@std/path";
2+
import { dirname, join } from "@std/path";
33
import z from "zod";
44

55
export const globalConfigSchema = z.object({
@@ -74,28 +74,44 @@ export function globalConfigMiddleware(
7474
const result = globalConfigSchema.safeParse(JSON.parse(content));
7575
if (!result.success) {
7676
// wrong config, generate a new one
77-
config = defaultConfig;
78-
Deno.writeTextFileSync(configPath, JSON.stringify(config, null, 2));
79-
}
80-
if (result.data) {
81-
config = result.data;
77+
setConfig(config);
78+
args.globalConfig = config;
79+
return;
8280
}
81+
82+
// config is valid, use it
83+
config = result.data;
84+
args.globalConfig = config;
85+
return;
8386
} else {
8487
// no config, generate a new one
85-
config = defaultConfig;
86-
Deno.writeTextFileSync(configPath, JSON.stringify(config, null, 2));
88+
setConfig(config);
89+
args.globalConfig = config;
90+
return;
8791
}
8892
} catch (_error) {
8993
// failed to read or create config, generate a new one
9094
config = defaultConfig;
91-
Deno.writeTextFileSync(configPath, JSON.stringify(config, null, 2));
95+
setConfig(config);
96+
args.globalConfig = config;
97+
return;
9298
}
93-
94-
args.globalConfig = config;
9599
}
96100

97101
export function setConfig(
98102
config: z.infer<typeof globalConfigSchema>,
99103
) {
100-
Deno.writeTextFileSync(getConfigPath(), JSON.stringify(config, null, 2));
104+
const configPath = getConfigPath();
105+
const dir = dirname(configPath);
106+
let dirExists = false;
107+
try {
108+
Deno.statSync(dir);
109+
dirExists = true;
110+
} catch {
111+
dirExists = false;
112+
}
113+
if (!dirExists) {
114+
Deno.mkdirSync(dir, { recursive: true });
115+
}
116+
Deno.writeTextFileSync(configPath, JSON.stringify(config, null, 2));
101117
}

0 commit comments

Comments
 (0)