From 65eee5171602946a1dff32cfcad035f647ad9b36 Mon Sep 17 00:00:00 2001 From: Nikhil Saraf Date: Thu, 15 Sep 2022 22:29:59 -0700 Subject: [PATCH] fix things for new vite hashing behaviour --- .prettierrc | 2 +- packages/start/data/createRouteData.tsx | 2 +- packages/start/data/{index.tsx => index.ts} | 0 packages/start/index.tsx | 62 +--------------- packages/start/package.json | 4 +- packages/start/router.tsx | 62 ++++++++++++++++ packages/start/vite/plugin.js | 80 +++++++++++++++++---- 7 files changed, 135 insertions(+), 77 deletions(-) rename packages/start/data/{index.tsx => index.ts} (100%) create mode 100644 packages/start/router.tsx diff --git a/.prettierrc b/.prettierrc index 00441c4..6aeb7ea 100644 --- a/.prettierrc +++ b/.prettierrc @@ -5,4 +5,4 @@ "singleQuote": false, "arrowParens": "avoid", "printWidth": 100 -} \ No newline at end of file +} diff --git a/packages/start/data/createRouteData.tsx b/packages/start/data/createRouteData.tsx index 185e703..e46b518 100644 --- a/packages/start/data/createRouteData.tsx +++ b/packages/start/data/createRouteData.tsx @@ -10,7 +10,7 @@ import { import type { ReconcileOptions } from "solid-js/store"; import { createStore, reconcile, unwrap } from "solid-js/store"; import { isServer } from "solid-js/web"; -import { useNavigate } from "../index"; +import { useNavigate } from "../router"; import { isRedirectResponse, LocationHeader } from "../server/responses"; import { ServerContext } from "../server/ServerContext"; import { FETCH_EVENT, ServerFunctionEvent } from "../server/types"; diff --git a/packages/start/data/index.tsx b/packages/start/data/index.ts similarity index 100% rename from packages/start/data/index.tsx rename to packages/start/data/index.ts diff --git a/packages/start/index.tsx b/packages/start/index.tsx index 7163a9a..c74975b 100644 --- a/packages/start/index.tsx +++ b/packages/start/index.tsx @@ -20,6 +20,7 @@ export type { FormAction, FormMethod, FormProps, SubmitOptions } from "./data"; export { default, ErrorBoundary } from "./error-boundary"; export { island as unstable_island } from "./islands"; export { Body, FileRoutes, Head, Html, Scripts } from "./root"; +export * from "./router"; export { ServerContext } from "./server/ServerContext"; export type { FetchEvent, PageEvent, ServerFunctionEvent } from "./server/types"; export { @@ -32,65 +33,4 @@ export { type CookieParseOptions, type CookieSerializeOptions } from "./session"; -import type { Accessor } from "solid-js"; import "./types"; - -import { - Location, Navigator, Outlet as BaseOutlet, - Routes as BaseRoutes, - useLocation as useBaseLocation, - useNavigate as useBaseNavigate -} from "@solidjs/router"; -import { isServer } from "solid-js/web"; -import { Outlet as IslandsOutlet } from "./islands/server-router"; - -export function Routes(props) { - if (import.meta.env.START_ISLANDS_ROUTER) { - return ( - - {props.children} - - ); - } - return {props.children}; -} - -export function Outlet(props) { - if (import.meta.env.START_ISLANDS_ROUTER) { - return ( - - - - ); - } - - return ; -} - -declare global { - interface Window { - LOCATION: Accessor; - NAVIGATE: Navigator; - } -} - -export function useLocation() { - if (import.meta.env.START_ISLANDS_ROUTER && !isServer) { - return { - get pathname() { - let location = window.LOCATION(); - return location.pathname; - } - }; - } else { - return /*#__PURE__*/ useBaseLocation(); - } -} - -export function useNavigate() { - if (import.meta.env.START_ISLANDS_ROUTER && !isServer) { - return ((to, props) => window.NAVIGATE(to, props)) as unknown as Navigator; - } else { - return /*#__PURE__*/ useBaseNavigate(); - } -} diff --git a/packages/start/package.json b/packages/start/package.json index c389916..53e7d87 100644 --- a/packages/start/package.json +++ b/packages/start/package.json @@ -29,11 +29,13 @@ "websocket", "bin.cjs", "index.tsx", + "router.tsx", "required-user-files.d.ts", "types.ts" ], "exports": { ".": "./index.tsx", + "./router": "./router.tsx", "./vite": { "types": "./vite/plugin.d.ts", "import": "./vite/plugin.js" @@ -51,7 +53,7 @@ "./islands/*": "./islands/*", "./root": "./root/index.tsx", "./root/*": "./root/*", - "./data": "./data/index.tsx", + "./data": "./data/index.ts", "./data/*": "./data/*", "./node/*": "./node/*", "./fs-router/*": "./fs-router/*", diff --git a/packages/start/router.tsx b/packages/start/router.tsx new file mode 100644 index 0000000..78a0e70 --- /dev/null +++ b/packages/start/router.tsx @@ -0,0 +1,62 @@ +import { + Location, + Navigator, + Outlet as BaseOutlet, + Routes as BaseRoutes, + useLocation as useBaseLocation, + useNavigate as useBaseNavigate +} from "@solidjs/router"; +import { Accessor } from "solid-js"; +import { isServer } from "solid-js/web"; +import { Outlet as IslandsOutlet } from "./islands/server-router"; + +export function Routes(props) { + if (import.meta.env.START_ISLANDS_ROUTER) { + return ( + + {props.children} + + ); + } + return {props.children}; +} + +export function Outlet(props) { + if (import.meta.env.START_ISLANDS_ROUTER) { + return ( + + + + ); + } + + return ; +} + +declare global { + interface Window { + LOCATION: Accessor; + NAVIGATE: Navigator; + } +} + +export function useLocation() { + if (import.meta.env.START_ISLANDS_ROUTER && !isServer) { + return { + get pathname() { + let location = window.LOCATION(); + return location.pathname; + } + }; + } else { + return /*#__PURE__*/ useBaseLocation(); + } +} + +export function useNavigate() { + if (import.meta.env.START_ISLANDS_ROUTER && !isServer) { + return ((to, props) => window.NAVIGATE(to, props)) as unknown as Navigator; + } else { + return /*#__PURE__*/ useBaseNavigate(); + } +} diff --git a/packages/start/vite/plugin.js b/packages/start/vite/plugin.js index f61fc1b..186ecb3 100644 --- a/packages/start/vite/plugin.js +++ b/packages/start/vite/plugin.js @@ -3,7 +3,7 @@ import debug from "debug"; import fs, { existsSync } from "fs"; import path, { dirname, join } from "path"; import c from "picocolors"; -import { fileURLToPath } from "url"; +import { fileURLToPath, pathToFileURL } from "url"; import { loadEnv, normalizePath } from "vite"; import solid from "vite-plugin-solid"; import printUrls from "../dev/print-routes.js"; @@ -159,6 +159,10 @@ function solidStartFileSystemRouter(options) { const isSsr = transformOptions === null || transformOptions === void 0 ? void 0 : transformOptions.ssr; + const url = pathToFileURL(id); + url.searchParams.delete("v"); + id = fileURLToPath(url); + const babelOptions = fn => (...args) => { @@ -187,11 +191,19 @@ function solidStartFileSystemRouter(options) { plugins: [ [ routeResource, - { ssr, root: process.cwd(), minify: process.env.NODE_ENV === "production" } + { + ssr, + root: process.cwd(), + minify: process.env.NODE_ENV === "production" + } ], [ babelServerModule, - { ssr, root: process.cwd(), minify: process.env.NODE_ENV === "production" } + { + ssr, + root: process.cwd(), + minify: process.env.NODE_ENV === "production" + } ] ] })); @@ -205,11 +217,19 @@ function solidStartFileSystemRouter(options) { plugins: [ [ routeResource, - { ssr, root: process.cwd(), minify: process.env.NODE_ENV === "production" } + { + ssr, + root: process.cwd(), + minify: process.env.NODE_ENV === "production" + } ], [ babelServerModule, - { ssr, root: process.cwd(), minify: process.env.NODE_ENV === "production" } + { + ssr, + root: process.cwd(), + minify: process.env.NODE_ENV === "production" + } ] ] }) @@ -222,15 +242,27 @@ function solidStartFileSystemRouter(options) { plugins: [ [ routeResource, - { ssr, root: process.cwd(), minify: process.env.NODE_ENV === "production" } + { + ssr, + root: process.cwd(), + minify: process.env.NODE_ENV === "production" + } ], [ babelServerModule, - { ssr, root: process.cwd(), minify: process.env.NODE_ENV === "production" } + { + ssr, + root: process.cwd(), + minify: process.env.NODE_ENV === "production" + } ], [ routeData, - { ssr, root: process.cwd(), minify: process.env.NODE_ENV === "production" } + { + ssr, + root: process.cwd(), + minify: process.env.NODE_ENV === "production" + } ], !ssr && process.env.NODE_ENV !== "production" && [ @@ -257,7 +289,11 @@ function solidStartFileSystemRouter(options) { ], [ babelServerModule, - { ssr, root: process.cwd(), minify: process.env.NODE_ENV === "production" } + { + ssr, + root: process.cwd(), + minify: process.env.NODE_ENV === "production" + } ], [ routeData, @@ -279,7 +315,11 @@ function solidStartFileSystemRouter(options) { plugins: [ [ babelServerModule, - { ssr, root: process.cwd(), minify: process.env.NODE_ENV === "production" } + { + ssr, + root: process.cwd(), + minify: process.env.NODE_ENV === "production" + } ] ].filter(Boolean) }) @@ -428,6 +468,7 @@ function solidStartConfig(options) { ssr: { noExternal: ["@solidjs/router", "@solidjs/meta", "solid-start"] }, + define: { // handles use of process.env.TEST_ENV in solid-start internal code "process.env.TEST_ENV": JSON.stringify(process.env.TEST_ENV), @@ -449,6 +490,9 @@ function solidStartConfig(options) { : options.adapter && options.adapter.name ) }, + optimizeDeps: { + exclude: ["solid-start", "@solidjs/router", "@solidjs/meta"] + }, solidOptions: options }; } @@ -474,7 +518,9 @@ function detectAdapter() { fs.readdirSync(nodeModulesPath).forEach(dir => { if (dir.startsWith("solid-start-")) { const pkg = JSON.parse( - fs.readFileSync(path.join(nodeModulesPath, dir, "package.json"), { encoding: "utf8" }) + fs.readFileSync(path.join(nodeModulesPath, dir, "package.json"), { + encoding: "utf8" + }) ); if (pkg.solid && pkg.solid.type === "adapter") { adapters.push(dir); @@ -561,11 +607,19 @@ export default function solidStart(options) { plugins: [ [ routeResource, - { ssr, root: process.cwd(), minify: process.env.NODE_ENV === "production" } + { + ssr, + root: process.cwd(), + minify: process.env.NODE_ENV === "production" + } ], [ babelServerModule, - { ssr, root: process.cwd(), minify: process.env.NODE_ENV === "production" } + { + ssr, + root: process.cwd(), + minify: process.env.NODE_ENV === "production" + } ] ] })