From 7b02d891a197a00a887093e59619183e95a3d917 Mon Sep 17 00:00:00 2001 From: Oleksandr Fediashov Date: Thu, 12 Jan 2023 14:20:18 +0100 Subject: [PATCH 1/2] fix: handle .cjs & .mjs extensions --- .changeset/wicked-poets-begin.md | 6 +++ .../helpers/loadLinariaOptions.ts | 2 +- .../src/__fixtures__/sample-script.cjs | 1 + packages/testkit/src/module.test.ts | 42 ++++++++----------- 4 files changed, 26 insertions(+), 25 deletions(-) create mode 100644 .changeset/wicked-poets-begin.md create mode 100644 packages/testkit/src/__fixtures__/sample-script.cjs diff --git a/.changeset/wicked-poets-begin.md b/.changeset/wicked-poets-begin.md new file mode 100644 index 000000000..4ad14dd78 --- /dev/null +++ b/.changeset/wicked-poets-begin.md @@ -0,0 +1,6 @@ +--- +"@linaria/babel-preset": patch +"@linaria/testkit": patch +--- + +fix: handle .cjs & .mjs extensions diff --git a/packages/babel/src/transform-stages/helpers/loadLinariaOptions.ts b/packages/babel/src/transform-stages/helpers/loadLinariaOptions.ts index f82118613..dabf0ef75 100644 --- a/packages/babel/src/transform-stages/helpers/loadLinariaOptions.ts +++ b/packages/babel/src/transform-stages/helpers/loadLinariaOptions.ts @@ -30,7 +30,7 @@ export default function loadLinariaOptions( const options = { displayName: false, evaluate: true, - extensions: ['.json', '.js', '.jsx', '.ts', '.tsx'], + extensions: ['.cjs', '.json', '.js', '.jsx', '.mjs', '.ts', '.tsx'], rules: rules ?? [ { action: require.resolve('@linaria/shaker'), diff --git a/packages/testkit/src/__fixtures__/sample-script.cjs b/packages/testkit/src/__fixtures__/sample-script.cjs new file mode 100644 index 000000000..888cae37a --- /dev/null +++ b/packages/testkit/src/__fixtures__/sample-script.cjs @@ -0,0 +1 @@ +module.exports = 42; diff --git a/packages/testkit/src/module.test.ts b/packages/testkit/src/module.test.ts index a98331515..d173e5296 100644 --- a/packages/testkit/src/module.test.ts +++ b/packages/testkit/src/module.test.ts @@ -1,21 +1,11 @@ -import path from 'path'; - -import * as babel from '@babel/core'; import dedent from 'dedent'; +import path from 'path'; import { Module, TransformCacheCollection } from '@linaria/babel-preset'; -import type { Evaluator, StrictOptions } from '@linaria/utils'; +import type { StrictOptions } from '@linaria/utils'; beforeEach(() => Module.invalidate()); -const evaluator: Evaluator = (filename, options, text) => { - const { code } = babel.transformSync(text, { - filename, - presets: ['@babel/preset-env'], - })!; - return [code!, null]; -}; - function getFileName() { return path.resolve(__dirname, './__fixtures__/test.js'); } @@ -23,16 +13,8 @@ function getFileName() { const options: StrictOptions = { displayName: false, evaluate: true, - extensions: ['.js', '.jsx', '.ts', '.tsx'], - rules: [ - { - action: evaluator, - }, - { - test: /\/node_modules\//, - action: 'ignore', - }, - ], + extensions: ['.cjs', '.js', '.jsx', '.ts', '.tsx'], + rules: [], babelOptions: {}, }; @@ -49,7 +31,7 @@ it('creates module for JS files', () => { expect(mod.filename).toBe(filename); }); -it('requires JS files', () => { +it('requires .js files', () => { const mod = new Module(getFileName(), options); mod.evaluate(dedent` @@ -61,7 +43,19 @@ it('requires JS files', () => { expect(mod.exports).toBe('The answer is 42'); }); -it('requires JSON files', () => { +it('requires .cjs files', () => { + const mod = new Module(getFileName(), options); + + mod.evaluate(dedent` + const answer = require('./sample-script.cjs'); + + module.exports = 'The answer is ' + answer; + `); + + expect(mod.exports).toBe('The answer is 42'); +}); + +it('requires .json files', () => { const mod = new Module(getFileName(), options); mod.evaluate(dedent` From 95f2598d155e7c2400b1fd78e967ade556a86899 Mon Sep 17 00:00:00 2001 From: Oleksandr Fediashov Date: Thu, 12 Jan 2023 15:04:51 +0100 Subject: [PATCH 2/2] fix: skip processing of literals on exports --- packages/babel/src/utils/processTemplateExpression.ts | 1 + packages/testkit/src/module.test.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/babel/src/utils/processTemplateExpression.ts b/packages/babel/src/utils/processTemplateExpression.ts index 852f23c0f..af95e840e 100644 --- a/packages/babel/src/utils/processTemplateExpression.ts +++ b/packages/babel/src/utils/processTemplateExpression.ts @@ -17,6 +17,7 @@ const processTemplateExpression = ( >, emit: (processor: BaseProcessor) => void ) => { + if (p.parentPath.isExportSpecifier()) return; if (processed.has(p.node)) return; const tagProcessor = getTagProcessor(p, fileContext, options); diff --git a/packages/testkit/src/module.test.ts b/packages/testkit/src/module.test.ts index d173e5296..39dcd18e8 100644 --- a/packages/testkit/src/module.test.ts +++ b/packages/testkit/src/module.test.ts @@ -1,5 +1,5 @@ -import dedent from 'dedent'; import path from 'path'; +import dedent from 'dedent'; import { Module, TransformCacheCollection } from '@linaria/babel-preset'; import type { StrictOptions } from '@linaria/utils';