From 98cec2295d96e900d27cf2cb1330a58d384feb30 Mon Sep 17 00:00:00 2001 From: Romuald Brillout Date: Fri, 18 Nov 2022 18:33:36 +0100 Subject: [PATCH] fix: improve error message upon third-party Vite plugin conflicting with Telefunc --- telefunc/node/vite/index.ts | 2 +- telefunc/node/vite/plugins/buildConfig.ts | 46 ++++++++++++++++------- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/telefunc/node/vite/index.ts b/telefunc/node/vite/index.ts index ce36c20e..2ecb2b1c 100644 --- a/telefunc/node/vite/index.ts +++ b/telefunc/node/vite/index.ts @@ -24,7 +24,7 @@ function plugin(config?: ConfigUser): any { transform(), commonConfig(), ...devConfig(), - buildConfig(), + ...buildConfig(), retrieveDevServer(), packageJsonFile(), ...importBuild(), diff --git a/telefunc/node/vite/plugins/buildConfig.ts b/telefunc/node/vite/plugins/buildConfig.ts index 6631b408..10667c19 100644 --- a/telefunc/node/vite/plugins/buildConfig.ts +++ b/telefunc/node/vite/plugins/buildConfig.ts @@ -4,18 +4,30 @@ import type { Plugin, ResolvedConfig } from 'vite' import type { InputOption } from 'rollup' import { telefuncFilesGlobFileNameBase } from '../importGlob/telefuncFilesGlobFileNameBase' import { telefuncFilesGlobFilePath } from '../importGlob/telefuncFilesGlobPath' -import { assert, isObject, determineOutDir } from '../utils' +import { assert, assertUsage, isObject, determineOutDir } from '../utils' -function buildConfig(): Plugin { - return { - name: 'telefunc:buildConfig', - apply: 'build', - enforce: 'post', - configResolved(config) { - setOutDir(config) - addRollupInput(config) +function buildConfig(): Plugin[] { + let config: ResolvedConfig + return [ + { + name: 'telefunc:buildConfig', + apply: 'build', + enforce: 'post', + configResolved(config_) { + config = config_ + setOutDir(config) + addRollupInput(config) + } + }, + { + name: 'telefunc:buildConfig:assert', + apply: 'build', + enforce: 'pre', + generateBundle(_rollupOptions, rollupBundle) { + assertRollupInput(rollupBundle, config) + } } - } + ] } function setOutDir(config: ResolvedConfig) { @@ -24,13 +36,19 @@ function setOutDir(config: ResolvedConfig) { } function addRollupInput(config: ResolvedConfig) { - if (!config.build?.ssr) { - return - } + if (!config.build?.ssr) return config.build.rollupOptions.input = normalizeRollupInput(config.build.rollupOptions.input) config.build.rollupOptions.input[telefuncFilesGlobFileNameBase] = telefuncFilesGlobFilePath } - +function assertRollupInput(rollupBundle: Record, config: ResolvedConfig) { + if (!config.build?.ssr) return + const rollupInputEntries = Object.keys(rollupBundle) + assertUsage( + rollupInputEntries.includes(`${telefuncFilesGlobFileNameBase}.js`) || + rollupInputEntries.includes(`${telefuncFilesGlobFileNameBase}.mjs`), + "You seem to be using a tool that conflicts with Telefunc. Reach out to a Telefunc maintainer. (Info for maintainer: couldn't find Telefunc's Rollup input entry.)" + ) +} function normalizeRollupInput(input?: InputOption): Record { if (!input) { return {}