{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Sass Configuration",
  "description": "This schema describes the \"config/sass.json\" config file used to configure \"@rushstack/heft-jest-plugin\", and also the \"options\" field that can be specified in heft.json when loading the plugin.",
  "type": "object",

  "additionalProperties": false,

  "properties": {
    "$schema": {
      "description": "Part of the JSON Schema standard, this optional keyword declares the URL of the schema that the file conforms to. Editors may download the schema and use it to perform syntax highlighting.",
      "type": "string"
    },

    "extends": {
      "description": "Optionally specifies another JSON config file that this file extends from.  This provides a way for standard settings to be shared across multiple projects. To delete an inherited setting, set it to `null` in this file.",
      "type": "string"
    },

    "srcFolder": {
      "type": "string",
      "description": "Source code root directory."
    },

    "generatedTsFolder": {
      "type": "string",
      "description": "Output directory for generated Sass typings."
    },

    "secondaryGeneratedTsFolders": {
      "type": "array",
      "description": "Optional additional folders to which Sass typings should be output.",
      "items": {
        "type": "string"
      }
    },

    "exportAsDefault": {
      "type": "boolean",
      "description": "Determines whether export values are wrapped in a default property, or not."
    },

    "cssOutputFolders": {
      "type": "array",
      "description": "If specified, folders where compiled CSS files will be emitted to. They will be named by replacing \".scss\" or \".sass\" in the source file name with \".css\". If requested, JavaScript shims will be emitted to the same folder, named by appending \".js\" to the source file name.",
      "items": {
        "oneOf": [
          {
            "type": "string",
            "pattern": "[^\\\\]"
          },
          {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "folder": {
                "type": "string",
                "pattern": "[^\\\\]"
              },
              "shimModuleFormat": {
                "type": "string",
                "enum": ["commonjs", "esnext"]
              }
            },
            "required": ["folder"]
          }
        ]
      }
    },

    "fileExtensions": {
      "type": "array",
      "description": "Files with these extensions will be treated as SCSS modules and pass through the Sass transpiler for typings generation and/or CSS emit.",
      "items": {
        "type": "string",
        "pattern": "^\\.[A-z0-9-_.]*[A-z0-9-_]+$"
      }
    },

    "nonModuleFileExtensions": {
      "type": "array",
      "description": "Files with these extensions will be treated as non-module SCSS and pass through the Sass transpiler for typings generation and/or CSS emit.",
      "items": {
        "type": "string",
        "pattern": "^\\.[A-z0-9-_.]*[A-z0-9-_]+$"
      }
    },

    "excludeFiles": {
      "type": "array",
      "description": "A list of file paths relative to the \"src\" folder that should be excluded from typings generation and/or CSS emit.",
      "items": {
        "type": "string",
        "pattern": "[^\\\\]"
      }
    },

    "ignoreDeprecationsInDependencies": {
      "type": "boolean",
      "description": "If set, deprecation warnings from dependencies will be suppressed."
    },

    "silenceDeprecations": {
      "type": "array",
      "description": "A list of deprecation codes to silence.  This is useful for suppressing warnings from deprecated Sass features that are used in the project and known not to be a problem.",
      "items": {
        "type": "string"
      }
    },

    "doNotTrimOriginalFileExtension": {
      "type": "boolean",
      "description": "If true, the original file extension will not be trimmed when generating the output CSS file. The generated CSS file will retain its original extension. For example, \"styles.scss\" will generate \"styles.scss.css\" instead of \"styles.css\"."
    },

    "preserveIcssExports": {
      "type": "boolean",
      "description": "If true, the ICSS `:export` block will be preserved in the emitted CSS output. This is necessary when the CSS is consumed by a webpack loader (e.g. css-loader's icssParser) that extracts `:export` values at bundle time to generate JavaScript exports. Defaults to false."
    }
  }
}
