stoplightio / json-schema-viewer

A JSON Schema viewer React component
Apache License 2.0
169 stars 35 forks source link

Cannot get `allOf` field from `originalFragment` when `$ref` is used within `allOf` #253

Open y805939188 opened 5 months ago

y805939188 commented 5 months ago

Context

I want to determine whether a node is a ref node by checking if its parent includes $ref.

my schema:

{
  "type": "object",
  "properties": {
    "user": {
      "allOf": [
        {
          "$ref": "#/definitions/employee"
        }
      ]
    }
  },
  "definitions": {
    "employee": {
      "type": "object",
      "properties": {
        "company": {
          "$ref": "#/definitions/company"
        }
      }
    },
    "company": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "The company's name",
          "default": "Unknown"
        }
      }
    }
  }
}

Current Behavior

I want to determine if user.company.name originates from a $ref, but there is not $ref in parent's originalFragment: image

Expected Behavior

The originalFragment should include all of the schema's original info.

Possible Workaround/Solution

Steps to Reproduce

my js code:

import { SchemaTree } from "@stoplight/json-schema-tree";

const mySchema = {
  type: "object",
  properties: {
    user: {
      allOf: [
        {
          $ref: "#/definitions/employee",
        },
      ],
    },
  },
  definitions: {
    employee: {
      type: "object",
      properties: {
        company: {
          $ref: "#/definitions/company",
        },
      },
    },
    company: {
      type: "object",
      properties: {
        name: {
          type: "string",
          description: "The company's name",
          default: "Unknown",
        },
      },
    },
  },
};

const tree = new SchemaTree(mySchema);
tree.walker.hookInto("stepIn", (node) => {
  console.log("************************");
  console.log("path: ", node.path, " node: ", node);
  console.log("************************");
  return true;
});

tree.populate();

Environment

"@stoplight/json-schema-viewer": "^4.15.1"