{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/skyuxconfig-json/latest.json",
  "title": "JSON schema for SKY UX CLI skyuxconfig.json",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/blackbaud/skyux-config/4.x.x/skyuxconfig-schema.json",
    "sourceSha256": "2603ad138984c7ceae628887beafdb1750694bd5faf3fed7957ea6bba913bbc7",
    "fileMatch": [
      "skyuxconfig.json",
      "skyuxconfig.*.json"
    ],
    "parsers": [
      "json"
    ]
  },
  "type": "object",
  "properties": {
    "a11y": {
      "description": "Enables or disables accessibility test rules. You can manage rules individually, or you can enable or disable all rules in bulk.",
      "type": [
        "object",
        "boolean"
      ],
      "properties": {
        "rules": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "app": {
      "description": "Specifies configuration options for the local app when running skyux serve",
      "type": "object",
      "properties": {
        "base": {
          "description": "Allows the base href to be set during skyux build.",
          "type": "string"
        },
        "title": {
          "description": "Controls the page title at the template level while waiting for the application to load.",
          "type": "string"
        },
        "port": {
          "description": "Configures a port for the skyux serve command to use. If no port is specified, skyux serve dynamically finds an available port.",
          "type": "string"
        },
        "externals": {
          "description": "Dynamically injects CSS and JavaScript files into SKY UX Host. You should have a specific use-case for an externals and they must be white-listed by the SKY UX team.",
          "type": "object",
          "properties": {
            "css": {
              "description": "CSS files to inject",
              "type": "object",
              "properties": {
                "before": {
                  "description": "CSS files to inject before default SKY UX files.",
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/externalFileCSS"
                  }
                },
                "after": {
                  "description": "CSS files to inject after default SKY UX files.",
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/externalFileCSS"
                  }
                }
              }
            },
            "js": {
              "description": "JS files to inject",
              "type": "object",
              "properties": {
                "before": {
                  "description": "JS files to inject before default SKY UX files.",
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/externalFileJS"
                  }
                },
                "after": {
                  "description": "JS files to inject before default SKY UX files.",
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/externalFileJS"
                  }
                }
              }
            }
          }
        },
        "styles": {
          "description": "An array of CSS or SCSS files to be bundled with the SPA.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "theming": {
          "description": "Specifies the theming capabilities of the application.",
          "type": "object",
          "properties": {
            "theme": {
              "description": "The visual theme to apply to this application.",
              "type": "string",
              "default": "default",
              "$ref": "#/$defs/availableThemes"
            },
            "supportedThemes": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/availableThemes"
              }
            }
          }
        }
      }
    },
    "appSettings": {
      "description": "Specifies data that is available for reuse throughout the application.",
      "type": "object"
    },
    "auth": {
      "description": "Indicates whether the application requires an authenticated Blackbaud ID",
      "type": "boolean"
    },
    "codeCoverageThreshold": {
      "description": "Specifies the minimum required code coverage threshold.",
      "type": "string",
      "enum": [
        "none",
        "standard",
        "strict"
      ]
    },
    "compileMode": {
      "description": "Specifies how to compile the project's code.",
      "type": "string",
      "enum": [
        "aot",
        "jit"
      ],
      "default": "aot"
    },
    "cssPath": {
      "description": "Specifies a path to reference CSS styles. This property is specific to the SKY UX docs site and is for internal Blackbaud use only.",
      "type": "string"
    },
    "enableIvy": {
      "description": "Enables or disables Angular's Ivy compiler during a build.",
      "type": "boolean"
    },
    "help": {
      "description": " Indicates whether to automatically include the help widget in the application to identify the current page and display relevant help content. This property is for internal Blackbaud use only.",
      "type": [
        "object"
      ]
    },
    "host": {
      "description": "Blackbaud Only - Specifies configuration options for communication with SKY UX Host.",
      "type": "object",
      "properties": {
        "bbCheckout": {
          "description": "Specifies bbCheckout options for the Host service.",
          "type": "object",
          "properties": {
            "version": {
              "description": "Specifies the whitelisted version of bbCheckout to include.",
              "type": "string",
              "enum": [
                "2"
              ]
            }
          }
        },
        "frameOptions": {
          "description": "Specifies frame options for the Host service.",
          "type": "object",
          "properties": {
            "none": {
              "description": "Sets the frame options to none. Superseds all other `frameOptions` properties.",
              "type": "boolean"
            },
            "self": {
              "description": "Sets the frame options to self.",
              "type": "boolean"
            },
            "blackbaud": {
              "description": "Sets the frame options to common Blackbaud URLs",
              "type": "boolean"
            },
            "urls": {
              "description": "Sets the frame options to this list.  Can be used in conjunction with the `self` and `blackbaud` properties.",
              "type": "array"
            }
          },
          "if": {
            "properties": {
              "none": {
                "const": true
              }
            },
            "required": [
              "none"
            ],
            "type": "object"
          },
          "then": {
            "not": {
              "anyOf": [
                {
                  "properties": {
                    "blackbaud": {
                      "const": true
                    }
                  },
                  "required": [
                    "blackbaud"
                  ],
                  "type": "object"
                },
                {
                  "properties": {
                    "self": {
                      "const": true
                    }
                  },
                  "required": [
                    "self"
                  ],
                  "type": "object"
                },
                {
                  "properties": {
                    "urls": {
                      "minItems": 1
                    }
                  },
                  "required": [
                    "urls"
                  ],
                  "type": "object"
                }
              ]
            }
          }
        },
        "url": {
          "description": "Specifies a base URL to pass information from skyux serve to the SKY UX Host.",
          "type": "string",
          "default": "https://host.nxt.blackbaud.com"
        }
      }
    },
    "importPath": {
      "description": "Specifies a path to reference SKY UX components in Angular. This property is specific to the SKY UX docs site and is for internal Blackbaud use only.",
      "type": "string"
    },
    "dependenciesForTranspilation": {
      "description": "Specifies a list of package dependencies that are not ES5 compatible. Each package listed will be coverted to support SKY UX Builder's target environment.",
      "type": "array"
    },
    "mode": {
      "description": "Controls how much boilerplate code to generate automatically.",
      "type": "string",
      "enum": [
        "easy",
        "advanced"
      ],
      "default": "easy"
    },
    "moduleAliases": {
      "description": "Specifies module aliases to allow for custom module resolution.",
      "type": "object"
    },
    "name": {
      "description": "Specifies the name of the project when running in SKY UX Host. By default, SKY UX Builder uses the name property in the package.json file, minus the 'blackbaud-skyux-spa-' prefix.",
      "type": "string"
    },
    "omnibar": {
      "description": "Specifies an object to pass to the omnibar's load method. This property is for internal Blackbaud use only.",
      "type": "object"
    },
    "pacts": {
      "description": "PACTS",
      "type": "array"
    },
    "params": {
      "description": "Specifies a list of parameters that are allowed at runtime.",
      "type": [
        "object"
      ],
      "patternProperties": {
        "^.*$": {
          "type": [
            "boolean",
            "object"
          ],
          "properties": {
            "required": {
              "description": "Indicates the parameter must be supplied to the application in order to function.",
              "type": "boolean"
            },
            "value": {
              "description": "The default value of the parameter. This value may be overridden at runtime by the query string or other future sources of parameter values."
            },
            "excludeFromRequests": {
              "description": "Indicates whether the parameter should be excluded from the parameters automatically added to the query string of URLs requested with SkyAuthHttp.",
              "type": "boolean",
              "default": true
            }
          }
        }
      }
    },
    "pipelineSettings": {
      "description": "Configuration options specific to pipeline configuration.",
      "type": "object"
    },
    "plugins": {
      "description": "Specifies plugins to expand on existing SKY UX Builder functionality and create new functionality.",
      "type": "array"
    },
    "redirects": {
      "description": "Specifies redirects for pages within an application using from : to pattern.",
      "type": "object"
    },
    "routes": {
      "description": "Allows you to use the omnibar but still define navigation items. This property is for internal Blackbaud use only.",
      "type": "object",
      "properties": {
        "public": {
          "description": "Public routes.",
          "type": "array"
        },
        "referenced": {
          "description": "Referenced routes.",
          "type": "array"
        }
      }
    },
    "useHashRouting": {
      "description": "Allows your SPA to use Angular's hash location strategy.",
      "type": "boolean"
    },
    "skyuxModules": {
      "description": "The individual SKY UX modules that should be imported into the application.  Use this property for performance optimization when your application only uses a small subset of SKY UX components.",
      "type": "array"
    },
    "librarySettings": {
      "description": "Container for controlling library settings",
      "type": "object",
      "properties": {
        "whitelistedNonPeerDependencies": {
          "description": "Specifies package dependencies that are allowed to be added to a library's package.json `dependencies` object when a library is published.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "testSettings": {
      "description": "Container for controlling test settings.",
      "type": "object",
      "properties": {
        "e2e": {
          "description": "Test settings specific to the skyux e2e command.",
          "type": "object",
          "properties": {
            "browserSet": {
              "description": "The named set of browsers to run against.",
              "type": "string",
              "enum": [
                "speedy"
              ]
            }
          }
        },
        "unit": {
          "description": "Test settings specific to the skyux test command.",
          "type": "object",
          "properties": {
            "browserSet": {
              "description": "The named set of browsers to run against.",
              "type": "string",
              "enum": [
                "speedy",
                "quirky",
                "paranoid"
              ]
            }
          }
        }
      }
    }
  },
  "$defs": {
    "externalFileCSS": {
      "type": "object",
      "properties": {
        "url": {
          "description": "Fully qualified URL of the file.",
          "type": "string"
        },
        "integrity": {
          "description": "Subresource integrity string to include.",
          "type": "string"
        }
      }
    },
    "externalFileJS": {
      "allOf": [
        {
          "$ref": "#/$defs/externalFileCSS"
        },
        {
          "properties": {
            "head": {
              "description": "Inject in the head versus before the closing body tag.",
              "type": "boolean"
            }
          }
        }
      ]
    },
    "availableThemes": {
      "type": "string",
      "enum": [
        "default",
        "modern"
      ]
    }
  }
}
