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, nil

View on GitHub (pinned to 82ba2681db)

Solutions

  1. Ensure package.json parses with jq and that "dependencies" (if present) is a JSON object.
  2. Fix any duplicate keys or broken structure around the dependencies section.
  3. 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

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


AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05). Data as JSON: /api/errors/834ab18c528bcf9f. Report an issue: GitHub.