{"record":{"id":"5d5cd43f68889fe2","repo":"apple/pkl","slug":"invalid-object","errorCode":"invalid object","errorMessage":"invalid object","messagePattern":"invalid object","errorType":"error_code","errorClass":"VmException","httpStatus":null,"severity":"error","filePath":"pkl-core/src/main/java/org/pkl/core/project/ProjectDeps.java","lineNumber":119,"sourceCode":"  private static EconomicMap<CanonicalPackageUri, Dependency> parseResolvedDependencies(\n      Object object) throws JsonParseException, URISyntaxException {\n    if (!(object instanceof JsObject jsObj)) {\n      throw new FormatException(\"resolvedDependencies\", \"object\", object.getClass());\n    }\n    var ret = EconomicMaps.<CanonicalPackageUri, Dependency>create(jsObj.size());\n    for (var entry : jsObj.entrySet()) {\n      Dependency resolvedDependency = parseResolvedDependency(entry);\n      var canonicalPackageUri = CanonicalPackageUri.of(entry.getKey());\n      ret.put(canonicalPackageUri, resolvedDependency);\n    }\n    return ret;\n  }\n\n  private static Dependency parseResolvedDependency(Entry<String, Object> entry)\n      throws JsonParseException {\n    var input = entry.getValue();\n    if (!(input instanceof JsObject obj)) {\n      throw new VmExceptionBuilder().evalError(\"invalid object\").build();\n    }\n    var type = obj.getString(\"type\");\n    var uri = obj.get(\"uri\", PackageUtils::parsePackageUriWithoutChecksums);\n    if (type.equals(\"remote\")) {\n      var checksums = DependencyMetadata.parseChecksums(obj.getObject(\"checksums\"));\n      return new RemoteDependency(uri, checksums);\n    } else {\n      assert type.equals(\"local\");\n      var pathStr = obj.getString(\"path\");\n      return new Dependency.LocalDependency(uri, Path.of(pathStr));\n    }\n  }\n\n  public ProjectDeps(EconomicMap<CanonicalPackageUri, Dependency> resolvedDependencies) {\n    this.resolvedDependencies = resolvedDependencies;\n  }\n\n  /** Given a declared dependency, return the resolved dependency. */","sourceCodeStart":101,"sourceCodeEnd":137,"githubUrl":"https://github.com/apple/pkl/blob/f3efcbfc9b60d30053b0536d664948d7aa1b8673/pkl-core/src/main/java/org/pkl/core/project/ProjectDeps.java#L101-L137","documentation":"parseResolvedDependency requires each resolved dependency entry value to be a JSON object. If the value is not a JsObject, a VmException evalError 'invalid object' is thrown. The message is unhelpfully vague — it does not name the key or expected shape.","triggerScenarios":"ProjectDeps parsing where any entry under resolvedDependencies maps to a non-object value (string, number, array, null) instead of {type, uri, checksums?}.","commonSituations":"Hand-edited deps files; missing dependency object fields due to partial writes or merge conflicts; script-generated JSON with the wrong nesting.","solutions":["Make each resolvedDependencies value a full dependency object with type and uri fields","Regenerate the deps file with the Pkl CLI rather than editing manually","Locate the offending entry by validating every value is an object before parsing"],"exampleFix":"// before\n\"resolvedDependencies\": { \"package://example.com/foo@1\": \"remote\" }\n// after\n\"resolvedDependencies\": { \"package://example.com/foo@1\": { \"type\": \"remote\", \"uri\": \"package://example.com/foo@1\", \"checksums\": {...} } }","handlingStrategy":"type-guard","validationCode":"for (var e : resolvedDeps.entrySet()) {\n  if (!(e.getValue() instanceof Map)) throw new IllegalArgumentException(\"entry not an object: \" + e.getKey());\n}","typeGuard":"boolean isDependencyObject(Object o) { return o instanceof Map<?,?> m && m.containsKey(\"type\") && m.containsKey(\"uri\"); }","tryCatchPattern":"try { ProjectDeps.parse(input); } catch (PklException e) { /* find non-object entry and regenerate file */ }","preventionTips":["Keep each resolvedDependencies value a complete dependency object","Validate entries before parsing","Regenerate the file with tooling instead of manual edits"],"tags":["json","type-mismatch","schema"],"backgroundTag":"type-mismatch","analyzedSha":"f3efcbfc9b60d30053b0536d664948d7aa1b8673","analyzedAt":"2026-09-08T13:10:45.570Z","contentChangedAt":"2026-09-08T13:10:45.570Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}