fix(auto-update-checker): resolve unknown version display and improve JSONC parsing (#54)
This commit is contained in:
@@ -8,6 +8,7 @@ import {
|
|||||||
NPM_FETCH_TIMEOUT,
|
NPM_FETCH_TIMEOUT,
|
||||||
INSTALLED_PACKAGE_JSON,
|
INSTALLED_PACKAGE_JSON,
|
||||||
USER_OPENCODE_CONFIG,
|
USER_OPENCODE_CONFIG,
|
||||||
|
USER_OPENCODE_CONFIG_JSONC,
|
||||||
} from "./constants"
|
} from "./constants"
|
||||||
import { log } from "../../shared/logger"
|
import { log } from "../../shared/logger"
|
||||||
|
|
||||||
@@ -16,13 +17,22 @@ export function isLocalDevMode(directory: string): boolean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function stripJsonComments(json: string): string {
|
function stripJsonComments(json: string): string {
|
||||||
return json.replace(/^\s*\/\/.*$/gm, "").replace(/,(\s*[}\]])/g, "$1")
|
return json
|
||||||
|
.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (m, g) => (g ? "" : m))
|
||||||
|
.replace(/,(\s*[}\]])/g, "$1")
|
||||||
|
}
|
||||||
|
|
||||||
|
function getConfigPaths(directory: string): string[] {
|
||||||
|
return [
|
||||||
|
path.join(directory, ".opencode", "opencode.json"),
|
||||||
|
path.join(directory, ".opencode", "opencode.jsonc"),
|
||||||
|
USER_OPENCODE_CONFIG,
|
||||||
|
USER_OPENCODE_CONFIG_JSONC,
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getLocalDevPath(directory: string): string | null {
|
export function getLocalDevPath(directory: string): string | null {
|
||||||
const projectConfig = path.join(directory, ".opencode", "opencode.json")
|
for (const configPath of getConfigPaths(directory)) {
|
||||||
|
|
||||||
for (const configPath of [projectConfig, USER_OPENCODE_CONFIG]) {
|
|
||||||
try {
|
try {
|
||||||
if (!fs.existsSync(configPath)) continue
|
if (!fs.existsSync(configPath)) continue
|
||||||
const content = fs.readFileSync(configPath, "utf-8")
|
const content = fs.readFileSync(configPath, "utf-8")
|
||||||
@@ -31,7 +41,11 @@ export function getLocalDevPath(directory: string): string | null {
|
|||||||
|
|
||||||
for (const entry of plugins) {
|
for (const entry of plugins) {
|
||||||
if (entry.startsWith("file://") && entry.includes(PACKAGE_NAME)) {
|
if (entry.startsWith("file://") && entry.includes(PACKAGE_NAME)) {
|
||||||
return entry.replace("file://", "")
|
try {
|
||||||
|
return fileURLToPath(entry)
|
||||||
|
} catch {
|
||||||
|
return entry.replace("file://", "")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
@@ -86,9 +100,7 @@ export interface PluginEntryInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function findPluginEntry(directory: string): PluginEntryInfo | null {
|
export function findPluginEntry(directory: string): PluginEntryInfo | null {
|
||||||
const projectConfig = path.join(directory, ".opencode", "opencode.json")
|
for (const configPath of getConfigPaths(directory)) {
|
||||||
|
|
||||||
for (const configPath of [projectConfig, USER_OPENCODE_CONFIG]) {
|
|
||||||
try {
|
try {
|
||||||
if (!fs.existsSync(configPath)) continue
|
if (!fs.existsSync(configPath)) continue
|
||||||
const content = fs.readFileSync(configPath, "utf-8")
|
const content = fs.readFileSync(configPath, "utf-8")
|
||||||
@@ -170,7 +182,6 @@ export async function checkForUpdate(directory: string): Promise<UpdateCheckResu
|
|||||||
return { needsUpdate: false, currentVersion: null, latestVersion: null, isLocalDev: false, isPinned: false }
|
return { needsUpdate: false, currentVersion: null, latestVersion: null, isLocalDev: false, isPinned: false }
|
||||||
}
|
}
|
||||||
|
|
||||||
// Respect version pinning
|
|
||||||
if (pluginInfo.isPinned) {
|
if (pluginInfo.isPinned) {
|
||||||
log(`[auto-update-checker] Version pinned to ${pluginInfo.pinnedVersion}, skipping update check`)
|
log(`[auto-update-checker] Version pinned to ${pluginInfo.pinnedVersion}, skipping update check`)
|
||||||
return { needsUpdate: false, currentVersion: pluginInfo.pinnedVersion, latestVersion: null, isLocalDev: false, isPinned: true }
|
return { needsUpdate: false, currentVersion: pluginInfo.pinnedVersion, latestVersion: null, isLocalDev: false, isPinned: true }
|
||||||
@@ -190,6 +201,5 @@ export async function checkForUpdate(directory: string): Promise<UpdateCheckResu
|
|||||||
|
|
||||||
const needsUpdate = currentVersion !== latestVersion
|
const needsUpdate = currentVersion !== latestVersion
|
||||||
log(`[auto-update-checker] Current: ${currentVersion}, Latest: ${latestVersion}, NeedsUpdate: ${needsUpdate}`)
|
log(`[auto-update-checker] Current: ${currentVersion}, Latest: ${latestVersion}, NeedsUpdate: ${needsUpdate}`)
|
||||||
|
|
||||||
return { needsUpdate, currentVersion, latestVersion, isLocalDev: false, isPinned: false }
|
return { needsUpdate, currentVersion, latestVersion, isLocalDev: false, isPinned: false }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,3 +38,4 @@ function getUserConfigDir(): string {
|
|||||||
|
|
||||||
export const USER_CONFIG_DIR = getUserConfigDir()
|
export const USER_CONFIG_DIR = getUserConfigDir()
|
||||||
export const USER_OPENCODE_CONFIG = path.join(USER_CONFIG_DIR, "opencode", "opencode.json")
|
export const USER_OPENCODE_CONFIG = path.join(USER_CONFIG_DIR, "opencode", "opencode.json")
|
||||||
|
export const USER_OPENCODE_CONFIG_JSONC = path.join(USER_CONFIG_DIR, "opencode", "opencode.jsonc")
|
||||||
|
|||||||
Reference in New Issue
Block a user