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 commit7cd2a8a5ea
. * 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 commit70e565ef06
. * temp: add ignore to breaking edge tests
This commit is contained in:
parent
fb80e384e3
commit
fca58cfd91
10 changed files with 34 additions and 13 deletions
7
.changeset/fluffy-hounds-smash.md
Normal file
7
.changeset/fluffy-hounds-smash.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
'astro': patch
|
||||
'@astrojs/netlify': patch
|
||||
'@astrojs/markdown-remark': patch
|
||||
---
|
||||
|
||||
Fix: "vpath" import error when building for netlify edge
|
|
@ -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}';` : ''}
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
title: Hey there!
|
||||
---
|
||||
|
||||
# {frontmatter.title}!
|
||||
|
||||
It's a markdown 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');
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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,
|
||||
|
|
8
packages/markdown/remark/src/ssr-utils.ts
Normal file
8
packages/markdown/remark/src/ssr-utils.ts
Normal 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);
|
||||
}
|
Loading…
Reference in a new issue