dagger/dagger · error
failed to set typescript dependency: %w
Error message
failed to set typescript dependency: %w
What it means
After setting type=module, UpdatePackageJSONForModule uses setIfNotExists to add dependencies.typescript (pinned to tsdistconsts.DefaultTypeScriptVersion) when absent. This wrapper fires when the underlying sjson mutation fails — i.e. the package.json string could not be parsed or mutated as valid JSON at that step.
Source
Thrown at sdk/typescript/runtime/tsutils/package_json_updator.go:23
"typescript-sdk/tsdistconsts"
"github.com/tidwall/gjson"
"github.com/tidwall/sjson"
)
func UpdatePackageJSONForModule(packageJSON string) (string, error) {
packageJSON = removeJSONComments(packageJSON)
// Set type to module
packageJSON, err := sjson.Set(packageJSON, "type", "module")
if err != nil {
return "", fmt.Errorf("failed to set type to module: %w", err)
}
// Set typescript dependency if it's not already set
packageJSON, err = setIfNotExists(packageJSON, "dependencies.typescript", tsdistconsts.DefaultTypeScriptVersion)
if err != nil {
return "", fmt.Errorf("failed to set typescript dependency: %w", err)
}
// Remove "@dagger.io/dagger" from dependencies if it's set
// so we smoothly transition from local to module
packageJSON, err = sjson.Delete(packageJSON, "dependencies."+gjson.Escape(daggerLibPathAlias))
if err != nil {
return "", fmt.Errorf("failed to delete @dagger.io/dagger dependency: %w", err)
}
// Remove "@dagger.io/dagger" from devDependencies if it's set
// so we smoothly transition from local to module
// (older dagger version were setting dagger in devDependencies)
packageJSON, err = sjson.Delete(packageJSON, "devDependencies."+gjson.Escape(daggerLibPathAlias))
if err != nil {
return "", fmt.Errorf("failed to delete @dagger.io/dagger dependency: %w", err)
}
return packageJSON, nilView on GitHub (pinned to 82ba2681db)
Solutions
- Ensure package.json parses with jq and that "dependencies" (if present) is a JSON object.
- Fix any duplicate keys or broken structure around the dependencies section.
- Regenerate package.json with `npm init -y` (or let Dagger create it) and re-run dagger codegen.
Example fix
// before: dependencies not an object
{ "dependencies": "latest" }
// after
{ "dependencies": { "typescript": "^5.0.0" } } Defensive patterns
Strategy: validation
Validate before calling
var pkg map[string]any
if err := json.Unmarshal([]byte(pkgJSON), &pkg); err != nil {
return fmt.Errorf("package.json invalid: %w", err)
}
if deps, ok := pkg["dependencies"]; ok {
if _, ok := deps.(map[string]any); !ok {
return errors.New("dependencies must be an object")
}
} Type guard
func depsIsObject(pkgJSON string) bool {
return gjson.Get(pkgJSON, "dependencies").IsObject()
} Try / catch
out, err := UpdatePackageJSONForModule(pkgJSON)
if err != nil {
if strings.Contains(err.Error(), "failed to set typescript dependency") {
// fix dependencies structure, then retry
}
return err
} Prevention
- Ensure dependencies (if present) is always a JSON object.
- Avoid duplicate JSON keys that confuse parsers.
- Validate package.json with jq before codegen.
When it happens
Trigger: UpdatePackageJSONForModule reaching the typescript-dependency step with invalid JSON, or an existing dependencies entry whose structure prevents sjson from setting dependencies.typescript (e.g. dependencies is not an object).
Common situations: package.json where "dependencies" is an array or string instead of an object; malformed JSON that happened to pass the earlier type step only because it failed silently; edits by non-JSON tools.
Related errors
- failed to set type to module: %w
- failed to delete @dagger.io/dagger dependency: %w
- failed to update deno config paths: %w
- failed to update deno config paths %s: %w
- decoding legacy workspace config: %w
AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05).
Data as JSON: /api/errors/834ab18c528bcf9f.
Report an issue: GitHub.