{"record":{"id":"834ab18c528bcf9f","repo":"dagger/dagger","slug":"failed-to-set-typescript-dependency-w","errorCode":null,"errorMessage":"failed to set typescript dependency: %w","messagePattern":"failed to set typescript dependency: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"sdk/typescript/runtime/tsutils/package_json_updator.go","lineNumber":23,"sourceCode":"\t\"typescript-sdk/tsdistconsts\"\n\n\t\"github.com/tidwall/gjson\"\n\t\"github.com/tidwall/sjson\"\n)\n\nfunc UpdatePackageJSONForModule(packageJSON string) (string, error) {\n\tpackageJSON = removeJSONComments(packageJSON)\n\n\t// Set type to module\n\tpackageJSON, err := sjson.Set(packageJSON, \"type\", \"module\")\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to set type to module: %w\", err)\n\t}\n\n\t// Set typescript dependency if it's not already set\n\tpackageJSON, err = setIfNotExists(packageJSON, \"dependencies.typescript\", tsdistconsts.DefaultTypeScriptVersion)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to set typescript dependency: %w\", err)\n\t}\n\n\t// Remove \"@dagger.io/dagger\" from dependencies if it's set\n\t// so we smoothly transition from local to module\n\tpackageJSON, err = sjson.Delete(packageJSON, \"dependencies.\"+gjson.Escape(daggerLibPathAlias))\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to delete @dagger.io/dagger dependency: %w\", err)\n\t}\n\n\t// Remove \"@dagger.io/dagger\" from devDependencies if it's set\n\t// so we smoothly transition from local to module\n\t// (older dagger version were setting dagger in devDependencies)\n\tpackageJSON, err = sjson.Delete(packageJSON, \"devDependencies.\"+gjson.Escape(daggerLibPathAlias))\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to delete @dagger.io/dagger dependency: %w\", err)\n\t}\n\n\treturn packageJSON, nil","sourceCodeStart":5,"sourceCodeEnd":41,"githubUrl":"https://github.com/dagger/dagger/blob/82ba2681dbe30d3547a1dc50ea495900ab5b6047/sdk/typescript/runtime/tsutils/package_json_updator.go#L5-L41","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","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."],"exampleFix":"// before: dependencies not an object\n{ \"dependencies\": \"latest\" }\n// after\n{ \"dependencies\": { \"typescript\": \"^5.0.0\" } }","handlingStrategy":"validation","validationCode":"var pkg map[string]any\nif err := json.Unmarshal([]byte(pkgJSON), &pkg); err != nil {\n\treturn fmt.Errorf(\"package.json invalid: %w\", err)\n}\nif deps, ok := pkg[\"dependencies\"]; ok {\n\tif _, ok := deps.(map[string]any); !ok {\n\t\treturn errors.New(\"dependencies must be an object\")\n\t}\n}","typeGuard":"func depsIsObject(pkgJSON string) bool {\n\treturn gjson.Get(pkgJSON, \"dependencies\").IsObject()\n}","tryCatchPattern":"out, err := UpdatePackageJSONForModule(pkgJSON)\nif err != nil {\n\tif strings.Contains(err.Error(), \"failed to set typescript dependency\") {\n\t\t// fix dependencies structure, then retry\n\t}\n\treturn err\n}","preventionTips":["Ensure dependencies (if present) is always a JSON object.","Avoid duplicate JSON keys that confuse parsers.","Validate package.json with jq before codegen."],"tags":["typescript","npm","json","config"],"backgroundTag":"malformed-json-config","analyzedSha":"82ba2681dbe30d3547a1dc50ea495900ab5b6047","analyzedAt":"2026-09-05T07:21:37.930Z","contentChangedAt":"2026-09-05T07:21:37.930Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}