one
Version:
One is a new React Framework that makes Vite serve both native and web.
48 lines (40 loc) • 1.25 kB
text/typescript
import {
isNative,
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 getLoaderPath(
currentPath: string,
// browser can be relative
includeUrl = isNative
) {
const baseURL = includeUrl ? getURL() : ''
const devPath = process.env.NODE_ENV === 'development' ? '/_one' : ''
const currentPathUrl = new URL(
currentPath,
'http://example.com' /* not important, just for `new URL()` to work */
)
return `${baseURL}${devPath}/assets/${cleanUrl(currentPathUrl.pathname.slice(1))}${LOADER_JS_POSTFIX}`
}
export function getPathFromLoaderPath(loaderPath: string) {
return loaderPath
.replace(LOADER_JS_POSTFIX_REGEX, '')
.replace(/^(\/_one)?\/assets/, '')
.replaceAll(/_/g, '/')
}