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

Code before:
        `portrait`,
        `portrait-primary`,
        `portrait-secondary`
      ) // From: https://www.w3.org/TR/screen-orientation/#screenorientation-interface
      .description(
        `The orientation member defines the default orientation for all the website's top-level browsing contexts`
      ),
    prefer_related_applications: Joi.boolean()
      .optional()
      .description(
        `The prefer_related_applications member is a boolean value that specifies that applications listed in related_applications should be preferred over the web application.`
      ),
    related_applications: Joi.array()
      .optional()
      .items(ExternalApplicationResource)
      .description(
        `The related_applications field is an array of objects specifying native applications that are installable by, or accessible to, the underlying platform.`
      ),
    scope: Joi.string()
      .optional()
      .description(
        `The scope member is a string that defines the navigation scope of this web application's application context.`
      ),
    screenshots: Joi.array()
      .optional()
      .items(ManifestImageResource)
      .description(
        `The screenshots member defines an array of screenshots intended to showcase the application.`
      ),
    short_name: Joi.string()
      .optional()
      .description(
        `The short_name member is a string that represents the name of the web application displayed to the user if there is not enough space to display name.`
      ),
    shortcuts: Joi.array()
      .optional()
      .items(ShortcutItem)
      .description(
        `Each ShortcutItem represents a link to a key task or page within a web app. `
      ),
    start_url: Joi.string()
      .optional()
      .description(
        `The start_url member is a string that represents the start URL of the web application.`
      ),
    theme_color: Joi.string()
      .optional()
      .description(
        `The theme_color member is a string that defines the default theme color for the application.`
      ),
  })

Review comment (security):
There's a [supplementary spec](https://w3c.github.io/manifest-app-info/) (I know, not confusing at all) that contains extra members. The two relevant ones are platform and label. I suggest maybe we at least add label to screenshots because "For accessibility, authors are encouraged to provide a label for each screenshot."

Code after:
      .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()
      .valid(
        `any`,
        `natural`,
        `landscape`,
        `landscape-primary`,
        `landscape-secondary`,
        `portrait`,
        `portrait-primary`,
        `portrait-secondary`
      ) // From: https://www.w3.org/TR/screen-orientation/#screenorientation-interface
      .description(
        `The orientation member defines the default orientation for all the website's top-level browsing contexts`
      ),
    prefer_related_applications: Joi.boolean()
      .optional()
      .description(
        `The prefer_related_applications member is a boolean value that specifies that applications listed in related_applications should be preferred over the web application.`
      ),
    related_applications: Joi.array()
      .optional()
      .items(ExternalApplicationResource)
      .description(
        `The related_applications field is an array of objects specifying native applications that are installable by, or accessible to, the underlying platform.`
      ),
    scope: Joi.string()
      .optional()
      .description(
        `The scope member is a string that defines the navigation scope of this web application's application context.`
      ),
    screenshots: Joi.array()
      .optional()
      .items(
        ManifestImageResource.keys({
          label: Joi.string()
            .optional()
            .description(