diff --git a/packages/cli/config/jest.js b/packages/cli/config/jest.js index 33c89029f3..028cc8d389 100644 --- a/packages/cli/config/jest.js +++ b/packages/cli/config/jest.js @@ -132,7 +132,7 @@ async function getProjectConfig(targetPath, displayName) { transform: { '\\.(js|jsx|ts|tsx|mjs|cjs)$': [ - '@swc/jest', + require.resolve('./jestSwcTransform'), { sourceMaps: envOptions.enableSourceMaps || envOptions.nextTests, }, diff --git a/packages/cli/config/jestSwcTransform.js b/packages/cli/config/jestSwcTransform.js new file mode 100644 index 0000000000..c87948978d --- /dev/null +++ b/packages/cli/config/jestSwcTransform.js @@ -0,0 +1,35 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const { createTransformer: createSwcTransformer } = require('@swc/jest'); + +const ESM_REGEX = /\b(?:import|export)\b/; + +function createTransformer(config) { + const swcTransformer = createSwcTransformer(config); + const process = (source, filePath, jestOptions) => { + if (filePath.endsWith('.js') && !ESM_REGEX.test(source)) { + return source; + } + + return swcTransformer.process(source, filePath, jestOptions); + }; + + const getCacheKey = swcTransformer.getCacheKey; + + return { process, getCacheKey }; +} + +module.exports = { createTransformer };