Skip to main content
Glama
patternProperties.test.js3.88 kB
'use strict' const { test } = require('node:test') const build = require('..') test('patternProperties', (t) => { t.plan(1) const stringify = build({ title: 'patternProperties', type: 'object', properties: { str: { type: 'string' } }, patternProperties: { foo: { type: 'string' } } }) const obj = { str: 'test', foo: 42, ofoo: true, foof: 'string', objfoo: { a: true }, notMe: false } t.assert.equal(stringify(obj), '{"str":"test","foo":"42","ofoo":"true","foof":"string","objfoo":"[object Object]"}') }) test('patternProperties should not change properties', (t) => { t.plan(1) const stringify = build({ title: 'patternProperties should not change properties', type: 'object', properties: { foo: { type: 'string' } }, patternProperties: { foo: { type: 'number' } } }) const obj = { foo: '42', ofoo: 42 } t.assert.equal(stringify(obj), '{"foo":"42","ofoo":42}') }) test('patternProperties - string coerce', (t) => { t.plan(1) const stringify = build({ title: 'check string coerce', type: 'object', properties: {}, patternProperties: { foo: { type: 'string' } } }) const obj = { foo: true, ofoo: 42, arrfoo: ['array', 'test'], objfoo: { a: 'world' } } t.assert.equal(stringify(obj), '{"foo":"true","ofoo":"42","arrfoo":"array,test","objfoo":"[object Object]"}') }) test('patternProperties - number coerce', (t) => { t.plan(2) const stringify = build({ title: 'check number coerce', type: 'object', properties: {}, patternProperties: { foo: { type: 'number' } } }) const coercibleValues = { foo: true, ofoo: '42' } t.assert.equal(stringify(coercibleValues), '{"foo":1,"ofoo":42}') const incoercibleValues = { xfoo: 'string', arrfoo: [1, 2], objfoo: { num: 42 } } try { stringify(incoercibleValues) t.fail('should throw an error') } catch (err) { t.assert.ok(err) } }) test('patternProperties - boolean coerce', (t) => { t.plan(1) const stringify = build({ title: 'check boolean coerce', type: 'object', properties: {}, patternProperties: { foo: { type: 'boolean' } } }) const obj = { foo: 'true', ofoo: 0, arrfoo: [1, 2], objfoo: { a: true } } t.assert.equal(stringify(obj), '{"foo":true,"ofoo":false,"arrfoo":true,"objfoo":true}') }) test('patternProperties - object coerce', (t) => { t.plan(1) const stringify = build({ title: 'check object coerce', type: 'object', properties: {}, patternProperties: { foo: { type: 'object', properties: { answer: { type: 'number' } } } } }) const obj = { objfoo: { answer: 42 } } t.assert.equal(stringify(obj), '{"objfoo":{"answer":42}}') }) test('patternProperties - array coerce', (t) => { t.plan(2) const stringify = build({ title: 'check array coerce', type: 'object', properties: {}, patternProperties: { foo: { type: 'array', items: { type: 'string' } } } }) const coercibleValues = { arrfoo: [1, 2] } t.assert.equal(stringify(coercibleValues), '{"arrfoo":["1","2"]}') const incoercibleValues = { foo: 'true', ofoo: 0, objfoo: { tyrion: 'lannister' } } t.assert.throws(() => stringify(incoercibleValues)) }) test('patternProperties - fail on invalid regex, handled by ajv', (t) => { t.plan(1) t.assert.throws(() => build({ title: 'check array coerce', type: 'object', properties: {}, patternProperties: { 'foo/\\': { type: 'array', items: { type: 'string' } } } }), new Error('schema is invalid: data/patternProperties must match format "regex"')) })

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