GithubHelp home page GithubHelp logo

Comments (7)

aboutlo avatar aboutlo commented on June 25, 2024 1

Still, a bug in fluent because of the spec

given

const schema = S.object().additionalProperties(true).title('title string coerce')

expect:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "additionalProperties": true,
  "title": "title string coerce"
}

rather than:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "additionalProperties": {},
  "title": "title string coerce"
}

However, additionalProperties: {} is valid it means don't strip
I found somewhere else where they are discussing the same topic: OAI/OpenAPI-Specification#668 (comment)

from fluent-json-schema.

jsumners avatar jsumners commented on June 25, 2024 1

Thank you.

from fluent-json-schema.

aboutlo avatar aboutlo commented on June 25, 2024

I don't know how it works fastJson in details but I have the feeling the issue could be there

to me

{
    title: 'check string coerce',
    type: 'object',
    properties: {},
    additionalProperties: true
  }

become

const schema = S.object().additionalProperties(true).title('title string coerce')
console.log(JSON.stringify(schema.valueOf(),undefined,2))

which will generate

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "additionalProperties": {},
  "title": "title string coerce"
}

I wonder about additionalProperties: true it isn't required to be set as true because by default a schema accepts an object with extra props. additionalProperties: true will be translated as additionalProperties: {}

So either you set to false or you pass a schema to specify which kind of extra props you want.

from fluent-json-schema.

jsumners avatar jsumners commented on June 25, 2024

Without additionalProperties:true fast-json-stringify will strip properties that are not explicitly stated in the schema.

from fluent-json-schema.

aboutlo avatar aboutlo commented on June 25, 2024

So looking to the reference:
https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.5.6

The value of "additionalProperties" MUST be a valid JSON Schema.

So the bug is here: https://github.com/fastify/fluent-schema/blob/73adbf43075104d5ac05a874313fd7dbbda72474/src/ObjectSchema.js#L52-L52

we should need something like this:

additionalProperties: value => {
      if (typeof value !== 'boolean' && !isFluentSchema(value))
        throw new Error("'additionalProperties' must be a boolean or a FluentSchema object")
      const attribute =
        typeof value === 'boolean'
          ? value.valueOf()
          : omit(value.valueOf(), ['$schema'])
      return setAttribute({ schema, ...options }, [
        'additionalProperties',
        attribute,
        'array',
      ])
    }

from fluent-json-schema.

jsumners avatar jsumners commented on June 25, 2024

FYI: re-reading this issue this morning I noticed that I left out a "not" in my last reply. Please re-read it to make sure it still makes sense.

from fluent-json-schema.

aboutlo avatar aboutlo commented on June 25, 2024

PR merged

from fluent-json-schema.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.