From a085605b213b8062fe8f644e52aa9aaeb307e95e Mon Sep 17 00:00:00 2001 From: Romuald Brillout Date: Wed, 13 Dec 2023 18:05:19 +0100 Subject: [PATCH] fix: serialize manifest instead of emitting it --- telefunc/node/vite/index.ts | 14 ++++--- .../assertManifest.ts | 1 + .../importBuild/getTelefuncManifest.ts | 14 +++++++ .../node/vite/plugins/importBuild/index.ts | 6 ++- .../vite/plugins/importBuild/loadBuild.ts | 2 +- telefunc/node/vite/plugins/manifest/index.ts | 39 ------------------- 6 files changed, 28 insertions(+), 48 deletions(-) rename telefunc/node/vite/plugins/{manifest => importBuild}/assertManifest.ts (96%) create mode 100644 telefunc/node/vite/plugins/importBuild/getTelefuncManifest.ts delete mode 100644 telefunc/node/vite/plugins/manifest/index.ts diff --git a/telefunc/node/vite/index.ts b/telefunc/node/vite/index.ts index 2ecb2b1c..8b4d201e 100644 --- a/telefunc/node/vite/index.ts +++ b/telefunc/node/vite/index.ts @@ -1,7 +1,6 @@ export { plugin as telefunc } export default plugin -import type { Plugin } from 'vite' import { transform } from './plugins/transform' import { commonConfig } from './plugins/commonConfig' import { devConfig } from './plugins/devConfig' @@ -11,15 +10,19 @@ import { packageJsonFile } from './plugins/packageJsonFile' import { importBuild } from './plugins/importBuild' import { previewConfig } from './plugins/previewConfig' import { printShieldGenResult } from './plugins/printShieldGenResult' -import { manifest } from './plugins/manifest' import { importGlobOn } from './importGlob/toggle' - -import { ConfigUser } from '../server/serverConfig' +import { config } from '../server/serverConfig' +import type { Plugin } from 'vite' +import type { ConfigUser } from '../server/serverConfig' // Return as `any` to avoid Plugin type mismatches when there are multiple Vite versions installed -function plugin(config?: ConfigUser): any { +function plugin(configUser?: ConfigUser): any { importGlobOn() + // - For dev + // - Ensures that `configUser` is valid before `config` is serialized while building + Object.assign(config, configUser) + const plugins: Plugin[] = [ transform(), commonConfig(), @@ -29,7 +32,6 @@ function plugin(config?: ConfigUser): any { packageJsonFile(), ...importBuild(), previewConfig(), - manifest(config), printShieldGenResult() ] return plugins diff --git a/telefunc/node/vite/plugins/manifest/assertManifest.ts b/telefunc/node/vite/plugins/importBuild/assertManifest.ts similarity index 96% rename from telefunc/node/vite/plugins/manifest/assertManifest.ts rename to telefunc/node/vite/plugins/importBuild/assertManifest.ts index 7e30b052..87173839 100644 --- a/telefunc/node/vite/plugins/manifest/assertManifest.ts +++ b/telefunc/node/vite/plugins/importBuild/assertManifest.ts @@ -1,4 +1,5 @@ export { assertManifest } +export type { Manifest } import { assertUsage, projectInfo, assert, hasProp, checkType } from '../../utils' diff --git a/telefunc/node/vite/plugins/importBuild/getTelefuncManifest.ts b/telefunc/node/vite/plugins/importBuild/getTelefuncManifest.ts new file mode 100644 index 00000000..49f53e52 --- /dev/null +++ b/telefunc/node/vite/plugins/importBuild/getTelefuncManifest.ts @@ -0,0 +1,14 @@ +export { getTelefuncManifest } + +import { config } from '../../../server/serverConfig' +import { projectInfo } from '../../utils' +import { assertManifest, type Manifest } from './assertManifest' + +function getTelefuncManifest(): Manifest { + const manifest = { + version: projectInfo.projectVersion, + config + } + assertManifest(manifest) + return manifest +} diff --git a/telefunc/node/vite/plugins/importBuild/index.ts b/telefunc/node/vite/plugins/importBuild/index.ts index 2747da60..914b29de 100644 --- a/telefunc/node/vite/plugins/importBuild/index.ts +++ b/telefunc/node/vite/plugins/importBuild/index.ts @@ -5,7 +5,7 @@ import type { Plugin, ResolvedConfig } from 'vite' import { assert, assertPosixPath, getOutDirAbsolute, projectInfo, toPosixPath } from '../../utils' import path from 'path' import { telefuncFilesGlobFileNameBase } from '../../importGlob/telefuncFilesGlobFileNameBase' -import { manifestFileName } from '../manifest' +import { getTelefuncManifest } from './getTelefuncManifest' function importBuild(): Plugin[] { let config: ResolvedConfig @@ -30,13 +30,15 @@ function importBuild(): Plugin[] { function getImporterCode(config: ResolvedConfig, telefuncFilesEntry: string) { const importPath = getImportPath(config) + const telefuncManifest = getTelefuncManifest() + // console.log(`\n importPath: ${importPath}\n outDirServer: ${outDirServer}\n importPathAbsolute: ${importPathAbsolute}\n config.build.outDir: ${config.build.outDir}`) const importerCode = [ '{', ` const { setLoaders } = require('${importPath}');`, ' setLoaders({', ` loadTelefuncFiles: () => import('./${telefuncFilesEntry}'),`, - ` loadManifest: () => require('./${manifestFileName}')`, + ` loadManifest: () => (${JSON.stringify(telefuncManifest, null, 2)})`, ' });', '}', '' diff --git a/telefunc/node/vite/plugins/importBuild/loadBuild.ts b/telefunc/node/vite/plugins/importBuild/loadBuild.ts index 89913522..3926e661 100644 --- a/telefunc/node/vite/plugins/importBuild/loadBuild.ts +++ b/telefunc/node/vite/plugins/importBuild/loadBuild.ts @@ -3,7 +3,7 @@ export { setLoaders } import { config } from '../../../server/serverConfig' import { getGlobalObject } from '../../utils' -import { assertManifest } from '../manifest/assertManifest' +import { assertManifest } from './assertManifest' const globalObject = getGlobalObject<{ loadTelefuncFiles?: LoadTelefuncFiles diff --git a/telefunc/node/vite/plugins/manifest/index.ts b/telefunc/node/vite/plugins/manifest/index.ts deleted file mode 100644 index ddfe6edb..00000000 --- a/telefunc/node/vite/plugins/manifest/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -export { manifest } -export { manifestFileName } - -import type { Plugin } from 'vite' -import { config, type ConfigUser } from '../../../server/serverConfig' -import { assert, projectInfo } from '../../utils' -import { assertManifest } from './assertManifest' - -const manifestFileName = 'telefunc.json' as const - -function manifest(configUser: ConfigUser = {}): Plugin { - // - For dev - // - Ensures that `configUser` is valid before this.emitFile() writes `dist/server/telefunc.json` to disk - Object.assign(config, configUser) - - // For prod - let ssr: boolean | undefined - return { - name: 'telefunc:manifest', - apply: 'build' as const, - generateBundle() { - assert(typeof ssr === 'boolean') - if (!ssr) return - const manifest = { - version: projectInfo.projectVersion, - config: configUser - } - assertManifest(manifest) - this.emitFile({ - fileName: manifestFileName, - type: 'asset', - source: JSON.stringify(manifest, null, 2) - }) - }, - configResolved(viteConfig) { - ssr = !!viteConfig.build.ssr - } - } -}