in src/commands/createFunctionApp/stacks/getStackPicks.ts [17:78]
export async function getStackPicks(context: IFunctionAppWizardContext): Promise<IAzureQuickPickItem<FullFunctionAppStack>[]> {
const stacks: FunctionAppStack[] = (await getStacks(context)).filter(s => !context.stackFilter || context.stackFilter === s.value);
const picks: IAzureQuickPickItem<FullFunctionAppStack>[] = [];
for (const stack of stacks) {
for (const majorVersion of stack.majorVersions) {
const minorVersions: (AppStackMinorVersion<FunctionAppRuntimes>)[] = majorVersion.minorVersions
.filter(mv => {
return (mv.stackSettings.linuxRuntimeSettings && mv.stackSettings.linuxRuntimeSettings.supportedFunctionsExtensionVersions.includes(context.version)) ||
(mv.stackSettings.windowsRuntimeSettings && mv.stackSettings.windowsRuntimeSettings.supportedFunctionsExtensionVersions.includes(context.version));
});
for (const minorVersion of minorVersions) {
let description: string | undefined;
const previewOs = getFlagOs(minorVersion.stackSettings, 'isPreview');
switch (previewOs) {
case 'All':
description = localize('preview', '(Preview)');
break;
case 'Linux':
case 'Windows':
description = localize('previewOnOS', '(Preview on {0})', previewOs);
break;
}
const earlyAccessOS = getFlagOs(minorVersion.stackSettings, 'isEarlyAccess');
switch (earlyAccessOS) {
case 'All':
description = localize('earlyAccess', '(Early Access)');
break;
case 'Linux':
case 'Windows':
description = localize('earlyAccessOnOS', '(Early Access on {0})', earlyAccessOS);
break;
}
const deprecatedOS = getFlagOs(minorVersion.stackSettings, 'isDeprecated');
switch (deprecatedOS) {
case 'All':
description = localize('deprecated', '(Deprecated)');
break;
case 'Linux':
case 'Windows':
description = localize('deprecatedOnOS', '(Deprecated on {0})', deprecatedOS);
break;
}
picks.push({
label: minorVersion.displayText,
description,
group: stack.displayText,
data: { stack, majorVersion, minorVersion }
});
}
}
}
return picks.sort((p1, p2) => {
return p1.data.stack.value !== p2.data.stack.value ?
0 : // keep order as-is if they're different stacks (i.e. Node.js vs. .NET)
getPriority(p1.data.minorVersion.stackSettings) - getPriority(p2.data.minorVersion.stackSettings); // otherwise sort based on priority
});
}