From 24fde1a5e9092929631f7e1af8c28f835610cad0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Sun, 15 Sep 2019 22:06:53 +0200 Subject: [PATCH] Include extensions in preserveModules output filenames for scriptified assets --- src/Chunk.ts | 16 ++++++++++---- .../_config.js | 21 +++++++++++++++++++ .../_expected/amd/answer.num.js | 7 +++++++ .../_expected/amd/lorem.str.js | 7 +++++++ .../_expected/amd/main.js | 10 +++++++++ .../_expected/cjs/answer.num.js | 5 +++++ .../_expected/cjs/lorem.str.js | 5 +++++ .../_expected/cjs/main.js | 11 ++++++++++ .../_expected/es/answer.num.js | 3 +++ .../_expected/es/lorem.str.js | 3 +++ .../_expected/es/main.js | 2 ++ .../_expected/system/answer.num.js | 10 +++++++++ .../_expected/system/lorem.str.js | 10 +++++++++ .../_expected/system/main.js | 15 +++++++++++++ .../src/answer.num | 1 + .../src/lorem.str | 1 + .../src/main.js | 2 ++ 17 files changed, 125 insertions(+), 4 deletions(-) create mode 100644 test/chunking-form/samples/preserve-modules-scriptified-assets/_config.js create mode 100644 test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/amd/answer.num.js create mode 100644 test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/amd/lorem.str.js create mode 100644 test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/amd/main.js create mode 100644 test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/cjs/answer.num.js create mode 100644 test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/cjs/lorem.str.js create mode 100644 test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/es/answer.num.js create mode 100644 test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/es/lorem.str.js create mode 100644 test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/es/main.js create mode 100644 test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/system/answer.num.js create mode 100644 test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/system/lorem.str.js create mode 100644 test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/system/main.js create mode 100644 test/chunking-form/samples/preserve-modules-scriptified-assets/src/answer.num create mode 100644 test/chunking-form/samples/preserve-modules-scriptified-assets/src/lorem.str create mode 100644 test/chunking-form/samples/preserve-modules-scriptified-assets/src/main.js diff --git a/src/Chunk.ts b/src/Chunk.ts index ed864b92c8e..316bf5fa36f 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -30,7 +30,7 @@ import { error } from './utils/error'; import { sortByExecutionOrder } from './utils/executionOrder'; import getIndentString from './utils/getIndentString'; import { makeLegal } from './utils/identifierHelpers'; -import { basename, dirname, isAbsolute, normalize, resolve } from './utils/path'; +import { basename, dirname, extname, isAbsolute, normalize, resolve } from './utils/path'; import relativeId, { getAliasName } from './utils/relativeId'; import renderChunk from './utils/renderChunk'; import { RenderOptions } from './utils/renderHelpers'; @@ -83,6 +83,8 @@ interface FacadeName { name?: string; } +const COMMON_JS_EXTENSIONS = ['.js', '.jsx', '.ts', '.tsx']; + function getGlobalName( module: ExternalModule, globals: GlobalsOption, @@ -280,14 +282,20 @@ export default class Chunk { options: OutputOptions, existingNames: Record ): string { - const sanitizedId = sanitizeFileName(this.orderedModules[0].id); + const id = this.orderedModules[0].id; + const sanitizedId = sanitizeFileName(id); let path: string; - if (isAbsolute(this.orderedModules[0].id)) { + if (isAbsolute(id)) { + const extension = extname(id); + console.log({ COMMON_JS_EXTENSIONS, extension }); const name = renderNamePattern( - options.entryFileNames || '[name].js', + options.entryFileNames || + (COMMON_JS_EXTENSIONS.includes(extension) ? '[name].js' : '[name].[ext].js'), 'output.entryFileNames', { + ext: () => extension.substr(1), + extname: () => extension, format: () => (options.format === 'es' ? 'esm' : (options.format as string)), name: () => this.getChunkName() } diff --git a/test/chunking-form/samples/preserve-modules-scriptified-assets/_config.js b/test/chunking-form/samples/preserve-modules-scriptified-assets/_config.js new file mode 100644 index 00000000000..5a754b37da0 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-scriptified-assets/_config.js @@ -0,0 +1,21 @@ +module.exports = { + description: 'scriptified assets have extension in preserveModules output filename', + options: { + input: 'src/main.js', + preserveModules: true, + plugins: [ + { + name: 'str-num-plugin', + transform(code, id) { + if (id.endsWith('.num')) { + return { code: `export default ${code.trim()}` }; + } + if (id.endsWith('.str')) { + return { code: `export default "${code.trim()}"` }; + } + return null; + } + } + ] + } +}; diff --git a/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/amd/answer.num.js b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/amd/answer.num.js new file mode 100644 index 00000000000..b2bc71d2598 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/amd/answer.num.js @@ -0,0 +1,7 @@ +define(['exports'], function (exports) { 'use strict'; + + var answer = 42; + + exports.default = answer; + +}); diff --git a/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/amd/lorem.str.js b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/amd/lorem.str.js new file mode 100644 index 00000000000..f36a199a0f6 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/amd/lorem.str.js @@ -0,0 +1,7 @@ +define(['exports'], function (exports) { 'use strict'; + + var lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; + + exports.default = lorem; + +}); diff --git a/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/amd/main.js b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/amd/main.js new file mode 100644 index 00000000000..edb7393f02b --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/amd/main.js @@ -0,0 +1,10 @@ +define(['exports', './answer.num', './lorem.str'], function (exports, answer, lorem) { 'use strict'; + + + + exports.answer = answer.default; + exports.lorem = lorem.default; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/cjs/answer.num.js b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/cjs/answer.num.js new file mode 100644 index 00000000000..3fff8429ed9 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/cjs/answer.num.js @@ -0,0 +1,5 @@ +'use strict'; + +var answer = 42; + +exports.default = answer; diff --git a/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/cjs/lorem.str.js b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/cjs/lorem.str.js new file mode 100644 index 00000000000..bda392e9bd8 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/cjs/lorem.str.js @@ -0,0 +1,5 @@ +'use strict'; + +var lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; + +exports.default = lorem; diff --git a/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/cjs/main.js b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/cjs/main.js new file mode 100644 index 00000000000..fb15938a54c --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/cjs/main.js @@ -0,0 +1,11 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var answer = require('./answer.num.js'); +var lorem = require('./lorem.str.js'); + + + +exports.answer = answer.default; +exports.lorem = lorem.default; diff --git a/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/es/answer.num.js b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/es/answer.num.js new file mode 100644 index 00000000000..b91051d4a13 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/es/answer.num.js @@ -0,0 +1,3 @@ +var answer = 42; + +export default answer; diff --git a/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/es/lorem.str.js b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/es/lorem.str.js new file mode 100644 index 00000000000..64a054f651b --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/es/lorem.str.js @@ -0,0 +1,3 @@ +var lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; + +export default lorem; diff --git a/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/es/main.js b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/es/main.js new file mode 100644 index 00000000000..57f0a30ae21 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/es/main.js @@ -0,0 +1,2 @@ +export { default as answer } from './answer.num.js'; +export { default as lorem } from './lorem.str.js'; diff --git a/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/system/answer.num.js b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/system/answer.num.js new file mode 100644 index 00000000000..e897f1a3be2 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/system/answer.num.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var answer = exports('default', 42); + + } + }; +}); diff --git a/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/system/lorem.str.js b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/system/lorem.str.js new file mode 100644 index 00000000000..7ebf110f98b --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/system/lorem.str.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var lorem = exports('default', "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."); + + } + }; +}); diff --git a/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/system/main.js b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/system/main.js new file mode 100644 index 00000000000..08475115e0a --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-scriptified-assets/_expected/system/main.js @@ -0,0 +1,15 @@ +System.register(['./answer.num.js', './lorem.str.js'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('answer', module.default); + }, function (module) { + exports('lorem', module.default); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/preserve-modules-scriptified-assets/src/answer.num b/test/chunking-form/samples/preserve-modules-scriptified-assets/src/answer.num new file mode 100644 index 00000000000..d81cc0710eb --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-scriptified-assets/src/answer.num @@ -0,0 +1 @@ +42 diff --git a/test/chunking-form/samples/preserve-modules-scriptified-assets/src/lorem.str b/test/chunking-form/samples/preserve-modules-scriptified-assets/src/lorem.str new file mode 100644 index 00000000000..1b376877f43 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-scriptified-assets/src/lorem.str @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. diff --git a/test/chunking-form/samples/preserve-modules-scriptified-assets/src/main.js b/test/chunking-form/samples/preserve-modules-scriptified-assets/src/main.js new file mode 100644 index 00000000000..d529f66e562 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-scriptified-assets/src/main.js @@ -0,0 +1,2 @@ +export { default as answer } from './answer.num'; +export { default as lorem } from './lorem.str';