From b0a44ff5853d4fc3d7723e1daca131be16ef99f3 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Tue, 2 Nov 2021 14:55:05 +0000 Subject: [PATCH 1/3] fix: sanitize rollup-generated filenames --- packages/nitro/src/rollup/config.ts | 2 ++ packages/nitro/src/utils/sanitize.ts | 14 ++++++++++++++ packages/vite/src/utils/sanitize.ts | 14 ++++++++++++++ packages/vite/src/vite.ts | 6 +++++- 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 packages/nitro/src/utils/sanitize.ts create mode 100644 packages/vite/src/utils/sanitize.ts diff --git a/packages/nitro/src/rollup/config.ts b/packages/nitro/src/rollup/config.ts index d01b83a5d82..bad3e9ba91a 100644 --- a/packages/nitro/src/rollup/config.ts +++ b/packages/nitro/src/rollup/config.ts @@ -18,6 +18,7 @@ import * as unenv from 'unenv' import type { Preset } from 'unenv' import { NitroContext } from '../context' import { resolvePath } from '../utils' +import { sanitizeFileName } from '../utils/sanitize' import { pkgDir } from '../dirs' import { dynamicRequire } from './plugins/dynamic-require' @@ -110,6 +111,7 @@ export const getRollupConfig = (nitroContext: NitroContext) => { intro: '', outro: '', preferConst: true, + sanitizeFileName, sourcemap: nitroContext.sourceMap, sourcemapExcludeSources: true, sourcemapPathTransform (relativePath, sourcemapPath) { diff --git a/packages/nitro/src/utils/sanitize.ts b/packages/nitro/src/utils/sanitize.ts new file mode 100644 index 00000000000..7dfcc1d122f --- /dev/null +++ b/packages/nitro/src/utils/sanitize.ts @@ -0,0 +1,14 @@ +// https://github.com/rollup/rollup/blob/master/src/utils/sanitizeFileName.ts + +// https://datatracker.ietf.org/doc/html/rfc2396 +// eslint-disable-next-line no-control-regex +const INVALID_CHAR_RE = /[?*:\x00-\x1F\x7F<>#"{}|\\^[\]`]/g + +export function sanitizeFileName (name: string): string { + const match = /^[a-z]:/i.exec(name) + const driveLetter = match ? match[0] : '' + + // A `:` is only allowed as part of a windows drive letter (ex: C:\foo) + // Otherwise, avoid them because they can refer to NTFS alternate data streams. + return driveLetter + name.substr(driveLetter.length).replace(INVALID_CHAR_RE, '_') +} diff --git a/packages/vite/src/utils/sanitize.ts b/packages/vite/src/utils/sanitize.ts new file mode 100644 index 00000000000..7dfcc1d122f --- /dev/null +++ b/packages/vite/src/utils/sanitize.ts @@ -0,0 +1,14 @@ +// https://github.com/rollup/rollup/blob/master/src/utils/sanitizeFileName.ts + +// https://datatracker.ietf.org/doc/html/rfc2396 +// eslint-disable-next-line no-control-regex +const INVALID_CHAR_RE = /[?*:\x00-\x1F\x7F<>#"{}|\\^[\]`]/g + +export function sanitizeFileName (name: string): string { + const match = /^[a-z]:/i.exec(name) + const driveLetter = match ? match[0] : '' + + // A `:` is only allowed as part of a windows drive letter (ex: C:\foo) + // Otherwise, avoid them because they can refer to NTFS alternate data streams. + return driveLetter + name.substr(driveLetter.length).replace(INVALID_CHAR_RE, '_') +} diff --git a/packages/vite/src/vite.ts b/packages/vite/src/vite.ts index cf7538c5ef7..b62a4f8ce42 100644 --- a/packages/vite/src/vite.ts +++ b/packages/vite/src/vite.ts @@ -8,6 +8,7 @@ import { buildClient } from './client' import { buildServer } from './server' import virtual from './plugins/virtual' import { warmupViteServer } from './utils/warmup' +import { sanitizeFileName } from './utils/sanitize' import { resolveCSSOptions } from './css' export interface ViteOptions extends InlineConfig { @@ -68,7 +69,10 @@ export async function bundle (nuxt: Nuxt) { build: { emptyOutDir: false, rollupOptions: { - input: resolve(nuxt.options.appDir, 'entry') + input: resolve(nuxt.options.appDir, 'entry'), + output: { + sanitizeFileName + } } }, plugins: [ From e57ea300431205c97654ab40e7dc0f156b7e0048 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Tue, 2 Nov 2021 14:58:58 +0000 Subject: [PATCH 2/3] fix: remove workaround reverts https://github.com/nuxt/framework/pull/477 --- packages/nitro/src/rollup/config.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/nitro/src/rollup/config.ts b/packages/nitro/src/rollup/config.ts index bad3e9ba91a..a4f58c101ae 100644 --- a/packages/nitro/src/rollup/config.ts +++ b/packages/nitro/src/rollup/config.ts @@ -100,9 +100,6 @@ export const getRollupConfig = (nitroContext: NitroContext) => { } else if (lastModule.includes('assets')) { prefix = 'assets' } - if (chunkInfo.name.includes('#')) { - return join('chunks', prefix, chunkInfo.name.replace(/#/g, '-') + '.mjs') - } return join('chunks', prefix, '[name].mjs') }, inlineDynamicImports: nitroContext.inlineDynamicImports, From 17db2f8b3474fd787d0ad92b5654255bfb4c4a8e Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Wed, 3 Nov 2021 13:55:29 +0100 Subject: [PATCH 3/3] refactoruse sanitizeFilePath from mlly --- packages/nitro/package.json | 2 +- packages/nitro/src/rollup/config.ts | 4 ++-- packages/nitro/src/utils/sanitize.ts | 14 -------------- packages/vite/package.json | 1 + packages/vite/src/utils/sanitize.ts | 14 -------------- packages/vite/src/vite.ts | 6 ++---- yarn.lock | 10 +++++++++- 7 files changed, 15 insertions(+), 36 deletions(-) delete mode 100644 packages/nitro/src/utils/sanitize.ts delete mode 100644 packages/vite/src/utils/sanitize.ts diff --git a/packages/nitro/package.json b/packages/nitro/package.json index fbf3358bce6..ed572aecd9e 100644 --- a/packages/nitro/package.json +++ b/packages/nitro/package.json @@ -50,7 +50,7 @@ "jiti": "^1.12.9", "listhen": "^0.2.5", "mime": "^2.5.2", - "mlly": "^0.3.11", + "mlly": "^0.3.12", "node-fetch": "^3.0.0", "ohmyfetch": "^0.4.2", "ora": "^6.0.1", diff --git a/packages/nitro/src/rollup/config.ts b/packages/nitro/src/rollup/config.ts index a4f58c101ae..3482bdf28c5 100644 --- a/packages/nitro/src/rollup/config.ts +++ b/packages/nitro/src/rollup/config.ts @@ -16,9 +16,9 @@ import { visualizer } from 'rollup-plugin-visualizer' import * as unenv from 'unenv' import type { Preset } from 'unenv' +import { sanitizeFilePath } from 'mlly' import { NitroContext } from '../context' import { resolvePath } from '../utils' -import { sanitizeFileName } from '../utils/sanitize' import { pkgDir } from '../dirs' import { dynamicRequire } from './plugins/dynamic-require' @@ -108,7 +108,7 @@ export const getRollupConfig = (nitroContext: NitroContext) => { intro: '', outro: '', preferConst: true, - sanitizeFileName, + sanitizeFileName: sanitizeFilePath, sourcemap: nitroContext.sourceMap, sourcemapExcludeSources: true, sourcemapPathTransform (relativePath, sourcemapPath) { diff --git a/packages/nitro/src/utils/sanitize.ts b/packages/nitro/src/utils/sanitize.ts deleted file mode 100644 index 7dfcc1d122f..00000000000 --- a/packages/nitro/src/utils/sanitize.ts +++ /dev/null @@ -1,14 +0,0 @@ -// https://github.com/rollup/rollup/blob/master/src/utils/sanitizeFileName.ts - -// https://datatracker.ietf.org/doc/html/rfc2396 -// eslint-disable-next-line no-control-regex -const INVALID_CHAR_RE = /[?*:\x00-\x1F\x7F<>#"{}|\\^[\]`]/g - -export function sanitizeFileName (name: string): string { - const match = /^[a-z]:/i.exec(name) - const driveLetter = match ? match[0] : '' - - // A `:` is only allowed as part of a windows drive letter (ex: C:\foo) - // Otherwise, avoid them because they can refer to NTFS alternate data streams. - return driveLetter + name.substr(driveLetter.length).replace(INVALID_CHAR_RE, '_') -} diff --git a/packages/vite/package.json b/packages/vite/package.json index dcee82fb54e..f7fb521b923 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -28,6 +28,7 @@ "externality": "^0.1.4", "fs-extra": "^10.0.0", "magic-string": "^0.25.7", + "mlly": "^0.3.12", "p-debounce": "^4.0.0", "pathe": "^0.2.0", "postcss-import": "^14.0.2", diff --git a/packages/vite/src/utils/sanitize.ts b/packages/vite/src/utils/sanitize.ts deleted file mode 100644 index 7dfcc1d122f..00000000000 --- a/packages/vite/src/utils/sanitize.ts +++ /dev/null @@ -1,14 +0,0 @@ -// https://github.com/rollup/rollup/blob/master/src/utils/sanitizeFileName.ts - -// https://datatracker.ietf.org/doc/html/rfc2396 -// eslint-disable-next-line no-control-regex -const INVALID_CHAR_RE = /[?*:\x00-\x1F\x7F<>#"{}|\\^[\]`]/g - -export function sanitizeFileName (name: string): string { - const match = /^[a-z]:/i.exec(name) - const driveLetter = match ? match[0] : '' - - // A `:` is only allowed as part of a windows drive letter (ex: C:\foo) - // Otherwise, avoid them because they can refer to NTFS alternate data streams. - return driveLetter + name.substr(driveLetter.length).replace(INVALID_CHAR_RE, '_') -} diff --git a/packages/vite/src/vite.ts b/packages/vite/src/vite.ts index b62a4f8ce42..c7f9b230218 100644 --- a/packages/vite/src/vite.ts +++ b/packages/vite/src/vite.ts @@ -4,11 +4,11 @@ import consola from 'consola' import type { Nuxt } from '@nuxt/kit' import type { InlineConfig, SSROptions } from 'vite' import type { Options } from '@vitejs/plugin-vue' +import { sanitizeFilePath } from 'mlly' import { buildClient } from './client' import { buildServer } from './server' import virtual from './plugins/virtual' import { warmupViteServer } from './utils/warmup' -import { sanitizeFileName } from './utils/sanitize' import { resolveCSSOptions } from './css' export interface ViteOptions extends InlineConfig { @@ -70,9 +70,7 @@ export async function bundle (nuxt: Nuxt) { emptyOutDir: false, rollupOptions: { input: resolve(nuxt.options.appDir, 'entry'), - output: { - sanitizeFileName - } + output: { sanitizeFileName: sanitizeFilePath } } }, plugins: [ diff --git a/yarn.lock b/yarn.lock index 8b3fa2ea739..433544d2db2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2959,7 +2959,7 @@ __metadata: jiti: ^1.12.9 listhen: ^0.2.5 mime: ^2.5.2 - mlly: ^0.3.11 + mlly: ^0.3.12 node-fetch: ^3.0.0 ohmyfetch: ^0.4.2 ora: ^6.0.1 @@ -3128,6 +3128,7 @@ __metadata: externality: ^0.1.4 fs-extra: ^10.0.0 magic-string: ^0.25.7 + mlly: ^0.3.12 p-debounce: ^4.0.0 pathe: ^0.2.0 postcss-import: ^14.0.2 @@ -13996,6 +13997,13 @@ __metadata: languageName: node linkType: hard +"mlly@npm:^0.3.12": + version: 0.3.12 + resolution: "mlly@npm:0.3.12" + checksum: f9f93622023f4a9adfd27c465ff40146725cbb17176eb3610f4cec73f31edca41dc571030d185406d30044aaa0565a75782ac74a69be3cc58c10fc50505bb74d + languageName: node + linkType: hard + "mocha@npm:^9.1.3": version: 9.1.3 resolution: "mocha@npm:9.1.3"