From 47761d10e6dcfecf1d08806bc82ecfdc480fefdb Mon Sep 17 00:00:00 2001 From: XGHeaven Date: Wed, 11 Mar 2026 15:06:37 +0800 Subject: [PATCH] feat: improve cjs import and performance --- .changeset/few-pets-build.md | 5 + packages/pkg/src/engine/rollup/options.ts | 2 + packages/pkg/src/engine/shared/swcConfig.ts | 39 +- packages/pkg/src/rollupPlugins/swc.ts | 68 +-- .../__snapshots__/index.test.ts.snap | 528 +++++++++++++++++- .../mix-cjs-mjs/build.config.swc-helpers.mts | 12 - tests/integration/mix-cjs-mjs/index.test.ts | 13 +- .../integration/mix-cjs-mjs/src/cts-file.cts | 6 + .../integration/mix-cjs-mjs/src/entry-mts.ts | 2 + 9 files changed, 574 insertions(+), 101 deletions(-) create mode 100644 .changeset/few-pets-build.md delete mode 100644 tests/integration/mix-cjs-mjs/build.config.swc-helpers.mts create mode 100644 tests/integration/mix-cjs-mjs/src/cts-file.cts diff --git a/.changeset/few-pets-build.md b/.changeset/few-pets-build.md new file mode 100644 index 00000000..35ad4735 --- /dev/null +++ b/.changeset/few-pets-build.md @@ -0,0 +1,5 @@ +--- +'@ice/pkg': minor +--- + +feat: improve cjs import and performance diff --git a/packages/pkg/src/engine/rollup/options.ts b/packages/pkg/src/engine/rollup/options.ts index f559d562..8402140a 100644 --- a/packages/pkg/src/engine/rollup/options.ts +++ b/packages/pkg/src/engine/rollup/options.ts @@ -94,6 +94,8 @@ export function getRollupOptions(context: Context, taskRunnerContext: TaskRunner '.jsx', '.ts', '.tsx', + '.cts', + '.cjs', ...(taskConfig.extensions || []), ], transformMixedEsModules: true, diff --git a/packages/pkg/src/engine/shared/swcConfig.ts b/packages/pkg/src/engine/shared/swcConfig.ts index dafa3c33..b9335a59 100644 --- a/packages/pkg/src/engine/shared/swcConfig.ts +++ b/packages/pkg/src/engine/shared/swcConfig.ts @@ -1,22 +1,33 @@ -import { BundleTaskConfig, TransformTaskConfig, NodeEnvMode } from '../../types.js'; +import { BundleTaskConfig, TransformTaskConfig, NodeEnvMode, JsTarget } from '../../types.js'; import type { Config, ModuleConfig } from '@swc/core'; import getDefaultDefineValues from './define.js'; +import { ALL_FORMAT_TARGET } from '../../constants.js'; // https://github.com/ice-lab/ice-next/issues/54#issuecomment-1083263523 -const LEGACY_BROWSER_TARGETS = { - chrome: 49, - ie: 11, -}; -const MODERN_BROWSER_TARGETS = { - chrome: 61, - safari: 11, - firefox: 60, - edge: 16, - ios: 11, +const BROWSER_TARGETS_MAP: Record = { + es5: { + chrome: 49, + ie: 11, + }, + es2017: { + chrome: 61, + safari: 11, + firefox: 60, + edge: 16, + ios: 11, + }, + es2022: { + chrome: 85, + safari: 15, + firefox: 79, + edge: 85, + ios: 15, + }, }; export const getDefaultBundleSwcConfig = (bundleTaskConfig: BundleTaskConfig): Config => { - const browserTargets = bundleTaskConfig.formats[0].target !== 'es5' ? MODERN_BROWSER_TARGETS : LEGACY_BROWSER_TARGETS; + const formatTarget = bundleTaskConfig.formats[0].target; + const browserTargets = BROWSER_TARGETS_MAP[formatTarget] ?? BROWSER_TARGETS_MAP.es2017; return { jsc: { externalHelpers: true, @@ -38,7 +49,9 @@ export const getDefaultTransformSwcConfig = (transformTaskConfig: TransformTaskC const module: ModuleConfig | undefined = transformTaskConfig.format.module === 'cjs' ? { type: 'commonjs' } : undefined; - const target = transformTaskConfig.format.target === 'es2017' ? 'es2017' : 'es5'; + const target = ALL_FORMAT_TARGET.includes(transformTaskConfig.format.target) + ? transformTaskConfig.format.target + : 'es5'; return { jsc: { diff --git a/packages/pkg/src/rollupPlugins/swc.ts b/packages/pkg/src/rollupPlugins/swc.ts index 3c595d22..7943970c 100644 --- a/packages/pkg/src/rollupPlugins/swc.ts +++ b/packages/pkg/src/rollupPlugins/swc.ts @@ -7,8 +7,6 @@ import { formatCnpmDepFilepath, getIncludeNodeModuleScripts, } from '../utils.js'; -import { init, parse } from 'es-module-lexer'; -import MagicString from 'magic-string'; import type { Options as SwcCompileOptions, Config, TsParserConfig, EsParserConfig } from '@swc/core'; import type { TaskConfig, OutputFile, BundleTaskConfig } from '../types.js'; import type { Plugin } from 'rollup'; @@ -74,65 +72,6 @@ const normalizeSwcConfig = ( }); }; -// Transform @swc/helpers to cjs path if in commonjs module. -async function transformImport(source: string, sourceFilename: string) { - await init; - const [imports, exports] = await parse(source); - let s: MagicString | undefined; - const str = () => { - if (!s) { - s = new MagicString(source); - } - return s; - }; - const isESM = - exports.length > 0 || - imports.some((targetImport) => { - const importString = targetImport.n; - // `targetImport.n` get undefined when code has `import.meta.*`. - return importString && !importString.includes('core-js') && !importString.includes('@swc/helpers'); - }); - - imports.forEach((targetImport) => { - if (!targetImport.n) { - // If visiting `import.meta.*`, `targetImport.n` will be undefined, that should be ignored. - return; - } - if (targetImport.n.startsWith('@swc/helpers')) { - if (!isESM) { - // Replace @swc/helpers with cjs - const importStr = source.substring(targetImport.ss, targetImport.se); - // Import rule: import { _ as _type_of } from "@swc/helpers/_/_type_of"; - const matchImport = importStr.match(/import\s+{\s+([\w*\s{},]*)\s+}\s+from\s+['"](.*)['"]/); - if (matchImport) { - const [, identifier] = matchImport; - const replaceModule = `var ${identifier.split(' as ')[1].trim()} = require('${targetImport.n}')._`; - str().overwrite(targetImport.ss, targetImport.se, replaceModule); - } - } - } else if (targetImport.n.startsWith('core-js')) { - // Replace core-js with cjs - if (!isESM) { - const replaceRequire = `require('${targetImport.n}')`; - str().overwrite(targetImport.ss, targetImport.se, replaceRequire); - } - } - }); - - return s - ? { - code: s.toString(), - map: s.generateMap({ - source: sourceFilename, - file: `${sourceFilename}.map`, - includeContent: true, - }), - } - : { - code: source, - }; -} - /** * plugin-swc works as substitute of plugin-typescript, babel, babel-preset-env and plugin-minify. */ @@ -169,14 +108,13 @@ const swcPlugin = ( // e.g: ./src/index.mts sourceFileName, filename: id, + isModule: 'unknown', }), ); - const transformedCode = await transformImport(code, sourceFileName); - return { - code: transformedCode.code, - map: transformedCode.map ?? map, + code: code, + map: map, meta: { filename: destFilename, }, diff --git a/tests/integration/mix-cjs-mjs/__snapshots__/index.test.ts.snap b/tests/integration/mix-cjs-mjs/__snapshots__/index.test.ts.snap index 4e514d3c..4851f6e8 100644 --- a/tests/integration/mix-cjs-mjs/__snapshots__/index.test.ts.snap +++ b/tests/integration/mix-cjs-mjs/__snapshots__/index.test.ts.snap @@ -6,6 +6,12 @@ exports[`Run config swc-helpers > cjs structure 1`] = ` { "name": "cjs.js", }, + { + "name": "cts-file.cjs", + }, + { + "name": "cts-file.d.cts", + }, { "name": "entry-mts.d.ts", }, @@ -42,6 +48,12 @@ exports[`Run config swc-helpers > esm structure 1`] = ` { "name": "cjs.js", }, + { + "name": "cts-file.cjs", + }, + { + "name": "cts-file.d.cts", + }, { "name": "entry-mts.d.ts", }, @@ -54,11 +66,7 @@ exports[`Run config swc-helpers > esm structure 1`] = ` `; exports[`Run config swc-helpers > file content cjs/cjs.js 1`] = ` -""use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); -var _object_spread = require("@swc/helpers/_/_object_spread"); +"var _object_spread = require("@swc/helpers/_/_object_spread"); module.exports.add = function(a, b) { return a + b; }; @@ -68,9 +76,26 @@ module.exports.extend = function(a, b) { " `; +exports[`Run config swc-helpers > file content cjs/cts-file.cjs 1`] = ` +"var _object_spread = require("@swc/helpers/_/_object_spread"); +module.exports.ctsFile = function(options) { + return _object_spread._({ + type: 'ctsFile' + }, options); +}; +" +`; + +exports[`Run config swc-helpers > file content cjs/cts-file.d.cts 1`] = ` +"export {}; +" +`; + exports[`Run config swc-helpers > file content cjs/entry-mts.d.ts 1`] = ` "import { add, extend } from './cjs'; +import { ctsFile } from './cts-file.cjs'; export { add, extend }; +export { ctsFile }; export declare const foo: Record; " `; @@ -90,6 +115,9 @@ _export(exports, { get add () { return _cjs.add; }, + get ctsFile () { + return _ctsfilecjs.ctsFile; + }, get extend () { return _cjs.extend; }, @@ -99,6 +127,7 @@ _export(exports, { }); var _object_spread = require("@swc/helpers/_/_object_spread"); var _cjs = require("./cjs"); +var _ctsfilecjs = require("./cts-file.cjs"); var foo = _object_spread._({}, (0, _cjs.extend)({ a: 1 }, { @@ -108,34 +137,203 @@ var foo = _object_spread._({}, (0, _cjs.extend)({ `; exports[`Run config swc-helpers > file content dist/entry-mts.cjs.es5.production.js 1`] = ` -""use strict";var e,r=require("@swc/helpers/_/_object_spread"),t={},n=function(){if(e)return t;e=1;var n=r._;return t.add=function(e,r){return e+r},t.extend=function(e,r){return n({},e,r)},t}(),d=r._({},n.extend({a:1},{b:2}));exports.add=n.add,exports.extend=n.extend,exports.foo=d; +"'use strict'; + +var require$$0 = require('@swc/helpers/_/_object_spread'); + +var cjs = {}; + +var hasRequiredCjs; + +function requireCjs () { + if (hasRequiredCjs) return cjs; + hasRequiredCjs = 1; + var _object_spread = require$$0; + cjs.add = function(a, b) { + return a + b; + }; + cjs.extend = function(a, b) { + return _object_spread._({}, a, b); + }; + return cjs; +} + +var cjsExports = requireCjs(); + +var ctsFile = {}; + +var hasRequiredCtsFile; + +function requireCtsFile () { + if (hasRequiredCtsFile) return ctsFile; + hasRequiredCtsFile = 1; + var _object_spread = require$$0; + ctsFile.ctsFile = function(options) { + return _object_spread._({ + type: 'ctsFile' + }, options); + }; + return ctsFile; +} + +var ctsFileExports = requireCtsFile(); + +var foo = require$$0._({}, cjsExports.extend({ + a: 1 +}, { + b: 2 +})); + +exports.add = cjsExports.add; +exports.ctsFile = ctsFileExports.ctsFile; +exports.extend = cjsExports.extend; +exports.foo = foo; " `; exports[`Run config swc-helpers > file content dist/entry-mts.esm.es5.production.js 1`] = ` -"import e,{_ as r}from"@swc/helpers/_/_object_spread";var n,t={},d=function(){if(n)return t;n=1;var r=e._;return t.add=function(e,r){return e+r},t.extend=function(e,n){return r({},e,n)},t}(),o=r({},d.extend({a:1},{b:2})),a=d.add,u=d.extend;export{a as add,u as extend,o as foo}; +"import require$$0, { _ } from '@swc/helpers/_/_object_spread'; + +var cjs = {}; + +var hasRequiredCjs; + +function requireCjs () { + if (hasRequiredCjs) return cjs; + hasRequiredCjs = 1; + var _object_spread = require$$0; + cjs.add = function(a, b) { + return a + b; + }; + cjs.extend = function(a, b) { + return _object_spread._({}, a, b); + }; + return cjs; +} + +var cjsExports = requireCjs(); + +var ctsFile = {}; + +var hasRequiredCtsFile; + +function requireCtsFile () { + if (hasRequiredCtsFile) return ctsFile; + hasRequiredCtsFile = 1; + var _object_spread = require$$0; + ctsFile.ctsFile = function(options) { + return _object_spread._({ + type: 'ctsFile' + }, options); + }; + return ctsFile; +} + +var ctsFileExports = requireCtsFile(); + +var foo = _({}, cjsExports.extend({ + a: 1 +}, { + b: 2 +})); + +var add = cjsExports.add; +var ctsFile$1 = ctsFileExports.ctsFile; +var extend = cjsExports.extend; +export { add, ctsFile$1 as ctsFile, extend, foo }; " `; exports[`Run config swc-helpers > file content dist/entry-mts.umd.es5.production.js 1`] = ` -"var e,t;e=this,t=function(e,t){"use strict";var r,n={},o=function(){if(r)return n;r=1;var e=t._;return n.add=function(e,t){return e+t},n.extend=function(t,r){return e({},t,r)},n}(),s=t._({},o.extend({a:1},{b:2}));e.add=o.add,e.extend=o.extend,e.foo=s},"object"==typeof exports&&"u">typeof module?t(exports,require("@swc/helpers/_/_object_spread")):"function"==typeof define&&define.amd?define(["exports","@swc/helpers/_/_object_spread"],t):t((e="u">typeof globalThis?globalThis:e||self)["@ice/pkg-tests-mix-cjs-mjs"]={},e.require$$0); +"(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@swc/helpers/_/_object_spread')) : + typeof define === 'function' && define.amd ? define(['exports', '@swc/helpers/_/_object_spread'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@ice/pkg-tests-mix-cjs-mjs"] = {}, global.require$$0)); +})(this, (function (exports, require$$0) { 'use strict'; + + var cjs = {}; + + var hasRequiredCjs; + + function requireCjs () { + if (hasRequiredCjs) return cjs; + hasRequiredCjs = 1; + var _object_spread = require$$0; + cjs.add = function(a, b) { + return a + b; + }; + cjs.extend = function(a, b) { + return _object_spread._({}, a, b); + }; + return cjs; + } + + var cjsExports = requireCjs(); + + var ctsFile = {}; + + var hasRequiredCtsFile; + + function requireCtsFile () { + if (hasRequiredCtsFile) return ctsFile; + hasRequiredCtsFile = 1; + var _object_spread = require$$0; + ctsFile.ctsFile = function(options) { + return _object_spread._({ + type: 'ctsFile' + }, options); + }; + return ctsFile; + } + + var ctsFileExports = requireCtsFile(); + + var foo = require$$0._({}, cjsExports.extend({ + a: 1 + }, { + b: 2 + })); + + exports.add = cjsExports.add; + exports.ctsFile = ctsFileExports.ctsFile; + exports.extend = cjsExports.extend; + exports.foo = foo; + +})); " `; exports[`Run config swc-helpers > file content esm/cjs.js 1`] = ` -"var _object_spread = require('@swc/helpers/_/_object_spread')._; +"var _object_spread = require("@swc/helpers/_/_object_spread"); module.exports.add = function(a, b) { return a + b; }; module.exports.extend = function(a, b) { - return _object_spread({}, a, b); + return _object_spread._({}, a, b); }; " `; +exports[`Run config swc-helpers > file content esm/cts-file.cjs 1`] = ` +"var _object_spread = require("@swc/helpers/_/_object_spread"); +module.exports.ctsFile = function(options) { + return _object_spread._({ + type: 'ctsFile' + }, options); +}; +" +`; + +exports[`Run config swc-helpers > file content esm/cts-file.d.cts 1`] = ` +"export {}; +" +`; + exports[`Run config swc-helpers > file content esm/entry-mts.d.ts 1`] = ` "import { add, extend } from './cjs'; +import { ctsFile } from './cts-file.cjs'; export { add, extend }; +export { ctsFile }; export declare const foo: Record; " `; @@ -143,7 +341,317 @@ export declare const foo: Record; exports[`Run config swc-helpers > file content esm/entry-mts.js 1`] = ` "import { _ as _object_spread } from "@swc/helpers/_/_object_spread"; import { add, extend } from './cjs'; +import { ctsFile } from './cts-file.cjs'; +export { add, extend }; +export { ctsFile }; +export var foo = _object_spread({}, extend({ + a: 1 +}, { + b: 2 +})); +" +`; + +exports[`Run config swc-helpers-rolldown > cjs structure 1`] = ` +{ + "files": [ + { + "name": "cjs.js", + }, + { + "name": "cts-file.cjs", + }, + { + "name": "cts-file.d.cts", + }, + { + "name": "entry-mts.d.ts", + }, + { + "name": "entry-mts.js", + }, + ], + "name": "cjs", +} +`; + +exports[`Run config swc-helpers-rolldown > dist structure 1`] = ` +{ + "files": [ + { + "name": "entry-mts.cjs.es5.production.js", + }, + { + "name": "entry-mts.esm.es5.production.js", + }, + { + "name": "entry-mts.umd.es5.production.js", + }, + ], + "name": "dist", +} +`; + +exports[`Run config swc-helpers-rolldown > es2017 structure 1`] = `null`; + +exports[`Run config swc-helpers-rolldown > esm structure 1`] = ` +{ + "files": [ + { + "name": "cjs.js", + }, + { + "name": "cts-file.cjs", + }, + { + "name": "cts-file.d.cts", + }, + { + "name": "entry-mts.d.ts", + }, + { + "name": "entry-mts.js", + }, + ], + "name": "esm", +} +`; + +exports[`Run config swc-helpers-rolldown > file content cjs/cjs.js 1`] = ` +"var _object_spread = require("@swc/helpers/_/_object_spread"); +module.exports.add = function(a, b) { + return a + b; +}; +module.exports.extend = function(a, b) { + return _object_spread._({}, a, b); +}; +" +`; + +exports[`Run config swc-helpers-rolldown > file content cjs/cts-file.cjs 1`] = ` +"var _object_spread = require("@swc/helpers/_/_object_spread"); +module.exports.ctsFile = function(options) { + return _object_spread._({ + type: 'ctsFile' + }, options); +}; +" +`; + +exports[`Run config swc-helpers-rolldown > file content cjs/cts-file.d.cts 1`] = ` +"export {}; +" +`; + +exports[`Run config swc-helpers-rolldown > file content cjs/entry-mts.d.ts 1`] = ` +"import { add, extend } from './cjs'; +import { ctsFile } from './cts-file.cjs'; +export { add, extend }; +export { ctsFile }; +export declare const foo: Record; +" +`; + +exports[`Run config swc-helpers-rolldown > file content cjs/entry-mts.js 1`] = ` +""use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: Object.getOwnPropertyDescriptor(all, name).get + }); +} +_export(exports, { + get add () { + return _cjs.add; + }, + get ctsFile () { + return _ctsfilecjs.ctsFile; + }, + get extend () { + return _cjs.extend; + }, + get foo () { + return foo; + } +}); +var _object_spread = require("@swc/helpers/_/_object_spread"); +var _cjs = require("./cjs"); +var _ctsfilecjs = require("./cts-file.cjs"); +var foo = _object_spread._({}, (0, _cjs.extend)({ + a: 1 +}, { + b: 2 +})); +" +`; + +exports[`Run config swc-helpers-rolldown > file content dist/entry-mts.cjs.es5.production.js 1`] = ` +"Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +//#region \\0rolldown/runtime.js +var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports); +//#endregion +//#region src/cjs.js +var require_cjs = /* @__PURE__ */ __commonJSMin(((exports, module) => { + module.exports.add = function(a, b) { + return a + b; + }; + module.exports.extend = function(a, b) { + return { + ...a, + ...b + }; + }; +})); +//#endregion +//#region src/cts-file.cts +var require_cts_file = /* @__PURE__ */ __commonJSMin(((exports, module) => { + module.exports.ctsFile = (options) => { + return { + type: "ctsFile", + ...options + }; + }; +})); +//#endregion +//#region src/entry-mts.ts +var import_cjs = require_cjs(); +var import_cts_file = require_cts_file(); +const foo = { ...(0, import_cjs.extend)({ a: 1 }, { b: 2 }) }; +//#endregion +exports.add = import_cjs.add; +exports.ctsFile = import_cts_file.ctsFile; +exports.extend = import_cjs.extend; +exports.foo = foo; +" +`; + +exports[`Run config swc-helpers-rolldown > file content dist/entry-mts.esm.es5.production.js 1`] = ` +"//#region \\0rolldown/runtime.js +var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports); +//#endregion +//#region src/cjs.js +var require_cjs = /* @__PURE__ */ __commonJSMin(((exports, module) => { + module.exports.add = function(a, b) { + return a + b; + }; + module.exports.extend = function(a, b) { + return { + ...a, + ...b + }; + }; +})); +//#endregion +//#region src/cts-file.cts +var require_cts_file = /* @__PURE__ */ __commonJSMin(((exports, module) => { + module.exports.ctsFile = (options) => { + return { + type: "ctsFile", + ...options + }; + }; +})); +//#endregion +//#region src/entry-mts.ts +var import_cjs = require_cjs(); +var import_cts_file = require_cts_file(); +const foo = { ...(0, import_cjs.extend)({ a: 1 }, { b: 2 }) }; +//#endregion +var add = import_cjs.add; +var ctsFile = import_cts_file.ctsFile; +var extend = import_cjs.extend; +export { add, ctsFile, extend, foo }; +" +`; + +exports[`Run config swc-helpers-rolldown > file content dist/entry-mts.umd.es5.production.js 1`] = ` +"(function(global, factory) { + typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global["@ice/pkg-tests-mix-cjs-mjs"] = {})); +})(this, function(exports) { + Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); + //#region \\0rolldown/runtime.js + var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports); + //#endregion + //#region src/cjs.js + var require_cjs = /* @__PURE__ */ __commonJSMin(((exports, module) => { + module.exports.add = function(a, b) { + return a + b; + }; + module.exports.extend = function(a, b) { + return { + ...a, + ...b + }; + }; + })); + //#endregion + //#region src/cts-file.cts + var require_cts_file = /* @__PURE__ */ __commonJSMin(((exports, module) => { + module.exports.ctsFile = (options) => { + return { + type: "ctsFile", + ...options + }; + }; + })); + //#endregion + //#region src/entry-mts.ts + var import_cjs = require_cjs(); + var import_cts_file = require_cts_file(); + const foo = { ...(0, import_cjs.extend)({ a: 1 }, { b: 2 }) }; + //#endregion + exports.add = import_cjs.add; + exports.ctsFile = import_cts_file.ctsFile; + exports.extend = import_cjs.extend; + exports.foo = foo; +}); +" +`; + +exports[`Run config swc-helpers-rolldown > file content esm/cjs.js 1`] = ` +"var _object_spread = require("@swc/helpers/_/_object_spread"); +module.exports.add = function(a, b) { + return a + b; +}; +module.exports.extend = function(a, b) { + return _object_spread._({}, a, b); +}; +" +`; + +exports[`Run config swc-helpers-rolldown > file content esm/cts-file.cjs 1`] = ` +"var _object_spread = require("@swc/helpers/_/_object_spread"); +module.exports.ctsFile = function(options) { + return _object_spread._({ + type: 'ctsFile' + }, options); +}; +" +`; + +exports[`Run config swc-helpers-rolldown > file content esm/cts-file.d.cts 1`] = ` +"export {}; +" +`; + +exports[`Run config swc-helpers-rolldown > file content esm/entry-mts.d.ts 1`] = ` +"import { add, extend } from './cjs'; +import { ctsFile } from './cts-file.cjs'; +export { add, extend }; +export { ctsFile }; +export declare const foo: Record; +" +`; + +exports[`Run config swc-helpers-rolldown > file content esm/entry-mts.js 1`] = ` +"import { _ as _object_spread } from "@swc/helpers/_/_object_spread"; +import { add, extend } from './cjs'; +import { ctsFile } from './cts-file.cjs'; export { add, extend }; +export { ctsFile }; export var foo = _object_spread({}, extend({ a: 1 }, { diff --git a/tests/integration/mix-cjs-mjs/build.config.swc-helpers.mts b/tests/integration/mix-cjs-mjs/build.config.swc-helpers.mts deleted file mode 100644 index 8754d36e..00000000 --- a/tests/integration/mix-cjs-mjs/build.config.swc-helpers.mts +++ /dev/null @@ -1,12 +0,0 @@ -import { defineConfig } from '@ice/pkg' - -export default defineConfig({ - entry: './src/entry-mts.ts', - transform: { - formats: ['cjs', 'esm'] - }, - bundle: { - formats: ['cjs', 'esm', 'umd'], - externals: [/@swc\/helpers/] - }, -}) diff --git a/tests/integration/mix-cjs-mjs/index.test.ts b/tests/integration/mix-cjs-mjs/index.test.ts index c1e32718..f024265f 100644 --- a/tests/integration/mix-cjs-mjs/index.test.ts +++ b/tests/integration/mix-cjs-mjs/index.test.ts @@ -3,7 +3,18 @@ import { runProjectTest } from '../../helpers/run'; runProjectTest(import.meta.url, [ { name: 'swc-helpers', - config: 'build.config.swc-helpers.mts', + config: { + entry: './src/entry-mts.ts', + transform: { + formats: ['cjs', 'esm'], + }, + bundle: { + formats: ['cjs', 'esm', 'umd'], + externals: [/@swc\/helpers/], + minify: false, + }, + }, snapshot: 'full', + engine: ['rollup', 'rolldown'], }, ]); diff --git a/tests/integration/mix-cjs-mjs/src/cts-file.cts b/tests/integration/mix-cjs-mjs/src/cts-file.cts new file mode 100644 index 00000000..b0ff4286 --- /dev/null +++ b/tests/integration/mix-cjs-mjs/src/cts-file.cts @@ -0,0 +1,6 @@ +module.exports.ctsFile = (options: any) => { + return { + type: 'ctsFile', + ...options + } +} diff --git a/tests/integration/mix-cjs-mjs/src/entry-mts.ts b/tests/integration/mix-cjs-mjs/src/entry-mts.ts index c6ac7765..ef085e2a 100644 --- a/tests/integration/mix-cjs-mjs/src/entry-mts.ts +++ b/tests/integration/mix-cjs-mjs/src/entry-mts.ts @@ -1,6 +1,8 @@ import { add, extend } from './cjs'; +import { ctsFile } from './cts-file.cjs'; export { add, extend }; +export { ctsFile }; export const foo: Record = { ...extend({ a: 1 }, { b: 2 }),