From 773da9aaec84404c60a64ae3009441afdec49b08 Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Tue, 5 Dec 2023 14:34:11 +1100 Subject: [PATCH 1/2] Fixes #756 Updating the supported node versions to match the [current list](https://learn.microsoft.com/en-gb/azure/azure-functions/functions-reference-node?tabs=javascript%2Cwindows%2Cazure-cli&pivots=nodejs-model-v4#supported-versions), including previews. --- src/core/func-core-tools.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/core/func-core-tools.ts b/src/core/func-core-tools.ts index 9cecd9583..81381ce1a 100644 --- a/src/core/func-core-tools.ts +++ b/src/core/func-core-tools.ts @@ -42,11 +42,11 @@ export function isCoreToolsVersionCompatible(coreToolsVersion: number, nodeVersi // Runtime support reference: https://docs.microsoft.com/azure/azure-functions/functions-versions?pivots=programming-language-javascript#languages switch (coreToolsVersion) { case 4: - return nodeVersion >= 14 && nodeVersion <= 18; + return nodeVersion >= 18 && nodeVersion <= 20; case 3: - return nodeVersion >= 10 && nodeVersion <= 14; + return nodeVersion >= 14 && nodeVersion <= 20; case 2: - return nodeVersion >= 8 && nodeVersion <= 10; + return nodeVersion >= 10 && nodeVersion <= 14; default: return false; } @@ -54,9 +54,9 @@ export function isCoreToolsVersionCompatible(coreToolsVersion: number, nodeVersi export function detectTargetCoreToolsVersion(nodeVersion: number): number { // Pick the highest version that is compatible with the specified Node version - if (nodeVersion >= 14 && nodeVersion <= 18) return 4; - if (nodeVersion >= 10 && nodeVersion < 14) return 3; - if (nodeVersion >= 8 && nodeVersion < 10) return 2; + if (nodeVersion >= 18 && nodeVersion <= 20) return 4; + if (nodeVersion >= 14 && nodeVersion < 20) return 3; + if (nodeVersion >= 10 && nodeVersion < 14) return 2; // Fallback to the latest version for Unsupported Node version return 4; From 8e955aee9ab9a27e4d88cab03b2f35737d913bb8 Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Tue, 5 Dec 2023 15:14:29 +1100 Subject: [PATCH 2/2] Fixing tests --- src/core/func-core-tools.spec.ts | 62 +++++++++++++++++++------------- 1 file changed, 37 insertions(+), 25 deletions(-) diff --git a/src/core/func-core-tools.spec.ts b/src/core/func-core-tools.spec.ts index 46e4360e0..61e0e3e35 100644 --- a/src/core/func-core-tools.spec.ts +++ b/src/core/func-core-tools.spec.ts @@ -53,45 +53,57 @@ describe("funcCoreTools", () => { describe("isCoreToolsVersionCompatible()", () => { it("should return true for compatible versions", () => { expect(isCoreToolsVersionCompatible(4, 10)).toBe(false); - expect(isCoreToolsVersionCompatible(3, 10)).toBe(true); + expect(isCoreToolsVersionCompatible(3, 10)).toBe(false); expect(isCoreToolsVersionCompatible(2, 10)).toBe(true); - expect(isCoreToolsVersionCompatible(3, 11)).toBe(true); - expect(isCoreToolsVersionCompatible(2, 11)).toBe(false); + expect(isCoreToolsVersionCompatible(3, 11)).toBe(false); + expect(isCoreToolsVersionCompatible(2, 11)).toBe(true); expect(isCoreToolsVersionCompatible(4, 12)).toBe(false); - expect(isCoreToolsVersionCompatible(3, 12)).toBe(true); - expect(isCoreToolsVersionCompatible(2, 12)).toBe(false); - expect(isCoreToolsVersionCompatible(3, 13)).toBe(true); - expect(isCoreToolsVersionCompatible(4, 14)).toBe(true); + expect(isCoreToolsVersionCompatible(3, 12)).toBe(false); + expect(isCoreToolsVersionCompatible(2, 12)).toBe(true); + expect(isCoreToolsVersionCompatible(4, 13)).toBe(false); + expect(isCoreToolsVersionCompatible(3, 13)).toBe(false); + expect(isCoreToolsVersionCompatible(2, 13)).toBe(true); + expect(isCoreToolsVersionCompatible(4, 14)).toBe(false); expect(isCoreToolsVersionCompatible(3, 14)).toBe(true); - expect(isCoreToolsVersionCompatible(2, 14)).toBe(false); - expect(isCoreToolsVersionCompatible(4, 15)).toBe(true); - expect(isCoreToolsVersionCompatible(3, 15)).toBe(false); - expect(isCoreToolsVersionCompatible(4, 16)).toBe(true); - expect(isCoreToolsVersionCompatible(3, 16)).toBe(false); + expect(isCoreToolsVersionCompatible(2, 14)).toBe(true); + expect(isCoreToolsVersionCompatible(4, 15)).toBe(false); + expect(isCoreToolsVersionCompatible(3, 15)).toBe(true); + expect(isCoreToolsVersionCompatible(4, 16)).toBe(false); + expect(isCoreToolsVersionCompatible(3, 16)).toBe(true); expect(isCoreToolsVersionCompatible(2, 16)).toBe(false); - expect(isCoreToolsVersionCompatible(4, 17)).toBe(true); - expect(isCoreToolsVersionCompatible(3, 17)).toBe(false); + expect(isCoreToolsVersionCompatible(4, 17)).toBe(false); + expect(isCoreToolsVersionCompatible(3, 17)).toBe(true); expect(isCoreToolsVersionCompatible(2, 17)).toBe(false); expect(isCoreToolsVersionCompatible(4, 18)).toBe(true); - expect(isCoreToolsVersionCompatible(3, 18)).toBe(false); + expect(isCoreToolsVersionCompatible(3, 18)).toBe(true); expect(isCoreToolsVersionCompatible(2, 18)).toBe(false); + expect(isCoreToolsVersionCompatible(4, 19)).toBe(true); + expect(isCoreToolsVersionCompatible(3, 19)).toBe(true); + expect(isCoreToolsVersionCompatible(2, 19)).toBe(false); + expect(isCoreToolsVersionCompatible(4, 20)).toBe(true); + expect(isCoreToolsVersionCompatible(3, 20)).toBe(true); + expect(isCoreToolsVersionCompatible(2, 20)).toBe(false); }); }); describe("detectTargetCoreToolsVersion()", () => { it("should return the latest valid version for each Node version", () => { - expect(detectTargetCoreToolsVersion(8)).toBe(2); - expect(detectTargetCoreToolsVersion(9)).toBe(2); - expect(detectTargetCoreToolsVersion(10)).toBe(3); - expect(detectTargetCoreToolsVersion(11)).toBe(3); - expect(detectTargetCoreToolsVersion(12)).toBe(3); - expect(detectTargetCoreToolsVersion(13)).toBe(3); - expect(detectTargetCoreToolsVersion(14)).toBe(4); - expect(detectTargetCoreToolsVersion(15)).toBe(4); - expect(detectTargetCoreToolsVersion(16)).toBe(4); + expect(detectTargetCoreToolsVersion(10)).toBe(2); + expect(detectTargetCoreToolsVersion(11)).toBe(2); + expect(detectTargetCoreToolsVersion(12)).toBe(2); + expect(detectTargetCoreToolsVersion(13)).toBe(2); + expect(detectTargetCoreToolsVersion(14)).toBe(3); + expect(detectTargetCoreToolsVersion(15)).toBe(3); + expect(detectTargetCoreToolsVersion(16)).toBe(3); + expect(detectTargetCoreToolsVersion(17)).toBe(3); + expect(detectTargetCoreToolsVersion(18)).toBe(4); + expect(detectTargetCoreToolsVersion(19)).toBe(4); + expect(detectTargetCoreToolsVersion(20)).toBe(4); // Unsupported Node versions should always return the latest version + expect(detectTargetCoreToolsVersion(8)).toBe(4); + expect(detectTargetCoreToolsVersion(9)).toBe(4); expect(detectTargetCoreToolsVersion(7)).toBe(4); - expect(detectTargetCoreToolsVersion(17)).toBe(4); + expect(detectTargetCoreToolsVersion(21)).toBe(4); }); });