Search code examples
jsonschemafastify

Combine multiple schemas in fluent-json-schema


I'm defining some routing schemes for fastify. I would like to reuse the code of some schema by combining them together without making redundancy. How can I combine two patterns into one?


const Dataset = S.object()
      .prop('dataset',
        S.string().enum(datasetsNames)
      )
      .default('default')
      .required();

const Locations = S.object()
      .prop('locations', S.string())

const CombinedParams = S.object()//...COMBINE Locations and Dataset...???

const schemas = {

  schemaDatasetParams: {
    description: 'schema having only Dataset',
    query: ...,
    params: Dataset,
  },

  schemaDatasetLocationsParams: {
    description: 'schema having a comination of Locations and Dataset',
    query: ...,
    params: CombinedParams
  }
}

Solution

  • Something like this?

    const schema1 = S.object()
        .additionalProperties(false)
        .prop('name', S.string().minLength(2))
        .prop('email', S.string().format(S.FORMATS.EMAIL))
        .prop('password', S.string().minLength(6))
        .prop('userRoles', S.array().items(S.number()).minItems(1));
    
    const schema2 = S.object().prop('id', S.number()).required();
    
    const combinedSchema = schema1.without(['password']).extend(schema2);