]> Git Repo - pico-vscode.git/blob - src/utils/picoSDKUnixUtil.mts
Version check and settings check improvements
[pico-vscode.git] / src / utils / picoSDKUnixUtil.mts
1 import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
2 import { homedir } from "os";
3 import { join } from "path";
4 import Logger from "../logger.mjs";
5
6 export interface UnixConfig {
7   sdks: { [version: string]: SDKPaths };
8 }
9
10 export interface SDKPaths {
11   picoSDKPath: string;
12   toolchainPath: string;
13 }
14
15 export default class UnixSDKManager {
16   public static isValidVersion(version: string): boolean {
17     const pattern = /^\d+\.\d+\.\d+$/;
18
19     return pattern.test(version);
20   }
21
22   public static saveConfig(config: UnixConfig): void {
23     try {
24       this.saveConfigToFile(config, UnixSDKManager.configFile());
25     } catch (error) {
26       Logger.log(`Failed to save unix sdks: ${(error as Error).message}`);
27     }
28   }
29
30   private static saveConfigToFile(config: UnixConfig, file: string): void {
31     const jsonData = JSON.stringify(config, null, 2);
32     writeFileSync(file, jsonData);
33   }
34
35   public static loadConfig(): UnixConfig | undefined {
36     try {
37       return this.loadConfigFromFile(UnixSDKManager.configFile());
38     } catch (error) {
39       Logger.log(`Failed to load unix sdks: ${(error as Error).message}`);
40
41       return undefined;
42     }
43   }
44
45   private static loadConfigFromFile(file: string): UnixConfig | undefined {
46     try {
47       const jsonData = readFileSync(file, "utf8");
48
49       return JSON.parse(jsonData) as UnixConfig;
50     } catch (error) {
51       return undefined;
52     }
53   }
54
55   /**
56    * Returns path to config file depending on operating system.
57    * (Supported: macOS, Linux)
58    *
59    * @returns Path to config file
60    * @throws Config directory cannot be created
61    */
62   private static configFile(): string {
63     if (process.platform === "darwin") {
64       const appSupportDir = join(homedir(), "Library", "Application Support");
65       const configDir = join(appSupportDir, "PicoSDK");
66       if (!existsSync(configDir)) {
67         try {
68           mkdirSync(configDir, { recursive: true });
69         } catch (error) {
70           throw new Error(`Failed to create config directory`);
71         }
72       }
73
74       return join(configDir, "sdks.json");
75     } else if (process.platform === "linux") {
76       const homeDir = homedir();
77       if (!homeDir) {
78         throw new Error("Unable to determine home directory");
79       }
80       const configDir = join(homeDir, ".config", "PicoSDK");
81
82       return join(configDir, "sdks.json");
83     } else {
84       throw new Error("Unsupported operating system");
85     }
86   }
87 }
This page took 0.036108 seconds and 4 git commands to generate.