{
  "title": "JSON schema for the ActionScript configuration file",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "anyOf": [
    {
      "allOf": [
        { "$ref": "#/definitions/baseAppConfig" },
        {
          "required": ["mainClass"]
        }
      ]
    },
    {
      "allOf": [
        { "$ref": "#/definitions/baseAppConfig" },
        {
          "required": ["files"]
        }
      ]
    },
    {
      "allOf": [
        { "$ref": "#/definitions/baseAppConfig" },
        {
          "required": ["extends"]
        }
      ]
    },
    {
      "allOf": [
        { "$ref": "#/definitions/baseConfig" },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "Indicates if the project is an application or library. Supported values include \"app\" and \"lib\". Then default value is \"app\".",
              "pattern": "^lib$"
            }
          },
          "required": ["type"]
        }
      ]
    }
  ],
  "definitions": {
    "baseConfig": {
      "type": "object",
      "properties": {
        "config": { "$ref": "#/definitions/config" },
        "compilerOptions": { "$ref": "#/definitions/compilerOptions" },
        "additionalOptions": { "$ref": "#/definitions/additionalOptions" },
        "copySourcePathAssets": {
          "$ref": "#/definitions/copySourcePathAssets"
        },
        "files": { "$ref": "#/definitions/files" },
        "extends": { "$ref": "#/definitions/extends" }
      }
    },
    "baseAppConfig": {
      "allOf": [
        { "$ref": "#/definitions/baseConfig" },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "Indicates if the project is an application or library. Supported values include \"app\" and \"lib\". Then default value is \"app\".",
              "default": "app"
            },
            "application": { "$ref": "#/definitions/application" },
            "airOptions": { "$ref": "#/definitions/airOptions" },
            "animateOptions": { "$ref": "#/definitions/animateOptions" },
            "modules": { "$ref": "#/definitions/modules" },
            "workers": { "$ref": "#/definitions/workers" },
            "htmlTemplate": { "$ref": "#/definitions/htmlTemplate" },
            "mainClass": { "$ref": "#/definitions/mainClass" }
          }
        }
      ]
    },
    "extends": {
      "type": "string",
      "description": "Path to another asconfig.json file that will be merged with this file. If the same fields are defined in both files, the fields in this file will either replace or expand the values in the base file."
    },
    "additionalOptions": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ],
      "description": "Additional options to send to the compiler, formatted as command line arguments. Useful for testing new options that are not yet supported by the compilerOptions field of asconfig.json."
    },
    "htmlTemplate": {
      "type": "string",
      "description": "Path to a folder containing an HTML template for a SWF project that will be copied to the output folder. Text files may contain tokens that will be automatically replace. Not to be confused with html-template compiler option used by Apache Royale."
    },
    "singleSigningOptions": {
      "type": "object",
      "description": "Options for code signing an Adobe AIR application.",
      "additionalProperties": false,
      "properties": {
        "alias": {
          "type": "string",
          "description": "The alias of a key in the keystore."
        },
        "storetype": {
          "type": "string",
          "description": "The type of keystore.",
          "pattern": "^(jks|JKS|pkcs12|PKCS12|pkcs11|PKCS11|KeychainStore|Windows-MY|Windows-ROOT)$"
        },
        "keystore": {
          "type": "string",
          "description": "The path to the keystore file."
        },
        "providerName": {
          "type": "string",
          "description": "The JCA provider for the specified keystore type."
        },
        "tsa": {
          "type": "string",
          "description": "Specifies the URL of an RFC3161-compliant timestamp server to time-stamp the digital signature, or \"none\" to disable timestamping."
        },
        "provisioning-profile": {
          "type": "string",
          "description": "The path to a provisioning profile for iOS."
        }
      }
    },
    "dualSigningOptions": {
      "type": "object",
      "description": "Options for code signing an Adobe AIR application.",
      "additionalProperties": false,
      "properties": {
        "debug": { "$ref": "#/definitions/singleSigningOptions" },
        "release": { "$ref": "#/definitions/singleSigningOptions" }
      },
      "required": ["debug", "release"]
    },
    "signingOptions": {
      "anyOf": [
        { "$ref": "#/definitions/singleSigningOptions" },
        { "$ref": "#/definitions/dualSigningOptions" }
      ]
    },
    "airOptionsOutput": {
      "type": "string",
      "description": "The output file name of the application package."
    },
    "airOptionsConnect": {
      "type": ["string", "boolean"],
      "description": "Specifies if the app will attempt to connect to a remote debugger (usually over Wi-Fi). Set to true or false, or optionally specify the host string of the computer running the debugger."
    },
    "airOptionsListen": {
      "type": ["number", "boolean"],
      "description": "Specifies if the app will listen for an incoming connection to a debugger over USB. Set to true or false, or optionally specify the port to listen on."
    },
    "airOptionsPlatformSDK": {
      "type": "string",
      "description": "The path to the platform SDK for the target device."
    },
    "airOptionsAllTargets": {
      "type": "string",
      "description": "The package target for Adobe AIR applications.",
      "pattern": "^(air|bundle|native|ipa-app-store|ipa-ad-hoc|ipa-debug|ipa-test|ipa-debug-interpreter|ipa-test-interpreter|ipa-debug-interpreter-simulator|ipa-test-interpreter-simulator|apk-captive-runtime|apk|apk-debug|apk-profile|apk-emulator|aab|aab-debug|android-studio|android-studio-debug)$"
    },
    "airOptionsDesktopTargets": {
      "type": "string",
      "description": "The package target for desktop applications.",
      "pattern": "^(air|bundle|native)$"
    },
    "airOptionsExtdir": {
      "type": "array",
      "description": "One or more specified directories that contain ANE files for native extensions that the application uses.",
      "items": {
        "type": "string"
      }
    },
    "airOptionsFiles": {
      "type": "array",
      "description": "Additional files to package with the Adobe AIR application.",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "file": {
            "type": "string",
            "description": "Source path of a file or directory to include in the application package."
          },
          "path": {
            "type": "string",
            "description": "Destination path of the file or directory inside the application package."
          }
        },
        "required": ["file", "path"]
      }
    },
    "airOptionsSampler": {
      "type": "boolean",
      "description": "Enables the telemetry-based ActionScript sampler in iOS applications."
    },
    "airOptionsHideAneLibSymbols": {
      "type": "boolean",
      "description": "Specify whether iOS ANE library symbols are visible only to that library's sources or globally."
    },
    "airOptionsEmbedBitcode": {
      "type": "boolean",
      "description": "Specify whether to embed iOS bitcode or not."
    },
    "animateOptions": {
      "type": "object",
      "description": "Specify configuration options for Adobe Animate projects.",
      "additionalProperties": false,
      "properties": {
        "file": {
          "type": "string",
          "description": "The location of an Adobe Animate .fla file."
        }
      },
      "required": ["file"]
    },
    "airOptions": {
      "type": "object",
      "description": "Instructs the ADT utility how to package the Adobe AIR application.",
      "additionalProperties": false,
      "properties": {
        "licenseFile": {
          "type": "string",
          "description": "The AIR developer license file to use instead of lib/adt.cfg."
        },
        "licenseDevID": {
          "type": "string",
          "description": "The AIR developer ID to use instead of the one in lib/adt.cfg."
        },
        "target": { "$ref": "#/definitions/airOptionsAllTargets" },
        "extdir": { "$ref": "#/definitions/airOptionsExtdir" },
        "files": { "$ref": "#/definitions/airOptionsFiles" },
        "output": { "$ref": "#/definitions/airOptionsOutput" },
        "signingOptions": { "$ref": "#/definitions/signingOptions" },
        "air": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "target": { "$ref": "#/definitions/airOptionsAllTargets" },
            "extdir": { "$ref": "#/definitions/airOptionsExtdir" },
            "files": { "$ref": "#/definitions/airOptionsFiles" },
            "output": { "$ref": "#/definitions/airOptionsOutput" },
            "signingOptions": { "$ref": "#/definitions/signingOptions" }
          }
        },
        "ios": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "embedBitcode": { "$ref": "#/definitions/airOptionsEmbedBitcode" },
            "extdir": { "$ref": "#/definitions/airOptionsExtdir" },
            "files": { "$ref": "#/definitions/airOptionsFiles" },
            "hideAneLibSymbols": {
              "$ref": "#/definitions/airOptionsHideAneLibSymbols"
            },
            "output": { "$ref": "#/definitions/airOptionsOutput" },
            "signingOptions": { "$ref": "#/definitions/signingOptions" },
            "sampler": { "$ref": "#/definitions/airOptionsSampler" },
            "connect": { "$ref": "#/definitions/airOptionsConnect" },
            "listen": { "$ref": "#/definitions/airOptionsListen" },
            "platformsdk": { "$ref": "#/definitions/airOptionsPlatformSDK" },
            "target": {
              "type": "string",
              "description": "The package target for iOS.",
              "pattern": "^(ipa-app-store|ipa-ad-hoc|ipa-debug|ipa-test|ipa-debug-interpreter|ipa-test-interpreter)$"
            }
          },
          "required": ["signingOptions"]
        },
        "ios_simulator": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "embedBitcode": { "$ref": "#/definitions/airOptionsEmbedBitcode" },
            "extdir": { "$ref": "#/definitions/airOptionsExtdir" },
            "files": { "$ref": "#/definitions/airOptionsFiles" },
            "hideAneLibSymbols": {
              "$ref": "#/definitions/airOptionsHideAneLibSymbols"
            },
            "output": { "$ref": "#/definitions/airOptionsOutput" },
            "signingOptions": { "$ref": "#/definitions/signingOptions" },
            "sampler": { "$ref": "#/definitions/airOptionsSampler" },
            "connect": { "$ref": "#/definitions/airOptionsConnect" },
            "listen": { "$ref": "#/definitions/airOptionsListen" },
            "platformsdk": { "$ref": "#/definitions/airOptionsPlatformSDK" },
            "target": {
              "type": "string",
              "description": "The package target for iOS.",
              "pattern": "^(ipa-debug-interpreter-simulator|ipa-test-interpreter-simulator)$"
            }
          },
          "required": ["signingOptions"]
        },
        "android": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "arch": {
              "type": "string",
              "description": "Specifies the CPU architecture to target on Android.",
              "pattern": "^(armv7|armv8|x86|x86_64)$"
            },
            "airDownloadURL": {
              "type": "string",
              "description": "Specifies an alternate URL for downloading and installing the AIR runtime on Android devices."
            },
            "extdir": { "$ref": "#/definitions/airOptionsExtdir" },
            "files": { "$ref": "#/definitions/airOptionsFiles" },
            "output": { "$ref": "#/definitions/airOptionsOutput" },
            "connect": { "$ref": "#/definitions/airOptionsConnect" },
            "listen": { "$ref": "#/definitions/airOptionsListen" },
            "platformsdk": { "$ref": "#/definitions/airOptionsPlatformSDK" },
            "resdir": {
              "type": "string",
              "description": "Optionally specify a folder containing files to include as Android resources."
            },
            "signingOptions": { "$ref": "#/definitions/signingOptions" },
            "target": {
              "type": "string",
              "description": "The package target for Android.",
              "pattern": "^(apk-captive-runtime|apk|apk-debug|apk-profile|aab)$"
            }
          },
          "required": ["signingOptions"]
        },
        "windows": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "extdir": { "$ref": "#/definitions/airOptionsExtdir" },
            "files": { "$ref": "#/definitions/airOptionsFiles" },
            "output": { "$ref": "#/definitions/airOptionsOutput" },
            "signingOptions": { "$ref": "#/definitions/signingOptions" },
            "target": { "$ref": "#/definitions/airOptionsDesktopTargets" }
          }
        },
        "mac": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "extdir": { "$ref": "#/definitions/airOptionsExtdir" },
            "files": { "$ref": "#/definitions/airOptionsFiles" },
            "output": { "$ref": "#/definitions/airOptionsOutput" },
            "signingOptions": { "$ref": "#/definitions/signingOptions" },
            "target": { "$ref": "#/definitions/airOptionsDesktopTargets" }
          }
        }
      }
    },
    "application": {
      "anyOf": [
        { "$ref": "#/definitions/singleApplication" },
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "air": { "$ref": "#/definitions/singleApplication" },
            "ios": { "$ref": "#/definitions/singleApplication" },
            "ios_simulator": { "$ref": "#/definitions/singleApplication" },
            "android": { "$ref": "#/definitions/singleApplication" },
            "windows": { "$ref": "#/definitions/singleApplication" },
            "mac": { "$ref": "#/definitions/singleApplication" }
          }
        }
      ]
    },
    "singleApplication": {
      "type": "string",
      "description": "Optional path to Adobe AIR application descriptor. The descriptor's <content> element will be populated, and the file will be copied into the output directory."
    },
    "compilerOptions": {
      "type": "object",
      "description": "Instructs the ActionScript and MXML compiler how to build the project.",
      "additionalProperties": false,
      "properties": {
        "accessible": {
          "type": "boolean",
          "description": "In a SWF project, enables accessibility features. The default value is false."
        },
        "advanced-telemetry": {
          "type": "boolean",
          "description": "In a SWF project, enables advanced telemetry for Adobe Scout. The default value is false."
        },
        "allow-abstract-classes": {
          "type": "boolean",
          "description": "(Apache Royale only) Enables or disables the abstract keyword for classes and methods."
        },
        "allow-import-aliases": {
          "type": "boolean",
          "description": "(Apache Royale only) Enables or disables alias syntax for ActionScript imports."
        },
        "allow-private-constructors": {
          "type": "boolean",
          "description": "(Apache Royale only) Enables or disables the ability to set constructors to private in ActionScript."
        },
        "benchmark": {
          "type": "boolean",
          "description": "Prints detailed compile times to the standard output. The default value is true."
        },
        "context-root": {
          "type": "string",
          "description": "Adds the path to replace {context.root} tokens for service channel endpoints"
        },
        "contributor": {
          "type": "string",
          "description": "In a SWF project, a contributor's name to store in the metadata"
        },
        "creator": {
          "type": "string",
          "description": "In a SWF project, a creator's name to store in the metadata"
        },
        "date": {
          "type": "string",
          "description": "In a SWF project, the creation date to store in the metadata"
        },
        "debug": {
          "type": "boolean",
          "description": "The generated output of the build will contain extra debug data."
        },
        "debug-password": {
          "type": "string",
          "description": "In a SWF project, an optional password for remote debugging."
        },
        "default-background-color": {
          "type": "string",
          "description": "In a SWF project, sets the application's background color."
        },
        "default-frame-rate": {
          "type": "number",
          "description": "In a SWF project, sets the application's frame rate. The default value is 24.",
          "multipleOf": 1
        },
        "default-size": {
          "type": "object",
          "description": "In a SWF project, defines the default application size, in pixels.",
          "additionalProperties": false,
          "properties": {
            "width": {
              "type": "number",
              "description": "Defines the default SWF application width, in pixels.",
              "multipleOf": 1
            },
            "height": {
              "type": "number",
              "description": "Defines the default SWF application height, in pixels.",
              "multipleOf": 1
            }
          },
          "required": ["width", "height"]
        },
        "defaults-css-files": {
          "type": "array",
          "description": "Specifies a list of CSS files to provide style defaults",
          "items": {
            "type": "string"
          }
        },
        "define": {
          "type": "array",
          "description": "Defines a global constant at compile time.",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "name": {
                "type": "string",
                "description": "The name of the constant."
              },
              "value": {
                "type": ["string", "boolean", "number"],
                "description": "The value of the constant."
              }
            },
            "required": ["name", "value"]
          }
        },
        "js-define": {
          "type": "array",
          "description": "(Apache Royale only) Defines a global constant at compile time for the generated JavaScript output.",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "name": {
                "type": "string",
                "description": "The name of the constant."
              },
              "value": {
                "type": ["string", "boolean", "number"],
                "description": "The value of the constant."
              }
            },
            "required": ["name", "value"]
          }
        },
        "description": {
          "type": "string",
          "description": "In a SWF project, the description to store in the metadata"
        },
        "directory": {
          "type": "boolean",
          "description": "(Library projects only) Outputs the library as a directory instead of a SWC file."
        },
        "dump-config": {
          "type": "string",
          "description": "Combines all configuration options and saves them to the specified file."
        },
        "exclude-defaults-css-files": {
          "type": "array",
          "description": "(Apache Royale only) Excludes CSS files from the output.",
          "items": {
            "type": "string"
          }
        },
        "export-public-symbols": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if public symbols are exported by Closure compiler in the generated JavaScript"
        },
        "export-protected-symbols": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if protected symbols are exported by Closure compiler in the generated JavaScript"
        },
        "export-internal-symbols": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if internal symbols are exported by Closure compiler in the generated JavaScript"
        },
        "external-library-path": {
          "type": "array",
          "description": "Specifies a list of SWC files, or directories containing SWC files, to exclude from linking in the generated output. This option provides compile-time link checking for external components that are dynamically linked.",
          "items": {
            "type": "string"
          }
        },
        "js-external-library-path": {
          "type": "array",
          "description": "(Apache Royale only) Specifies a list of SWC files, or directories containing SWC files, to exclude from linking in only the generated JavaScript output.",
          "items": {
            "type": "string"
          }
        },
        "swf-external-library-path": {
          "type": "array",
          "description": "(Apache Royale only) Specifies a list of SWC files, or directories containing SWC files, to exclude from linking in only the generated SWF output.",
          "items": {
            "type": "string"
          }
        },
        "includes": {
          "type": "array",
          "description": "Specifies a list of classes or other symbols to link in the output, regardless of whether they are referenced.",
          "items": {
            "type": "string"
          }
        },
        "include-libraries": {
          "type": "array",
          "description": "Specifies a list of SWC files to link in the output, regardless of whether they are referenced.",
          "items": {
            "type": "string"
          }
        },
        "include-file": {
          "type": "array",
          "description": "(Library projects only) Specifies a list of files to include in the SWC file.",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "file": {
                "type": "string",
                "description": "Source path of a file or directory to include in the SWC."
              },
              "path": {
                "type": "string",
                "description": "Destination path of the file or directory inside the SWC."
              }
            },
            "required": ["file", "path"]
          }
        },
        "include-classes": {
          "type": "array",
          "description": "(Library projects only) Specifies classes to include in the SWC file. You provide the class name (for instance, com.example.MyClass) rather than the file name (for instance, com/example/MyClass.as) to the file for this option.",
          "items": {
            "type": "string"
          }
        },
        "include-namespaces": {
          "type": "array",
          "description": "(Library projects only) Specifies namespace-style components in the SWC file. You specify a list of URIs to include in the SWC file. The uri argument must already be defined with the namespace option.",
          "items": {
            "type": "string"
          }
        },
        "html-output-filename": {
          "type": "string",
          "description": "(Apache Royale only) Specifies the name of the output file generated using the html-template."
        },
        "html-template": {
          "type": "string",
          "description": "(Apache Royale only) Specifies a custom HTML template file. For SWF projects, use the top-level htmlTemplate field instead."
        },
        "include-sources": {
          "type": "array",
          "description": "(Library projects only) Specifies classes or directories to add to the SWC file. When specifying classes, you specify the path to the class file (for instance, com/example/MyClass.as) rather than the class name itself (for instance, com.example.MyClass).",
          "items": {
            "type": "string"
          }
        },
        "inline-constants": {
          "type": "boolean",
          "description": "(Apache Royale only) Determines of primitive (String, Boolean, Number, int, uint) constant values are inlined in the generated JavaScript. The default value is false."
        },
        "js-compiler-option": {
          "type": "array",
          "description": "(Apache Royale only) Passes additional options to the Closure Compiler for a release build.",
          "items": {
            "type": "string"
          }
        },
        "js-complex-implicit-coercions": {
          "type": "boolean",
          "description": "(Apache Royale only) Enables or disables implicit coercions of complex types."
        },
        "js-default-initializers": {
          "type": "boolean",
          "description": "(Apache Royale only) Enables or disables initialization of primitive (Number, Boolean, etc.) variables with default values in the generated JavaScript."
        },
        "js-dynamic-access-unknown-members": {
          "type": "boolean",
          "description": "(Apache Royale only) Determines if member access of unrecognized symbols is replaced with dynamic bracket access in the generated JavaScript. Prevents dynamic member names from being minified in release builds."
        },
        "js-output": {
          "type": "string",
          "description": "(Apache Royale only) The path where the generated JavaScript output should be saved."
        },
        "js-output-optimization": {
          "type": "array",
          "description": "(Advanced, Apache Royale only) Advanced options for optimizing the generated JavaScript.",
          "items": {
            "type": "string"
          }
        },
        "js-vector-emulation-class": {
          "type": "string",
          "description": "(Apache Royale only) An optional custom implementation of the Vector type."
        },
        "js-vector-index-checks": {
          "type": "boolean",
          "description": "(Apache Royale only) Enables or disables index range checking for the Vector type."
        },
        "keep-all-type-selectors": {
          "type": "boolean",
          "description": "Disables the pruning of unused type selectors. The default value is false."
        },
        "keep-as3-metadata": {
          "type": "array",
          "description": "Specifies custom metadata that you want to keep.",
          "items": {
            "type": "string"
          }
        },
        "keep-generated-actionscript": {
          "type": "boolean",
          "description": "Determines whether to keep the generated ActionScript class files. The default value is false."
        },
        "language": {
          "type": "string",
          "description": "In a SWF project, the language to store in the metadata"
        },
        "library-path": {
          "type": "array",
          "description": "Links SWC libraries to the generated output of the build. The compiler only links in those classes for the SWC file that are required. You can specify a directory or individual SWC files.",
          "items": {
            "type": "string"
          }
        },
        "js-library-path": {
          "type": "array",
          "description": "(Apache Royale only) Links SWC libraries to only the generated JavaScript output of the build.",
          "items": {
            "type": "string"
          }
        },
        "swf-library-path": {
          "type": "array",
          "description": "(Apache Royale only) Links SWC libraries to only the generated SWF output of the build.",
          "items": {
            "type": "string"
          }
        },
        "link-report": {
          "type": "string",
          "description": "Generates linking information and saves it to the specified output file."
        },
        "load-config": {
          "type": "array",
          "description": "Specifies the locations of XML configuration files that define extra compiler options.",
          "items": {
            "type": "string"
          }
        },
        "load-externs": {
          "type": "array",
          "description": "Specifies the locations of XML files that define extra symbols to omit from the output.",
          "items": {
            "type": "string"
          }
        },
        "js-load-config": {
          "type": "array",
          "description": "(Apache Royale only) Specifies the locations of XML configuration files that define extra compiler options only for the generated JavaScript output.",
          "items": {
            "type": "string"
          }
        },
        "locale": {
          "type": "array",
          "description": "Specifies one or more locales to be compiled into the application.",
          "items": {
            "type": "string",
            "pattern": "^[a-z]{2}([-_][A-Z]{2}){0,1}$"
          }
        },
        "namespace": {
          "type": "array",
          "description": "Specifies MXML namespaces. Each namespace must include a URI and the location of the manifest file that defines the contents of the namespace.",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "uri": {
                "type": "string",
                "description": "The namespace URI."
              },
              "manifest": {
                "type": "string",
                "description": "The location of the manifest file."
              }
            },
            "required": ["uri", "manifest"]
          }
        },
        "omit-trace-statements": {
          "type": "boolean",
          "description": "Omits trace() statements. The default value is false."
        },
        "optimize": {
          "type": "boolean",
          "description": "In a SWF project, enables the ActionScript optimizer to reduce file size and increases performance by optimizing the SWF file's bytecode. The default value is true."
        },
        "output": {
          "type": "string",
          "description": "The path where the generated output should be saved."
        },
        "preloader": {
          "type": "string",
          "description": "In a Flex project, specify a download progress bar for your application. The value must be the name of a class that implements the IPreloaderDisplay interface."
        },
        "prevent-rename-public-symbols": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming public symbols in the generated JavaScript"
        },
        "prevent-rename-public-static-methods": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming public static methods in the generated JavaScript"
        },
        "prevent-rename-public-instance-methods": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming public instance methods in the generated JavaScript"
        },
        "prevent-rename-public-static-variables": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming public static variables in the generated JavaScript"
        },
        "prevent-rename-public-instance-variables": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming public instance variables in the generated JavaScript"
        },
        "prevent-rename-public-static-accessors": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming public static accessors (getters and setters) in the generated JavaScript"
        },
        "prevent-rename-public-instance-accessors": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming public instance accessors (getters and setters) in the generated JavaScript"
        },
        "prevent-rename-protected-symbols": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming protected symbols in the generated JavaScript"
        },
        "prevent-rename-protected-static-methods": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming protected static methods in the generated JavaScript"
        },
        "prevent-rename-protected-instance-methods": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming protected instance methods in the generated JavaScript"
        },
        "prevent-rename-protected-static-variables": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming protected static variables in the generated JavaScript"
        },
        "prevent-rename-protected-instance-variables": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming protected instance variables in the generated JavaScript"
        },
        "prevent-rename-protected-static-accessors": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming protected static accessors (getters and setters) in the generated JavaScript"
        },
        "prevent-rename-protected-instance-accessors": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming protected instance accessors (getters and setters) in the generated JavaScript"
        },
        "prevent-rename-internal-symbols": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming internal symbols in the generated JavaScript"
        },
        "prevent-rename-internal-static-methods": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming internal static methods in the generated JavaScript"
        },
        "prevent-rename-internal-instance-methods": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming internal instance methods in the generated JavaScript"
        },
        "prevent-rename-internal-static-variables": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming internal static variables in the generated JavaScript"
        },
        "prevent-rename-internal-instance-variables": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming internal instance variables in the generated JavaScript"
        },
        "prevent-rename-internal-static-accessors": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming internal static accessors (getters and setters) in the generated JavaScript"
        },
        "prevent-rename-internal-instance-accessors": {
          "type": "boolean",
          "description": "(Advanced, Apache Royale only) Determines if Closure compiler is prevented from renaming internal instance accessors (getters and setters) in the generated JavaScript"
        },
        "publisher": {
          "type": "string",
          "description": "In a SWF project, the publisher's name to store in the metadata"
        },
        "remove-circulars": {
          "type": "boolean",
          "description": "(Apache Royale only) Removes circular references from the generated JavaScript code for a release build."
        },
        "services": {
          "type": "string",
          "description": "Adds the path to a services configuration file"
        },
        "show-unused-type-selector-warnings": {
          "type": "boolean",
          "description": "Determines if warnings generated from unused CSS type selectors are displayed. The default value is true."
        },
        "size-report": {
          "type": "string",
          "description": "Generates a report that summarizes the size of each type of data in the application and saves it to the specified output file."
        },
        "source-map": {
          "type": "boolean",
          "description": "(Apache Royale only) Emits source maps in the debug build for each ActionScript and MXML file. The default value is false."
        },
        "source-map-source-root": {
          "type": "string",
          "description": "(Apache Royale only) The source root to use when emitting source maps."
        },
        "source-path": {
          "type": "array",
          "description": "Adds directories or files to the source path. The compiler searches directories in the source path for MXML, AS, or CSS source files that are used in your applications and includes those that are required at compile time.",
          "items": {
            "type": "string"
          }
        },
        "static-link-runtime-shared-libraries": {
          "type": "boolean",
          "description": "In a SWF project, determines whether to compile against libraries statically or use RSLs."
        },
        "strict": {
          "type": "boolean",
          "description": "Performs compile-time type checking on assignments and options supplied to method calls. The default value is true."
        },
        "strict-identifier-names": {
          "type": "boolean",
          "description": "(Apache Royale only) Enables or disables strict name validation for identifiers in ActionScript. The default value is false."
        },
        "swf-version": {
          "type": "number",
          "description": "In a SWF project, specifies the SWF file format version. Features requiring a later version of the SWF file format are not compiled into the application. This is different from the target-player version in that it refers to the SWF specification versioning scheme.",
          "minimum": 9,
          "multipleOf": 1
        },
        "targets": {
          "type": "array",
          "description": "(Apache Royale only) Specifies one or more output targets. Supported values include \"JSRoyale\", \"JS\", \"JSNode\", \"JSNodeModule\", and \"SWF\".",
          "items": {
            "type": "string"
          }
        },
        "target-player": {
          "type": "string",
          "description": "In a SWF project, specifies the runtime version. Features requiring a later version of the runtime are not compiled into the application.",
          "pattern": "^[0-9]+(\\.[0-9]+){0,2}$"
        },
        "theme": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          ],
          "description": "Specifies one or more theme files to use with this application."
        },
        "title": {
          "type": "string",
          "description": "In a SWF project, the title to store in the metadata"
        },
        "tools-locale": {
          "type": "string",
          "description": "Specifies the locale to use when reporting compiler errors and warnings.",
          "pattern": "^[a-z]{2}([-_][A-Z]{2}){0,1}$"
        },
        "use-direct-blit": {
          "type": "boolean",
          "description": "In a SWF project, equivalent to wmode=\"direct\" when running in a standalone SWF runtime instead of a browser plug-in. The default value is false."
        },
        "use-gpu": {
          "type": "boolean",
          "description": "In a SWF project, equivalent to wmode=\"gpu\" when running in a standalone SWF runtime instead of a browser plug-in. The default value is false."
        },
        "use-network": {
          "type": "boolean",
          "description": "In a SWF project, specifies that the current application uses network services or can access the local file system. The default value is true."
        },
        "use-resource-bundle-metadata": {
          "type": "boolean",
          "description": "Enables resource bundles, and instructs the compiler to process the contents of the [ResourceBundle] metadata tag. The default value is true."
        },
        "verbose-stacktraces": {
          "type": "boolean",
          "description": "In a SWF project, includes line numbers in the generated output, but results in a larger SWF file. When a run-time error occurs, the stacktrace shows line numbers. The default value is false."
        },
        "warnings": {
          "type": "boolean",
          "description": "Enables or disables all warnings."
        },
        "warn-public-vars": {
          "type": "boolean",
          "description": "(Apache Royale only) Enables or disables warnings about public variables, which can sometimes cause issues in Apache Royale release builds."
        }
      }
    },
    "modules": {
      "type": "array",
      "description": "One or more modules that will be compiled along with the application.",
      "items": {
        "type": "object",
        "description": "A module compiled with the application.",
        "additionalProperties": false,
        "properties": {
          "file": {
            "type": "string",
            "description": "The specified file will be used as the entry point of the module."
          },
          "optimize": {
            "type": "boolean",
            "description": "Indicates if the module will be optimized specifically for this project's application, or if it may be loaded by any application."
          },
          "output": {
            "type": "string",
            "description": "The path where the generated output of the module should be saved."
          }
        },
        "required": ["file"]
      }
    },
    "workers": {
      "type": "array",
      "description": "One or more workers that will be compiled along with the application.",
      "items": {
        "type": "object",
        "description": "A worker compiled with the application.",
        "additionalProperties": false,
        "properties": {
          "file": {
            "type": "string",
            "description": "The specified file will be used as the entry point of the worker."
          },
          "optimize": {
            "type": "boolean",
            "description": "Indicates if the module will be optimized specifically for this project's application, or if it may be loaded by any application."
          },
          "output": {
            "type": "string",
            "description": "The path where the generated output of the worker should be saved."
          }
        },
        "required": ["file"]
      }
    },
    "config": {
      "type": "string",
      "description": "The default configuration file to use from the SDK. Supported values include \"js\", \"node\", \"royale\", \"flex\", \"air\", and \"airmobile\". The default value is \"royale\" when using Apache Royale and \"flex\" for other SDKs.",
      "pattern": "^(flex|royale|air|airmobile|js|node)$"
    },
    "copySourcePathAssets": {
      "type": "boolean",
      "description": "Optionally copies any files in the source path that don't have .as or .mxml extensions to the output directory."
    },
    "files": {
      "type": "array",
      "description": "The specified files will be included by the compiler, including all of their dependencies. If the \"mainClass\" field is omitted, the final item in \"files\" will be used as the application entry point.",
      "items": {
        "type": "string"
      },
      "minItems": 1
    },
    "mainClass": {
      "type": "string",
      "description": "The fully qualified class name (including the package name, if any) of the main class to use as the application entry point."
    }
  }
}
