Skip to content

Commit

Permalink
fix: remove unnecessary and problematic getOutDirs()
Browse files Browse the repository at this point in the history
  • Loading branch information
brillout committed Jan 17, 2023
1 parent 7ef089a commit 6bce954
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 63 deletions.
6 changes: 3 additions & 3 deletions telefunc/node/vite/plugins/importBuild/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ export { importBuild }

import { importBuild as importBuild_ } from '@brillout/vite-plugin-import-build/plugin'
import type { Plugin, ResolvedConfig } from 'vite'
import { projectInfo, toPosixPath, getOutDirs } from '../../utils'
import { projectInfo, toPosixPath } from '../../utils'
import path from 'path'
import { telefuncFilesGlobFileNameBase } from '../../importGlob/telefuncFilesGlobFileNameBase'
import { manifestFileName } from '../manifest'
Expand Down Expand Up @@ -32,8 +32,8 @@ function getImporterCode(config: ResolvedConfig, telefuncFilesEntry: string) {
const importPathAbsolute = toPosixPath(
require.resolve(`../../../../../../dist/cjs/node/vite/plugins/importBuild/loadBuild.js`)
)
const { outDirServer } = getOutDirs(config)
const importPath = path.posix.relative(outDirServer, importPathAbsolute)
const { outDir } = config.build
const importPath = path.posix.relative(outDir, importPathAbsolute)
// console.log(`\n importPath: ${importPath}\n outDirServer: ${outDirServer}\n importPathAbsolute: ${importPathAbsolute}\n config.build.outDir: ${config.build.outDir}`)
const importerCode = [
'{',
Expand Down
67 changes: 7 additions & 60 deletions telefunc/utils/getOutDirs.ts
Original file line number Diff line number Diff line change
@@ -1,40 +1,23 @@
export { determineOutDir }

import type { UserConfig, ResolvedConfig } from 'vite'
import { viteIsSSR } from './viteIsSSR'
import { assert } from './assert'
import { assertPosixPath, toPosixPath } from './filesystemPathHandling'
import path from 'path'

export { getOutDirs }
export { determineOutDir }

type OutDirs = {
/** Absolute path to `outDir` */
outDirRoot: string
/** Absolute path to `${outDir}/client` */
outDirClient: string
/** Absolute path to `${outDir}/server` */
outDirServer: string
}

function getOutDirs(config: ResolvedConfig): OutDirs {
const outDir = config.build.outDir
assertPosixPath(outDir)
assertIsNotOutDirRoot(outDir)
assertConfig(config)
assert('/client'.length === '/server'.length)
let outDirRoot = outDir.slice(0, -1 * '/client'.length)
return getAllOutDirs(outDirRoot, config.root)
}

/** Appends `client/` or `server/` to `config.build.outDir` */
function determineOutDir(config: ResolvedConfig): string | null {
// https://github.com/withastro/astro/issues/5211#issuecomment-1326084151
// The mechansism to detect a framework down below doesn't work for Astro
// - https://github.com/withastro/astro/issues/5211#issuecomment-1326084151
if (config.plugins.some((p) => p.name?.startsWith('astro:'))) return null

const outDirRoot = toPosixPath(config.build.outDir)
assertPosixPath(outDirRoot)

// When using vite-plugin-ssr and SvelteKit then `config.build.outDir` is already set
// Mechanism to detect whether Telefunc is used with framework.
// When used with a framework then Telefunc should let the framework determine `outDir`.
// E.g. vite-plugin-ssr and SvelteKit already set `config.build.outDir`.
if (!isOutDirRoot(outDirRoot)) {
assertConfig(config)
return null
Expand All @@ -48,32 +31,6 @@ function determineOutDir(config: ResolvedConfig): string | null {
}
}

function getAllOutDirs(outDirRoot: string, root: string) {
if (!outDirIsAbsolutePath(outDirRoot)) {
assertPosixPath(outDirRoot)
assertPosixPath(root)
outDirRoot = path.posix.join(root, outDirRoot)
}

let { outDirClient, outDirServer } = declineOutDirs(outDirRoot)
outDirRoot = outDirRoot + '/'
outDirClient = outDirClient + '/'
outDirServer = outDirServer + '/'

assertNormalization(outDirRoot)
assertNormalization(outDirClient)
assertNormalization(outDirServer)

return { outDirRoot, outDirClient, outDirServer }
}

function assertNormalization(outDirAny: string) {
assertPosixPath(outDirAny)
assert(outDirIsAbsolutePath(outDirAny))
assert(outDirAny.endsWith('/'))
assert(!outDirAny.endsWith('//'))
}

function declineOutDirs(outDirRoot: string) {
assertIsOutDirRoot(outDirRoot)
assertPosixPath(outDirRoot)
Expand Down Expand Up @@ -106,13 +63,3 @@ function assertConfig(config: UserConfig | ResolvedConfig) {
assert(outDir.endsWith('/client'))
}
}

function outDirIsAbsolutePath(outDir: string) {
// There doesn't seem to be a better alternative to determine whether `outDir` is an aboslute path
// - Very unlikely that `outDir`'s first dir macthes the filesystem's first dir
return getFirstDir(outDir) === getFirstDir(process.cwd())
}
function getFirstDir(p: string) {
const firstDir = p.split(/\/|\\/).filter(Boolean)[0]
return firstDir
}

0 comments on commit 6bce954

Please sign in to comment.