Skip to main content
Glama
get-schema-dependencies.test.js3.78 kB
'use strict' const assert = require('node:assert/strict') const { test } = require('node:test') const { RefResolver } = require('../index.js') test('should return all nested schema dependencies', () => { const refResolver = new RefResolver() const schema1Id = 'schemaId1' const schema1 = { $id: schema1Id, type: 'object', properties: { foo: { type: 'string' } } } const schema2Id = 'schemaId2' const schema2 = { $id: schema2Id, $ref: schema1Id } const schema3Id = 'schemaId3' const schema3 = { $id: schema3Id, $ref: schema2Id } refResolver.addSchema(schema1) refResolver.addSchema(schema2) refResolver.addSchema(schema3) const schema1Deps = refResolver.getSchemaDependencies(schema1Id) assert.deepStrictEqual(schema1Deps, {}) const schema2Deps = refResolver.getSchemaDependencies(schema2Id) assert.deepStrictEqual(schema2Deps, { [schema1Id]: schema1 }) const schema3Deps = refResolver.getSchemaDependencies(schema3Id) assert.deepStrictEqual(schema3Deps, { [schema1Id]: schema1, [schema2Id]: schema2 }) }) test('should resolve a dependency to a subschema', () => { const refResolver = new RefResolver() const schema1Id = 'schemaId1' const subSchema1Id = 'subSchemaId1' const schema1 = { $id: schema1Id, definitions: { subSchema: { $id: subSchema1Id, type: 'object', properties: { bar: { type: 'string' } } } } } const schema2Id = 'schemaId2' const schema2 = { $id: schema2Id, $ref: subSchema1Id + '#/definitions/subSchema' } refResolver.addSchema(schema1) refResolver.addSchema(schema2) const schema1Deps = refResolver.getSchemaDependencies(schema1Id) assert.deepStrictEqual(schema1Deps, {}) const schema2Deps = refResolver.getSchemaDependencies(schema2Id) assert.deepStrictEqual(schema2Deps, { [subSchema1Id]: schema1.definitions.subSchema }) }) test('should resolve a dependency with a json path', () => { const refResolver = new RefResolver() const schema1Id = 'schemaId1' const subSchema1Id = 'subSchemaId1' const schema1 = { $id: schema1Id, definitions: { subSchema: { $id: subSchema1Id, type: 'object', properties: { bar: { type: 'string' } } } } } const schema2Id = 'schemaId2' const schema2 = { $id: schema2Id, $ref: schema1Id + '#/definitions/subSchema' } refResolver.addSchema(schema1) refResolver.addSchema(schema2) const schema1Deps = refResolver.getSchemaDependencies(schema1Id) assert.deepStrictEqual(schema1Deps, {}) const schema2Deps = refResolver.getSchemaDependencies(schema2Id) assert.deepStrictEqual(schema2Deps, { [schema1Id]: schema1 }) }) test('should include dependency schema only once', () => { const refResolver = new RefResolver() const schema1Id = 'schemaId1' const schema1 = { $id: schema1Id, type: 'object', properties: { foo: { type: 'string' } } } const schema2Id = 'schemaId2' const schema2 = { $id: schema2Id, $ref: schema1Id } const schema3Id = 'schemaId3' const schema3 = { $id: schema3Id, allOf: [ { $ref: schema1Id }, { $ref: schema2Id } ] } refResolver.addSchema(schema1) refResolver.addSchema(schema2) refResolver.addSchema(schema3) const schema1Deps = refResolver.getSchemaDependencies(schema1Id) assert.deepStrictEqual(schema1Deps, {}) const schema2Deps = refResolver.getSchemaDependencies(schema2Id) assert.deepStrictEqual(schema2Deps, { [schema1Id]: schema1 }) const schema3Deps = refResolver.getSchemaDependencies(schema3Id) assert.deepStrictEqual(schema3Deps, { [schema1Id]: schema1, [schema2Id]: schema2 }) })

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/krtw00/search-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server