@salesforce/schemas
Version:
This repository contains the spec and schema for the Scratch Org Definition Configuration file and `sfdx-project.json` file.
960 lines • 30 kB
JSON
{
"$id": "http://schemas.salesforce.com/sfdx-project.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"definitions": {
"MetadataRegistry": {
"additionalProperties": false,
"properties": {
"childTypes": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"strictDirectoryNames": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"suffixes": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"types": {
"additionalProperties": {
"additionalProperties": false,
"properties": {
"aliasFor": {
"type": "string"
},
"children": {
"additionalProperties": false,
"properties": {
"directories": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"suffixes": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"types": {
"$ref": "#/definitions/alias-147831185-257-1138-147831185-0-1202"
}
},
"required": [
"types",
"suffixes"
],
"type": "object"
},
"directoryName": {
"type": "string"
},
"folderContentType": {
"type": "string"
},
"folderType": {
"type": "string"
},
"id": {
"type": "string"
},
"ignoreParsedFullName": {
"type": "boolean"
},
"isAddressable": {
"type": "boolean"
},
"name": {
"type": "string"
},
"strategies": {
"additionalProperties": false,
"properties": {
"adapter": {
"enum": [
"mixedContent",
"matchingContentFile",
"decomposed",
"bundle",
"default"
],
"type": "string"
},
"decomposition": {
"enum": [
"topLevel",
"folderPerType"
],
"type": "string"
},
"transformer": {
"enum": [
"decomposed",
"staticResource",
"standard"
],
"type": "string"
}
},
"required": [
"adapter"
],
"type": "object"
},
"strictDirectoryName": {
"type": "boolean"
},
"suffix": {
"type": "string"
},
"supportsPartialDelete": {
"type": "boolean"
},
"supportsWildcardAndName": {
"type": "boolean"
},
"unaddressableWithoutParent": {
"type": "boolean"
},
"uniqueIdElement": {
"type": "string"
},
"xmlElementName": {
"type": "string"
}
},
"required": [
"id",
"name",
"directoryName"
],
"type": "object"
},
"type": "object"
}
},
"required": [
"types",
"suffixes",
"strictDirectoryNames",
"childTypes"
],
"type": "object"
},
"PackageDir": {
"anyOf": [
{
"additionalProperties": false,
"description": "type required just for projects, regardless of 1gp/2gp package use",
"properties": {
"default": {
"default": true,
"description": "If you have specified more than one path, include this parameter for the default path to indicate which is the default package directory.",
"title": "default",
"type": "boolean"
},
"path": {
"description": "If you don’t specify a path, the Salesforce CLI uses a placeholder when you create a package.",
"title": "Path",
"type": "string"
}
},
"required": [
"path"
],
"type": "object"
},
{
"$ref": "#/definitions/PackagePackageDir"
}
]
},
"PackageDirDependency": {
"additionalProperties": {},
"description": "from packaging library. Where does this go? export type PackageDescriptorJson = Partial<NamedPackageDir> & Partial<{ - id: string; - features: string[]; - orgPreferences: string[]; - snapshot: string; apexTestAccess: { permissionSets: string[] | string; permissionSetLicenses: string[] | string }; - permissionSetNames: string[]; - permissionSetLicenseDeveloperNames: string[]; - branch: string; subscriberPackageVersionId: string; packageId: string; versionName: string; language?: string; }>;",
"properties": {
"branch": {
"type": "string"
},
"package": {
"type": "string"
},
"versionNumber": {
"type": "string"
}
},
"required": [
"package"
],
"type": "object"
},
"PackagePackageDir": {
"additionalProperties": false,
"description": "has the \"full\" info used for packaging.",
"properties": {
"ancestorId": {
"description": "The ancestor that’s the immediate parent of the version that you’re creating. The package version ID to supply starts with '05i'.",
"title": "Ancestor ID",
"type": "string"
},
"ancestorVersion": {
"description": "The ancestor that’s the immediate parent of the version that you’re creating. The ancestor version uses the format major.minor.patch.build.",
"title": "Ancestor Version",
"type": "string"
},
"apexTestAccess": {
"additionalProperties": false,
"description": "Additional access that should be granted to the user when running package Apex tests",
"properties": {
"permissionSetLicenses": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "string"
}
],
"description": "The list of permission sets licenses to enable while running Apex tests",
"title": "Permission Set Licenses"
},
"permissionSets": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "string"
}
],
"description": "The list of permission sets to enable while running Apex tests",
"title": "Permission Sets"
}
},
"required": [
"permissionSets",
"permissionSetLicenses"
],
"type": "object"
},
"default": {
"default": true,
"description": "If you have specified more than one path, include this parameter for the default path to indicate which is the default package directory.",
"title": "default",
"type": "boolean"
},
"definitionFile": {
"description": "Reference an external .json file to specify the features and org preferences required for the metadata of your package, such as the scratch org definition.",
"title": "Definition File",
"type": "string"
},
"dependencies": {
"description": "To specify dependencies for 2GP within the same Dev Hub, use either the package version alias or a combination of the package name and the version number.",
"items": {
"$ref": "#/definitions/PackageDirDependency"
},
"type": "array"
},
"functions": {
"deprecated": true,
"items": {
"type": "string"
},
"type": "array"
},
"includeProfileUserLicenses": {
"default": false,
"description": "Whether to include <userLicense> elements in profile metadata. Defaults to false.",
"title": "Include Profile User Licenses",
"type": "boolean"
},
"package": {
"description": "The package name you specified when creating the package.",
"title": "Package Identifier",
"type": "string"
},
"packageMetadataAccess": {
"additionalProperties": false,
"description": "Additional access that should be granted to the user while deploying package metadata, available in Salesforce API version 61.0 and above",
"properties": {
"permissionSetLicenses": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
}
],
"description": "The list of permission set licenses to enable while deploying package metadata",
"title": "Permission Set Licenses"
},
"permissionSets": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
}
],
"description": "The list of permission sets to enable while deploying package metadata",
"title": "Permission Sets"
}
},
"required": [
"permissionSets",
"permissionSetLicenses"
],
"title": "Package Metadata Access",
"type": "object"
},
"path": {
"description": "If you don’t specify a path, the Salesforce CLI uses a placeholder when you create a package.",
"title": "Path",
"type": "string"
},
"postInstallScript": {
"description": "The post install script.",
"title": "Post Install Script",
"type": "string"
},
"postInstallUrl": {
"description": "The post install url.",
"title": "Post Install Url",
"type": "string"
},
"releaseNotesUrl": {
"description": "The release notes url.",
"title": "Release Notes Url",
"type": "string"
},
"scopeProfiles": {
"default": false,
"description": "Determines whether to include profile settings from only the directory being packaged (true), or whether to include profile settings from all package directories (false). If not specified, the default is false.",
"title": "Scope Profiles",
"type": "boolean"
},
"seedMetadata": {
"additionalProperties": false,
"description": "Metadata not meant to be packaged, but deployed before deploying packaged metadata",
"properties": {
"path": {
"description": "The path name of the package directory containing the seed metadata",
"title": "Path",
"type": "string"
}
},
"required": [
"path"
],
"title": "Seed Metadata",
"type": "object"
},
"uninstallScript": {
"description": "The uninstall script.",
"title": "Uninstall Script",
"type": "string"
},
"unpackagedMetadata": {
"additionalProperties": false,
"description": "Metadata not meant to be packaged, but deployed when testing packaged metadata",
"properties": {
"path": {
"description": "The path name of the package directory containing the unpackaged metadata",
"title": "Path",
"type": "string"
}
},
"required": [
"path"
],
"title": "Unpackaged Metadata",
"type": "object"
},
"versionDescription": {
"description": "Human readable version information, format not specified.",
"title": "Version Description",
"type": "string"
},
"versionName": {
"description": "If not specified, the CLI uses versionNumber as the version name.",
"title": "Version Name",
"type": "string"
},
"versionNumber": {
"description": "Version numbers are formatted as major.minor.patch.build. For example, 1.2.1.8.",
"title": "Version Number",
"type": "string"
}
},
"required": [
"package",
"path",
"versionNumber"
],
"type": "object"
},
"RegistryPresets": {
"items": {
"type": "string"
},
"type": "array"
},
"Replacements": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"filename": {
"type": "string"
},
"replaceWhenEnv": {
"items": {
"additionalProperties": false,
"properties": {
"env": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"env",
"value"
],
"type": "object"
},
"type": "array"
},
"replaceWithFile": {
"type": "string"
},
"stringToReplace": {
"type": "string"
}
},
"required": [
"filename",
"replaceWithFile",
"stringToReplace"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"allowUnsetEnvVariable": {
"type": "boolean"
},
"filename": {
"type": "string"
},
"replaceWhenEnv": {
"items": {
"additionalProperties": false,
"properties": {
"env": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"env",
"value"
],
"type": "object"
},
"type": "array"
},
"replaceWithEnv": {
"type": "string"
},
"stringToReplace": {
"type": "string"
}
},
"required": [
"filename",
"replaceWithEnv",
"stringToReplace"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"filename": {
"type": "string"
},
"regexToReplace": {
"type": "string"
},
"replaceWhenEnv": {
"items": {
"additionalProperties": false,
"properties": {
"env": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"env",
"value"
],
"type": "object"
},
"type": "array"
},
"replaceWithFile": {
"type": "string"
}
},
"required": [
"filename",
"regexToReplace",
"replaceWithFile"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"allowUnsetEnvVariable": {
"type": "boolean"
},
"filename": {
"type": "string"
},
"regexToReplace": {
"type": "string"
},
"replaceWhenEnv": {
"items": {
"additionalProperties": false,
"properties": {
"env": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"env",
"value"
],
"type": "object"
},
"type": "array"
},
"replaceWithEnv": {
"type": "string"
}
},
"required": [
"filename",
"regexToReplace",
"replaceWithEnv"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"glob": {
"type": "string"
},
"replaceWhenEnv": {
"items": {
"additionalProperties": false,
"properties": {
"env": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"env",
"value"
],
"type": "object"
},
"type": "array"
},
"replaceWithFile": {
"type": "string"
},
"stringToReplace": {
"type": "string"
}
},
"required": [
"glob",
"replaceWithFile",
"stringToReplace"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"allowUnsetEnvVariable": {
"type": "boolean"
},
"glob": {
"type": "string"
},
"replaceWhenEnv": {
"items": {
"additionalProperties": false,
"properties": {
"env": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"env",
"value"
],
"type": "object"
},
"type": "array"
},
"replaceWithEnv": {
"type": "string"
},
"stringToReplace": {
"type": "string"
}
},
"required": [
"glob",
"replaceWithEnv",
"stringToReplace"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"glob": {
"type": "string"
},
"regexToReplace": {
"type": "string"
},
"replaceWhenEnv": {
"items": {
"additionalProperties": false,
"properties": {
"env": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"env",
"value"
],
"type": "object"
},
"type": "array"
},
"replaceWithFile": {
"type": "string"
}
},
"required": [
"glob",
"regexToReplace",
"replaceWithFile"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"allowUnsetEnvVariable": {
"type": "boolean"
},
"glob": {
"type": "string"
},
"regexToReplace": {
"type": "string"
},
"replaceWhenEnv": {
"items": {
"additionalProperties": false,
"properties": {
"env": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"env",
"value"
],
"type": "object"
},
"type": "array"
},
"replaceWithEnv": {
"type": "string"
}
},
"required": [
"glob",
"regexToReplace",
"replaceWithEnv"
],
"type": "object"
}
]
},
"alias-147831185-257-1138-147831185-0-1202": {
"additionalProperties": {
"additionalProperties": false,
"properties": {
"aliasFor": {
"type": "string"
},
"children": {
"additionalProperties": false,
"properties": {
"directories": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"suffixes": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"types": {
"$ref": "#/definitions/alias-147831185-257-1138-147831185-0-1202"
}
},
"required": [
"types",
"suffixes"
],
"type": "object"
},
"directoryName": {
"type": "string"
},
"folderContentType": {
"type": "string"
},
"folderType": {
"type": "string"
},
"id": {
"type": "string"
},
"ignoreParsedFullName": {
"type": "boolean"
},
"isAddressable": {
"type": "boolean"
},
"name": {
"type": "string"
},
"strategies": {
"additionalProperties": false,
"properties": {
"adapter": {
"enum": [
"mixedContent",
"matchingContentFile",
"decomposed",
"bundle",
"default"
],
"type": "string"
},
"decomposition": {
"enum": [
"topLevel",
"folderPerType"
],
"type": "string"
},
"transformer": {
"enum": [
"decomposed",
"staticResource",
"standard"
],
"type": "string"
}
},
"required": [
"adapter"
],
"type": "object"
},
"strictDirectoryName": {
"type": "boolean"
},
"suffix": {
"type": "string"
},
"supportsPartialDelete": {
"type": "boolean"
},
"supportsWildcardAndName": {
"type": "boolean"
},
"unaddressableWithoutParent": {
"type": "boolean"
},
"uniqueIdElement": {
"type": "string"
},
"xmlElementName": {
"type": "string"
}
},
"required": [
"id",
"name",
"directoryName"
],
"type": "object"
},
"type": "object"
}
},
"description": "The properties and shape of the SFDX project",
"properties": {
"name": {
"description": "The name of your Salesforce project.",
"title": "name",
"type": "string"
},
"namespace": {
"description": "A namespace is an alphanumeric identifier that distinguishes your package and its contents from other packages in your customer’s org. For steps on how to register a namespace and link it to your Dev Hub org, see Create and Register Your Namespace for Second-Generation Managed Packages on developer.salesforce.com. If you’re creating an unlocked package, you can create it without a namespace.",
"title": "Namespace",
"type": "string"
},
"oauthLocalPort": {
"default": 1717,
"description": "By default, the OAuth port is 1717. However, change this port if this port is already in use, and you plan to create a connected app in your Dev Hub org to support JWT-based authorization.",
"type": "number"
},
"packageAliases": {
"additionalProperties": {
"type": "string"
},
"description": "The Salesforce CLI updates this file with the aliases when you create a package or package version. You can also manually update this section for existing packages or package versions. You can use the alias instead of the cryptic package ID when running CLI force:package commands.",
"title": "Aliases for packaging ids",
"type": "object"
},
"packageDirectories": {
"$comment": "The properties ancestorId & ancestorVersion cannot be included together, but this schema optimizes for VS Code code completion rather than pure validation.",
"description": "Package directories indicate which directories to target when syncing source to and from the scratch org. These directories can contain source from your managed package, unmanaged package, or unpackaged source, for example, ant tool or change set.",
"items": {
"$ref": "#/definitions/PackageDir"
},
"minItems": 1,
"title": "Package Directories",
"type": "array"
},
"plugins": {
"additionalProperties": {},
"description": "Salesforce CLI plugin configurations used with this project.",
"title": "CLI Plugins custom settings",
"type": "object"
},
"pushPackageDirectoriesSequentially": {
"deprecated": "only works with deprecated commands. See https://github.com/forcedotcom/cli/discussions/2402",
"type": "boolean"
},
"registryCustomizations": {
"$ref": "#/definitions/MetadataRegistry"
},
"registryPresets": {
"$ref": "#/definitions/RegistryPresets",
"deprecated": "use `sourceBehaviorOptions`\nfilenames from https://github.com/forcedotcom/source-deploy-retrieve/tree/main/src/registry/presets",
"title": "Custom predefined presets for decomposing metadata types"
},
"replacements": {
"description": "The Salesforce CLI will conditionally replace portions of your metadata during a deployment\"",
"items": {
"$ref": "#/definitions/Replacements"
},
"title": "Replacements for metadata that are executed during deployments\"",
"type": "array"
},
"sfdcLoginUrl": {
"description": "The login URL that the force:auth commands use. If not specified, the default is login.salesforce.com. Override the default value if you want users to authorize to a specific Salesforce instance. For example, if you want to authorize into a sandbox org, set this parameter to test.salesforce.com.",
"title": "SFDC Login URL",
"type": "string"
},
"signupTargetLoginUrl": {
"description": "The url that is used when creating new scratch orgs. This is typically only used for testing prerelease environments.",
"type": "string"
},
"sourceApiVersion": {
"default": "48.0",
"description": "The API version that the source is compatible with. By default it matches the API version.",
"title": "Source API Version",
"type": "string"
},
"sourceBehaviorOptions": {
"$ref": "#/definitions/RegistryPresets",
"description": "filenames from https://github.com/forcedotcom/source-deploy-retrieve/tree/main/src/registry/presets",
"title": "Custom predefined presets for decomposing metadata types"
}
},
"required": [
"packageDirectories"
],
"title": "Salesforce DX Project File",
"type": "object"
}