diff options
Diffstat (limited to 'examples/hello-next/bun-framework-next/client.development.tsx')
-rw-r--r-- | examples/hello-next/bun-framework-next/client.development.tsx | 417 |
1 files changed, 0 insertions, 417 deletions
diff --git a/examples/hello-next/bun-framework-next/client.development.tsx b/examples/hello-next/bun-framework-next/client.development.tsx deleted file mode 100644 index f8fd054c3..000000000 --- a/examples/hello-next/bun-framework-next/client.development.tsx +++ /dev/null @@ -1,417 +0,0 @@ -globalThis.global = globalThis; -globalThis.Bun_disableCSSImports = true; - -import "./bun-error"; - -import * as React from "react"; -var onlyChildPolyfill = React.Children.only; -React.Children.only = function (children) { - if (children && typeof children === "object" && children.length == 1) { - return onlyChildPolyfill(children[0]); - } - - return onlyChildPolyfill(children); -}; - -import * as ReactDOM from "react-dom"; -import App from "next/app"; -import mitt, { MittEmitter } from "next/dist/shared/lib/mitt"; -import { RouterContext } from "next/dist/shared/lib/router-context"; -import Router, { - AppComponent, - AppProps, - delBasePath, - hasBasePath, - PrivateRouteInfo, -} from "next/dist/shared/lib/router/router"; - -import * as NextRouteLoader from "next/dist/client/route-loader"; -import { isDynamicRoute } from "next/dist/shared/lib/router/utils/is-dynamic"; -import { - urlQueryToSearchParams, - assign, -} from "next/dist/shared/lib/router/utils/querystring"; -import { setConfig } from "next/dist/shared/lib/runtime-config"; -import { - getURL, - loadGetInitialProps, - NEXT_DATA, - ST, -} from "next/dist/shared/lib/utils"; -// import { Portal } from "next/dist/client/portal"; -import initHeadManager from "next/dist/client/head-manager"; -import { HeadManagerContext } from "next/dist/shared/lib/head-manager-context"; -import PageLoader from "./page-loader"; -import measureWebVitals from "next/dist/client/performance-relayer"; -import { RouteAnnouncer } from "next/dist/client/route-announcer"; -import { - createRouter, - makePublicRouterInstance, -} from "next/dist/client/router"; -export const emitter: MittEmitter<string> = mitt(); - -declare global { - interface Window { - /* test fns */ - __NEXT_HYDRATED?: boolean; - __NEXT_HYDRATED_CB?: () => void; - - /* prod */ - __NEXT_PRELOADREADY?: (ids?: (string | number)[]) => void; - __NEXT_DATA__: NEXT_DATA; - __NEXT_P: any[]; - } -} - -function nextDataFromBunData() { - const { - router: { routes, route, params: paramsList }, - problems, - } = globalThis.__BUN_DATA__; - - const paramsMap = new Map(); - for (let i = 0; i < paramsList.keys.length; i++) { - paramsMap.set( - decodeURIComponent(paramsList.keys[i]), - decodeURIComponent(paramsList.values[i]) - ); - } - - const params = {}; - var url = new URL(location.href); - Object.assign(params, Object.fromEntries(url.searchParams.entries())); - Object.assign(params, Object.fromEntries(paramsMap.entries())); - - const pages = routes.reduce((acc, route) => { - var name = route.substring(route.indexOf("_next") + "_next/".length); - - while (name.startsWith("/")) { - name = name.substring(1); - } - - if (name.startsWith("pages")) { - name = name.substring("pages".length); - } - - while (name.startsWith("/")) { - name = name.substring(1); - } - - if (name.endsWith(".jsx")) { - name = name.substring(0, name.length - ".jsx".length); - } - - if (name.endsWith(".tsx")) { - name = name.substring(0, name.length - ".tsx".length); - } - - if (name.endsWith(".ts")) { - name = name.substring(0, name.length - ".ts".length); - } - - if (name.endsWith(".js")) { - name = name.substring(0, name.length - ".js".length); - } - - acc["/" + name] = [route]; - return acc; - }, {}); - - return { - page: routes[route], - buildId: "1234", - assetPrefix: "", - isPreview: false, - locale: null, - locales: [], - isFallback: false, - err: null, - props: {}, - query: params, - pages, - }; -} - -type RenderRouteInfo = PrivateRouteInfo & { - App: AppComponent; - scroll?: { x: number; y: number } | null; -}; -type RenderErrorProps = Omit<RenderRouteInfo, "Component" | "styleSheets">; - -const nextDataTag = document.getElementById("__NEXT_DATA__"); - -const data: typeof window["__NEXT_DATA__"] = nextDataTag - ? JSON.parse(document.getElementById("__NEXT_DATA__")!.textContent!) - : nextDataFromBunData(); -window.__NEXT_DATA__ = data; - -const { - props: hydrateProps, - err: hydrateErr, - page, - query, - buildId, - assetPrefix, - runtimeConfig, - dynamicIds, - isFallback, - locale, - locales, - domainLocales, - isPreview, -} = data; - -const prefix: string = assetPrefix || ""; - -setConfig({ - serverRuntimeConfig: {}, - publicRuntimeConfig: runtimeConfig || {}, -}); - -let asPath: string = getURL(); - -// make sure not to attempt stripping basePath for 404s -if (hasBasePath(asPath)) { - asPath = delBasePath(asPath); -} - -export const pageLoader: PageLoader = new PageLoader( - buildId, - prefix, - data.pages -); - -const headManager: { - mountedInstances: Set<unknown>; - updateHead: (head: JSX.Element[]) => void; -} = initHeadManager(); -const appElement: HTMLElement | null = document.getElementById("__next"); - -let lastRenderReject: (() => void) | null; -let webpackHMR: any; -export let router: Router; -let CachedApp: AppComponent, onPerfEntry: (metric: any) => void; - -export default function boot(EntryPointNamespace, loader) { - _boot(EntryPointNamespace).then(() => {}, false); -} - -class Container extends React.Component<{ - fn: (err: Error, info?: any) => void; -}> { - componentDidCatch(componentErr: Error, info: any) { - this.props.fn(componentErr, info); - } - - componentDidMount() { - this.scrollToHash(); - - // We need to replace the router state if: - // - the page was (auto) exported and has a query string or search (hash) - // - it was auto exported and is a dynamic route (to provide params) - // - if it is a client-side skeleton (fallback render) - if ( - router.isSsr && - // We don't update for 404 requests as this can modify - // the asPath unexpectedly e.g. adding basePath when - // it wasn't originally present - page !== "/404" && - page !== "/_error" && - (isFallback || - (data.nextExport && - (isDynamicRoute(router.pathname) || - location.search || - process.env.__NEXT_HAS_REWRITES)) || - (hydrateProps && - hydrateProps.__N_SSG && - (location.search || process.env.__NEXT_HAS_REWRITES))) - ) { - // update query on mount for exported pages - router.replace( - router.pathname + - "?" + - String( - assign( - urlQueryToSearchParams(router.query), - new URLSearchParams(location.search) - ) - ), - asPath, - { - // @ts-ignore - // WARNING: `_h` is an internal option for handing Next.js - // client-side hydration. Your app should _never_ use this property. - // It may change at any time without notice. - _h: 1, - // Fallback pages must trigger the data fetch, so the transition is - // not shallow. - // Other pages (strictly updating query) happens shallowly, as data - // requirements would already be present. - shallow: !isFallback, - } - ); - } - } - - componentDidUpdate() { - this.scrollToHash(); - } - - scrollToHash() { - let { hash } = location; - hash = hash && hash.substring(1); - if (!hash) return; - - const el: HTMLElement | null = document.getElementById(hash); - if (!el) return; - - // If we call scrollIntoView() in here without a setTimeout - // it won't scroll properly. - setTimeout(() => el.scrollIntoView(), 0); - } - - render() { - return this.props.children; - } -} - -let CachedComponent: React.ComponentType; - -const wrapApp = - (App: AppComponent) => - (wrappedAppProps: Record<string, any>): JSX.Element => { - const appProps: AppProps = { - ...wrappedAppProps, - Component: CachedComponent, - err: hydrateErr, - router, - }; - return ( - <AppContainer> - <App {...appProps} /> - </AppContainer> - ); - }; - -function AppContainer({ - children, -}: React.PropsWithChildren<{}>): React.ReactElement { - return ( - <Container fn={(error) => <div>{JSON.stringify(error)}</div>}> - <RouterContext.Provider value={makePublicRouterInstance(router)}> - <HeadManagerContext.Provider value={headManager}> - {children} - </HeadManagerContext.Provider> - </RouterContext.Provider> - </Container> - ); -} - -export async function _boot(EntryPointNamespace, isError) { - NextRouteLoader.default.getClientBuildManifest = () => Promise.resolve({}); - - const PageComponent = EntryPointNamespace.default; - - const appScripts = globalThis.__NEXT_DATA__.pages["/_app"]; - if (appScripts && appScripts.length > 0) { - let appSrc; - for (let asset of appScripts) { - if (!asset.endsWith(".css")) { - appSrc = asset; - break; - } - } - - if (appSrc) { - const AppModule = await import(appSrc); - console.assert( - AppModule.default, - appSrc + " must have a default export'd React component" - ); - - CachedApp = AppModule.default; - } else { - CachedApp = App; - } - } - - router = createRouter(page, query, asPath, { - initialProps: hydrateProps, - pageLoader, - App: CachedApp, - Component: CachedComponent, - wrapApp, - err: null, - isFallback: Boolean(isFallback), - subscription: async (info, App, scroll) => { - return render( - Object.assign< - {}, - Omit<RenderRouteInfo, "App" | "scroll">, - Pick<RenderRouteInfo, "App" | "scroll"> - >({}, info, { - App, - scroll, - }) - ); - }, - locale, - locales, - defaultLocale: "", - domainLocales, - isPreview, - }); - - globalThis.next.router = router; - - if (isError) { - ReactDOM.render( - <TopLevelRender - App={CachedApp} - Component={PageComponent} - props={{ pageProps: hydrateProps }} - />, - document.querySelector("#__next") - ); - } else { - ReactDOM.hydrate( - <TopLevelRender - App={CachedApp} - Component={PageComponent} - props={{ pageProps: hydrateProps }} - />, - document.querySelector("#__next") - ); - } -} - -function TopLevelRender({ App, Component, props, scroll }) { - return ( - <AppContainer scroll={scroll}> - <App Component={Component} {...props}></App> - </AppContainer> - ); -} - -export function render(props) { - ReactDOM.render( - <TopLevelRender {...props} />, - document.querySelector("#__next") - ); -} - -export function renderError(e) { - ReactDOM.render( - <AppContainer> - <App Component={<div>UH OH!!!!</div>} pageProps={data.props}></App> - </AppContainer>, - document.querySelector("#__next") - ); -} - -globalThis.next = { - version: "11.1.0", - emitter, - render, - renderError, -}; |