
{
	"$schema": "http://json-schema.org/draft-04/schema#",
	"type": "object",
	"title": "Root",
	"description": "Configuration for an APEX Nitro project",
	"properties": {
		"mode": {
			"type": "string",
			"title": "Mode",
			"default": "basic",
			"enum": [
				"basic",
				"advanced"
			]
		},
		"appURL": {
			"type": "string",
			"title": "Application URL",
			"description": "This is the URL to your APEX application homepage.",
			"placeholder": "Example: https://apex.oracle.com/pls/apex/f?p=12192"
		},
		"srcFolder": {
			"type": "string",
			"title": "Source Folder",
			"description": "This is where you do the coding. It should point to a local directory.",
			"placeholder": "Example: /Users/vmorneau/myProject/src"
		},
		"distFolder": {
			"type": "string",
			"title": "Distributable Folder",
			"description": "This is where the files will be compiled. It should point to a local directory.",
			"placeholder": "Example: /Users/vmorneau/myProject/dist"
		},
		"js": {
			"type": "object",
			"title": "JavaScript",
			"description": "Settings for serving JavaScript to your application.",
			"properties": {
				"processor": {
					"type": "string",
					"title": "Processor",
					"description": "Choose how your JavaScript will be processed. The webpack option allows to use ES6.",
					"enum": [
						"default",
						"typescript",
						"webpack"
					]
				},
				"concat": {
					"type": "boolean",
					"title": "Concatenate JavaScript Files",
					"description": "Enable this to concatenate all your JavaScript files into one."
				},
				"concatFilename": {
					"type": "string",
					"title": "Concatenated JavaScript Filename",
					"description": "This is the name of the concatenated file.",
					"placeholder": "Example: app"
				},
				"entries": {
					"type": "array",
					"title": "Entries",
					"description": "A webpack entry would be an ES6 file that will be processed and compiled into a bundle (ES5 compatible).",
					"items": {
						"type": "string",
						"title": "Entry",
						"description": "Entry",
						"placeholder": "Example: /Users/vmorneau/myProject/src/js/app.js",
						"required": true
					}
				},
				"bundleFilename": {
					"type": "string",
					"title": "Bundled JavaScript Filename",
					"description": "This is the name of the bundle file.",
					"placeholder": "Example: bundle"
				},
				"library": {
					"type": "boolean",
					"title": "Expose as a library",
					"description": "Expose your bundles to your app as a global library."
				},
				"libraryName": {
					"type": "string",
					"title": "Library Name",
					"description": "This is the name of the concatenated file.",
					"placeholder": "Example: app"
				},
				"tsConcat": {
					"type": "boolean",
					"title": "Concatenate TypeScript Files",
					"description": "Enable this to concatenate all your TypeScript files into one."
				},
				"tsConcatFilename": {
					"type": "string",
					"title": "Concatenated TypeScript Filename",
					"description": "This is the name of the concatenated file.",
					"placeholder": "Example: app"
				}
			},
			"required": [
				"processor",
				"concat",
				"library",
				"tsConcat"
			],
			"requiredIf": [{
					"property": "concatFilename",
					"dependsOn": ["processor", "concat"],
					"value": ["default", true]
				},
				{
					"property": "tsConcatFilename",
					"dependsOn": ["processor", "tsConcat"],
					"value": ["typescript", true]
				},
				{
					"property": "entries",
					"dependsOn": ["processor"],
					"value": ["webpack"]
				},
				{
					"property": "bundleFilename",
					"dependsOn": ["processor"],
					"value": ["webpack"]
				},
				{
					"property": "libraryName",
					"dependsOn": ["processor", "library"],
					"value": ["webpack", true]
				}
			],
			"showIf": [{
					"property": "concat",
					"dependsOn": ["processor"],
					"value": ["default"]
				},
				{
					"property": "concatFilename",
					"dependsOn": ["processor", "concat"],
					"value": ["default", true]
				},
				{
					"property": "tsConcat",
					"dependsOn": ["processor"],
					"value": ["typescript"]
				},
				{
					"property": "tsConcatFilename",
					"dependsOn": ["processor", "tsConcat"],
					"value": ["typescript", true]
				},
				{
					"property": "entries",
					"dependsOn": ["processor"],
					"value": ["webpack"]
				},
				{
					"property": "bundleFilename",
					"dependsOn": ["processor"],
					"value": ["webpack"]
				},
				{
					"property": "library",
					"dependsOn": ["processor"],
					"value": ["webpack"]
				},
				{
					"property": "libraryName",
					"dependsOn": ["processor", "library"],
					"value": ["webpack", true]
				}
			]
		},
		"css": {
			"type": "object",
			"title": "CSS",
			"description": "Settings for serving CSS to your application.",
			"properties": {
				"language": {
					"type": "string",
					"title": "Language",
					"description": "Your source files stylesheet language. APEX Nitro will always generate CSS files out of these.",
					"enum": [
						"css",
						"sass",
						"less"
					]
				},
				"concat": {
					"type": "boolean",
					"title": "Concatenate CSS Files",
					"description": "Enable this to concatenate all your CSS files into one."
				},
				"concatFilename": {
					"type": "string",
					"title": "Concatenated CSS Filename",
					"description": "This is the name of the concatenated file.",
					"placeholder": "Example: app"
				},
				"sassIncludePath": {
					"type": "string",
					"title": "Include Path",
					"description": "Include a path to an external Sass folder. Allows to use the `@import` feature from within that folder.",
					"placeholder": "Example: /Users/vmorneau/AnotherProject/sass"
				},
				"lessIncludePath": {
					"type": "string",
					"title": "Include Path",
					"description": "Include a path to an external Less folder. Allows to use the `@import` feature from within that folder.",
					"placeholder": "Example: /Users/vmorneau/AnotherProject/less"
				}
			},
			"required": [
				"language",
				"concat"
			],
			"requiredIf": [{
				"property": "concatFilename",
				"dependsOn": ["language", "concat"],
				"value": ["css", true]
			}],
			"showIf": [{
					"property": "concat",
					"dependsOn": ["language"],
					"value": ["css"]
				},
				{
					"property": "concatFilename",
					"dependsOn": ["language", "concat"],
					"value": ["css", true]
				},
				{
					"property": "sassIncludePath",
					"dependsOn": ["language"],
					"value": ["sass"]
				},
				{
					"property": "lessIncludePath",
					"dependsOn": ["language"],
					"value": ["less"]
				}
			]
		},
		"browsersync": {
			"type": "object",
			"title": "Additionnal Options",
			"description": "Additionnal options when using APEX Nitro.",
			"properties": {
				"realTime": {
					"type": "boolean",
					"title": "Enable Real-time Synchronization",
					"description": "Enabling this will automatically inject CSS and reload JavaScript on your page. This is the default behavior, but it can be turned off."
				},
				"ghostMode": {
					"type": "boolean",
					"title": "Enable External Devices Synchronization",
					"description": "Enabling this synchronizes clicking, scrolling and typing on all devices connected to your APEX Nitro app."
				},
				"notify": {
					"type": "boolean",
					"title": "Push Notifications on Success/Errors",
					"description": "Enabling this will push system notifications to you if your code compiles successfully or fails."
				}
			},
			"required": [
				"realTime",
				"notify",
				"ghostMode"
			]
		},
		"header": {
			"type": "object",
			"title": "Header",
			"description": "This feature adds an automatic comment block at the top of your CSS and JavaScript files with your project information.",
			"properties": {
				"enabled": {
					"type": "boolean",
					"title": "Enabled",
					"description": "Enables the automatic header comment block feature."
				},
				"packageJsonPath": {
					"type": "string",
					"title": "package.json Path",
					"description": "Points to your project's `package.json` file.",
					"placeholder": "Example: /Users/vmorneau/myProject/package.json"
				}
			},
			"required": [
				"enabled"
			],
			"showIf": [{
				"property": "packageJsonPath",
				"dependsOn": ["enabled"],
				"value": [true]
			}]
		},
		"apex": {
			"type": "object",
			"title": "APEX Options",
			"description": "Determines if the APEX builder should open alongside the application itself.",
			"properties": {
				"openBuilder": {
					"type": "boolean",
					"title": "Open Builder",
					"description": "Opens the APEX builder when launching APEX Nitro."
				}
			},
			"required": [
				"openBuilder"
			]
		},
		"publish": {
			"type": "object",
			"title": "Publish Files",
			"description": "Required if you want to publish your files to APEX automatically.",
			"properties": {
				"destination": {
					"type": "string",
					"title": "APEX Files Destination",
					"description": "This is used for the 'publish' feature and will determine where the files should be uploaded.",
					"enum": [
						"application",
						"workspace",
						"theme",
						"plugin"
					]
				},
				"pluginName": {
					"type": "string",
					"title": "Plugin Internal Name",
					"description": "The internal name of the plugin is required to map the files to the correct plugin.",
					"placeholder": "Example: COM.ORACLE.STARPLUGIN"
				},
				"path": {
					"type": "string",
					"title": "SQLcl Path",
					"description": "Enter the path to SQLcl. If it's been added to your environment variable, it should be `sql`. Otherwise enter a full path. Example: `/Users/vmorneau/sqlcl/bin/sql`",
					"placeholder": "Example: [sql] or [/Users/vmorneau/sqlcl/bin/sql]"
				},
				"connectionType": {
					"type": "string",
					"title": "Connection Type",
					"description": "Select your connection type",
					"enum": [
						"basic",
						"custom"
					]
				},
				"username": {
					"type": "string",
					"title": "User",
					"description": "Enter your user"
				},
				"password": {
					"type": "password",
					"title": "Password (Optional)",
					"description": "If you do not enter your password here, it will be prompted to you when using [apex-nitro publish project]",
					"placeholder": "Enter your password"
				},
				"host": {
					"type": "string",
					"title": "host",
					"description": "Enter your host.",
					"placeholder": "Example: localhost"
				},
				"port": {
					"type": "string",
					"title": "port",
					"description": "Enter your port.",
					"default": "1521",
					"placeholder": "Example: 1521"
				},
				"basicType": {
					"type": "string",
					"title": "Connection Type",
					"description": "",
					"default": "sid",
					"enum": [
						"sid",
						"service name",
						"tns"
					]
				},
				"sid": {
					"type": "string",
					"title": "SID",
					"description": "Enter the [SID] for user/pass@db:port:[SID]",
					"placeholder": "Example: xe"
				},
				"serviceName": {
					"type": "string",
					"title": "Service Name",
					"description": "Enter the [SERVICE NAME] for user/pass@db:port/[SERVICE NAME]",
					"placeholder": "Example: xe"
				},
				"tns": {
					"type": "string",
					"title": "TNS",
					"description": "Enter the [TNS] for user/pass@[TNS]",
					"placeholder": "Example: DEV1"
				},
				"connectionString": {
					"type": "string",
					"title": "Connection String",
					"description": "Enter your connection string.",
					"placeholder": "Example: barry/oracle@localhost:1521/orcl"
				}
			},
			"required": [
				"destination"
			],
			"requiredIf": [
				{
					"property": "pluginName",
					"dependsOn": ["destination"],
					"value": ["plugin"]
				},
				{
					"property": "username",
					"dependsOn": ["connectionType"],
					"value": ["basic"]
				},
				{
					"property": "host",
					"dependsOn": ["connectionType"],
					"value": ["basic"]
				},
				{
					"property": "port",
					"dependsOn": ["connectionType"],
					"value": ["basic"]
				},
				{
					"property": "basicType",
					"dependsOn": ["connectionType"],
					"value": ["basic"]
				},
				{
					"property": "sid",
					"dependsOn": ["connectionType", "basicType"],
					"value": ["basic", "sid"]
				},
				{
					"property": "serviceName",
					"dependsOn": ["connectionType", "basicType"],
					"value": ["basic", "service name"]
				},
				{
					"property": "tns",
					"dependsOn": ["connectionType", "basicType"],
					"value": ["basic", "tns"]
				},
				{
					"property": "connectionString",
					"dependsOn": ["connectionType"],
					"value": ["custom"]
				}
			],
			"showIf": [
				{
					"property": "pluginName",
					"dependsOn": ["destination"],
					"value": ["plugin"]
				},
				{
					"property": "username",
					"dependsOn": ["connectionType"],
					"value": ["basic"]
				},
				{
					"property": "password",
					"dependsOn": ["connectionType"],
					"value": ["basic"]
				},
				{
					"property": "host",
					"dependsOn": ["connectionType"],
					"value": ["basic"]
				},
				{
					"property": "port",
					"dependsOn": ["connectionType"],
					"value": ["basic"]
				},
				{
					"property": "basicType",
					"dependsOn": ["connectionType"],
					"value": ["basic"]
				},
				{
					"property": "sid",
					"dependsOn": ["connectionType", "basicType"],
					"value": ["basic", "sid"]
				},
				{
					"property": "serviceName",
					"dependsOn": ["connectionType", "basicType"],
					"value": ["basic", "service name"]
				},
				{
					"property": "tns",
					"dependsOn": ["connectionType", "basicType"],
					"value": ["basic", "tns"]
				},
				{
					"property": "connectionString",
					"dependsOn": ["connectionType"],
					"value": ["custom"]
				}
			]
		},
		"themeroller": {
			"type": "object",
			"title": "Themeroller",
			"description": "This feature will generate a `less` file that you can import into your application theme style. It will add editable variables to theme roller.",
			"properties": {
				"files": {
					"type": "array",
					"title": "Files.",
					"description": "Include the list of `scss` or `less` files to be parsed by Theme Roller.",
					"items": {
						"type": "string",
						"title": "File",
						"description": "File",
						"placeholder": "Example: /Users/vmorneau/myProject/src/sass/app.scss",
						"required": true
					}
				}
			}
		}
	},
	"required": [
		"mode",
		"appURL",
		"srcFolder"
	],
	"requiredIf": [{
		"property": "distFolder",
		"dependsOn": ["mode"],
		"value": ["advanced"]
	}],
	"showIf": [{
		"property": "distFolder",
		"dependsOn": ["mode"],
		"value": ["advanced"]
	}, {
		"property": "js",
		"dependsOn": ["mode"],
		"value": ["advanced"]
	}, {
		"property": "css",
		"dependsOn": ["mode"],
		"value": ["advanced"]
	}, {
		"property": "browsersync",
		"dependsOn": ["mode"],
		"value": ["advanced"]
	}, {
		"property": "header",
		"dependsOn": ["mode"],
		"value": ["advanced"]
	}, {
		"property": "apex",
		"dependsOn": ["mode"],
		"value": ["advanced"]
	}, {
		"property": "publish",
		"dependsOn": ["mode"],
		"value": ["advanced"]
	}, {
		"property": "themeroller",
		"dependsOn": ["mode"],
		"value": ["advanced"]
	}]
}
