solid-start: Typescript `tsc` can not exclude `node_modules/solid-start/`

When running the tsc command at a new created project root, I got the following error messages. Even I have already added "skipLibCheck": true and "exclude": ["node_modules"] to tsconfig.json. Is it something with "types": ["vite/client"] ?

...

Found 5 errors in 4 files.

Errors  Files
     2  node_modules/solid-start/entry-client/StartClient.tsx:3
     1  node_modules/solid-start/entry-server/StartServer.tsx:5
     1  node_modules/solid-start/islands/server-router.tsx:126
     1  node_modules/solid-start/types.ts:14

New project created via:

npm init solid@next
✔ Which template do you want to use? › bare
✔ Server Side Rendering? … yes
✔ Use TypeScript? … yes

version: v0.1.0-alpha.99

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Reactions: 11
  • Comments: 20 (9 by maintainers)

Most upvoted comments

Unfortunately, there are still some JS parts of solid-start that need to be converted before we can switch to full strict.

My workaround is to use https://www.npmjs.com/package/tsc-silent:

tsc-silent -p tsconfig.json --suppress @/node_modules/solid-start/

I think #1228 (which is talking about the way - creating the .d.ts instead of exposing .ts - to solve this issue) could be a new place for talking about this.

@ryansolid this issue should be re-opened

I’m currently working around this with https://www.npmjs.com/package/patch-package. This is my current patches/solid-start+0.2.6.patch file:

diff --git a/node_modules/solid-start/api/index.ts b/node_modules/solid-start/api/index.ts
index 0bf7898..b61d0de 100644
--- a/node_modules/solid-start/api/index.ts
+++ b/node_modules/solid-start/api/index.ts
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import { registerApiRoutes } from "./internalFetch";
 import { getRouteMatches } from "./router";
 import { MatchRoute, Method, Route } from "./types";
diff --git a/node_modules/solid-start/api/middleware.ts b/node_modules/solid-start/api/middleware.ts
index b9d01fc..787f8c0 100644
--- a/node_modules/solid-start/api/middleware.ts
+++ b/node_modules/solid-start/api/middleware.ts
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import { Middleware } from "../entry-server";
 import { FetchEvent, FETCH_EVENT } from "../server/types";
 import { getApiHandler } from "./index";
diff --git a/node_modules/solid-start/api/router.ts b/node_modules/solid-start/api/router.ts
index cc4eb7a..cbfdf6a 100644
--- a/node_modules/solid-start/api/router.ts
+++ b/node_modules/solid-start/api/router.ts
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import { MatchRoute, Method } from "./types";
 
 export function getRouteMatches(routes: MatchRoute[], path: string, method: Method) {
diff --git a/node_modules/solid-start/api/types.ts b/node_modules/solid-start/api/types.ts
index f0b94e2..a5ddba2 100644
--- a/node_modules/solid-start/api/types.ts
+++ b/node_modules/solid-start/api/types.ts
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import { FetchEvent, FETCH_EVENT } from "../server/types";
 
 export interface APIEvent extends FetchEvent {
diff --git a/node_modules/solid-start/data/Form.tsx b/node_modules/solid-start/data/Form.tsx
index 3f2a5b8..8744543 100644
--- a/node_modules/solid-start/data/Form.tsx
+++ b/node_modules/solid-start/data/Form.tsx
@@ -1,3 +1,4 @@
+// @ts-nocheck
 /*!
  * Original code by Remix Sofware Inc
  * MIT Licensed, Copyright(c) 2021 Remix software Inc, see LICENSE.remix.md for details
diff --git a/node_modules/solid-start/data/FormError.tsx b/node_modules/solid-start/data/FormError.tsx
index f0c79c3..2f34ed1 100644
--- a/node_modules/solid-start/data/FormError.tsx
+++ b/node_modules/solid-start/data/FormError.tsx
@@ -1,3 +1,4 @@
+// @ts-nocheck
 export class ServerError extends Error {
   status: number;
   constructor(message: string, { status, stack }: { status?: number; stack?: string } = {}) {
diff --git a/node_modules/solid-start/data/createRouteAction.tsx b/node_modules/solid-start/data/createRouteAction.tsx
index c9001c5..ff081e2 100644
--- a/node_modules/solid-start/data/createRouteAction.tsx
+++ b/node_modules/solid-start/data/createRouteAction.tsx
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import { useNavigate, useSearchParams, type Navigator } from "@solidjs/router";
 import { $TRACK, batch, createSignal, useContext } from "solid-js";
 import { FormError, FormImpl, FormProps } from "./Form";
diff --git a/node_modules/solid-start/entry-client/StartClient.tsx b/node_modules/solid-start/entry-client/StartClient.tsx
index 9cb76d2..77a544a 100644
--- a/node_modules/solid-start/entry-client/StartClient.tsx
+++ b/node_modules/solid-start/entry-client/StartClient.tsx
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import { MetaProvider } from "@solidjs/meta";
 import { Router, RouterProps } from "@solidjs/router";
 import Root from "~start/root";
diff --git a/node_modules/solid-start/entry-client/mount.tsx b/node_modules/solid-start/entry-client/mount.tsx
index 34df65e..9fb30b0 100644
--- a/node_modules/solid-start/entry-client/mount.tsx
+++ b/node_modules/solid-start/entry-client/mount.tsx
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import type { JSX } from "solid-js";
 import { getOwner } from "solid-js";
 import { createComponent, getNextElement, hydrate, render } from "solid-js/web";
diff --git a/node_modules/solid-start/entry-server/StartServer.tsx b/node_modules/solid-start/entry-server/StartServer.tsx
index fc20600..8f60620 100644
--- a/node_modules/solid-start/entry-server/StartServer.tsx
+++ b/node_modules/solid-start/entry-server/StartServer.tsx
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import { MetaProvider } from "@solidjs/meta";
 import { RouteDataFunc, Router, RouterProps } from "@solidjs/router";
 import { ComponentProps, sharedConfig } from "solid-js";
diff --git a/node_modules/solid-start/entry-server/render.ts b/node_modules/solid-start/entry-server/render.ts
index 6ede4ac..45577da 100644
--- a/node_modules/solid-start/entry-server/render.ts
+++ b/node_modules/solid-start/entry-server/render.ts
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import { JSX } from "solid-js";
 import { renderToStream, renderToString, renderToStringAsync } from "solid-js/web";
 import { internalFetch } from "../api/internalFetch";
diff --git a/node_modules/solid-start/index.tsx b/node_modules/solid-start/index.tsx
index 74f088b..f73a665 100644
--- a/node_modules/solid-start/index.tsx
+++ b/node_modules/solid-start/index.tsx
@@ -1,3 +1,4 @@
+// @ts-nocheck
 export { Link, Meta, Style, Stylesheet, Title } from "@solidjs/meta";
 export {
   Navigate,
diff --git a/node_modules/solid-start/islands/index.tsx b/node_modules/solid-start/islands/index.tsx
index 5b8ff20..60ce9f9 100644
--- a/node_modules/solid-start/islands/index.tsx
+++ b/node_modules/solid-start/islands/index.tsx
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import { Component, ComponentProps, lazy, splitProps, useContext } from "solid-js";
 import { Hydration, NoHydration } from "solid-js/web";
 import { ServerContext } from "../server/ServerContext";
diff --git a/node_modules/solid-start/islands/router.ts b/node_modules/solid-start/islands/router.ts
index d9618a5..ec9b156 100644
--- a/node_modules/solid-start/islands/router.ts
+++ b/node_modules/solid-start/islands/router.ts
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import type { Location, Navigator } from "@solidjs/router";
 import { createSignal } from "solid-js";
 interface LocationEntry {
diff --git a/node_modules/solid-start/islands/server-router.tsx b/node_modules/solid-start/islands/server-router.tsx
index a778780..9b6e8f8 100644
--- a/node_modules/solid-start/islands/server-router.tsx
+++ b/node_modules/solid-start/islands/server-router.tsx
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import { createContext, JSX, useContext } from "solid-js";
 import { ssr } from "solid-js/web";
 export interface RouteDefinition {
diff --git a/node_modules/solid-start/root/Document.tsx b/node_modules/solid-start/root/Document.tsx
index 19a9f0a..f3e3a0f 100644
--- a/node_modules/solid-start/root/Document.tsx
+++ b/node_modules/solid-start/root/Document.tsx
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import type { JSX } from "solid-js";
 import { children, ComponentProps } from "solid-js";
 import { insert, NoHydration, spread, ssrElement } from "solid-js/web";
diff --git a/node_modules/solid-start/root/InlineStyles.tsx b/node_modules/solid-start/root/InlineStyles.tsx
index d215c4b..83114ab 100644
--- a/node_modules/solid-start/root/InlineStyles.tsx
+++ b/node_modules/solid-start/root/InlineStyles.tsx
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import { Style } from "@solidjs/meta";
 import { createResource, Show, Suspense, useContext } from "solid-js";
 import type { PageEvent } from "../server";
diff --git a/node_modules/solid-start/root/Links.tsx b/node_modules/solid-start/root/Links.tsx
index 04708cc..c4c121d 100644
--- a/node_modules/solid-start/root/Links.tsx
+++ b/node_modules/solid-start/root/Links.tsx
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import { JSXElement, useContext } from "solid-js";
 import { useAssets } from "solid-js/web";
 import { ServerContext } from "../server/ServerContext";
diff --git a/node_modules/solid-start/root/Scripts.tsx b/node_modules/solid-start/root/Scripts.tsx
index ea6dae4..e4d41bd 100644
--- a/node_modules/solid-start/root/Scripts.tsx
+++ b/node_modules/solid-start/root/Scripts.tsx
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import { useContext } from "solid-js";
 import { HydrationScript, isServer, NoHydration } from "solid-js/web";
 import { ServerContext } from "../server/ServerContext";
diff --git a/node_modules/solid-start/router.tsx b/node_modules/solid-start/router.tsx
index 56ba963..c6cb446 100644
--- a/node_modules/solid-start/router.tsx
+++ b/node_modules/solid-start/router.tsx
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import {
   A as BaseA,
   Location,
diff --git a/node_modules/solid-start/server/ServerContext.tsx b/node_modules/solid-start/server/ServerContext.tsx
index 006547d..02a89a8 100644
--- a/node_modules/solid-start/server/ServerContext.tsx
+++ b/node_modules/solid-start/server/ServerContext.tsx
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import { PageEvent } from "./types";
 
 import { createContext, useContext } from "solid-js";
diff --git a/node_modules/solid-start/server/middleware.ts b/node_modules/solid-start/server/middleware.ts
index 3384200..447129e 100644
--- a/node_modules/solid-start/server/middleware.ts
+++ b/node_modules/solid-start/server/middleware.ts
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import { internalFetch } from "../api/internalFetch";
 import { Middleware as ServerMiddleware } from "../entry-server/StartServer";
 import { ContentTypeHeader, XSolidStartContentTypeHeader, XSolidStartOrigin } from "./responses";
diff --git a/node_modules/solid-start/server/responses.ts b/node_modules/solid-start/server/responses.ts
index 194cb45..4b46bf2 100644
--- a/node_modules/solid-start/server/responses.ts
+++ b/node_modules/solid-start/server/responses.ts
@@ -1,3 +1,4 @@
+// @ts-nocheck
 export const XSolidStartStatusCodeHeader = "x-solidstart-status-code";
 export const XSolidStartLocationHeader = "x-solidstart-location";
 export const LocationHeader = "Location";
diff --git a/node_modules/solid-start/server/server-functions/server.ts b/node_modules/solid-start/server/server-functions/server.ts
index eee0504..a0df5aa 100644
--- a/node_modules/solid-start/server/server-functions/server.ts
+++ b/node_modules/solid-start/server/server-functions/server.ts
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import { sharedConfig } from "solid-js";
 import { internalFetch } from "../../api/internalFetch";
 import { FormError } from "../../data";
diff --git a/node_modules/solid-start/server/server-functions/types.ts b/node_modules/solid-start/server/server-functions/types.ts
index 507e529..4ad7a9c 100644
--- a/node_modules/solid-start/server/server-functions/types.ts
+++ b/node_modules/solid-start/server/server-functions/types.ts
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import { FetchEvent } from "../types";
 
 export type ServerFunction<E extends any[], T extends (...args: [...E]) => void> = ((
diff --git a/node_modules/solid-start/session/cookie.ts b/node_modules/solid-start/session/cookie.ts
index aca7311..c80f546 100644
--- a/node_modules/solid-start/session/cookie.ts
+++ b/node_modules/solid-start/session/cookie.ts
@@ -1,3 +1,4 @@
+// @ts-nocheck
 /*!
  * cookie
  * Copyright(c) 2012-2014 Roman Shtylman
diff --git a/node_modules/solid-start/session/cookies.ts b/node_modules/solid-start/session/cookies.ts
index bfde0bb..17ef465 100644
--- a/node_modules/solid-start/session/cookies.ts
+++ b/node_modules/solid-start/session/cookies.ts
@@ -1,3 +1,4 @@
+// @ts-nocheck
 /*!
  * Original code by Remix Sofware Inc
  * MIT Licensed, Copyright(c) 2021 Remix software Inc, see LICENSE.remix.md for details
diff --git a/node_modules/solid-start/session/memoryStorage.ts b/node_modules/solid-start/session/memoryStorage.ts
index fac4ebe..8a14ea6 100644
--- a/node_modules/solid-start/session/memoryStorage.ts
+++ b/node_modules/solid-start/session/memoryStorage.ts
@@ -1,3 +1,4 @@
+// @ts-nocheck
 /*!
  * Original code by Remix Sofware Inc
  * MIT Licensed, Copyright(c) 2021 Remix software Inc, see LICENSE.remix.md for details
diff --git a/node_modules/solid-start/types.ts b/node_modules/solid-start/types.ts
index 792b8b3..f71de00 100644
--- a/node_modules/solid-start/types.ts
+++ b/node_modules/solid-start/types.ts
@@ -1,3 +1,4 @@
+// @ts-nocheck
 import type { Debugger } from "debug";
 import type { Component } from "solid-js";

Two takeaways:

  1. Would it be possible to have solid-start use strict types? I’m using this as my base tsconfig: https://github.com/tsconfig/bases/blob/fcb68ce91474c5569a8892c638426d53a431b9eb/bases/node18-strictest-esm.combined.json (via "extends": "@tsconfig/node18-strictest-esm/tsconfig.json")
  2. I think it would be best if solid-start only shipped .js and .d.ts files, that way skipLibCheck could work properly.

@nirtamir2 here is my workaround, I hope this helps. package.json

{
  "scripts": {
    "postinstall": "node add-ts-nocheck.cjs",
    "check": "tsc --noEmit"
  }
}

add-ts-nocheck.cjs

const fs = require("fs");

const ADDED_STR = "// @ts-nocheck\n\n";
const FILES = [
  "node_modules/solid-start/data/createRouteAction.tsx",
  "node_modules/solid-start/data/createRouteData.tsx",
  "node_modules/solid-start/data/Form.tsx",
  "node_modules/solid-start/entry-client/mount.tsx",
  "node_modules/solid-start/entry-client/StartClient.tsx",
  "node_modules/solid-start/entry-server/render.ts",
  "node_modules/solid-start/entry-server/StartServer.tsx",
  "node_modules/solid-start/error-boundary/ErrorBoundary.tsx",
  "node_modules/solid-start/islands/index.tsx",
  "node_modules/solid-start/root/InlineStyles.tsx",
  "node_modules/solid-start/root/Links.tsx",
  "node_modules/solid-start/root/Scripts.tsx",
  "node_modules/solid-start/router.tsx",
  "node_modules/solid-start/server/components/HttpHeader.tsx",
  "node_modules/solid-start/server/components/HttpStatusCode.tsx",
  "node_modules/solid-start/server/middleware.ts",
  "node_modules/solid-start/server/responses.ts",
  "node_modules/solid-start/server/server-functions/server.ts",
  "node_modules/solid-start/types.ts",
  "node_modules/solid-start/vite/plugin.d.ts",
  "node_modules/vite-plugin-solid/dist/types/index.d.ts",
];

Promise.allSettled(FILES.map(addTsNoCheck)).then((results) => {
  let hasErrors = false;

  for (const result of results) {
    if (result.status === "rejected") {
      hasErrors = true;
      console.error(result.reason);
    }
  }

  if (hasErrors) {
    process.exit(1);
  }
});

async function addTsNoCheck(file) {
  const content = fs.readFileSync(file).toString();

  if (content.includes(ADDED_STR)) {
    console.log(JSON.stringify(ADDED_STR), "is already in", file);
  } else {
    fs.writeFileSync(file, ADDED_STR + content);
    console.log(JSON.stringify(ADDED_STR), "added into", file);
  }
}

yes, solid-start contains a lot of ts errors, maybe the developer didn’t use tsc to compile the code. 🤦‍♂️