@franzmoca/opencode-lombok 0.1.0 → 0.1.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.
package/README.md CHANGED
@@ -28,7 +28,7 @@ You can also pin a specific version:
28
28
  ```json
29
29
  {
30
30
  "$schema": "https://opencode.ai/config.json",
31
- "plugin": ["@franzmoca/opencode-lombok@0.1.0"]
31
+ "plugin": ["@franzmoca/opencode-lombok@0.1.1"]
32
32
  }
33
33
  ```
34
34
 
package/dist/core.d.ts CHANGED
@@ -3,6 +3,6 @@ export declare function detectLombokDependency(projectRoot: string): Promise<boo
3
3
  export declare function opencodeDataDir(platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv, home?: string): string;
4
4
  export declare function lombokJarPath(dataDir?: string): string;
5
5
  export declare function isLspDownloadDisabled(env?: NodeJS.ProcessEnv): boolean;
6
- export declare function ensureLombokJar(file: string, env?: NodeJS.ProcessEnv): Promise<string | undefined>;
6
+ export declare function ensureLombokJar(file: string | URL, env?: NodeJS.ProcessEnv): Promise<string | undefined>;
7
7
  export declare function formatJavaAgentArg(file: string): string;
8
8
  export declare function mergeJavaToolOptions(current: string | undefined, file: string): string;
package/dist/core.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import fs from "fs/promises";
2
2
  import os from "os";
3
3
  import path from "path";
4
+ import { fileURLToPath } from "url";
4
5
  const LOMBOK_URL = "https://projectlombok.org/downloads/lombok.jar";
5
6
  const BUILD_FILES = new Set(["pom.xml", "build.gradle", "build.gradle.kts"]);
6
7
  const SKIP_DIRS = new Set([
@@ -19,6 +20,15 @@ const LOMBOK_MATCHERS = [
19
20
  /io\.freefair\.lombok/,
20
21
  ];
21
22
  const LOMBOK_JAVA_AGENT = /-javaagent:(?:"[^"]*lombok\.jar"|[^ "']*lombok\.jar)/i;
23
+ const isNonEmptyString = (value) => typeof value === "string" && value.length > 0;
24
+ const resolveFilePath = (value) => {
25
+ if (typeof value === "string")
26
+ return value;
27
+ if (value instanceof URL && value.protocol === "file:") {
28
+ return fileURLToPath(value);
29
+ }
30
+ return undefined;
31
+ };
22
32
  const pathExists = async (file) => fs
23
33
  .stat(file)
24
34
  .then(() => true)
@@ -59,30 +69,40 @@ export async function detectLombokDependency(projectRoot) {
59
69
  return detectInDir(projectRoot);
60
70
  }
61
71
  export function opencodeDataDir(platform = process.platform, env = process.env, home = os.homedir()) {
62
- if (env.XDG_DATA_HOME)
63
- return path.join(env.XDG_DATA_HOME, "opencode");
72
+ const resolvedHome = isNonEmptyString(home) ? home : os.homedir();
73
+ const xdgDataHome = isNonEmptyString(env.XDG_DATA_HOME)
74
+ ? env.XDG_DATA_HOME
75
+ : undefined;
76
+ if (xdgDataHome)
77
+ return path.join(xdgDataHome, "opencode");
64
78
  if (platform === "darwin")
65
- return path.join(home, "Library", "Application Support", "opencode");
79
+ return path.join(resolvedHome, "Library", "Application Support", "opencode");
66
80
  if (platform === "win32") {
67
- const appData = env.APPDATA || path.win32.join(home, "AppData", "Roaming");
81
+ const appData = isNonEmptyString(env.APPDATA)
82
+ ? env.APPDATA
83
+ : path.win32.join(resolvedHome, "AppData", "Roaming");
68
84
  return path.win32.join(appData, "opencode");
69
85
  }
70
- return path.join(home, ".local", "share", "opencode");
86
+ return path.join(resolvedHome, ".local", "share", "opencode");
71
87
  }
72
88
  export function lombokJarPath(dataDir = opencodeDataDir()) {
73
- return path.join(dataDir, "bin", "jdtls", "bin", "lombok.jar");
89
+ const resolvedDataDir = isNonEmptyString(dataDir) ? dataDir : opencodeDataDir();
90
+ return path.join(resolvedDataDir, "bin", "jdtls", "bin", "lombok.jar");
74
91
  }
75
92
  export function isLspDownloadDisabled(env = process.env) {
76
93
  const value = env.OPENCODE_DISABLE_LSP_DOWNLOAD || "";
77
94
  return /^(1|true|yes)$/i.test(value.trim());
78
95
  }
79
96
  export async function ensureLombokJar(file, env = process.env) {
80
- const exists = await pathExists(file);
97
+ const resolvedFile = resolveFilePath(file);
98
+ if (!resolvedFile)
99
+ return undefined;
100
+ const exists = await pathExists(resolvedFile);
81
101
  if (exists)
82
- return file;
102
+ return resolvedFile;
83
103
  if (isLspDownloadDisabled(env))
84
104
  return undefined;
85
- await fs.mkdir(path.dirname(file), { recursive: true });
105
+ await fs.mkdir(path.dirname(resolvedFile), { recursive: true });
86
106
  const response = await fetch(LOMBOK_URL).catch(() => undefined);
87
107
  if (!response?.ok)
88
108
  return undefined;
@@ -90,15 +110,15 @@ export async function ensureLombokJar(file, env = process.env) {
90
110
  if (!body)
91
111
  return undefined;
92
112
  const saved = await fs
93
- .writeFile(file, Buffer.from(body))
113
+ .writeFile(resolvedFile, Buffer.from(body))
94
114
  .then(() => true)
95
115
  .catch(() => false);
96
116
  if (!saved)
97
117
  return undefined;
98
- const present = await pathExists(file);
118
+ const present = await pathExists(resolvedFile);
99
119
  if (!present)
100
120
  return undefined;
101
- return file;
121
+ return resolvedFile;
102
122
  }
103
123
  export function formatJavaAgentArg(file) {
104
124
  if (!/\s/.test(file))
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@franzmoca/opencode-lombok",
4
- "version": "0.1.0",
4
+ "version": "0.1.1",
5
5
  "description": "OpenCode plugin that adds Lombok support for JDTLS",
6
6
  "type": "module",
7
7
  "license": "MIT",