From 1addb015c04764f501bad043cd3eca68a56d7f94 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Mon, 25 Sep 2023 11:32:46 +0200 Subject: [PATCH 01/13] fix: vendor deno dependencies --- .eslintignore | 1 + .prettierignore | 3 ++- packages/runtime/.gitignore | 1 + packages/runtime/package.json | 4 +++- packages/runtime/src/helpers/edge.ts | 7 ++++++- packages/runtime/tsconfig.json | 3 ++- 6 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/runtime/.gitignore diff --git a/.eslintignore b/.eslintignore index b3d6172497..0bcaf2444a 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,6 +4,7 @@ lib demos packages/runtime/src/templates/edge packages/runtime/src/templates/edge-shared +packages/runtime/src/templates/vendor packages/runtime/lib packages/runtime/dist-types jestSetup.js diff --git a/.prettierignore b/.prettierignore index d65b076d46..d3a57abb2b 100644 --- a/.prettierignore +++ b/.prettierignore @@ -26,4 +26,5 @@ test/e2e **/CHANGELOG.md packages/runtime/lib -packages/runtime/dist-types \ No newline at end of file +packages/runtime/dist-types +packages/runtime/src/templates/vendor diff --git a/packages/runtime/.gitignore b/packages/runtime/.gitignore new file mode 100644 index 0000000000..656660c31b --- /dev/null +++ b/packages/runtime/.gitignore @@ -0,0 +1 @@ +src/templates/vendor diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 4fa214414f..f2bada12cb 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -52,7 +52,9 @@ "publish:install": "npm ci", "publish:test": "cd .. && npm ci && npm test", "clean": "rimraf lib dist-types", - "build": "tsc", + "build": "run-s build:*", + "build:vendor": "rimraf src/templates/vendor && deno vendor src/templates/edge/shims.js src/templates/edge-shared/next-utils.ts https://deno.land/x/html_rewriter@v0.1.0-pre.17/index.ts --output=src/templates/vendor", + "build:tsc": "tsc", "watch": "tsc --watch", "prepare": "npm run build" }, diff --git a/packages/runtime/src/helpers/edge.ts b/packages/runtime/src/helpers/edge.ts index cdf5227b5c..56f39f6f21 100644 --- a/packages/runtime/src/helpers/edge.ts +++ b/packages/runtime/src/helpers/edge.ts @@ -356,7 +356,7 @@ export const getEdgeFunctionPatternForPage = ({ export const writeEdgeFunctions = async ({ netlifyConfig, routesManifest, - constants: { PACKAGE_PATH = '' }, + constants: { PACKAGE_PATH = '', INTERNAL_EDGE_FUNCTIONS_SRC }, }: { netlifyConfig: NetlifyConfig routesManifest: RoutesManifest @@ -378,6 +378,11 @@ export const writeEdgeFunctions = async ({ const nextConfig = nextConfigFile.config const usesAppDir = nextConfig.experimental?.appDir + await copy(getEdgeTemplatePath('../vendor'), join(edgeFunctionRoot, 'vendor')) + netlifyConfig.functions['*'] = { + deno_import_map: join(INTERNAL_EDGE_FUNCTIONS_SRC, 'vendor', 'import_map.json'), + } + await copy(getEdgeTemplatePath('../edge-shared'), join(edgeFunctionRoot, 'edge-shared')) await writeJSON(join(edgeFunctionRoot, 'edge-shared', 'nextConfig.json'), nextConfig) await copy(join(publish, 'prerender-manifest.json'), join(edgeFunctionRoot, 'edge-shared', 'prerender-manifest.json')) diff --git a/packages/runtime/tsconfig.json b/packages/runtime/tsconfig.json index b8b6b575cd..7e2bfdc5b0 100644 --- a/packages/runtime/tsconfig.json +++ b/packages/runtime/tsconfig.json @@ -10,6 +10,7 @@ ], "exclude": [ "src/templates/edge/*", - "src/templates/edge-shared/*" + "src/templates/edge-shared/*", + "src/templates/vendor/*" ] } \ No newline at end of file From 4988b83492c7c0d4b4a3ea4e1b16725cfe112d09 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Mon, 25 Sep 2023 11:43:19 +0200 Subject: [PATCH 02/13] chore: install deno along node --- .github/workflows/e2e-appdir.yml | 3 +++ .github/workflows/e2e-next.yml | 3 +++ .github/workflows/pre-release.yml | 3 +++ .github/workflows/release-please.yml | 4 ++++ .github/workflows/test-deno.yml | 5 ++--- .github/workflows/test-integration.yml | 3 +++ .github/workflows/test.yml | 6 ++++++ 7 files changed, 24 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e-appdir.yml b/.github/workflows/e2e-appdir.yml index 9f521cafdf..a27e6a5fa9 100644 --- a/.github/workflows/e2e-appdir.yml +++ b/.github/workflows/e2e-appdir.yml @@ -42,6 +42,9 @@ jobs: with: node-version: '16' cache: 'npm' + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x - run: npm install - name: Install Netlify CLI run: npm install -g netlify-cli diff --git a/.github/workflows/e2e-next.yml b/.github/workflows/e2e-next.yml index c78a2b56d0..b47442186d 100644 --- a/.github/workflows/e2e-next.yml +++ b/.github/workflows/e2e-next.yml @@ -44,6 +44,9 @@ jobs: with: node-version: '16' cache: 'npm' + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x - run: npm install - name: Install Netlify CLI run: npm install -g netlify-cli diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index 3333747124..ebe2281a88 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -15,6 +15,9 @@ jobs: cache: 'npm' check-latest: true registry-url: 'https://registry.npmjs.org' + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x - name: Install core dependencies run: npm ci --no-audit - name: Extract tag and version diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index d3ba9e8543..c8f4be2782 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -26,6 +26,10 @@ jobs: check-latest: true registry-url: 'https://registry.npmjs.org' if: ${{ steps.release.outputs.releases_created }} + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x + if: ${{ steps.release.outputs.releases_created }} - name: Install dependencies run: CI=1 npm ci if: ${{ steps.release.outputs.releases_created }} diff --git a/.github/workflows/test-deno.yml b/.github/workflows/test-deno.yml index 14b2392291..b9b9db542b 100644 --- a/.github/workflows/test-deno.yml +++ b/.github/workflows/test-deno.yml @@ -13,9 +13,8 @@ jobs: steps: - name: Git Checkout Deno Module uses: actions/checkout@v3 - - name: Use Deno Version ${{ matrix.deno-version }} - uses: denolib/setup-deno@v2 + - uses: denoland/setup-deno@v1 with: - deno-version: vx.x.x + deno-version: v1.x - name: Test Deno run: deno test packages/runtime/src/templates/edge-shared/ diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index 9c3dc4328f..516b3a628c 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -24,6 +24,9 @@ jobs: with: node-version: 18 check-latest: true + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x - name: Install netlify-cli and npm run: npm install -g netlify-cli npm - name: NPM Install diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index afc54d6ac0..b7a03e79ea 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -31,6 +31,9 @@ jobs: with: node-version: 16 check-latest: true + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x - name: NPM Install run: npm install - name: Linting @@ -54,6 +57,9 @@ jobs: with: node-version: 16 check-latest: true + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x - name: NPM Install run: npm install - name: Install Next.js Canary From 88ac9a986a5642e59067156b6b937d6c994816f3 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Mon, 25 Sep 2023 12:54:11 +0200 Subject: [PATCH 03/13] fix: install deno in cypress tests --- .github/workflows/cypress-canary.yml | 4 ++++ .github/workflows/cypress-demo-nx.yml | 4 ++++ .github/workflows/cypress-demo-static.yml | 4 ++++ .github/workflows/cypress-demo.yml | 4 ++++ .github/workflows/cypress-middleware.yml | 4 ++++ 5 files changed, 20 insertions(+) diff --git a/.github/workflows/cypress-canary.yml b/.github/workflows/cypress-canary.yml index ad0bf3e367..9098e29add 100644 --- a/.github/workflows/cypress-canary.yml +++ b/.github/workflows/cypress-canary.yml @@ -47,6 +47,10 @@ jobs: with: node-version: '16' + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x + - run: npm install - name: Cypress run diff --git a/.github/workflows/cypress-demo-nx.yml b/.github/workflows/cypress-demo-nx.yml index db76a52105..779b61b0be 100644 --- a/.github/workflows/cypress-demo-nx.yml +++ b/.github/workflows/cypress-demo-nx.yml @@ -47,6 +47,10 @@ jobs: with: node-version: '16' + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x + - run: npm install - name: Cypress run diff --git a/.github/workflows/cypress-demo-static.yml b/.github/workflows/cypress-demo-static.yml index d97ea8a304..79901e290b 100644 --- a/.github/workflows/cypress-demo-static.yml +++ b/.github/workflows/cypress-demo-static.yml @@ -51,6 +51,10 @@ jobs: with: node-version: '16' + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x + - run: npm install - name: Cypress run diff --git a/.github/workflows/cypress-demo.yml b/.github/workflows/cypress-demo.yml index 02ba753907..2e9b4e218d 100644 --- a/.github/workflows/cypress-demo.yml +++ b/.github/workflows/cypress-demo.yml @@ -51,6 +51,10 @@ jobs: with: node-version: '16' + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x + - run: npm install - name: Cypress run diff --git a/.github/workflows/cypress-middleware.yml b/.github/workflows/cypress-middleware.yml index 0a67c7c93d..66c1376ed1 100644 --- a/.github/workflows/cypress-middleware.yml +++ b/.github/workflows/cypress-middleware.yml @@ -51,6 +51,10 @@ jobs: with: node-version: '16' + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x + - run: npm install - name: Cypress run From 30416b5ec4d08783b358a5966196096c0a2c2c56 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Fri, 29 Sep 2023 10:13:29 +0200 Subject: [PATCH 04/13] fix: try scoping down the import map --- packages/runtime/fix-import-map.js | 18 ++++++++++++++++++ packages/runtime/package.json | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 packages/runtime/fix-import-map.js diff --git a/packages/runtime/fix-import-map.js b/packages/runtime/fix-import-map.js new file mode 100644 index 0000000000..0091916436 --- /dev/null +++ b/packages/runtime/fix-import-map.js @@ -0,0 +1,18 @@ +const fs = require('fs') +const path = require('path') + +const importMapPath = path.join('.', 'src', 'templates', 'vendor', 'import_map.json') + +// eslint-disable-next-line n/no-sync +const contents = JSON.parse(fs.readFileSync(importMapPath)) + +const scopedImportMap = { + // this empty object is required, so that edge-bundler doesn't fail :/ + imports: {}, + scopes: { + 'file:///root/.netlify/edge-functions/': contents.imports, + }, +} + +// eslint-disable-next-line n/no-sync +fs.writeFileSync(importMapPath, JSON.stringify(scopedImportMap, null, 2)) diff --git a/packages/runtime/package.json b/packages/runtime/package.json index f2bada12cb..cfdd170d3d 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -53,7 +53,7 @@ "publish:test": "cd .. && npm ci && npm test", "clean": "rimraf lib dist-types", "build": "run-s build:*", - "build:vendor": "rimraf src/templates/vendor && deno vendor src/templates/edge/shims.js src/templates/edge-shared/next-utils.ts https://deno.land/x/html_rewriter@v0.1.0-pre.17/index.ts --output=src/templates/vendor", + "build:vendor": "rimraf src/templates/vendor && deno vendor src/templates/edge/shims.js src/templates/edge-shared/next-utils.ts https://deno.land/x/html_rewriter@v0.1.0-pre.17/index.ts --output=src/templates/vendor && node fix-import-map.js", "build:tsc": "tsc", "watch": "tsc --watch", "prepare": "npm run build" From 187aae16d99a82daa4563e2e13fde425b74abb23 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Fri, 29 Sep 2023 10:51:15 +0200 Subject: [PATCH 05/13] fix: import straight from vendor directory --- .eslintignore | 1 + .vscode/settings.json | 2 ++ packages/runtime/fix-import-map.js | 18 ------------------ packages/runtime/package.json | 2 +- packages/runtime/src/helpers/edge.ts | 6 +----- .../src/templates/edge-shared/next-utils.ts | 6 +++--- .../src/templates/edge-shared/utils.ts | 2 +- .../runtime/src/templates/edge/next-dev.js | 6 +++--- packages/runtime/src/templates/edge/shims.js | 12 ++++++------ packages/runtime/src/templates/vendor.ts | 19 +++++++++++++++++++ 10 files changed, 37 insertions(+), 37 deletions(-) delete mode 100644 packages/runtime/fix-import-map.js create mode 100644 packages/runtime/src/templates/vendor.ts diff --git a/.eslintignore b/.eslintignore index 0bcaf2444a..02d3a94276 100644 --- a/.eslintignore +++ b/.eslintignore @@ -5,6 +5,7 @@ demos packages/runtime/src/templates/edge packages/runtime/src/templates/edge-shared packages/runtime/src/templates/vendor +packages/runtime/src/templates/vendor.ts packages/runtime/lib packages/runtime/dist-types jestSetup.js diff --git a/.vscode/settings.json b/.vscode/settings.json index 5e1acb3317..8774b0b89d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,6 +2,8 @@ "deno.enablePaths": [ "packages/runtime/src/templates/edge", "packages/runtime/src/templates/edge-shared", + "packages/runtime/src/templates/vendor", + "packages/runtime/src/templates/vendor.ts", "demos/middleware/.netlify/edge-functions", "demos/server-components/.netlify/edge-functions", ], diff --git a/packages/runtime/fix-import-map.js b/packages/runtime/fix-import-map.js deleted file mode 100644 index 0091916436..0000000000 --- a/packages/runtime/fix-import-map.js +++ /dev/null @@ -1,18 +0,0 @@ -const fs = require('fs') -const path = require('path') - -const importMapPath = path.join('.', 'src', 'templates', 'vendor', 'import_map.json') - -// eslint-disable-next-line n/no-sync -const contents = JSON.parse(fs.readFileSync(importMapPath)) - -const scopedImportMap = { - // this empty object is required, so that edge-bundler doesn't fail :/ - imports: {}, - scopes: { - 'file:///root/.netlify/edge-functions/': contents.imports, - }, -} - -// eslint-disable-next-line n/no-sync -fs.writeFileSync(importMapPath, JSON.stringify(scopedImportMap, null, 2)) diff --git a/packages/runtime/package.json b/packages/runtime/package.json index cfdd170d3d..880252459c 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -53,7 +53,7 @@ "publish:test": "cd .. && npm ci && npm test", "clean": "rimraf lib dist-types", "build": "run-s build:*", - "build:vendor": "rimraf src/templates/vendor && deno vendor src/templates/edge/shims.js src/templates/edge-shared/next-utils.ts https://deno.land/x/html_rewriter@v0.1.0-pre.17/index.ts --output=src/templates/vendor && node fix-import-map.js", + "build:vendor": "rimraf src/templates/vendor && deno vendor src/templates/vendor.ts --output=src/templates/vendor", "build:tsc": "tsc", "watch": "tsc --watch", "prepare": "npm run build" diff --git a/packages/runtime/src/helpers/edge.ts b/packages/runtime/src/helpers/edge.ts index 56f39f6f21..dadc6da9bc 100644 --- a/packages/runtime/src/helpers/edge.ts +++ b/packages/runtime/src/helpers/edge.ts @@ -356,7 +356,7 @@ export const getEdgeFunctionPatternForPage = ({ export const writeEdgeFunctions = async ({ netlifyConfig, routesManifest, - constants: { PACKAGE_PATH = '', INTERNAL_EDGE_FUNCTIONS_SRC }, + constants: { PACKAGE_PATH = '' }, }: { netlifyConfig: NetlifyConfig routesManifest: RoutesManifest @@ -379,10 +379,6 @@ export const writeEdgeFunctions = async ({ const usesAppDir = nextConfig.experimental?.appDir await copy(getEdgeTemplatePath('../vendor'), join(edgeFunctionRoot, 'vendor')) - netlifyConfig.functions['*'] = { - deno_import_map: join(INTERNAL_EDGE_FUNCTIONS_SRC, 'vendor', 'import_map.json'), - } - await copy(getEdgeTemplatePath('../edge-shared'), join(edgeFunctionRoot, 'edge-shared')) await writeJSON(join(edgeFunctionRoot, 'edge-shared', 'nextConfig.json'), nextConfig) await copy(join(publish, 'prerender-manifest.json'), join(edgeFunctionRoot, 'edge-shared', 'prerender-manifest.json')) diff --git a/packages/runtime/src/templates/edge-shared/next-utils.ts b/packages/runtime/src/templates/edge-shared/next-utils.ts index e55c9a4d2d..1515411957 100644 --- a/packages/runtime/src/templates/edge-shared/next-utils.ts +++ b/packages/runtime/src/templates/edge-shared/next-utils.ts @@ -7,10 +7,10 @@ */ // Deno imports -import type { Key } from 'https://deno.land/x/path_to_regexp@v6.2.1/index.ts' +import type { Key } from '../vendor/deno.land/x/path_to_regexp@v6.2.1/index.ts' -import { compile, pathToRegexp } from 'https://deno.land/x/path_to_regexp@v6.2.1/index.ts' -import { getCookies } from 'https://deno.land/std@0.148.0/http/cookie.ts' +import { compile, pathToRegexp } from '../vendor/deno.land/x/path_to_regexp@v6.2.1/index.ts' +import { getCookies } from '../vendor/deno.land/std@0.175.0/http/cookie.ts' // Inlined/re-implemented types diff --git a/packages/runtime/src/templates/edge-shared/utils.ts b/packages/runtime/src/templates/edge-shared/utils.ts index f679ad2037..70a2752192 100644 --- a/packages/runtime/src/templates/edge-shared/utils.ts +++ b/packages/runtime/src/templates/edge-shared/utils.ts @@ -1,5 +1,5 @@ import type { Context } from 'https://edge.netlify.com' -import { ElementHandlers, HTMLRewriter } from 'https://deno.land/x/html_rewriter@v0.1.0-pre.17/index.ts' +import { ElementHandlers, HTMLRewriter } from '../vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/index.ts' export interface FetchEventResult { response: Response diff --git a/packages/runtime/src/templates/edge/next-dev.js b/packages/runtime/src/templates/edge/next-dev.js index 5980b6a919..27bbea795b 100644 --- a/packages/runtime/src/templates/edge/next-dev.js +++ b/packages/runtime/src/templates/edge/next-dev.js @@ -1,6 +1,6 @@ -import { NextRequest } from 'https://esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/request.js' -import { NextResponse } from 'https://esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/response.js' -import { fromFileUrl } from 'https://deno.land/std@0.151.0/path/mod.ts' +import { NextRequest } from '../vendor/esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/request.js' +import { NextResponse } from '../vendor/esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/response.js' +import { fromFileUrl } from '../vendor/deno.land/std@0.175.0/path/mod.ts' import { buildResponse, isFunction } from '../edge-shared/utils.ts' globalThis.NFRequestContextMap ||= new Map() diff --git a/packages/runtime/src/templates/edge/shims.js b/packages/runtime/src/templates/edge/shims.js index b52983c27c..b0a8ac3a06 100644 --- a/packages/runtime/src/templates/edge/shims.js +++ b/packages/runtime/src/templates/edge/shims.js @@ -1,11 +1,11 @@ // @ts-check // deno-lint-ignore-file prefer-const no-unused-vars -import { decode as _base64Decode } from 'https://deno.land/std@0.175.0/encoding/base64.ts' -import BufferCompat from 'https://deno.land/std@0.175.0/node/buffer.ts' -import EventsCompat from 'https://deno.land/std@0.175.0/node/events.ts' -import AsyncHooksCompat from 'https://deno.land/std@0.175.0/node/async_hooks.ts' -import AssertCompat from 'https://deno.land/std@0.175.0/node/assert.ts' -import UtilCompat from 'https://deno.land/std@0.175.0/node/util.ts' +import { decode as _base64Decode } from '../vendor/deno.land/std@0.175.0/encoding/base64.ts' +import BufferCompat from '../vendor/deno.land/std@0.175.0/node/buffer.ts' +import EventsCompat from '../vendor/deno.land/std@0.175.0/node/events.ts' +import AsyncHooksCompat from '../vendor/deno.land/std@0.175.0/node/async_hooks.ts' +import AssertCompat from '../vendor/deno.land/std@0.175.0/node/assert.ts' +import UtilCompat from '../vendor/deno.land/std@0.175.0/node/util.ts' /** * These are the shims, polyfills and other kludges to make Next.js work in standards-compliant runtime. diff --git a/packages/runtime/src/templates/vendor.ts b/packages/runtime/src/templates/vendor.ts new file mode 100644 index 0000000000..99e6c7e97e --- /dev/null +++ b/packages/runtime/src/templates/vendor.ts @@ -0,0 +1,19 @@ +// this file isn't meant to be imported. +// it's a list of all external modules that we use, +// and we vendor those into the `vendor/` directory +// for consumption in other files. + +import 'https://deno.land/std@0.175.0/encoding/base64.ts' +import 'https://deno.land/std@0.175.0/http/cookie.ts' +import 'https://deno.land/std@0.175.0/node/buffer.ts' +import 'https://deno.land/std@0.175.0/node/events.ts' +import 'https://deno.land/std@0.175.0/node/async_hooks.ts' +import 'https://deno.land/std@0.175.0/node/assert.ts' +import 'https://deno.land/std@0.175.0/node/util.ts' +import 'https://deno.land/std@0.175.0/path/mod.ts' + +import 'https://deno.land/x/path_to_regexp@v6.2.1/index.ts' +import 'https://deno.land/x/html_rewriter@v0.1.0-pre.17/index.ts' + +import 'https://esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/request.js' +import 'https://esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/response.js' From b5ae8dbd314842e26cf2c34095afebaa92604aba Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Fri, 29 Sep 2023 10:53:39 +0200 Subject: [PATCH 06/13] fix: run vendoring before testing deno --- .github/workflows/test-deno.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/test-deno.yml b/.github/workflows/test-deno.yml index b9b9db542b..67e4d5f90c 100644 --- a/.github/workflows/test-deno.yml +++ b/.github/workflows/test-deno.yml @@ -13,8 +13,14 @@ jobs: steps: - name: Git Checkout Deno Module uses: actions/checkout@v3 + - name: Node + uses: actions/setup-node@v3 + with: + node-version: '16' - uses: denoland/setup-deno@v1 with: deno-version: v1.x + - name: Run Vendor + run: npm run build:vendor - name: Test Deno run: deno test packages/runtime/src/templates/edge-shared/ From 4ffa6b1bb3b4d3764a5e73163f5e7e81ea756977 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Fri, 29 Sep 2023 10:54:55 +0200 Subject: [PATCH 07/13] fix: npm install needs deno --- .github/workflows/e2e-appdir.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/e2e-appdir.yml b/.github/workflows/e2e-appdir.yml index a27e6a5fa9..816928421e 100644 --- a/.github/workflows/e2e-appdir.yml +++ b/.github/workflows/e2e-appdir.yml @@ -16,6 +16,9 @@ jobs: test-files: ${{ steps['set-test-files'].outputs['test-files'] }} steps: - uses: actions/checkout@v3 + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x - run: npm install - id: set-test-files name: Get test files From 7201a27a9968279e5963d031d2b087946466d873 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Fri, 29 Sep 2023 10:56:12 +0200 Subject: [PATCH 08/13] fix: run build:vendor in right dir --- .github/workflows/test-deno.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test-deno.yml b/.github/workflows/test-deno.yml index 67e4d5f90c..7c708bb97e 100644 --- a/.github/workflows/test-deno.yml +++ b/.github/workflows/test-deno.yml @@ -21,6 +21,7 @@ jobs: with: deno-version: v1.x - name: Run Vendor + working-directory: ./packages/runtime run: npm run build:vendor - name: Test Deno run: deno test packages/runtime/src/templates/edge-shared/ From 1848684bf418d797e7b1e04fa27121c89b640aab Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Fri, 29 Sep 2023 11:00:19 +0200 Subject: [PATCH 09/13] refactor: move deno tests into normal test file --- .github/workflows/test-deno.yml | 27 --------------------------- .github/workflows/test.yml | 2 ++ 2 files changed, 2 insertions(+), 27 deletions(-) delete mode 100644 .github/workflows/test-deno.yml diff --git a/.github/workflows/test-deno.yml b/.github/workflows/test-deno.yml deleted file mode 100644 index 7c708bb97e..0000000000 --- a/.github/workflows/test-deno.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Deno tests - -on: - push: - branches: [main] - pull_request: - branches: [main] - -jobs: - test: - runs-on: ubuntu-latest - - steps: - - name: Git Checkout Deno Module - uses: actions/checkout@v3 - - name: Node - uses: actions/setup-node@v3 - with: - node-version: '16' - - uses: denoland/setup-deno@v1 - with: - deno-version: v1.x - - name: Run Vendor - working-directory: ./packages/runtime - run: npm run build:vendor - - name: Test Deno - run: deno test packages/runtime/src/templates/edge-shared/ diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b7a03e79ea..802f286fd6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -40,6 +40,8 @@ jobs: run: npm run format:ci - name: Run tests against next@latest run: npm test + - name: Run Deno tests + run: npm run test:deno canary: name: Unit tests (Canary) runs-on: ${{ matrix.os }} From 1ec84858b76a856fac9b3aa95673258a5e76e7fe Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Fri, 29 Sep 2023 11:23:12 +0200 Subject: [PATCH 10/13] fix: include vendor files in package --- packages/runtime/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 880252459c..0ea409ad7b 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -7,6 +7,7 @@ "lib/**/*", "src/templates/edge/*", "src/templates/edge-shared/*", + "src/templates/vendor/*", "index.js", "manifest.yml" ], From e8428c88e7260f73917164d19930d14d51ea1dba Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Fri, 29 Sep 2023 12:25:12 +0200 Subject: [PATCH 11/13] fix: patch html rewriter to fetch wasm from web, not from disk --- packages/runtime/html_rewriter.patch | 4 ++++ packages/runtime/package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 packages/runtime/html_rewriter.patch diff --git a/packages/runtime/html_rewriter.patch b/packages/runtime/html_rewriter.patch new file mode 100644 index 0000000000..d948bcb78a --- /dev/null +++ b/packages/runtime/html_rewriter.patch @@ -0,0 +1,4 @@ +56c56 +< fetch(new URL("./vendor/html_rewriter_bg.wasm", import.meta.url).href) +--- +> fetch("https://deno.land/x/html_rewriter@v0.1.0-pre.17/vendor/html_rewriter_bg.wasm") diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 0ea409ad7b..2af1633983 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -54,7 +54,7 @@ "publish:test": "cd .. && npm ci && npm test", "clean": "rimraf lib dist-types", "build": "run-s build:*", - "build:vendor": "rimraf src/templates/vendor && deno vendor src/templates/vendor.ts --output=src/templates/vendor", + "build:vendor": "rimraf src/templates/vendor && deno vendor src/templates/vendor.ts --output=src/templates/vendor && patch src/templates/vendor/deno.land/x/html_rewriter@*/index.ts html_rewriter.patch", "build:tsc": "tsc", "watch": "tsc --watch", "prepare": "npm run build" From 9a2b90d6aea589bb70e443bc48faa6b028c6766e Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Fri, 29 Sep 2023 12:34:59 +0200 Subject: [PATCH 12/13] chore: use precise path --- packages/runtime/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 2af1633983..7903101385 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -54,7 +54,7 @@ "publish:test": "cd .. && npm ci && npm test", "clean": "rimraf lib dist-types", "build": "run-s build:*", - "build:vendor": "rimraf src/templates/vendor && deno vendor src/templates/vendor.ts --output=src/templates/vendor && patch src/templates/vendor/deno.land/x/html_rewriter@*/index.ts html_rewriter.patch", + "build:vendor": "rimraf src/templates/vendor && deno vendor src/templates/vendor.ts --output=src/templates/vendor && patch src/templates/vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/index.ts html_rewriter.patch", "build:tsc": "tsc", "watch": "tsc --watch", "prepare": "npm run build" From 35886e11e3357de7a9a614504eb1ae6a308dee81 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Fri, 29 Sep 2023 13:10:46 +0200 Subject: [PATCH 13/13] Update packages/runtime/src/templates/vendor.ts Co-authored-by: Michal Piechowiak --- packages/runtime/src/templates/vendor.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/runtime/src/templates/vendor.ts b/packages/runtime/src/templates/vendor.ts index 99e6c7e97e..a38cbdb84b 100644 --- a/packages/runtime/src/templates/vendor.ts +++ b/packages/runtime/src/templates/vendor.ts @@ -2,6 +2,8 @@ // it's a list of all external modules that we use, // and we vendor those into the `vendor/` directory // for consumption in other files. +// Vendoring happens automatically as part of runtime `build` script. +// You can trigger just vendoring without full package build by running `build:vendor` script. import 'https://deno.land/std@0.175.0/encoding/base64.ts' import 'https://deno.land/std@0.175.0/http/cookie.ts'