From a3b53154af785986d90af06d5be91445365b637f Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Wed, 30 Nov 2022 13:09:10 +0000 Subject: [PATCH 1/2] ci: add typechecking for deno --- .changeset/clean-clocks-float.md | 5 +++++ .github/workflows/reusable-test.yml | 10 ++++++++++ .vscode/deno_resolve_npm_imports.json | 14 ++++++++------ packages/remix-deno/server.ts | 12 ++++++++---- scripts/build.mjs | 11 +++++++++++ 5 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 .changeset/clean-clocks-float.md diff --git a/.changeset/clean-clocks-float.md b/.changeset/clean-clocks-float.md new file mode 100644 index 00000000000..6101c934843 --- /dev/null +++ b/.changeset/clean-clocks-float.md @@ -0,0 +1,5 @@ +--- +"@remix-run/deno": patch +--- + +Fix types for request handler context diff --git a/.github/workflows/reusable-test.yml b/.github/workflows/reusable-test.yml index ec783338578..1fcb8e7005a 100644 --- a/.github/workflows/reusable-test.yml +++ b/.github/workflows/reusable-test.yml @@ -35,6 +35,11 @@ jobs: node-version-file: ".nvmrc" cache: "yarn" + - name: 🦕 Setup deno + uses: denoland/setup-deno@v1 + with: + deno-version: vx.x.x + - name: 📥 Install deps run: yarn --frozen-lockfile @@ -65,6 +70,11 @@ jobs: node-version: ${{ matrix.node }} cache: "yarn" + - name: 🦕 Setup deno + uses: denoland/setup-deno@v1 + with: + deno-version: vx.x.x + - name: 📥 Install deps run: yarn --frozen-lockfile diff --git a/.vscode/deno_resolve_npm_imports.json b/.vscode/deno_resolve_npm_imports.json index 885f45e2763..0bb12cad4a0 100644 --- a/.vscode/deno_resolve_npm_imports.json +++ b/.vscode/deno_resolve_npm_imports.json @@ -1,11 +1,13 @@ { - "// Resolve NPM imports for `packages/remix-deno`.": "", - "// This import map is used solely for the denoland.vscode-deno extension.": "", - "// Remix does not support import maps.": "", - "// Dependency management is done through `npm` and `node_modules/` instead.": "", - "// Deno-only dependencies may be imported via URL imports (without using import maps).": "", + "comment": [ + "Resolve NPM imports for `packages/remix-deno`.", + "This import map is used solely for the denoland.vscode-deno extension.", + "Remix does not support import maps.", + "Dependency management is done through `npm` and `node_modules/` instead.", + "Deno-only dependencies may be imported via URL imports (without using import maps)." + ], "imports": { - "@remix-run/server-runtime": "https://esm.sh/@remix-run/server-runtime@1.6.4", + "@remix-run/server-runtime": "https://esm.sh/@remix-run/server-runtime@nightly", "mime": "https://esm.sh/mime@3.0.0" } } diff --git a/packages/remix-deno/server.ts b/packages/remix-deno/server.ts index 65ca4d26438..1cf2e42bc1e 100644 --- a/packages/remix-deno/server.ts +++ b/packages/remix-deno/server.ts @@ -1,7 +1,7 @@ import * as path from "https://deno.land/std@0.128.0/path/mod.ts"; import mime from "mime"; import { createRequestHandler as createRemixRequestHandler } from "@remix-run/server-runtime"; -import type { ServerBuild } from "@remix-run/server-runtime"; +import type { AppLoadContext, ServerBuild } from "@remix-run/server-runtime"; function defaultCacheControl(url: URL, assetsPublicPath = "/build/") { if (url.pathname.startsWith(assetsPublicPath)) { @@ -11,7 +11,9 @@ function defaultCacheControl(url: URL, assetsPublicPath = "/build/") { } } -export function createRequestHandler({ +export function createRequestHandler< + Context extends AppLoadContext | undefined = undefined +>({ build, mode, getLoadContext, @@ -51,7 +53,7 @@ export async function serveStaticFiles( cacheControl?: string | ((url: URL) => string); publicDir?: string; assetsPublicPath?: string; - }, + } ) { const url = new URL(request.url); @@ -81,7 +83,9 @@ export async function serveStaticFiles( } } -export function createRequestHandlerWithStaticFiles({ +export function createRequestHandlerWithStaticFiles< + Context extends AppLoadContext | undefined = undefined +>({ build, mode, getLoadContext, diff --git a/scripts/build.mjs b/scripts/build.mjs index 7ca6b88a3d9..6ce7c47aba0 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -1,11 +1,22 @@ import { spawn } from "cross-spawn"; +import glob from "glob"; const args = process.argv.slice(2); const tsc = process.env.CI || args.includes("--tsc"); const publish = process.env.CI || args.includes("--publish"); +const denoCheck = process.env.CI || args.includes("--deno"); exec("yarn", ["rollup", "-c"]) .then(() => tsc && exec("yarn", ["tsc", "-b"])) + .then( + () => + denoCheck && + exec("deno", [ + "check", + "--import-map=.vscode/deno_resolve_npm_imports.json", + ...glob.sync("packages/remix-deno/**/*.ts"), + ]) + ) .then(() => publish && exec("node", ["scripts/copy-build-to-dist.mjs"])) .then(() => process.exit(0)) .catch((err) => { From c63f5d88424d453ad8427c19a8c4820a78ad6f76 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Wed, 30 Nov 2022 13:42:54 +0000 Subject: [PATCH 2/2] ci: install deno for integration tests --- .github/workflows/reusable-test.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/reusable-test.yml b/.github/workflows/reusable-test.yml index 1fcb8e7005a..4b7d94ed607 100644 --- a/.github/workflows/reusable-test.yml +++ b/.github/workflows/reusable-test.yml @@ -107,6 +107,11 @@ jobs: node-version: ${{ matrix.node }} cache: "yarn" + - name: 🦕 Setup deno + uses: denoland/setup-deno@v1 + with: + deno-version: vx.x.x + - name: 📥 Install deps run: yarn --frozen-lockfile @@ -138,6 +143,11 @@ jobs: node-version: ${{ matrix.node }} cache: "yarn" + - name: 🦕 Setup deno + uses: denoland/setup-deno@v1 + with: + deno-version: vx.x.x + - name: 📥 Install deps run: yarn --frozen-lockfile @@ -169,6 +179,11 @@ jobs: node-version: ${{ matrix.node }} cache: "yarn" + - name: 🦕 Setup deno + uses: denoland/setup-deno@v1 + with: + deno-version: vx.x.x + - name: 📥 Install deps run: yarn --frozen-lockfile