export function parseScriptTemplate()

in src/templates/script/parseScriptTemplates.ts [176:232]


export function parseScriptTemplate(rawTemplate: IRawTemplate, resources: IResources, bindingTemplates: IBindingTemplate[]): IScriptFunctionTemplate | undefined {
    if (!rawTemplate.id || !rawTemplate.metadata) {
        return undefined;
    }

    const functionJson: ParsedFunctionJson = new ParsedFunctionJson(rawTemplate.function);

    let language: ProjectLanguage = rawTemplate.metadata.language;
    // The templateApiZip only supports script languages, and thus incorrectly defines 'C#Script' as 'C#', etc.
    switch (language) {
        case ProjectLanguage.CSharp:
            language = ProjectLanguage.CSharpScript;
            break;
        case ProjectLanguage.FSharp:
            language = ProjectLanguage.FSharpScript;
            break;
        // The schema of Java templates is the same as script languages, so put it here.
        case ProjectLanguage.Java:
            language = ProjectLanguage.Java;
            break;
        default:
    }

    const userPromptedSettings: IBindingSetting[] = [];
    if (rawTemplate.metadata.userPrompt) {
        for (const settingName of rawTemplate.metadata.userPrompt) {
            if (functionJson.triggerBinding) {
                const triggerBinding: IFunctionBinding = functionJson.triggerBinding;
                const bindingTemplate: IBindingTemplate | undefined = bindingTemplates.find(b => b.type.toLowerCase() === triggerBinding.type?.toLowerCase());
                if (bindingTemplate) {
                    const setting: IBindingSetting | undefined = bindingTemplate.settings.find((bs: IBindingSetting) => bs.name === settingName);
                    if (setting) {
                        const functionSpecificDefaultValue = triggerBinding[setting.name];
                        if (functionSpecificDefaultValue) {
                            // overwrite common default value with the function-specific default value
                            setting.defaultValue = functionSpecificDefaultValue;
                        }
                        userPromptedSettings.push(setting);
                    }
                }
            }
        }
    }

    return {
        functionJson,
        isHttpTrigger: functionJson.isHttpTrigger,
        isTimerTrigger: functionJson.isTimerTrigger,
        id: rawTemplate.id,
        name: getResourceValue(resources, rawTemplate.metadata.name),
        defaultFunctionName: rawTemplate.metadata.defaultFunctionName,
        language,
        userPromptedSettings,
        templateFiles: rawTemplate.files || {},
        categories: rawTemplate.metadata.category || []
    };
}