From b543795d7a4ca7a8adcdb8578c824c6f4b5b1ab0 Mon Sep 17 00:00:00 2001 From: Sergey Borodulya Date: Mon, 15 Aug 2022 12:15:30 +0700 Subject: [PATCH 1/8] feat: add option to keep extensions for amd --- src/finalisers/amd.ts | 4 +++- src/rollup/types.d.ts | 2 ++ src/utils/options/normalizeOutputOptions.ts | 15 ++++++++++++--- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/finalisers/amd.ts b/src/finalisers/amd.ts index 7d409f71b07..4b365c96b45 100644 --- a/src/finalisers/amd.ts +++ b/src/finalisers/amd.ts @@ -35,7 +35,9 @@ export default function amd( }: NormalizedOutputOptions ): Bundle { warnOnBuiltins(warn, dependencies); - const deps = dependencies.map(m => `'${removeExtensionFromRelativeAmdId(m.id)}'`); + const deps = dependencies.map( + m => `'${amd.keepExtension ? m.id : removeExtensionFromRelativeAmdId(m.id)}'` + ); const args = dependencies.map(m => m.name); const { n, getNonArrowFunctionIntro, _ } = snippets; diff --git a/src/rollup/types.d.ts b/src/rollup/types.d.ts index 29e6cb4db37..5b099a3e965 100644 --- a/src/rollup/types.d.ts +++ b/src/rollup/types.d.ts @@ -631,6 +631,7 @@ export type AmdOptions = ( } ) & { define?: string; + keepExtension?: boolean; }; export type NormalizedAmdOptions = ( @@ -644,6 +645,7 @@ export type NormalizedAmdOptions = ( } ) & { define: string; + keepExtension: boolean; }; export interface OutputOptions { diff --git a/src/utils/options/normalizeOutputOptions.ts b/src/utils/options/normalizeOutputOptions.ts index 26974c88147..ffcf86ef475 100644 --- a/src/utils/options/normalizeOutputOptions.ts +++ b/src/utils/options/normalizeOutputOptions.ts @@ -225,10 +225,17 @@ const getPreserveModulesRoot = ( }; const getAmd = (config: OutputOptions): NormalizedOutputOptions['amd'] => { - const mergedOption: { autoId: boolean; basePath: string; define: string; id?: string } = { + const mergedOption: { + autoId: boolean; + basePath: string; + define: string; + id?: string; + keepExtension: boolean; + } = { autoId: false, basePath: '', define: 'define', + keepExtension: false, ...config.amd }; @@ -256,13 +263,15 @@ const getAmd = (config: OutputOptions): NormalizedOutputOptions['amd'] => { normalized = { autoId: true, basePath: mergedOption.basePath, - define: mergedOption.define + define: mergedOption.define, + keepExtension: mergedOption.keepExtension }; } else { normalized = { autoId: false, define: mergedOption.define, - id: mergedOption.id + id: mergedOption.id, + keepExtension: mergedOption.keepExtension }; } return normalized; From b331d2d439d2cd487861509e1612d70fcf46e3da Mon Sep 17 00:00:00 2001 From: Sergey Borodulya Date: Mon, 15 Aug 2022 17:08:27 +0700 Subject: [PATCH 2/8] update extension resolving for amd --- src/Chunk.ts | 2 +- src/finalisers/amd.ts | 4 ++-- src/finalisers/shared/addJsExtension.ts | 3 +++ .../shared/removeExtensionFromRelativeAmdId.ts | 8 -------- .../shared/updateExtensionForRelativeAmdId.ts | 16 ++++++++++++++++ src/finalisers/umd.ts | 6 ++++-- src/rollup/types.d.ts | 2 ++ 7 files changed, 28 insertions(+), 13 deletions(-) create mode 100644 src/finalisers/shared/addJsExtension.ts delete mode 100644 src/finalisers/shared/removeExtensionFromRelativeAmdId.ts create mode 100644 src/finalisers/shared/updateExtensionForRelativeAmdId.ts diff --git a/src/Chunk.ts b/src/Chunk.ts index bb7fdee3484..d04430850d8 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -938,7 +938,7 @@ export default class Chunk { options: NormalizedOutputOptions, snippets: GenerateCodeSnippets ): void { - const stripKnownJsExtensions = options.format === 'amd'; + const stripKnownJsExtensions = options.format === 'amd' && !options.amd.keepExtension; for (const [module, code] of this.renderedModuleSources) { for (const { node, resolution } of module.dynamicImports) { const chunk = this.chunkByModule.get(resolution as Module); diff --git a/src/finalisers/amd.ts b/src/finalisers/amd.ts index 4b365c96b45..e1e7be5a199 100644 --- a/src/finalisers/amd.ts +++ b/src/finalisers/amd.ts @@ -3,7 +3,7 @@ import type { NormalizedOutputOptions } from '../rollup/types'; import getCompleteAmdId from './shared/getCompleteAmdId'; import { getExportBlock, getNamespaceMarkers } from './shared/getExportBlock'; import getInteropBlock from './shared/getInteropBlock'; -import removeExtensionFromRelativeAmdId from './shared/removeExtensionFromRelativeAmdId'; +import updateExtensionForRelativeAmdId from './shared/updateExtensionForRelativeAmdId'; import warnOnBuiltins from './shared/warnOnBuiltins'; import type { FinaliserOptions } from './index'; @@ -36,7 +36,7 @@ export default function amd( ): Bundle { warnOnBuiltins(warn, dependencies); const deps = dependencies.map( - m => `'${amd.keepExtension ? m.id : removeExtensionFromRelativeAmdId(m.id)}'` + m => `'${updateExtensionForRelativeAmdId(m.id, amd.keepExtension)}'` ); const args = dependencies.map(m => m.name); const { n, getNonArrowFunctionIntro, _ } = snippets; diff --git a/src/finalisers/shared/addJsExtension.ts b/src/finalisers/shared/addJsExtension.ts new file mode 100644 index 00000000000..d1d09d07c07 --- /dev/null +++ b/src/finalisers/shared/addJsExtension.ts @@ -0,0 +1,3 @@ +export default function addJsExtension(name: string): string { + return !name.endsWith('.js') ? name + '.js' : name; +} diff --git a/src/finalisers/shared/removeExtensionFromRelativeAmdId.ts b/src/finalisers/shared/removeExtensionFromRelativeAmdId.ts deleted file mode 100644 index 4b04af1e7c9..00000000000 --- a/src/finalisers/shared/removeExtensionFromRelativeAmdId.ts +++ /dev/null @@ -1,8 +0,0 @@ -import removeJsExtension from './removeJsExtension'; - -// AMD resolution will only respect the AMD baseUrl if the .js extension is omitted. -// The assumption is that this makes sense for all relative ids: -// https://requirejs.org/docs/api.html#jsfiles -export default function removeExtensionFromRelativeAmdId(id: string): string { - return id[0] === '.' ? removeJsExtension(id) : id; -} diff --git a/src/finalisers/shared/updateExtensionForRelativeAmdId.ts b/src/finalisers/shared/updateExtensionForRelativeAmdId.ts new file mode 100644 index 00000000000..e3b4d9abfa0 --- /dev/null +++ b/src/finalisers/shared/updateExtensionForRelativeAmdId.ts @@ -0,0 +1,16 @@ +import addJsExtension from './addJsExtension'; +import removeJsExtension from './removeJsExtension'; + +// AMD resolution will only respect the AMD baseUrl if the .js extension is omitted. +// The assumption is that this makes sense for all relative ids: +// https://requirejs.org/docs/api.html#jsfiles +export default function updateExtensionForRelativeAmdId( + id: string, + keepExtension: boolean +): string { + if (id[0] !== '.') { + return id; + } + + return keepExtension ? addJsExtension(id) : removeJsExtension(id); +} diff --git a/src/finalisers/umd.ts b/src/finalisers/umd.ts index 46292d50df9..c73fb28fda5 100644 --- a/src/finalisers/umd.ts +++ b/src/finalisers/umd.ts @@ -5,10 +5,10 @@ import type { GenerateCodeSnippets } from '../utils/generateCodeSnippets'; import getCompleteAmdId from './shared/getCompleteAmdId'; import { getExportBlock, getNamespaceMarkers } from './shared/getExportBlock'; import getInteropBlock from './shared/getInteropBlock'; -import removeExtensionFromRelativeAmdId from './shared/removeExtensionFromRelativeAmdId'; import { keypath } from './shared/sanitize'; import { assignToDeepVariable } from './shared/setupNamespace'; import trimEmptyImports from './shared/trimEmptyImports'; +import updateExtensionForRelativeAmdId from './shared/updateExtensionForRelativeAmdId'; import warnOnBuiltins from './shared/warnOnBuiltins'; import type { FinaliserOptions } from './index'; @@ -73,7 +73,9 @@ export default function umd( warnOnBuiltins(warn, dependencies); - const amdDeps = dependencies.map(m => `'${removeExtensionFromRelativeAmdId(m.id)}'`); + const amdDeps = dependencies.map( + m => `'${updateExtensionForRelativeAmdId(m.id, amd.keepExtension)}'` + ); const cjsDeps = dependencies.map(m => `require('${m.id}')`); const trimmedImports = trimEmptyImports(dependencies); diff --git a/src/rollup/types.d.ts b/src/rollup/types.d.ts index 5b099a3e965..f15ec9640e6 100644 --- a/src/rollup/types.d.ts +++ b/src/rollup/types.d.ts @@ -631,6 +631,7 @@ export type AmdOptions = ( } ) & { define?: string; +} & { keepExtension?: boolean; }; @@ -645,6 +646,7 @@ export type NormalizedAmdOptions = ( } ) & { define: string; +} & { keepExtension: boolean; }; From 913312a5b6e5f103c922846ca3ceb30c82eb5e9c Mon Sep 17 00:00:00 2001 From: Sergey Borodulya Date: Mon, 15 Aug 2022 17:08:49 +0700 Subject: [PATCH 3/8] add tests --- .../form/samples/amd-keep-extension/_config.js | 7 +++++++ .../amd-keep-extension/_expected/amd.js | 7 +++++++ .../amd-keep-extension/_expected/cjs.js | 8 ++++++++ .../samples/amd-keep-extension/_expected/es.js | 6 ++++++ .../amd-keep-extension/_expected/iife.js | 8 ++++++++ .../amd-keep-extension/_expected/system.js | 18 ++++++++++++++++++ .../amd-keep-extension/_expected/umd.js | 11 +++++++++++ test/form/samples/amd-keep-extension/bar.js | 1 + test/form/samples/amd-keep-extension/main.js | 5 +++++ 9 files changed, 71 insertions(+) create mode 100644 test/form/samples/amd-keep-extension/_config.js create mode 100644 test/form/samples/amd-keep-extension/_expected/amd.js create mode 100644 test/form/samples/amd-keep-extension/_expected/cjs.js create mode 100644 test/form/samples/amd-keep-extension/_expected/es.js create mode 100644 test/form/samples/amd-keep-extension/_expected/iife.js create mode 100644 test/form/samples/amd-keep-extension/_expected/system.js create mode 100644 test/form/samples/amd-keep-extension/_expected/umd.js create mode 100644 test/form/samples/amd-keep-extension/bar.js create mode 100644 test/form/samples/amd-keep-extension/main.js diff --git a/test/form/samples/amd-keep-extension/_config.js b/test/form/samples/amd-keep-extension/_config.js new file mode 100644 index 00000000000..5d98d095483 --- /dev/null +++ b/test/form/samples/amd-keep-extension/_config.js @@ -0,0 +1,7 @@ +module.exports = { + description: 'keep extension for AMD modules', + options: { + external: ['./foo', 'baz/quux'], + output: { interop: 'default', amd: { keepExtension: true } } + } +}; diff --git a/test/form/samples/amd-keep-extension/_expected/amd.js b/test/form/samples/amd-keep-extension/_expected/amd.js new file mode 100644 index 00000000000..b874a908081 --- /dev/null +++ b/test/form/samples/amd-keep-extension/_expected/amd.js @@ -0,0 +1,7 @@ +define(['./foo.js', 'baz/quux'], (function (foo, baz) { 'use strict'; + + const bar = 42; + + console.log(foo, bar, baz); + +})); diff --git a/test/form/samples/amd-keep-extension/_expected/cjs.js b/test/form/samples/amd-keep-extension/_expected/cjs.js new file mode 100644 index 00000000000..5f6169304cd --- /dev/null +++ b/test/form/samples/amd-keep-extension/_expected/cjs.js @@ -0,0 +1,8 @@ +'use strict'; + +var foo = require('./foo'); +var baz = require('baz/quux'); + +const bar = 42; + +console.log(foo, bar, baz); diff --git a/test/form/samples/amd-keep-extension/_expected/es.js b/test/form/samples/amd-keep-extension/_expected/es.js new file mode 100644 index 00000000000..d75ba53a832 --- /dev/null +++ b/test/form/samples/amd-keep-extension/_expected/es.js @@ -0,0 +1,6 @@ +import foo from './foo'; +import baz from 'baz/quux'; + +const bar = 42; + +console.log(foo, bar, baz); diff --git a/test/form/samples/amd-keep-extension/_expected/iife.js b/test/form/samples/amd-keep-extension/_expected/iife.js new file mode 100644 index 00000000000..48b2473f8f2 --- /dev/null +++ b/test/form/samples/amd-keep-extension/_expected/iife.js @@ -0,0 +1,8 @@ +(function (foo, baz) { + 'use strict'; + + const bar = 42; + + console.log(foo, bar, baz); + +})(foo, baz); diff --git a/test/form/samples/amd-keep-extension/_expected/system.js b/test/form/samples/amd-keep-extension/_expected/system.js new file mode 100644 index 00000000000..b70bc3ab596 --- /dev/null +++ b/test/form/samples/amd-keep-extension/_expected/system.js @@ -0,0 +1,18 @@ +System.register(['./foo', 'baz/quux'], (function () { + 'use strict'; + var foo, baz; + return { + setters: [function (module) { + foo = module["default"]; + }, function (module) { + baz = module["default"]; + }], + execute: (function () { + + const bar = 42; + + console.log(foo, bar, baz); + + }) + }; +})); diff --git a/test/form/samples/amd-keep-extension/_expected/umd.js b/test/form/samples/amd-keep-extension/_expected/umd.js new file mode 100644 index 00000000000..4005ff20c57 --- /dev/null +++ b/test/form/samples/amd-keep-extension/_expected/umd.js @@ -0,0 +1,11 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('./foo'), require('baz/quux')) : + typeof define === 'function' && define.amd ? define(['./foo.js', 'baz/quux'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.foo, global.baz)); +})(this, (function (foo, baz) { 'use strict'; + + const bar = 42; + + console.log(foo, bar, baz); + +})); diff --git a/test/form/samples/amd-keep-extension/bar.js b/test/form/samples/amd-keep-extension/bar.js new file mode 100644 index 00000000000..95051caca70 --- /dev/null +++ b/test/form/samples/amd-keep-extension/bar.js @@ -0,0 +1 @@ +export const bar = 42; \ No newline at end of file diff --git a/test/form/samples/amd-keep-extension/main.js b/test/form/samples/amd-keep-extension/main.js new file mode 100644 index 00000000000..540805045c6 --- /dev/null +++ b/test/form/samples/amd-keep-extension/main.js @@ -0,0 +1,5 @@ +import foo from './foo'; +import { bar } from './bar'; +import baz from 'baz/quux'; + +console.log(foo, bar, baz); From 42896890d92fa2d4d83bc192b8856e66f77aa62d Mon Sep 17 00:00:00 2001 From: Sergey Borodulya Date: Mon, 15 Aug 2022 17:09:32 +0700 Subject: [PATCH 4/8] fix 'output-options-hook' test --- test/function/samples/output-options-hook/_config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/function/samples/output-options-hook/_config.js b/test/function/samples/output-options-hook/_config.js index bdb7cc2cec3..9f6f27a3ceb 100644 --- a/test/function/samples/output-options-hook/_config.js +++ b/test/function/samples/output-options-hook/_config.js @@ -18,7 +18,8 @@ module.exports = { assert.deepStrictEqual(JSON.parse(JSON.stringify(options)), { amd: { define: 'define', - autoId: false + autoId: false, + keepExtension: false }, assetFileNames: 'assets/[name]-[hash][extname]', chunkFileNames: '[name]-[hash].js', From f3a1d0a6173e218979010de1e2bb86299fc28078 Mon Sep 17 00:00:00 2001 From: Sergey Borodulya Date: Mon, 15 Aug 2022 22:17:07 +0700 Subject: [PATCH 5/8] add docs --- cli/help.md | 1 + docs/01-command-line-reference.md | 1 + docs/999-big-list-of-options.md | 17 +++++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/cli/help.md b/cli/help.md index 5918065a02f..d8245a2f943 100644 --- a/cli/help.md +++ b/cli/help.md @@ -23,6 +23,7 @@ Basic options: --amd.autoId Generate the AMD ID based off the chunk name --amd.basePath Path to prepend to auto generated AMD ID --amd.define Function to use in place of `define` +--amd.keepExtension Add `.js` extension for generated chunks and local AMD modules --assetFileNames Name pattern for emitted assets --banner Code to insert at top of bundle (outside wrapper) --chunkFileNames Name pattern for emitted secondary chunks diff --git a/docs/01-command-line-reference.md b/docs/01-command-line-reference.md index 5aa845b6faa..1d05b503f7f 100755 --- a/docs/01-command-line-reference.md +++ b/docs/01-command-line-reference.md @@ -358,6 +358,7 @@ Many options have command line equivalents. In those cases, any arguments passed --amd.autoId Generate the AMD ID based off the chunk name --amd.basePath Path to prepend to auto generated AMD ID --amd.define Function to use in place of `define` +--amd.keepExtension Add `.js` extension for generated chunks and local AMD modules --assetFileNames Name pattern for emitted assets --banner Code to insert at top of bundle (outside wrapper) --chunkFileNames Name pattern for emitted secondary chunks diff --git a/docs/999-big-list-of-options.md b/docs/999-big-list-of-options.md index a251653576b..155e39cea09 100755 --- a/docs/999-big-list-of-options.md +++ b/docs/999-big-list-of-options.md @@ -1331,6 +1331,23 @@ export default { // -> def(['dependency'],... ``` +**output.amd.keepExtension**
Type: `boolean`
CLI: `--amd.keepExtension`
Default: `false` + +Add `.js` extension for generated chunks and local AMD modules: + +```js +// rollup.config.js +export default { + ..., + format: 'amd', + amd: { + keepExtension: true + } +}; + +// -> define(['./chunk-or-local-file.js', 'dependency', 'third/dependency'],... +``` + #### output.esModule Type: `boolean`
CLI: `--esModule`/`--no-esModule`
Default: `true` From d27fd4e6d14bd74612ff45e3e4ef9309dd96379b Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Tue, 30 Aug 2022 14:31:41 +0200 Subject: [PATCH 6/8] Update docs/999-big-list-of-options.md --- docs/999-big-list-of-options.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/999-big-list-of-options.md b/docs/999-big-list-of-options.md index 155e39cea09..88f1a624ecf 100755 --- a/docs/999-big-list-of-options.md +++ b/docs/999-big-list-of-options.md @@ -1333,7 +1333,7 @@ export default { **output.amd.keepExtension**
Type: `boolean`
CLI: `--amd.keepExtension`
Default: `false` -Add `.js` extension for generated chunks and local AMD modules: +Add `.js` extension for imports of generated chunks and local AMD modules: ```js // rollup.config.js From a41200949a2e13f8cc38a7c3f681efd38d6a453c Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Tue, 30 Aug 2022 14:41:15 +0200 Subject: [PATCH 7/8] Change extension name to forceJsExtensionForImports --- cli/help.md | 2 +- docs/01-command-line-reference.md | 2 +- docs/999-big-list-of-options.md | 4 ++-- src/Chunk.ts | 3 ++- src/finalisers/amd.ts | 2 +- .../shared/updateExtensionForRelativeAmdId.ts | 4 ++-- src/finalisers/umd.ts | 2 +- src/rollup/types.d.ts | 6 ++---- src/utils/options/normalizeOutputOptions.ts | 10 +++++----- test/form/samples/amd-keep-extension/_config.js | 2 +- test/function/samples/output-options-hook/_config.js | 2 +- 11 files changed, 19 insertions(+), 20 deletions(-) diff --git a/cli/help.md b/cli/help.md index d8245a2f943..947a2bd1848 100644 --- a/cli/help.md +++ b/cli/help.md @@ -23,7 +23,7 @@ Basic options: --amd.autoId Generate the AMD ID based off the chunk name --amd.basePath Path to prepend to auto generated AMD ID --amd.define Function to use in place of `define` ---amd.keepExtension Add `.js` extension for generated chunks and local AMD modules +--amd.forceJsExtensionForImports Use `.js` extension in AMD imports --assetFileNames Name pattern for emitted assets --banner Code to insert at top of bundle (outside wrapper) --chunkFileNames Name pattern for emitted secondary chunks diff --git a/docs/01-command-line-reference.md b/docs/01-command-line-reference.md index 1d05b503f7f..525a360b983 100755 --- a/docs/01-command-line-reference.md +++ b/docs/01-command-line-reference.md @@ -358,7 +358,7 @@ Many options have command line equivalents. In those cases, any arguments passed --amd.autoId Generate the AMD ID based off the chunk name --amd.basePath Path to prepend to auto generated AMD ID --amd.define Function to use in place of `define` ---amd.keepExtension Add `.js` extension for generated chunks and local AMD modules +--amd.forceJsExtensionForImports Use `.js` extension in AMD imports --assetFileNames Name pattern for emitted assets --banner Code to insert at top of bundle (outside wrapper) --chunkFileNames Name pattern for emitted secondary chunks diff --git a/docs/999-big-list-of-options.md b/docs/999-big-list-of-options.md index 88f1a624ecf..da4aace22a4 100755 --- a/docs/999-big-list-of-options.md +++ b/docs/999-big-list-of-options.md @@ -1331,7 +1331,7 @@ export default { // -> def(['dependency'],... ``` -**output.amd.keepExtension**
Type: `boolean`
CLI: `--amd.keepExtension`
Default: `false` +**output.amd.forceJsExtensionForImports**
Type: `boolean`
CLI: `--amd.forceJsExtensionForImports`
Default: `false` Add `.js` extension for imports of generated chunks and local AMD modules: @@ -1341,7 +1341,7 @@ export default { ..., format: 'amd', amd: { - keepExtension: true + forceJsExtensionForImports: true } }; diff --git a/src/Chunk.ts b/src/Chunk.ts index d04430850d8..bea8d36972c 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -938,7 +938,8 @@ export default class Chunk { options: NormalizedOutputOptions, snippets: GenerateCodeSnippets ): void { - const stripKnownJsExtensions = options.format === 'amd' && !options.amd.keepExtension; + const stripKnownJsExtensions = + options.format === 'amd' && !options.amd.forceJsExtensionForImports; for (const [module, code] of this.renderedModuleSources) { for (const { node, resolution } of module.dynamicImports) { const chunk = this.chunkByModule.get(resolution as Module); diff --git a/src/finalisers/amd.ts b/src/finalisers/amd.ts index e1e7be5a199..244c8d6f8a0 100644 --- a/src/finalisers/amd.ts +++ b/src/finalisers/amd.ts @@ -36,7 +36,7 @@ export default function amd( ): Bundle { warnOnBuiltins(warn, dependencies); const deps = dependencies.map( - m => `'${updateExtensionForRelativeAmdId(m.id, amd.keepExtension)}'` + m => `'${updateExtensionForRelativeAmdId(m.id, amd.forceJsExtensionForImports)}'` ); const args = dependencies.map(m => m.name); const { n, getNonArrowFunctionIntro, _ } = snippets; diff --git a/src/finalisers/shared/updateExtensionForRelativeAmdId.ts b/src/finalisers/shared/updateExtensionForRelativeAmdId.ts index e3b4d9abfa0..2baf20f444b 100644 --- a/src/finalisers/shared/updateExtensionForRelativeAmdId.ts +++ b/src/finalisers/shared/updateExtensionForRelativeAmdId.ts @@ -6,11 +6,11 @@ import removeJsExtension from './removeJsExtension'; // https://requirejs.org/docs/api.html#jsfiles export default function updateExtensionForRelativeAmdId( id: string, - keepExtension: boolean + forceJsExtensionForImports: boolean ): string { if (id[0] !== '.') { return id; } - return keepExtension ? addJsExtension(id) : removeJsExtension(id); + return forceJsExtensionForImports ? addJsExtension(id) : removeJsExtension(id); } diff --git a/src/finalisers/umd.ts b/src/finalisers/umd.ts index c73fb28fda5..30d08225fee 100644 --- a/src/finalisers/umd.ts +++ b/src/finalisers/umd.ts @@ -74,7 +74,7 @@ export default function umd( warnOnBuiltins(warn, dependencies); const amdDeps = dependencies.map( - m => `'${updateExtensionForRelativeAmdId(m.id, amd.keepExtension)}'` + m => `'${updateExtensionForRelativeAmdId(m.id, amd.forceJsExtensionForImports)}'` ); const cjsDeps = dependencies.map(m => `require('${m.id}')`); diff --git a/src/rollup/types.d.ts b/src/rollup/types.d.ts index f15ec9640e6..d235d9a03b1 100644 --- a/src/rollup/types.d.ts +++ b/src/rollup/types.d.ts @@ -631,8 +631,7 @@ export type AmdOptions = ( } ) & { define?: string; -} & { - keepExtension?: boolean; + forceJsExtensionForImports?: boolean; }; export type NormalizedAmdOptions = ( @@ -646,8 +645,7 @@ export type NormalizedAmdOptions = ( } ) & { define: string; -} & { - keepExtension: boolean; + forceJsExtensionForImports: boolean; }; export interface OutputOptions { diff --git a/src/utils/options/normalizeOutputOptions.ts b/src/utils/options/normalizeOutputOptions.ts index ffcf86ef475..4fdf9143dec 100644 --- a/src/utils/options/normalizeOutputOptions.ts +++ b/src/utils/options/normalizeOutputOptions.ts @@ -229,13 +229,13 @@ const getAmd = (config: OutputOptions): NormalizedOutputOptions['amd'] => { autoId: boolean; basePath: string; define: string; + forceJsExtensionForImports: boolean; id?: string; - keepExtension: boolean; } = { autoId: false, basePath: '', define: 'define', - keepExtension: false, + forceJsExtensionForImports: false, ...config.amd }; @@ -264,14 +264,14 @@ const getAmd = (config: OutputOptions): NormalizedOutputOptions['amd'] => { autoId: true, basePath: mergedOption.basePath, define: mergedOption.define, - keepExtension: mergedOption.keepExtension + forceJsExtensionForImports: mergedOption.forceJsExtensionForImports }; } else { normalized = { autoId: false, define: mergedOption.define, - id: mergedOption.id, - keepExtension: mergedOption.keepExtension + forceJsExtensionForImports: mergedOption.forceJsExtensionForImports, + id: mergedOption.id }; } return normalized; diff --git a/test/form/samples/amd-keep-extension/_config.js b/test/form/samples/amd-keep-extension/_config.js index 5d98d095483..4fa1bbb7cce 100644 --- a/test/form/samples/amd-keep-extension/_config.js +++ b/test/form/samples/amd-keep-extension/_config.js @@ -2,6 +2,6 @@ module.exports = { description: 'keep extension for AMD modules', options: { external: ['./foo', 'baz/quux'], - output: { interop: 'default', amd: { keepExtension: true } } + output: { interop: 'default', amd: { forceJsExtensionForImports: true } } } }; diff --git a/test/function/samples/output-options-hook/_config.js b/test/function/samples/output-options-hook/_config.js index 9f6f27a3ceb..e52ab8da8eb 100644 --- a/test/function/samples/output-options-hook/_config.js +++ b/test/function/samples/output-options-hook/_config.js @@ -19,7 +19,7 @@ module.exports = { amd: { define: 'define', autoId: false, - keepExtension: false + forceJsExtensionForImports: false }, assetFileNames: 'assets/[name]-[hash][extname]', chunkFileNames: '[name]-[hash].js', From 44273498a87026d1a585dc44c147293fc53200fa Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Wed, 31 Aug 2022 06:35:49 +0200 Subject: [PATCH 8/8] Improve coverage --- src/finalisers/shared/addJsExtension.ts | 2 +- test/form/samples/amd-keep-extension/_config.js | 4 ++-- .../samples/amd-keep-extension/_expected/amd.js | 6 ++---- .../samples/amd-keep-extension/_expected/cjs.js | 10 +++++----- .../samples/amd-keep-extension/_expected/es.js | 10 +++++----- .../samples/amd-keep-extension/_expected/iife.js | 8 +++----- .../amd-keep-extension/_expected/system.js | 16 +++++++++------- .../samples/amd-keep-extension/_expected/umd.js | 12 +++++------- test/form/samples/amd-keep-extension/bar.js | 1 - test/form/samples/amd-keep-extension/main.js | 9 +++++---- 10 files changed, 37 insertions(+), 41 deletions(-) delete mode 100644 test/form/samples/amd-keep-extension/bar.js diff --git a/src/finalisers/shared/addJsExtension.ts b/src/finalisers/shared/addJsExtension.ts index d1d09d07c07..4c483d935ee 100644 --- a/src/finalisers/shared/addJsExtension.ts +++ b/src/finalisers/shared/addJsExtension.ts @@ -1,3 +1,3 @@ export default function addJsExtension(name: string): string { - return !name.endsWith('.js') ? name + '.js' : name; + return name.endsWith('.js') ? name : name + '.js'; } diff --git a/test/form/samples/amd-keep-extension/_config.js b/test/form/samples/amd-keep-extension/_config.js index 4fa1bbb7cce..f7ada5d8e9b 100644 --- a/test/form/samples/amd-keep-extension/_config.js +++ b/test/form/samples/amd-keep-extension/_config.js @@ -1,7 +1,7 @@ module.exports = { description: 'keep extension for AMD modules', options: { - external: ['./foo', 'baz/quux'], - output: { interop: 'default', amd: { forceJsExtensionForImports: true } } + external: ['./relative', 'abso/lute', './relative.js', 'abso/lute.js'], + output: { amd: { forceJsExtensionForImports: true }, interop: 'default' } } }; diff --git a/test/form/samples/amd-keep-extension/_expected/amd.js b/test/form/samples/amd-keep-extension/_expected/amd.js index b874a908081..85d309017dd 100644 --- a/test/form/samples/amd-keep-extension/_expected/amd.js +++ b/test/form/samples/amd-keep-extension/_expected/amd.js @@ -1,7 +1,5 @@ -define(['./foo.js', 'baz/quux'], (function (foo, baz) { 'use strict'; +define(['./relative.js', 'abso/lute', './relative.js', 'abso/lute.js'], (function (relative, absolute, relativeExtension, absoluteExtension) { 'use strict'; - const bar = 42; - - console.log(foo, bar, baz); + console.log(relative, absolute, relativeExtension, absoluteExtension); })); diff --git a/test/form/samples/amd-keep-extension/_expected/cjs.js b/test/form/samples/amd-keep-extension/_expected/cjs.js index 5f6169304cd..d2ccd7929f1 100644 --- a/test/form/samples/amd-keep-extension/_expected/cjs.js +++ b/test/form/samples/amd-keep-extension/_expected/cjs.js @@ -1,8 +1,8 @@ 'use strict'; -var foo = require('./foo'); -var baz = require('baz/quux'); +var relative = require('./relative'); +var absolute = require('abso/lute'); +var relativeExtension = require('./relative.js'); +var absoluteExtension = require('abso/lute.js'); -const bar = 42; - -console.log(foo, bar, baz); +console.log(relative, absolute, relativeExtension, absoluteExtension); diff --git a/test/form/samples/amd-keep-extension/_expected/es.js b/test/form/samples/amd-keep-extension/_expected/es.js index d75ba53a832..946ad911dcd 100644 --- a/test/form/samples/amd-keep-extension/_expected/es.js +++ b/test/form/samples/amd-keep-extension/_expected/es.js @@ -1,6 +1,6 @@ -import foo from './foo'; -import baz from 'baz/quux'; +import relative from './relative'; +import absolute from 'abso/lute'; +import relativeExtension from './relative.js'; +import absoluteExtension from 'abso/lute.js'; -const bar = 42; - -console.log(foo, bar, baz); +console.log(relative, absolute, relativeExtension, absoluteExtension); diff --git a/test/form/samples/amd-keep-extension/_expected/iife.js b/test/form/samples/amd-keep-extension/_expected/iife.js index 48b2473f8f2..8386b840067 100644 --- a/test/form/samples/amd-keep-extension/_expected/iife.js +++ b/test/form/samples/amd-keep-extension/_expected/iife.js @@ -1,8 +1,6 @@ -(function (foo, baz) { +(function (relative, absolute, relativeExtension, absoluteExtension) { 'use strict'; - const bar = 42; + console.log(relative, absolute, relativeExtension, absoluteExtension); - console.log(foo, bar, baz); - -})(foo, baz); +})(relative, absolute, relativeExtension, absoluteExtension); diff --git a/test/form/samples/amd-keep-extension/_expected/system.js b/test/form/samples/amd-keep-extension/_expected/system.js index b70bc3ab596..c9483aa3c95 100644 --- a/test/form/samples/amd-keep-extension/_expected/system.js +++ b/test/form/samples/amd-keep-extension/_expected/system.js @@ -1,17 +1,19 @@ -System.register(['./foo', 'baz/quux'], (function () { +System.register(['./relative', 'abso/lute', './relative.js', 'abso/lute.js'], (function () { 'use strict'; - var foo, baz; + var relative, absolute, relativeExtension, absoluteExtension; return { setters: [function (module) { - foo = module["default"]; + relative = module["default"]; }, function (module) { - baz = module["default"]; + absolute = module["default"]; + }, function (module) { + relativeExtension = module["default"]; + }, function (module) { + absoluteExtension = module["default"]; }], execute: (function () { - const bar = 42; - - console.log(foo, bar, baz); + console.log(relative, absolute, relativeExtension, absoluteExtension); }) }; diff --git a/test/form/samples/amd-keep-extension/_expected/umd.js b/test/form/samples/amd-keep-extension/_expected/umd.js index 4005ff20c57..6418f82b4ba 100644 --- a/test/form/samples/amd-keep-extension/_expected/umd.js +++ b/test/form/samples/amd-keep-extension/_expected/umd.js @@ -1,11 +1,9 @@ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('./foo'), require('baz/quux')) : - typeof define === 'function' && define.amd ? define(['./foo.js', 'baz/quux'], factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.foo, global.baz)); -})(this, (function (foo, baz) { 'use strict'; + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('./relative'), require('abso/lute'), require('./relative.js'), require('abso/lute.js')) : + typeof define === 'function' && define.amd ? define(['./relative.js', 'abso/lute', './relative.js', 'abso/lute.js'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.relative, global.absolute, global.relativeExtension, global.absoluteExtension)); +})(this, (function (relative, absolute, relativeExtension, absoluteExtension) { 'use strict'; - const bar = 42; - - console.log(foo, bar, baz); + console.log(relative, absolute, relativeExtension, absoluteExtension); })); diff --git a/test/form/samples/amd-keep-extension/bar.js b/test/form/samples/amd-keep-extension/bar.js deleted file mode 100644 index 95051caca70..00000000000 --- a/test/form/samples/amd-keep-extension/bar.js +++ /dev/null @@ -1 +0,0 @@ -export const bar = 42; \ No newline at end of file diff --git a/test/form/samples/amd-keep-extension/main.js b/test/form/samples/amd-keep-extension/main.js index 540805045c6..946ad911dcd 100644 --- a/test/form/samples/amd-keep-extension/main.js +++ b/test/form/samples/amd-keep-extension/main.js @@ -1,5 +1,6 @@ -import foo from './foo'; -import { bar } from './bar'; -import baz from 'baz/quux'; +import relative from './relative'; +import absolute from 'abso/lute'; +import relativeExtension from './relative.js'; +import absoluteExtension from 'abso/lute.js'; -console.log(foo, bar, baz); +console.log(relative, absolute, relativeExtension, absoluteExtension);