Repository: gatsbyjs/gatsby
File: packages/gatsby-plugin-manifest/src/pluginOptionsSchema.js (JavaScript)

Code before:
      .optional()
      .description(
        `The background_color member defines a placeholder background color for the application page to display before its stylesheet is loaded.`
      ),
    categories: Joi.array()
      .items(Joi.string().empty(``))
      .optional()
      .description(
        `The categories member is an array of strings defining the names of categories that the application supposedly belongs to.`
      ),
    description: Joi.string()
      .optional()
      .description(
        `The description member is a string in which developers can explain what the application does. `
      ),
    dir: Joi.string()
      .optional()
      .valid(`auto`, `ltr`, `rtl`)
      .description(
        `The base direction in which to display direction-capable members of the manifest.`
      ),
    display: Joi.string()
      .optional()
      .valid(`fullscreen`, `standalone`, `minimal-ui`, `browser`)
      .description(
        `The display member is a string that determines the developers’ preferred display mode for the website`
      ),
    iarc_rating_id: Joi.string()
      .guid()
      .optional()
      .description(
        `The iarc_rating_id member is a string that represents the International Age Rating Coalition (IARC) certification code of the web application.`
      ),
    icons: Joi.array()
      .optional()
      .items(ManifestImageResource)
      .description(
        `The icons member specifies an array of objects representing image files that can serve as application icons for different contexts.`
      ),
    lang: Joi.string()
      .optional()
      .description(
        `The lang member is a string containing a single language tag.`
      ),
    name: Joi.string()
      .optional()
      .description(
        `The name member is a string that represents the name of the web application as it is usually displayed to the user.`
      ),
    orientation: Joi.string()
      .optional()

Review comment (security):
The spec recommends

> Manifest authors are encouraged to use lower-case.

So could we consider using `.lowercase()` here?

Code after:
      id: Joi.string()
        .required()
        .description(
          `The ID used to represent the application on the specified platform.`
        ),
      min_version: Joi.string()
        .optional()
        .description(
          `The minimum version of the application that is considered related to this web app.`
        ),
      fingerprints: Joi.array()
        .optional()
        .items(FingerPrint)
        .description(
          `Each Fingerprints represents a set of cryptographic fingerprints used for verifying the application.`
        ),
    })
    .or(`url`, `id`)

  const WebAppManifest = Joi.object().keys({
    background_color: Joi.string()
      .optional()
      .description(
        `The background_color member defines a placeholder background color for the application page to display before its stylesheet is loaded.`
      ),
    categories: Joi.array()
      .items(Joi.string().empty(``))
      .optional()
      .description(
        `The categories member is an array of strings defining the names of categories that the application supposedly belongs to.`
      ),
    description: Joi.string()
      .optional()
      .description(
        `The description member is a string in which developers can explain what the application does. `
      ),
    dir: Joi.string()
      .optional()
      .valid(`auto`, `ltr`, `rtl`)
      .description(
        `The base direction in which to display direction-capable members of the manifest.`
      ),
    display: Joi.string()
      .optional()
      .valid(`fullscreen`, `standalone`, `minimal-ui`, `browser`)
      .description(
        `The display member is a string that determines the developers’ preferred display mode for the website`
      ),
    iarc_rating_id: Joi.string()
      .guid()
      .optional()