Skip to content

Commit a8d06ab

Browse files
Skn0ttpieh
andauthored
fix: vendor deno dependencies (#2302)
* fix: vendor deno dependencies * chore: install deno along node * fix: install deno in cypress tests * fix: try scoping down the import map * fix: import straight from vendor directory * fix: run vendoring before testing deno * fix: npm install needs deno * fix: run build:vendor in right dir * refactor: move deno tests into normal test file * fix: include vendor files in package * fix: patch html rewriter to fetch wasm from web, not from disk * chore: use precise path * Update packages/runtime/src/templates/vendor.ts Co-authored-by: Michal Piechowiak <[email protected]> --------- Co-authored-by: Michal Piechowiak <[email protected]>
1 parent 7b2b0e5 commit a8d06ab

25 files changed

+99
-37
lines changed

.eslintignore

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ lib
44
demos
55
packages/runtime/src/templates/edge
66
packages/runtime/src/templates/edge-shared
7+
packages/runtime/src/templates/vendor
8+
packages/runtime/src/templates/vendor.ts
79
packages/runtime/lib
810
packages/runtime/dist-types
911
jestSetup.js

.github/workflows/cypress-canary.yml

+4
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ jobs:
4747
with:
4848
node-version: '16'
4949

50+
- uses: denoland/setup-deno@v1
51+
with:
52+
deno-version: v1.x
53+
5054
- run: npm install
5155

5256
- name: Cypress run

.github/workflows/cypress-demo-nx.yml

+4
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ jobs:
4747
with:
4848
node-version: '16'
4949

50+
- uses: denoland/setup-deno@v1
51+
with:
52+
deno-version: v1.x
53+
5054
- run: npm install
5155

5256
- name: Cypress run

.github/workflows/cypress-demo-static.yml

+4
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ jobs:
5151
with:
5252
node-version: '16'
5353

54+
- uses: denoland/setup-deno@v1
55+
with:
56+
deno-version: v1.x
57+
5458
- run: npm install
5559

5660
- name: Cypress run

.github/workflows/cypress-demo.yml

+4
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ jobs:
5151
with:
5252
node-version: '16'
5353

54+
- uses: denoland/setup-deno@v1
55+
with:
56+
deno-version: v1.x
57+
5458
- run: npm install
5559

5660
- name: Cypress run

.github/workflows/cypress-middleware.yml

+4
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ jobs:
5151
with:
5252
node-version: '16'
5353

54+
- uses: denoland/setup-deno@v1
55+
with:
56+
deno-version: v1.x
57+
5458
- run: npm install
5559

5660
- name: Cypress run

.github/workflows/e2e-appdir.yml

+6
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ jobs:
1616
test-files: ${{ steps['set-test-files'].outputs['test-files'] }}
1717
steps:
1818
- uses: actions/checkout@v3
19+
- uses: denoland/setup-deno@v1
20+
with:
21+
deno-version: v1.x
1922
- run: npm install
2023
- id: set-test-files
2124
name: Get test files
@@ -42,6 +45,9 @@ jobs:
4245
with:
4346
node-version: '16'
4447
cache: 'npm'
48+
- uses: denoland/setup-deno@v1
49+
with:
50+
deno-version: v1.x
4551
- run: npm install
4652
- name: Install Netlify CLI
4753
run: npm install -g netlify-cli

.github/workflows/e2e-next.yml

+3
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ jobs:
4444
with:
4545
node-version: '16'
4646
cache: 'npm'
47+
- uses: denoland/setup-deno@v1
48+
with:
49+
deno-version: v1.x
4750
- run: npm install
4851
- name: Install Netlify CLI
4952
run: npm install -g netlify-cli

.github/workflows/pre-release.yml

+3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ jobs:
1515
cache: 'npm'
1616
check-latest: true
1717
registry-url: 'https://registry.npmjs.org'
18+
- uses: denoland/setup-deno@v1
19+
with:
20+
deno-version: v1.x
1821
- name: Install core dependencies
1922
run: npm ci --no-audit
2023
- name: Extract tag and version

.github/workflows/release-please.yml

+4
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ jobs:
2626
check-latest: true
2727
registry-url: 'https://registry.npmjs.org'
2828
if: ${{ steps.release.outputs.releases_created }}
29+
- uses: denoland/setup-deno@v1
30+
with:
31+
deno-version: v1.x
32+
if: ${{ steps.release.outputs.releases_created }}
2933
- name: Install dependencies
3034
run: CI=1 npm ci
3135
if: ${{ steps.release.outputs.releases_created }}

.github/workflows/test-deno.yml

-21
This file was deleted.

.github/workflows/test-integration.yml

+3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ jobs:
2424
with:
2525
node-version: 18
2626
check-latest: true
27+
- uses: denoland/setup-deno@v1
28+
with:
29+
deno-version: v1.x
2730
- name: Install netlify-cli and npm
2831
run: npm install -g netlify-cli npm
2932
- name: NPM Install

.github/workflows/test.yml

+8
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,17 @@ jobs:
3131
with:
3232
node-version: 16
3333
check-latest: true
34+
- uses: denoland/setup-deno@v1
35+
with:
36+
deno-version: v1.x
3437
- name: NPM Install
3538
run: npm install
3639
- name: Linting
3740
run: npm run format:ci
3841
- name: Run tests against next@latest
3942
run: npm test
43+
- name: Run Deno tests
44+
run: npm run test:deno
4045
canary:
4146
name: Unit tests (Canary)
4247
runs-on: ${{ matrix.os }}
@@ -54,6 +59,9 @@ jobs:
5459
with:
5560
node-version: 16
5661
check-latest: true
62+
- uses: denoland/setup-deno@v1
63+
with:
64+
deno-version: v1.x
5765
- name: NPM Install
5866
run: npm install
5967
- name: Install Next.js Canary

.prettierignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@ test/e2e
2626

2727
**/CHANGELOG.md
2828
packages/runtime/lib
29-
packages/runtime/dist-types
29+
packages/runtime/dist-types
30+
packages/runtime/src/templates/vendor

.vscode/settings.json

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
"deno.enablePaths": [
33
"packages/runtime/src/templates/edge",
44
"packages/runtime/src/templates/edge-shared",
5+
"packages/runtime/src/templates/vendor",
6+
"packages/runtime/src/templates/vendor.ts",
57
"demos/middleware/.netlify/edge-functions",
68
"demos/server-components/.netlify/edge-functions",
79
],

packages/runtime/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
src/templates/vendor

packages/runtime/html_rewriter.patch

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
56c56
2+
< fetch(new URL("./vendor/html_rewriter_bg.wasm", import.meta.url).href)
3+
---
4+
> fetch("https://deno.land/x/[email protected]/vendor/html_rewriter_bg.wasm")

packages/runtime/package.json

+4-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"lib/**/*",
88
"src/templates/edge/*",
99
"src/templates/edge-shared/*",
10+
"src/templates/vendor/*",
1011
"index.js",
1112
"manifest.yml"
1213
],
@@ -52,7 +53,9 @@
5253
"publish:install": "npm ci",
5354
"publish:test": "cd .. && npm ci && npm test",
5455
"clean": "rimraf lib dist-types",
55-
"build": "tsc",
56+
"build": "run-s build:*",
57+
"build:vendor": "rimraf src/templates/vendor && deno vendor src/templates/vendor.ts --output=src/templates/vendor && patch src/templates/vendor/deno.land/x/[email protected]/index.ts html_rewriter.patch",
58+
"build:tsc": "tsc",
5659
"watch": "tsc --watch",
5760
"prepare": "npm run build"
5861
},

packages/runtime/src/helpers/edge.ts

+1
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,7 @@ export const writeEdgeFunctions = async ({
378378
const nextConfig = nextConfigFile.config
379379
const usesAppDir = nextConfig.experimental?.appDir
380380

381+
await copy(getEdgeTemplatePath('../vendor'), join(edgeFunctionRoot, 'vendor'))
381382
await copy(getEdgeTemplatePath('../edge-shared'), join(edgeFunctionRoot, 'edge-shared'))
382383
await writeJSON(join(edgeFunctionRoot, 'edge-shared', 'nextConfig.json'), nextConfig)
383384
await copy(join(publish, 'prerender-manifest.json'), join(edgeFunctionRoot, 'edge-shared', 'prerender-manifest.json'))

packages/runtime/src/templates/edge-shared/next-utils.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
*/
88

99
// Deno imports
10-
import type { Key } from 'https://deno.land/x/[email protected]/index.ts'
10+
import type { Key } from '../vendor/deno.land/x/[email protected]/index.ts'
1111

12-
import { compile, pathToRegexp } from 'https://deno.land/x/[email protected]/index.ts'
13-
import { getCookies } from 'https://deno.land/std@0.148.0/http/cookie.ts'
12+
import { compile, pathToRegexp } from '../vendor/deno.land/x/[email protected]/index.ts'
13+
import { getCookies } from '../vendor/deno.land/std@0.175.0/http/cookie.ts'
1414

1515
// Inlined/re-implemented types
1616

packages/runtime/src/templates/edge-shared/utils.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { Context } from 'https://edge.netlify.com'
2-
import { ElementHandlers, HTMLRewriter } from 'https://deno.land/x/[email protected]/index.ts'
2+
import { ElementHandlers, HTMLRewriter } from '../vendor/deno.land/x/[email protected]/index.ts'
33

44
export interface FetchEventResult {
55
response: Response

packages/runtime/src/templates/edge/next-dev.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { NextRequest } from 'https://esm.sh/v91/[email protected]/deno/dist/server/web/spec-extension/request.js'
2-
import { NextResponse } from 'https://esm.sh/v91/[email protected]/deno/dist/server/web/spec-extension/response.js'
3-
import { fromFileUrl } from 'https://deno.land/std@0.151.0/path/mod.ts'
1+
import { NextRequest } from '../vendor/esm.sh/v91/[email protected]/deno/dist/server/web/spec-extension/request.js'
2+
import { NextResponse } from '../vendor/esm.sh/v91/[email protected]/deno/dist/server/web/spec-extension/response.js'
3+
import { fromFileUrl } from '../vendor/deno.land/std@0.175.0/path/mod.ts'
44
import { buildResponse, isFunction } from '../edge-shared/utils.ts'
55

66
globalThis.NFRequestContextMap ||= new Map()

packages/runtime/src/templates/edge/shims.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
// @ts-check
22
// deno-lint-ignore-file prefer-const no-unused-vars
3-
import { decode as _base64Decode } from 'https://deno.land/[email protected]/encoding/base64.ts'
4-
import BufferCompat from 'https://deno.land/[email protected]/node/buffer.ts'
5-
import EventsCompat from 'https://deno.land/[email protected]/node/events.ts'
6-
import AsyncHooksCompat from 'https://deno.land/[email protected]/node/async_hooks.ts'
7-
import AssertCompat from 'https://deno.land/[email protected]/node/assert.ts'
8-
import UtilCompat from 'https://deno.land/[email protected]/node/util.ts'
3+
import { decode as _base64Decode } from '../vendor/deno.land/[email protected]/encoding/base64.ts'
4+
import BufferCompat from '../vendor/deno.land/[email protected]/node/buffer.ts'
5+
import EventsCompat from '../vendor/deno.land/[email protected]/node/events.ts'
6+
import AsyncHooksCompat from '../vendor/deno.land/[email protected]/node/async_hooks.ts'
7+
import AssertCompat from '../vendor/deno.land/[email protected]/node/assert.ts'
8+
import UtilCompat from '../vendor/deno.land/[email protected]/node/util.ts'
99

1010
/**
1111
* These are the shims, polyfills and other kludges to make Next.js work in standards-compliant runtime.
+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// this file isn't meant to be imported.
2+
// it's a list of all external modules that we use,
3+
// and we vendor those into the `vendor/` directory
4+
// for consumption in other files.
5+
// Vendoring happens automatically as part of runtime `build` script.
6+
// You can trigger just vendoring without full package build by running `build:vendor` script.
7+
8+
import 'https://deno.land/[email protected]/encoding/base64.ts'
9+
import 'https://deno.land/[email protected]/http/cookie.ts'
10+
import 'https://deno.land/[email protected]/node/buffer.ts'
11+
import 'https://deno.land/[email protected]/node/events.ts'
12+
import 'https://deno.land/[email protected]/node/async_hooks.ts'
13+
import 'https://deno.land/[email protected]/node/assert.ts'
14+
import 'https://deno.land/[email protected]/node/util.ts'
15+
import 'https://deno.land/[email protected]/path/mod.ts'
16+
17+
import 'https://deno.land/x/[email protected]/index.ts'
18+
import 'https://deno.land/x/[email protected]/index.ts'
19+
20+
import 'https://esm.sh/v91/[email protected]/deno/dist/server/web/spec-extension/request.js'
21+
import 'https://esm.sh/v91/[email protected]/deno/dist/server/web/spec-extension/response.js'

packages/runtime/tsconfig.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
],
1111
"exclude": [
1212
"src/templates/edge/*",
13-
"src/templates/edge-shared/*"
13+
"src/templates/edge-shared/*",
14+
"src/templates/vendor/*"
1415
]
1516
}

0 commit comments

Comments
 (0)