aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--examples/hello-next/bun-framework-next/.npmignore2
-rw-r--r--examples/hello-next/bun-framework-next/client.development.tsx3
-rw-r--r--examples/hello-next/bun-framework-next/fallback.development.tsx82
-rw-r--r--examples/hello-next/bun-framework-next/index.js0
-rw-r--r--examples/hello-next/bun-framework-next/next-server.tsx0
-rw-r--r--examples/hello-next/bun-framework-next/package.json81
-rw-r--r--examples/hello-next/bun-framework-next/page-loader.ts147
-rw-r--r--examples/hello-next/bun-framework-next/render.tsx0
-rw-r--r--examples/hello-next/bun-framework-next/renderDocument.tsx722
-rw-r--r--examples/hello-next/bun-framework-next/route-loader.ts0
-rw-r--r--examples/hello-next/bun-framework-next/server.development.tsx79
-rw-r--r--examples/hello-next/bun-framework-next/server.production.tsx0
-rw-r--r--examples/hello-next/bun-framework-next/tsconfig.json21
-rw-r--r--examples/hello-next/package.json5
-rw-r--r--examples/hello-next/pages/errortest.tsx14
-rw-r--r--examples/hello-next/pages/index.tsx151
-rw-r--r--packages/bun-framework-next/bun-error.css (renamed from examples/hello-next/bun-framework-next/bun-error.css)0
-rw-r--r--packages/bun-framework-next/bun-error.tsx (renamed from examples/hello-next/bun-framework-next/bun-error.tsx)0
-rw-r--r--packages/bun-framework-next/bun-error/close.png (renamed from examples/hello-next/bun-framework-next/bun-error/close.png)bin757 -> 757 bytes
-rw-r--r--packages/bun-framework-next/bun-error/error.png (renamed from examples/hello-next/bun-framework-next/bun-error/error.png)bin717 -> 717 bytes
-rw-r--r--packages/bun-framework-next/bun-error/powered-by.png (renamed from examples/hello-next/bun-framework-next/bun-error/powered-by.png)bin2863 -> 2863 bytes
-rw-r--r--packages/bun-framework-next/bun-error/powered-by.webp (renamed from examples/hello-next/bun-framework-next/bun-error/powered-by.webp)bin1316 -> 1316 bytes
-rw-r--r--packages/bun-framework-next/bun-runtime-error.ts (renamed from examples/hello-next/bun-framework-next/bun-runtime-error.ts)0
23 files changed, 93 insertions, 1214 deletions
diff --git a/examples/hello-next/bun-framework-next/.npmignore b/examples/hello-next/bun-framework-next/.npmignore
deleted file mode 100644
index dc0954477..000000000
--- a/examples/hello-next/bun-framework-next/.npmignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.bun
-node_modules \ No newline at end of file
diff --git a/examples/hello-next/bun-framework-next/client.development.tsx b/examples/hello-next/bun-framework-next/client.development.tsx
index 0d019e175..f8fd054c3 100644
--- a/examples/hello-next/bun-framework-next/client.development.tsx
+++ b/examples/hello-next/bun-framework-next/client.development.tsx
@@ -1,7 +1,8 @@
-import "./bun-error";
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) {
diff --git a/examples/hello-next/bun-framework-next/fallback.development.tsx b/examples/hello-next/bun-framework-next/fallback.development.tsx
deleted file mode 100644
index 1cd5f847e..000000000
--- a/examples/hello-next/bun-framework-next/fallback.development.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-import { insertStyleSheet } from "./page-loader";
-import type {
- FallbackMessageContainer,
- FallbackStep,
-} from "../../../src/api/schema";
-
-var once = false;
-function insertGlobalStyleSheet(detail) {
- if (!once) {
- document.head.insertAdjacentHTML(
- "beforeend",
- `<meta name="next-head-count" content="${document.head.childElementCount}">`
- );
- once = true;
- }
- pageLoader.cssQueue.push(insertStyleSheet(detail).then(() => {}));
-}
-
-[...globalThis["__BUN"].allImportedStyles].map((detail) =>
- insertGlobalStyleSheet(detail)
-);
-
-document.addEventListener("onimportcss", insertGlobalStyleSheet, {
- passive: true,
-});
-
-import { renderError, _boot, pageLoader } from "./client.development";
-import { renderFallbackError } from "bun-error";
-
-function renderFallback({
- router,
- reason,
- problems,
-}: FallbackMessageContainer) {
- const route = router.routes[router.route];
-
- if (!document.getElementById("__next")) {
- const next = document.createElement("div");
- next.id = "__next";
- document.body.prepend(next);
- }
-
- document.removeEventListener("onimportcss", insertGlobalStyleSheet);
- document.addEventListener("onimportcss", pageLoader.onImportCSS, {
- passive: true,
- });
-
- globalThis.__NEXT_DATA__.pages["/_app"] = [
- ...globalThis.__NEXT_DATA__.pages["/_app"],
- ...globalThis["__BUN"].allImportedStyles,
- ];
-
- return import(route)
- .then((Namespace) => {
- return _boot(Namespace, true);
- })
- .then(() => {
- const cssQueue = pageLoader.cssQueue.slice();
- pageLoader.cssQueue = [];
- return Promise.all([...cssQueue]);
- })
- .finally(() => {
- document.body.style.visibility = "visible";
- document.removeEventListener("onimportcss", pageLoader.onImportCSS);
- });
-}
-
-export default function render(props: FallbackMessageContainer) {
- renderFallback(props).then(
- () => {
- Promise.all(pageLoader.cssQueue).finally(() => {
- renderFallbackError(props);
- document.body.style.visibility = "visible";
- });
- },
- (err) => {
- Promise.all(pageLoader.cssQueue).finally(() => {
- renderFallbackError(props);
- });
- }
- );
-}
diff --git a/examples/hello-next/bun-framework-next/index.js b/examples/hello-next/bun-framework-next/index.js
deleted file mode 100644
index e69de29bb..000000000
--- a/examples/hello-next/bun-framework-next/index.js
+++ /dev/null
diff --git a/examples/hello-next/bun-framework-next/next-server.tsx b/examples/hello-next/bun-framework-next/next-server.tsx
deleted file mode 100644
index e69de29bb..000000000
--- a/examples/hello-next/bun-framework-next/next-server.tsx
+++ /dev/null
diff --git a/examples/hello-next/bun-framework-next/package.json b/examples/hello-next/bun-framework-next/package.json
deleted file mode 100644
index af6286343..000000000
--- a/examples/hello-next/bun-framework-next/package.json
+++ /dev/null
@@ -1,81 +0,0 @@
-{
- "name": "bun-framework-next",
- "version": "0.0.0-18",
- "description": "",
- "framework": {
- "displayName": "Next.js",
- "static": "public",
- "assetPrefix": "_next/",
- "router": {
- "dir": [
- "pages",
- "src/pages"
- ],
- "extensions": [
- ".js",
- ".ts",
- ".tsx",
- ".jsx"
- ]
- },
- "css": "onimportcss",
- "development": {
- "client": "client.development.tsx",
- "fallback": "fallback.development.tsx",
- "server": "server.development.tsx",
- "css": "onimportcss",
- "define": {
- "client": {
- ".env": "NEXT_PUBLIC_",
- "defaults": {
- "process.env.__NEXT_TRAILING_SLASH": "false",
- "process.env.NODE_ENV": "\"development\"",
- "process.env.__NEXT_ROUTER_BASEPATH": "''",
- "process.env.__NEXT_SCROLL_RESTORATION": "false",
- "process.env.__NEXT_I18N_SUPPORT": "false",
- "process.env.__NEXT_HAS_REWRITES": "false",
- "process.env.__NEXT_ANALYTICS_ID": "null",
- "process.env.__NEXT_OPTIMIZE_CSS": "false",
- "process.env.__NEXT_CROSS_ORIGIN": "''",
- "process.env.__NEXT_STRICT_MODE": "false",
- "process.env.__NEXT_IMAGE_OPTS": "null"
- }
- },
- "server": {
- ".env": "NEXT_",
- "defaults": {
- "process.env.__NEXT_TRAILING_SLASH": "false",
- "process.env.__NEXT_OPTIMIZE_FONTS": "false",
- "process.env.NODE_ENV": "\"development\"",
- "process.env.__NEXT_OPTIMIZE_IMAGES": "false",
- "process.env.__NEXT_OPTIMIZE_CSS": "false",
- "process.env.__NEXT_ROUTER_BASEPATH": "''",
- "process.env.__NEXT_SCROLL_RESTORATION": "false",
- "process.env.__NEXT_I18N_SUPPORT": "false",
- "process.env.__NEXT_HAS_REWRITES": "false",
- "process.env.__NEXT_ANALYTICS_ID": "null",
- "process.env.__NEXT_CROSS_ORIGIN": "''",
- "process.env.__NEXT_STRICT_MODE": "false",
- "process.env.__NEXT_IMAGE_OPTS": "null",
- "global": "globalThis",
- "window": "undefined"
- }
- }
- }
- },
- "production": {
- "client": "client.production.tsx",
- "server": "server.production.tsx",
- "fallback": "fallback.production.tsx",
- "css": "onimportcss"
- }
- },
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "author": "",
- "license": "ISC",
- "dependencies": {
- "react-is": "^17.0.2"
- }
-}
diff --git a/examples/hello-next/bun-framework-next/page-loader.ts b/examples/hello-next/bun-framework-next/page-loader.ts
deleted file mode 100644
index fc07578db..000000000
--- a/examples/hello-next/bun-framework-next/page-loader.ts
+++ /dev/null
@@ -1,147 +0,0 @@
-import NextPageLoader from "next/dist/client/page-loader";
-import getAssetPathFromRoute from "next/dist/shared/lib/router/utils/get-asset-path-from-route";
-// import createRouteLoader from "./route-loader";
-
-export function insertStyleSheet(url: string) {
- if (document.querySelector(`link[href="${url}"]`)) {
- return Promise.resolve();
- }
-
- return new Promise((resolve, reject) => {
- const link = document.createElement("link");
- link.rel = "stylesheet";
-
- link.onload = () => resolve();
- link.onerror = () => reject();
-
- link.href = url;
-
- // if (headCount) {
- // document.head.insertBefore(headCount, link);
- // } else {
- document.head.appendChild(link);
- // }
- });
-}
-
-export default class PageLoader extends NextPageLoader {
- public routeLoader: RouteLoader;
-
- constructor(_, __, pages) {
- super(_, __);
-
- // TODO: assetPrefix?
- // this.routeLoader = {}; //createRouteLoader("");
-
- // Rewrite the pages object to omit the entry script
- // At this point, the entry point has been loaded so we don't want to do that again.
- for (let name in pages) {
- for (let i = 0; i < pages[name].length; i += 1) {
- const lastDot = pages[name][i].lastIndexOf(".");
- if (lastDot == -1) continue;
- if (
- pages[name][i].substring(lastDot - ".entry".length, lastDot) !==
- ".entry"
- )
- continue;
-
- pages[name][i] =
- pages[name][i].substring(0, lastDot - ".entry".length) +
- pages[name][i].substring(lastDot);
- }
- }
-
- this.pages = pages;
- this.pageList = Object.keys(this.pages);
- }
-
- pageList: string[];
- pages: Record<string, string[]>;
-
- getPageList() {
- return this.pageList;
- }
-
- cssQueue = [];
-
- onImportCSS = (event) => {
- this.cssQueue.push(
- insertStyleSheet(event.detail).then(
- () => {},
- () => {}
- )
- );
- };
-
- prefetch(route) {
- return Promise.resolve({});
- }
-
- async loadPage(route: string): Promise<GoodPageCache> {
- const assets =
- this.pages[route] || this.pages[getAssetPathFromRoute(route)];
-
- var src;
- console.log(getAssetPathFromRoute(route), assets);
- for (let asset of assets) {
- if (!asset.endsWith(".css")) {
- src = asset;
- break;
- }
- }
- console.assert(src, "Invalid or unknown route passed to loadPage");
-
- document.removeEventListener("onimportcss", this.onImportCSS);
- this.cssQueue.length = 0;
- document.addEventListener("onimportcss", this.onImportCSS, {
- passive: true,
- });
-
- try {
- const res = await import(src);
-
- if (this.cssQueue.length > 0) {
- await Promise.all(this.cssQueue);
- this.cssQueue.length = 0;
- }
-
- document.removeEventListener("onimportcss", this.onImportCSS);
-
- if (this.cssQueue.length > 0) {
- await Promise.all(this.cssQueue);
-
- this.cssQueue.length = 0;
- }
-
- return {
- page: res.default,
- mod: res,
- styleSheets: [],
- __N_SSG: false,
- __N_SSP: false,
- };
- } catch (exception) {
- console.error({ exception });
- }
-
- // return this.routeLoader.loadRoute(route).then((res) => {
- // debugger;
- // if ("component" in res) {
- // return {
- // page: res.component,
- // mod: res.exports,
- // styleSheets: res.styles.map((o) => ({
- // href: o.href,
- // text: o.content,
- // })),
- // };
- // }
- // throw res.error;
- // });
- }
-
- // not used in development!
- // prefetch(route: string): Promise<void> {
- // return this.routeLoader.prefetch(route);
- // }
-}
diff --git a/examples/hello-next/bun-framework-next/render.tsx b/examples/hello-next/bun-framework-next/render.tsx
deleted file mode 100644
index e69de29bb..000000000
--- a/examples/hello-next/bun-framework-next/render.tsx
+++ /dev/null
diff --git a/examples/hello-next/bun-framework-next/renderDocument.tsx b/examples/hello-next/bun-framework-next/renderDocument.tsx
deleted file mode 100644
index 356ff788b..000000000
--- a/examples/hello-next/bun-framework-next/renderDocument.tsx
+++ /dev/null
@@ -1,722 +0,0 @@
-import * as App from "next/app";
-import { AmpStateContext } from "next/dist/shared/lib/amp-context";
-import { HeadManagerContext } from "next/dist/shared/lib/head-manager-context";
-import Loadable from "next/dist/shared/lib/loadable";
-import { LoadableContext } from "next/dist/shared/lib/loadable-context";
-import { RouterContext } from "next/dist/shared/lib/router-context";
-import { NextRouter } from "next/dist/shared/lib/router/router";
-import {
- AppType,
- ComponentsEnhancer,
- DocumentInitialProps,
- DocumentProps,
- DocumentType,
- getDisplayName,
- loadGetInitialProps,
- NextComponentType,
- RenderPage,
- RenderPageResult,
- HtmlContext,
-} from "next/dist/shared/lib/utils";
-import * as NextDocument from "next/document";
-import * as ReactDOMServer from "react-dom/server.browser";
-import * as url from "url";
-import * as React from "react";
-import * as ReactIs from "react-is";
-import { BODY_RENDER_TARGET } from "next/constants";
-
-const dev = process.env.NODE_ENV === "development";
-
-type ParsedUrlQuery = Record<string, string | string[]>;
-
-const isJSFile = (file: string) =>
- file.endsWith(".js") ||
- file.endsWith(".jsx") ||
- file.endsWith(".mjs") ||
- file.endsWith(".ts") ||
- file.endsWith(".tsx");
-
-const notImplementedProxy = (base) =>
- new Proxy(
- {},
- {
- deleteProperty: function (target, prop) {
- return undefined;
- },
- enumerate: function (oTarget, sKey) {
- return [].entries();
- },
- ownKeys: function (oTarget, sKey) {
- return [].values();
- },
- has: function (oTarget, sKey) {
- return false;
- },
- defineProperty: function (oTarget, sKey, oDesc) {
- return undefined;
- },
- getOwnPropertyDescriptor: function (oTarget, sKey) {
- return undefined;
- },
- get(this, prop) {
- throw new ReferenceError(
- `${base} is not available for this environment.`
- );
- },
- set(this, prop, value) {
- throw new ReferenceError(
- `${base} is not available for this environment.`
- );
- },
- }
- );
-
-globalThis.fetch = (url, options) => {
- return Promise.reject(new Error(`fetch is not implemented yet. sorry!!`));
-};
-
-function getScripts(files: DocumentFiles) {
- const { context, props } = this;
- const {
- assetPrefix,
- buildManifest,
- isDevelopment,
- devOnlyCacheBusterQueryString,
- disableOptimizedLoading,
- } = context;
- const normalScripts = files.allFiles.filter(isJSFile);
- const lowPriorityScripts = buildManifest.lowPriorityFiles?.filter(isJSFile);
-
- return [...normalScripts, ...lowPriorityScripts].map((file) => {
- return (
- <script
- key={file}
- src={`${encodeURI(file)}${devOnlyCacheBusterQueryString}`}
- nonce={props.nonce}
- async
- crossOrigin={props.crossOrigin || process.env.__NEXT_CROSS_ORIGIN}
- type="module"
- />
- );
- });
-}
-
-// function fixLink(from: string) {
-// if (from.startsWith("/_next/http://") || from.startsWith("/_next/https://"))
-// return from.substring("/_next".length);
-// return from;
-// }
-
-// function cloneWithOverwrittenLink(element: React.ReactElement<any>) {
-// const props = { ...element.props };
-// if ("href" in element.props) {
-// props.href = fixLink(props.href);
-// }
-
-// if ("n-href" in element.props) {
-// props["n-href"] = fixLink(props["n-href"]);
-// }
-
-// if ("n-src" in element.props) {
-// props["n-src"] = fixLink(props["n-src"]);
-// }
-
-// if ("src" in element.props) {
-// props["src"] = fixLink(props.src);
-// }
-
-// return React.cloneElement(element, props);
-// }
-
-interface DomainLocale {
- defaultLocale: string;
- domain: string;
- http?: true;
- locales?: string[];
-}
-
-function renderDocument(
- Document: DocumentType,
- {
- buildManifest,
- docComponentsRendered,
- props,
- docProps,
- pathname,
- query,
- buildId,
- canonicalBase,
- assetPrefix,
- runtimeConfig,
- nextExport,
- autoExport,
- isFallback,
- dynamicImportsIds,
- dangerousAsPath,
- err,
- dev,
- ampPath,
- ampState,
- inAmpMode,
- hybridAmp,
- dynamicImports,
- headTags,
- gsp,
- gssp,
- customServer,
- gip,
- appGip,
- unstable_runtimeJS,
- unstable_JsPreload,
- devOnlyCacheBusterQueryString,
- scriptLoader,
- locale,
- locales,
- defaultLocale,
- domainLocales,
- isPreview,
- disableOptimizedLoading,
- }: RenderOpts & {
- props: any;
- docComponentsRendered: DocumentProps["docComponentsRendered"];
- docProps: DocumentInitialProps;
- pathname: string;
- query: ParsedUrlQuery;
- dangerousAsPath: string;
- ampState: any;
- ampPath: string;
- inAmpMode: boolean;
- hybridAmp: boolean;
- dynamicImportsIds: (string | number)[];
- dynamicImports: string[];
- headTags: any;
- isFallback?: boolean;
- gsp?: boolean;
- gssp?: boolean;
- customServer?: boolean;
- gip?: boolean;
- appGip?: boolean;
- devOnlyCacheBusterQueryString: string;
- scriptLoader: any;
- isPreview?: boolean;
- autoExport?: boolean;
- }
-): string {
- const htmlProps = {
- __NEXT_DATA__: {
- props, // The result of getInitialProps
- page: pathname, // The rendered page
- query, // querystring parsed / passed by the user
- buildId, // buildId is used to facilitate caching of page bundles, we send it to the client so that pageloader knows where to load bundles
- assetPrefix: assetPrefix === "" ? undefined : assetPrefix, // send assetPrefix to the client side when configured, otherwise don't sent in the resulting HTML
- runtimeConfig, // runtimeConfig if provided, otherwise don't sent in the resulting HTML
- nextExport, // If this is a page exported by `next export`
- autoExport, // If this is an auto exported page
- isFallback,
- dynamicIds:
- dynamicImportsIds.length === 0 ? undefined : dynamicImportsIds,
- err: err || undefined, // err: err ? serializeError(dev, err) : undefined, // Error if one happened, otherwise don't sent in the resulting HTML
- gsp, // whether the page is getStaticProps
- gssp, // whether the page is getServerSideProps
- customServer, // whether the user is using a custom server
- gip, // whether the page has getInitialProps
- appGip, // whether the _app has getInitialProps
- locale,
- locales,
- defaultLocale,
- domainLocales,
- isPreview,
-
- pages: buildManifest.pages,
- },
- buildManifest,
- docComponentsRendered,
- dangerousAsPath,
- canonicalBase,
- ampPath,
- inAmpMode,
- isDevelopment: !!dev,
- hybridAmp,
- dynamicImports,
- assetPrefix,
- headTags,
- unstable_runtimeJS,
- unstable_JsPreload,
- devOnlyCacheBusterQueryString,
- scriptLoader,
- locale,
- disableOptimizedLoading,
- ...docProps,
- };
- return (
- "<!DOCTYPE html>" +
- ReactDOMServer.renderToStaticMarkup(
- <AmpStateContext.Provider value={ampState}>
- <HtmlContext.Provider value={htmlProps}>
- <Document {...htmlProps} {...docProps}></Document>
- </HtmlContext.Provider>
- </AmpStateContext.Provider>
- )
- );
-}
-
-class ServerRouter implements NextRouter {
- route: string;
- pathname: string;
- query: ParsedUrlQuery;
- asPath: string;
- basePath: string;
- events: any;
- isFallback: boolean;
- locale?: string;
- isReady: boolean;
- locales?: string[];
- defaultLocale?: string;
- domainLocales?: DomainLocale[];
- isPreview: boolean;
- isLocaleDomain: boolean;
-
- constructor(
- pathname: string,
- query: ParsedUrlQuery,
- as: string,
- { isFallback }: { isFallback: boolean },
- isReady: boolean,
- basePath: string,
- locale?: string,
- locales?: string[],
- defaultLocale?: string,
- domainLocales?: DomainLocale[],
- isPreview?: boolean,
- isLocaleDomain?: boolean
- ) {
- this.route = pathname.replace(/\/$/, "") || "/";
- this.pathname = pathname;
- this.query = query;
- this.asPath = as;
- this.isFallback = isFallback;
- this.basePath = basePath;
- this.locale = locale;
- this.locales = locales;
- this.defaultLocale = defaultLocale;
- this.isReady = isReady;
- this.domainLocales = domainLocales;
- this.isPreview = !!isPreview;
- this.isLocaleDomain = !!isLocaleDomain;
- }
-
- push(): any {
- noRouter();
- }
- replace(): any {
- noRouter();
- }
- reload() {
- noRouter();
- }
- back() {
- noRouter();
- }
- prefetch(): any {
- noRouter();
- }
- beforePopState() {
- noRouter();
- }
-}
-
-function noRouter() {
- const message =
- 'No router instance found. you should only use "next/router" inside the client side of your app. https://nextjs.org/docs/messages/no-router-instance';
- throw new Error(message);
-}
-
-function enhanceComponents(
- options: ComponentsEnhancer,
- App: AppType,
- Component: NextComponentType
-): {
- App: AppType;
- Component: NextComponentType;
-} {
- // For backwards compatibility
- if (typeof options === "function") {
- return {
- App,
- Component: options(Component),
- };
- }
-
- return {
- App: options.enhanceApp ? options.enhanceApp(App) : App,
- Component: options.enhanceComponent
- ? options.enhanceComponent(Component)
- : Component,
- };
-}
-
-Object.defineProperty(NextDocument.Head.prototype, "getScripts", {
- get() {
- return getScripts;
- },
-});
-Object.defineProperty(NextDocument.NextScript.prototype, "getScripts", {
- get() {
- return getScripts;
- },
-});
-
-export async function render({
- route,
- PageNamespace,
- AppNamespace,
- appStylesheets = [],
- pageStylesheets = [],
- DocumentNamespace = null,
- buildId,
- routePaths = [],
-}: {
- buildId: number;
- route: any;
- PageNamespace: { default: NextComponentType<any> };
- AppNamespace: { default: NextComponentType<any> } | null;
- DocumentNamespace: Object | null;
- appStylesheets: string[];
- pageStylesheets: string[];
- routePaths: string[];
-}): Promise<Response> {
- const { default: Component, getStaticProps = null } = PageNamespace || {};
- const { default: AppComponent_ } = AppNamespace || {};
- var query = Object.assign({}, route.query);
-
- // These are reversed in our Router versus Next.js...mostly due to personal preference.
- const pathname = "/" + route.name;
- var asPath = route.pathname;
- const pages = {};
-
- for (let path of routePaths) {
- const filePath = path.substring(
- path.indexOf("_next/pages/") + "_next/pages".length
- );
- const name = filePath.substring(0, filePath.indexOf("."));
- pages[name] = [path];
- }
-
- pages[pathname] = [route.scriptSrc, ...pageStylesheets];
-
- if (appStylesheets.length > 0) {
- if (pages["/_app"]) {
- pages["/_app"].push(...appStylesheets);
- } else {
- pages["/_app"] = appStylesheets;
- }
- }
-
- const AppComponent = AppComponent_ || App.default;
- const Document =
- (DocumentNamespace && DocumentNamespace.default) || NextDocument.default;
- // Document.Html.prototype.getScripts = getScripts;
- // }
-
- const callMiddleware = async (method: string, args: any[], props = false) => {
- let results: any = props ? {} : [];
-
- if ((Document as any)[`${method}Middleware`]) {
- let middlewareFunc = await (Document as any)[`${method}Middleware`];
- middlewareFunc = middlewareFunc.default || middlewareFunc;
-
- const curResults = await middlewareFunc(...args);
- if (props) {
- for (const result of curResults) {
- results = {
- ...results,
- ...result,
- };
- }
- } else {
- results = curResults;
- }
- }
- return results;
- };
-
- const headTags = (...args: any) => callMiddleware("headTags", args);
-
- if (!ReactIs.isValidElementType(Component)) {
- const exportNames = Object.keys(PageNamespace || {});
-
- const reactComponents = exportNames.filter(ReactIs.isValidElementType);
- if (reactComponents.length > 2) {
- throw new Error(
- `\"export default\" missing in ${
- route.filePath
- }.\nTry exporting one of ${reactComponents.join(", ")}\n`
- );
- } else if (reactComponents.length === 2) {
- throw new Error(
- `\"export default\" missing in ${route.filePath}.\n\nTry exporting <${reactComponents[0]} /> or <${reactComponents[1]} />\n`
- );
- } else if (reactComponents.length == 1) {
- throw new Error(
- `\"export default\" missing in ${route.filePath}. Try adding this to the bottom of the file:\n\n export default ${reactComponents[0]};\n`
- );
- } else if (reactComponents.length == 0) {
- throw new Error(
- `\"export default\" missing in ${route.filePath}. Try exporting a React component.\n`
- );
- }
- }
-
- const isFallback = !!query.__nextFallback;
- delete query.__nextFallback;
- delete query.__nextLocale;
- delete query.__nextDefaultLocale;
-
- const isSSG = !!getStaticProps;
- const isBuildTimeSSG = isSSG && false;
- const defaultAppGetInitialProps =
- App.getInitialProps === (App as any).origGetInitialProps;
-
- const hasPageGetInitialProps = !!(Component as any).getInitialProps;
- const pageIsDynamic = route.kind === "dynamic";
- const isAutoExport = false;
-
- if (isAutoExport || isFallback) {
- // // remove query values except ones that will be set during export
- // query = {
- // ...(query.amp
- // ? {
- // amp: query.amp,
- // }
- // : {}),
- // };
- asPath = `${asPath}${
- // ensure trailing slash is present for non-dynamic auto-export pages
- asPath.endsWith("/") && asPath !== "/" && !pageIsDynamic ? "/" : ""
- }`;
- }
-
- let head: JSX.Element[] = [
- <meta charSet="utf-8" />,
- <meta name="viewport" content="width=device-width" />,
- ];
-
- const nextExport = isAutoExport || isFallback;
- const reactLoadableModules: string[] = [];
- var scriptLoader = {};
- const AppContainer = ({ children }: any) => (
- <RouterContext.Provider value={router}>
- {/* <AmpStateContext.Provider value={ampState}> */}
- <HeadManagerContext.Provider
- value={{
- updateHead: (state) => {
- head = state;
- },
- updateScripts: (scripts) => {
- scriptLoader = scripts;
- },
- scripts: {},
- mountedInstances: new Set(),
- }}
- >
- <LoadableContext.Provider
- value={(moduleName) => reactLoadableModules.push(moduleName)}
- >
- {children}
- </LoadableContext.Provider>
- </HeadManagerContext.Provider>
- {/* </AmpStateContext.Provider> */}
- </RouterContext.Provider>
- );
-
- await Loadable.preloadAll(); // Make sure all dynamic imports are loaded
-
- const router = new ServerRouter(
- pathname,
- query,
- asPath,
- {
- isFallback: isFallback,
- },
- true,
- Bun.origin,
- null,
- [], // renderOpts.locales,
- null, //renderOpts.defaultLocale,
- [], // renderOpts.domainLocales,
- false,
- false
- );
-
- const ctx = {
- err: null,
- req: undefined,
- res: undefined,
- pathname,
- query,
- asPath,
- locale: null,
- locales: [],
- defaultLocale: null,
- AppTree: (props: any) => {
- return (
- <AppContainer>
- <App {...props} Component={Component} router={router} />
- </AppContainer>
- );
- },
- };
-
- var props = await loadGetInitialProps(AppComponent, {
- AppTree: ctx.AppTree,
- Component,
- router,
- ctx,
- });
-
- // This isn't correct.
- // We don't call getServerSideProps on clients.
- const getServerSideProps = PageNamespace.getServerSideProps;
- if (typeof getServerSideProps === "function") {
- const result = await getServerSideProps({
- params: route.params,
- query: route.query,
- req: notImplementedProxy("req"),
- res: notImplementedProxy("res"),
- resolvedUrl: route.pathname,
- preview: false,
- previewData: null,
- locale: null,
- locales: [],
- defaultLocale: null,
- });
-
- if (result) {
- if ("props" in result) {
- if (typeof result.props === "object") {
- Object.assign(props, result.props);
- }
- }
- }
- }
-
- const renderToString = ReactDOMServer.renderToString;
- const ErrorDebug = null;
-
- const renderPage: RenderPage = (
- options: ComponentsEnhancer = {}
- ): RenderPageResult | Promise<RenderPageResult> => {
- if (ctx.err && ErrorDebug) {
- const htmlOrPromise = renderToString(<ErrorDebug error={ctx.err} />);
- return typeof htmlOrPromise === "string"
- ? { html: htmlOrPromise, head }
- : htmlOrPromise.then((html) => ({
- html,
- head,
- }));
- }
-
- if (dev && (props.router || props.Component)) {
- throw new Error(
- `'router' and 'Component' can not be returned in getInitialProps from _app.js https://nextjs.org/docs/messages/cant-override-next-props`
- );
- }
-
- const { App: EnhancedApp, Component: EnhancedComponent } =
- enhanceComponents(options, AppComponent, Component);
-
- const htmlOrPromise = renderToString(
- <AppContainer>
- <EnhancedApp Component={EnhancedComponent} router={router} {...props} />
- </AppContainer>
- );
- return typeof htmlOrPromise === "string"
- ? { html: htmlOrPromise, head }
- : htmlOrPromise.then((html) => ({
- html,
- head,
- }));
- };
-
- const documentCtx = { ...ctx, renderPage };
- const docProps: DocumentInitialProps = await loadGetInitialProps(
- Document,
- documentCtx
- );
-
- if (!docProps || typeof docProps.html !== "string") {
- const message = `"${getDisplayName(
- Document
- )}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`;
- throw new Error(message);
- }
-
- const renderOpts = {
- params: route.params,
- };
- // renderOpts.params = _params || params;
-
- // parsedUrl.pathname = denormalizePagePath(parsedUrl.pathname!);
- // renderOpts.resolvedUrl = formatUrl({
- // ...parsedUrl,
- // query: origQuery,
- // });
- const docComponentsRendered: DocumentProps["docComponentsRendered"] = {};
-
- const isPreview = false;
-
- let html = renderDocument(Document, {
- docComponentsRendered,
- ...renderOpts,
- disableOptimizedLoading: false,
- canonicalBase: Bun.origin,
- buildManifest: {
- devFiles: [],
- allFiles: [],
- polyfillFiles: [],
- lowPriorityFiles: [],
- pages: pages,
- },
- // Only enabled in production as development mode has features relying on HMR (style injection for example)
- unstable_runtimeJS: true,
- // process.env.NODE_ENV === "production"
- // ? pageConfig.unstable_runtimeJS
- // : undefined,
- // unstable_JsPreload: pageConfig.unstable_JsPreload,
- unstable_JsPreload: true,
- dangerousAsPath: router.asPath,
- ampState: undefined,
- props,
- assetPrefix: "",
- headTags: await headTags(documentCtx),
- isFallback,
- docProps,
- pathname,
- ampPath: undefined,
- query,
- inAmpMode: false,
- hybridAmp: undefined,
- dynamicImportsIds: [], // Array.from(dynamicImportsIds),
- dynamicImports: [], //Array.from(dynamicImports),
- gsp: !!getStaticProps ? true : undefined,
- gssp: !!getServerSideProps ? true : undefined,
- gip: hasPageGetInitialProps ? true : undefined,
- appGip: !defaultAppGetInitialProps ? true : undefined,
- devOnlyCacheBusterQueryString: "",
- scriptLoader,
- isPreview: isPreview === true ? true : undefined,
- autoExport: isAutoExport === true ? true : undefined,
- nextExport: nextExport === true ? true : undefined,
- });
- const bodyRenderIdx = html.indexOf(BODY_RENDER_TARGET);
- html =
- html.substring(0, bodyRenderIdx) +
- (false ? "<!-- __NEXT_DATA__ -->" : "") +
- docProps.html +
- html.substring(bodyRenderIdx + BODY_RENDER_TARGET.length);
- return new Response(
- html
- .replaceAll("/_next/http://", "http://")
- .replaceAll("/_next/https://", "https://")
- );
-}
diff --git a/examples/hello-next/bun-framework-next/route-loader.ts b/examples/hello-next/bun-framework-next/route-loader.ts
deleted file mode 100644
index e69de29bb..000000000
--- a/examples/hello-next/bun-framework-next/route-loader.ts
+++ /dev/null
diff --git a/examples/hello-next/bun-framework-next/server.development.tsx b/examples/hello-next/bun-framework-next/server.development.tsx
deleted file mode 100644
index e3cd24e01..000000000
--- a/examples/hello-next/bun-framework-next/server.development.tsx
+++ /dev/null
@@ -1,79 +0,0 @@
-import * as React from "react";
-import { Buffer } from "buffer";
-globalThis.Buffer = Buffer;
-
-class URL {
- constructor(base, source) {
- this.pathname = source;
- this.href = base + source;
- }
-}
-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);
-};
-globalThis.URL = URL;
-globalThis.global = globalThis;
-import { render } from "./renderDocument";
-
-let buildId = 0;
-
-var DocumentLoaded = false;
-var DocumentNamespace;
-
-import(Bun.routesDir + "_document").then(
- (doc) => {
- DocumentNamespace = doc;
- DocumentLoaded = true;
- },
- (err) => {
- if (err instanceof ResolveError) {
- DocumentLoaded = true;
- } else {
- console.error(err);
- }
- }
-);
-
-addEventListener("fetch", async (event: FetchEvent) => {
- var route = Bun.match(event);
-
- // This imports the currently matched route.
- const PageNamespace = await import(route.filePath);
-
- // This returns all .css files that were imported in the line above.
- // It's recursive, so any file that imports a CSS file will be included.
- const pageStylesheets = (Bun.getImportedStyles() as string[]).slice();
-
- var appRoute;
-
- try {
- appRoute = await import(Bun.routesDir + "_app");
- } catch (exception) {
- appRoute = null;
- }
- const appStylesheets = (Bun.getImportedStyles() as string[]).slice();
-
- event.respondWith(
- render({
- route,
- PageNamespace,
- appStylesheets,
- pageStylesheets,
- DocumentNamespace,
- AppNamespace: appRoute,
- buildId,
- routePaths: Bun.getRouteFiles(),
- })
- );
- buildId++;
-});
-
-// typescript isolated modules
-export {};
-
-declare var Bun: any;
diff --git a/examples/hello-next/bun-framework-next/server.production.tsx b/examples/hello-next/bun-framework-next/server.production.tsx
deleted file mode 100644
index e69de29bb..000000000
--- a/examples/hello-next/bun-framework-next/server.production.tsx
+++ /dev/null
diff --git a/examples/hello-next/bun-framework-next/tsconfig.json b/examples/hello-next/bun-framework-next/tsconfig.json
deleted file mode 100644
index d14767c9f..000000000
--- a/examples/hello-next/bun-framework-next/tsconfig.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "compilerOptions": {
- "target": "esnext",
- "lib": ["dom", "dom.iterable", "esnext", "WebWorker"],
- "allowJs": true,
- "skipLibCheck": true,
- "strict": false,
- "forceConsistentCasingInFileNames": true,
- "noEmit": true,
- "esModuleInterop": true,
- "module": "esnext",
- "moduleResolution": "Node",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "jsx": "preserve",
- "baseUrl": ".",
- "paths": {}
- },
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
- "exclude": ["node_modules"]
-}
diff --git a/examples/hello-next/package.json b/examples/hello-next/package.json
index 1ce5e4982..e49602501 100644
--- a/examples/hello-next/package.json
+++ b/examples/hello-next/package.json
@@ -4,6 +4,9 @@
"main": "index.js",
"license": "MIT",
"dependencies": {
+ "@jarred/react-static-tweets": "0.5.8",
+ "@jarred/static-tweets": "^0.5.8",
+ "date-fns": "^2.23.0",
"isomorphic-fetch": "^3.0.0",
"next": "^11.1.0",
"parcel": "2.0.0-rc.0",
@@ -11,8 +14,6 @@
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-is": "^17.0.2",
- "react-static-tweets": "^0.5.4",
- "static-tweets": "^0.5.5",
"whatwg-url": "^9.1.0"
},
"devDependencies": {
diff --git a/examples/hello-next/pages/errortest.tsx b/examples/hello-next/pages/errortest.tsx
deleted file mode 100644
index 49a293df7..000000000
--- a/examples/hello-next/pages/errortest.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import IndexPage from "pages/index";
-
-export default function ErrorTestPage() {
- class Wow {}
-
- const ladee = "",
- foo = { bar: { boom: new Wow() } };
-
- if (typeof window === "undefined") {
- const Doge = import("wow/such-esm/very-import");
- }
-
- return <IndexPage />;
-}
diff --git a/examples/hello-next/pages/index.tsx b/examples/hello-next/pages/index.tsx
index 7a2eb9f64..52b8f1f1f 100644
--- a/examples/hello-next/pages/index.tsx
+++ b/examples/hello-next/pages/index.tsx
@@ -1,80 +1,105 @@
import Head from "next/head";
-import Image from "next/image";
-import styles from "../styles/Home.module.css";
import Link from "next/link";
import { useRouter } from "next/router";
-import Title, { TitleEnum } from "../components/Title";
import React from "react";
+import {
+ Tweet,
+ TwitterContextProvider,
+} from "@jarred/react-static-tweets/src/index";
+import "@jarred/react-static-tweets/styles.css";
+import { fetchTweetAst } from "@jarred/static-tweets/src/fetchTweetAst";
+import { SWRConfig } from "swr";
+import styles from "../styles/Home.module.css";
-export default function Home({}) {
- const router = useRouter();
+export async function getStaticProps(ctx) {
+ return {
+ props: {
+ tweetAst: await fetchTweetAst("1390084458724741121"),
+ },
+ };
+}
+export default function Home({ tweetAst }) {
return (
- <div className={styles.container}>
- <Head>
- <title>Fo</title>
- <meta name="description" content="Generated by create next app" />
- <link rel="icon" href="/favicon.ico" />
- </Head>
+ <SWRConfig value={{ fallback: { [tweetAst[0].data.id]: tweetAst } }}>
+ <TwitterContextProvider
+ value={{
+ tweetAstMap: { [tweetAst[0].data.id]: tweetAst },
+ }}
+ >
+ <div className={styles.container}>
+ <Head>
+ <title>Fo</title>
+ <meta name="description" content="Generated by create next app" />
+ <link rel="icon" href="/favicon.ico" />
+ </Head>
- <main className={styles.main}>
- <h1 className={styles.title}>
- Welcome to <a href="https://nextjs.org">Next.js!</a>
- </h1>
+ <main className={styles.main}>
+
+ {/* <h1 className={styles.title}>
+ Welcome to <a href="https://nextjs.org">Next.js!</a>
+ </h1>
- <p className={styles.description}>
- Get started by editing{" "}
- <code className={styles.code}>pages/index.js</code>
- </p>
+ <p className={styles.description}>
+ Get started by editing{" "}
+ <code className={styles.code}>pages/index.js</code>
+ </p>
- <div className={styles.grid}>
- <Link href="/second">
- <div className={styles.card}>
- <h2>Second Page &rarr;</h2>
- <p>Link</p>
- </div>
- </Link>
+ <div className={styles.grid}>
+ <Link href="/second">
+ <div className={styles.card}>
+ <h2>Second Page &rarr;</h2>
+ <p>Link</p>
+ </div>
+ </Link>
- <a
- onClick={() => router.push("/foo/bar/third")}
- className={styles.card}
- >
- <h2>Third Page &rarr;</h2>
- <p>button, router.push()</p>
- </a>
+ <a
+ onClick={() => router.push("/foo/bar/third")}
+ className={styles.card}
+ >
+ <h2>Third Page &rarr;</h2>
+ <p>button, router.push()</p>
+ </a>
- <a
- href="https://github.com/vercel/next.js/tree/master/examples"
- className={styles.card}
- >
- <h2>Examples &rarr;</h2>
- <p>Discover and deploy boilerplate example Next.js projects.</p>
- </a>
+ <a
+ href="https://github.com/vercel/next.js/tree/master/examples"
+ className={styles.card}
+ >
+ <h2>Examples &rarr;</h2>
+ <p>Discover and deploy boilerplate example Next.js projects.</p>
+ </a>
- <a
- href="https://vercel.com/new?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
- className={styles.card}
- >
- <h2>Deploy &rarr;</h2>
- <p>
- Instantly deploy your Next.js site to a public URL with Vercel.
- </p>
- </a>
+ <a
+ href="https://vercel.com/new?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
+ className={styles.card}
+ >
+ <h2>Deploy &rarr;</h2>
+ <p>
+ Instantly deploy your Next.js site to a public URL with
+ Vercel.
+ </p>
+ </a>
+ </div> */}
+ </main>
+
+ {/* <footer className={styles.footer}>
+ <a
+ href="https://vercel.com?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
+ target="_blank"
+ rel="noopener noreferrer"
+ >
+ Powered by{" "}
+ <span className={styles.logo}>
+ <img
+ src="/vercel.svg"
+ alt="Vercel Logo"
+ width={72}
+ height={16}
+ />
+ </span>
+ </a>
+ </footer> */}
</div>
- </main>
- <footer className={styles.footer}>
- <a
- href="https://vercel.com?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
- target="_blank"
- rel="noopener noreferrer"
- >
- Powered by{" "}
- <span className={styles.logo}>
- <img src="/vercel.svg" alt="Vercel Logo" width={72} height={16} />
- </span>
- </a>
- </footer>
- </div>
);
}
diff --git a/examples/hello-next/bun-framework-next/bun-error.css b/packages/bun-framework-next/bun-error.css
index c5ed9881b..c5ed9881b 100644
--- a/examples/hello-next/bun-framework-next/bun-error.css
+++ b/packages/bun-framework-next/bun-error.css
diff --git a/examples/hello-next/bun-framework-next/bun-error.tsx b/packages/bun-framework-next/bun-error.tsx
index 5d57dd0ea..5d57dd0ea 100644
--- a/examples/hello-next/bun-framework-next/bun-error.tsx
+++ b/packages/bun-framework-next/bun-error.tsx
diff --git a/examples/hello-next/bun-framework-next/bun-error/close.png b/packages/bun-framework-next/bun-error/close.png
index 11e513a1b..11e513a1b 100644
--- a/examples/hello-next/bun-framework-next/bun-error/close.png
+++ b/packages/bun-framework-next/bun-error/close.png
Binary files differ
diff --git a/examples/hello-next/bun-framework-next/bun-error/error.png b/packages/bun-framework-next/bun-error/error.png
index c35e01a2b..c35e01a2b 100644
--- a/examples/hello-next/bun-framework-next/bun-error/error.png
+++ b/packages/bun-framework-next/bun-error/error.png
Binary files differ
diff --git a/examples/hello-next/bun-framework-next/bun-error/powered-by.png b/packages/bun-framework-next/bun-error/powered-by.png
index 7e71f1357..7e71f1357 100644
--- a/examples/hello-next/bun-framework-next/bun-error/powered-by.png
+++ b/packages/bun-framework-next/bun-error/powered-by.png
Binary files differ
diff --git a/examples/hello-next/bun-framework-next/bun-error/powered-by.webp b/packages/bun-framework-next/bun-error/powered-by.webp
index 0f48488ea..0f48488ea 100644
--- a/examples/hello-next/bun-framework-next/bun-error/powered-by.webp
+++ b/packages/bun-framework-next/bun-error/powered-by.webp
Binary files differ
diff --git a/examples/hello-next/bun-framework-next/bun-runtime-error.ts b/packages/bun-framework-next/bun-runtime-error.ts
index 331040b36..331040b36 100644
--- a/examples/hello-next/bun-framework-next/bun-runtime-error.ts
+++ b/packages/bun-framework-next/bun-runtime-error.ts