one
Version:
One is a new React Framework that makes Vite serve both native and web.
50 lines (40 loc) • 1.51 kB
text/typescript
import {
isNative,
CSS_PRELOAD_JS_POSTFIX,
LOADER_JS_POSTFIX,
LOADER_JS_POSTFIX_REGEX,
PRELOAD_JS_POSTFIX,
} from '../constants'
import { getURL } from '../getURL'
import { removeSearch } from './removeSearch'
function cleanUrl(path: string) {
return (
removeSearch(path)
.replaceAll('/', '_')
// remove trailing _
.replace(/_$/, '')
)
}
const isClient = typeof window !== 'undefined'
const clientSideURL = isClient ? getURL() : ''
export function getPreloadPath(currentPath: string) {
return `${clientSideURL}/assets/${cleanUrl(currentPath.slice(1))}${PRELOAD_JS_POSTFIX}`
}
export function getPreloadCSSPath(currentPath: string) {
return `${clientSideURL}/assets/${cleanUrl(currentPath.slice(1))}${CSS_PRELOAD_JS_POSTFIX}`
}
export function getLoaderPath(currentPath: string, includeUrl = isNative, cacheBust?: string) {
const baseURL = includeUrl ? getURL() : ''
const devPath = process.env.NODE_ENV === 'development' ? '/_one' : ''
const currentPathUrl = new URL(currentPath, 'http://example.com')
const cleanedUrl = cleanUrl(currentPathUrl.pathname.slice(1))
const cacheBustSegment = cacheBust ? `_refetch_${cacheBust}_` : ''
return `${baseURL}${devPath}/assets/${cleanedUrl}${cacheBustSegment}${LOADER_JS_POSTFIX}`
}
export function getPathFromLoaderPath(loaderPath: string) {
return loaderPath
.replace(LOADER_JS_POSTFIX_REGEX, '')
.replace(/^(\/_one)?\/assets/, '')
.replace(/_refetch_\d+_/, '')
.replaceAll(/_/g, '/')
}