package.json files that start with a UTF-8 BOM are rejected as invalid JSON
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 82/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- javascript, node.js
- Bereich
- cli
Rechercherichtung
Lies lib/workspace.js, lib/package-managers.js und lib/config.js, beginnend mit den drei im Issue genannten Parsing-Stellen. Prüfe, wie ihre vorhandenen Tests das Parsen von JSON abdecken, und ergänze Fälle mit vorangestelltem BOM für getScripts(), detectPackageManager() und readWorkspaceConfig(). Fertig ist die Aufgabe, wenn jede Datei erfolgreich gelesen wird und das BOM ihre geparsten Werte nicht beeinflusst.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Description
A package.json that starts with a UTF-8 byte order mark (BOM) is rejected by the CLI, while npm reads it without complaint. Files like this are common on Windows: Windows PowerShell 5.1 writes a BOM with Set-Content -Encoding UTF8 or Out-File -Encoding utf8, and some editors add one.
For such a project, the CLI:
- shows no scripts: opening the project shows
Could not read package.json: Invalid JSON in …instead of the script list, althoughnpm run <script>works in that folder; - would pick the wrong package manager: the
packageManagerfield is read with the sameJSON.parse, which fails silently, so a"packageManager": "[email protected]"project is detected as npm.
The CLI's own configuration file has the same problem: a config.json saved with a BOM, for example after editing it in an editor that adds one, is reported as Invalid configuration JSON.
Steps to reproduce
-
Create a project whose
package.jsonstarts with a BOM.In a POSIX shell:
mkdir -p /tmp/dws-bom/bom-app printf '\357\273\277{"name":"bom-app","packageManager":"[email protected]","scripts":{"hello":"echo hello"}}' \ > /tmp/dws-bom/bom-app/package.jsonIn PowerShell 7, the same file can be written with
Set-Content -Encoding utf8BOM; Windows PowerShell 5.1 adds the BOM with-Encoding UTF8. -
Check that npm accepts it:
cd /tmp/dws-bom/bom-app && npm run helloThis prints
hello. -
Start the published CLI on the workspace, then open
bom-app:DEV_WORKSPACE_CONFIG=/tmp/dws-bom/config.json \ npx -p @modulane/[email protected] dws --workspace /tmp/dws-bom
Actual behaviour
The project screen shows the error from getScripts(). Observed on Windows, with the folder path shortened:
Could not read package.json: Invalid JSON in …\bom-app\package.json: Unexpected token '', "{"name":""... is not valid JSON
Called directly on the same folder, detectPackageManager() returns { "name": "npm", "source": "default" } instead of pnpm from the packageManager field.
Expected behaviour
The BOM is ignored, as npm does: the script list shows hello, and the package manager line reads pnpm (from the packageManager field). A config.json with a BOM is read normally.
Cause
Three places pass the file content straight to JSON.parse, which rejects a leading U+FEFF:
getScripts()inworkspace.js;readPackageManagerField()inpackage-managers.js, which then falls back to the lockfile or npm without any message;readWorkspaceConfig()inconfig.js.
Suggested fix
- Remove a single leading
before parsing, in all three places, for example with a small shared helper that reads and parses a JSON file. Only the start of the file is affected, so a BOM-like character inside a string value is kept. - Add tests:
getScripts(),detectPackageManager()andreadWorkspaceConfig()each read a file that starts with a BOM.
I'm happy to open a PR for this.
Environment
@modulane/dev-workspace-cli0.5.0 from npm.lib/is identical onmainat dfccb6b.- Node.js 22.13.1 and npm 10.9.2, Windows 11. The parsing code is the same on every platform.
- Vorherrschende Sprache
- JavaScript
- Sterne
- 0
- Forks
- 0
- Ø Merge
- 43 Min.
- Gemergte PRs (30 T.)
- 20
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus modulane/dev-workspace-cli
-
enhancement good first issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
modulane/dev-workspace-cli#26 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 22/100
modulane/dev-workspace-cli#54 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement help wanted
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 43/100
modulane/dev-workspace-cli#53 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
modulane/dev-workspace-cli#52 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
modulane/dev-workspace-cli#51 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in modulane/dev-workspace-cli
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
Maintainer antworten meist innerhalb von 1 Tag
-
account: profile bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 5 Tagen
-
ai-driven-fuzzing bug claude Minor
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
linagora/cozy-client#1777 · 1 Kommentar · 1 Reaktion ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 64/100
NanmiCoder/dsh-agent-teams#326 ·
Maintainer antworten meist innerhalb von 1 Tag
-
[guide] AGENTS.md claims the coverage gate, e2e and full lint run on every PR after ADR 0011 focused validationEvtl. vergeben @hivecommons-hive hat das heute übernommen. Offenagent/guide documentation hive/claimed-by-guide stage/040-covered-by-pr
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 81/100
cncf/endusers#2006 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag