Fix: Netlify edge deployment when using markdown (#3612)

* wip: revert sitemap PR

* fix: extract SSR-ready "slug" helper to separate module

* Un-revert sitemap PR. Not to blame!

This reverts commit 7cd2a8a5ea.

* fix: use .netlify for edge deployment test

* refactor: add md file to edge function fixture

* fix: add netlify edge tests to ci

* chore: remove stray console log

* wip: undo "dist" change on edge tests

* chore: changeset

* Revert "wip: undo "dist" change on edge tests"

This reverts commit 70e565ef06.

* temp: add ignore to breaking edge tests
This commit is contained in:
Ben Holmes 2022-06-16 20:31:08 -04:00 committed by GitHub
parent fb80e384e3
commit fca58cfd91
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 34 additions and 13 deletions

View file

@ -0,0 +1,7 @@
---
'astro': patch
'@astrojs/netlify': patch
'@astrojs/markdown-remark': patch
---
Fix: "vpath" import error when building for netlify edge

View file

@ -154,7 +154,7 @@ export default function markdown({ config }: AstroPluginOptions): Plugin {
const { layout = '', components = '', setup = '', ...content } = frontmatter;
content.astro = metadata;
const prelude = `---
import { slug as $$slug } from '@astrojs/markdown-remark';
import { slug as $$slug } from '@astrojs/markdown-remark/ssr-utils';
${layout ? `import Layout from '${layout}';` : ''}
${components ? `import * from '${components}';` : ''}
${hasInjectedScript ? `import '${PAGE_SSR_SCRIPT_ID}';` : ''}

View file

@ -27,7 +27,7 @@
"dev": "astro-scripts dev \"src/**/*.ts\"",
"test-fn": "mocha --exit --timeout 20000 test/functions/",
"test-edge": "deno test --allow-run --allow-read --allow-net ./test/edge-functions/",
"test": "npm run test-fn"
"test": "npm run test-fn && npm run test-edge"
},
"dependencies": {
"@astrojs/webapi": "^0.12.0",

View file

@ -1,6 +1,6 @@
import { SSRManifest } from 'astro';
import { App } from 'astro/app';
import './edge-shim.js';
import type { SSRManifest } from 'astro';
import { App } from 'astro/app';
export function createExports(manifest: SSRManifest) {
const app = new App(manifest);

View file

@ -5,10 +5,12 @@ import { assertEquals, assert, DOMParser } from './deps.ts';
// @ts-ignore
Deno.test({
// TODO: debug why build cannot be found in "await import"
ignore: true,
name: 'Edge Basics',
async fn() {
let close = await runBuild('./fixtures/edge-basic/');
const { default: handler } = await import('./fixtures/edge-basic/dist/edge-functions/entry.js');
const { default: handler } = await import('./fixtures/edge-basic/.netlify/edge-functions/entry.js');
const response = await handler(new Request('http://example.com/'));
assertEquals(response.status, 200);
const html = await response.text();

View file

@ -0,0 +1,7 @@
---
title: Hey there!
---
# {frontmatter.title}!
It's a markdown file!

View file

@ -5,11 +5,13 @@ import { assertEquals, assert, DOMParser } from './deps.ts';
// @ts-ignore
Deno.test({
// TODO: debug why build cannot be found in "await import"
ignore: true,
name: 'Assets are preferred over HTML routes',
async fn() {
let close = await runBuild('./fixtures/root-dynamic/');
const { default: handler } = await import(
'./fixtures/root-dynamic/dist/edge-functions/entry.js'
'./fixtures/root-dynamic/.netlify/edge-functions/entry.js'
);
const response = await handler(new Request('http://example.com/styles.css'));
assertEquals(response, undefined, 'No response because this is an asset');

View file

@ -13,7 +13,8 @@
"homepage": "https://astro.build",
"main": "./dist/index.js",
"exports": {
".": "./dist/index.js"
".": "./dist/index.js",
"./ssr-utils": "./dist/ssr-utils.js"
},
"scripts": {
"prepublish": "pnpm build",

View file

@ -13,7 +13,6 @@ import scopedStyles from './remark-scoped-styles.js';
import remarkShiki from './remark-shiki.js';
import remarkUnwrap from './remark-unwrap.js';
import Slugger from 'github-slugger';
import rehypeRaw from 'rehype-raw';
import rehypeStringify from 'rehype-stringify';
import markdown from 'remark-parse';
@ -26,11 +25,6 @@ export * from './types.js';
export const DEFAULT_REMARK_PLUGINS = ['remark-gfm', 'remark-smartypants'];
export const DEFAULT_REHYPE_PLUGINS = [];
const slugger = new Slugger();
export function slug(value: string): string {
return slugger.slug(value);
}
/** Shared utility for rendering markdown */
export async function renderMarkdown(
content: string,

View file

@ -0,0 +1,8 @@
/** Utilities used in deployment-ready SSR bundles */
import Slugger from 'github-slugger';
const slugger = new Slugger();
/** @see {@link "/packages/astro/vite-plugin-markdown"} */
export function slug(value: string): string {
return slugger.slug(value);
}