function getScope()

in src/handler.ts [543:571]


function getScope(files: ParsedFiles): ScopeType | undefined {
  const template = files.templateContents ?? {};
  const bicepGenerated = template.metadata?._generator?.name;
  const schema = template["$schema"];

  if (!bicepGenerated) {
    // loose validation for non-Bicep generated templates, to match Azure CLI behavior
    return;
  }

  const result =
    /https:\/\/schema\.management\.azure\.com\/schemas\/[0-9a-zA-Z-]+\/([a-zA-Z]+)Template\.json#?/.exec(
      schema,
    );
  const scopeMatch = result ? result[1].toLowerCase() : null;

  switch (scopeMatch) {
    case "tenantdeployment":
      return "tenant";
    case "managementgroupdeployment":
      return "managementGroup";
    case "subscriptiondeployment":
      return "subscription";
    case "deployment":
      return "resourceGroup";
    default:
      throw new Error(`Failed to determine deployment scope from Bicep file.`);
  }
}