From 7fd3fb8e560c40d15c86f5f0ab2b43492648067e Mon Sep 17 00:00:00 2001 From: Dylan Piercey Date: Wed, 21 Jun 2023 20:25:45 -0700 Subject: [PATCH] feat: avoid custom resolver for newer Marko 4 versions --- src/preset/browser/jest-preset.ts | 50 ++++++++++++++++++------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/src/preset/browser/jest-preset.ts b/src/preset/browser/jest-preset.ts index b4f7b18..1fd26ef 100644 --- a/src/preset/browser/jest-preset.ts +++ b/src/preset/browser/jest-preset.ts @@ -4,29 +4,39 @@ export = { ...common, testEnvironment: "jsdom", // uses a webpack style resolver, the default one has many issues. - resolver: - (() => { - try { - // eslint-disable-next-line @typescript-eslint/no-var-requires - const parts = require("@marko/compiler/package.json").version.split( - "." - ); - const major = parseInt(parts[0], 10); - const minor = parseInt(parts[1], 10); - const patch = parseInt(parts[2], 10); - // Checks if the version is less than 5.25.12 - return major === 5 - ? minor === 25 - ? patch < 12 - : minor < 25 - : major < 5; - } catch { - return false; - } - })() && require.resolve("../resolver"), + resolver: needsResolver() && require.resolve("../resolver"), // preprocesses Marko files. transform: { "\\.marko$": require.resolve("../../transform/browser"), ...common.transform, }, }; + +function needsResolver() { + const version = getVersion("@marko/compiler") || getVersion("marko"); + if (!version) return false; + + const parts = version.split("."); + const major = parseInt(parts[0], 10); + const minor = parseInt(parts[1], 10); + const patch = parseInt(parts[2], 10); + + // Checks if the version is less than 5.25.12 || 4.26.0 + switch (major) { + case 5: + return minor === 25 ? patch < 12 : minor < 25; + case 4: + return minor < 26; + default: + return false; + } +} + +function getVersion(name: string) { + try { + // eslint-disable-next-line @typescript-eslint/no-var-requires + return require(`${name}/package.json`).version; + } catch { + return undefined; + } +}