Browse Source

fix: {file:...} references weren't being parsed correctly in some cases (#1499)

Aiden Cline 6 tháng trước cách đây
mục cha
commit
90d1698aed

+ 11 - 4
packages/opencode/src/config/config.ts

@@ -373,14 +373,21 @@ export namespace Config {
       return process.env[varName] || ""
       return process.env[varName] || ""
     })
     })
 
 
-    const fileMatches = text.match(/"?\{file:([^}]+)\}"?/g)
+    const fileMatches = text.match(/\{file:[^}]+\}/g)
     if (fileMatches) {
     if (fileMatches) {
       const configDir = path.dirname(configPath)
       const configDir = path.dirname(configPath)
+      const lines = text.split("\n")
+
       for (const match of fileMatches) {
       for (const match of fileMatches) {
-        const filePath = match.replace(/^"?\{file:/, "").replace(/\}"?$/, "")
+        const lineIndex = lines.findIndex((line) => line.includes(match))
+        if (lineIndex !== -1 && lines[lineIndex].trim().startsWith("//")) {
+          continue // Skip if line is commented
+        }
+        const filePath = match.replace(/^\{file:/, "").replace(/\}$/, "")
         const resolvedPath = path.isAbsolute(filePath) ? filePath : path.resolve(configDir, filePath)
         const resolvedPath = path.isAbsolute(filePath) ? filePath : path.resolve(configDir, filePath)
-        const fileContent = await Bun.file(resolvedPath).text()
-        text = text.replace(match, JSON.stringify(fileContent))
+        const fileContent = (await Bun.file(resolvedPath).text()).trim()
+        // escape newlines/quotes, strip outer quotes
+        text = text.replace(match, JSON.stringify(fileContent).slice(1, -1))
       }
       }
     }
     }