summaryrefslogtreecommitdiff
path: root/src/compiler/index.ts
diff options
context:
space:
mode:
authorGravatar Drew Powers <1369770+drwpow@users.noreply.github.com> 2021-03-31 13:04:18 -0600
committerGravatar GitHub <noreply@github.com> 2021-03-31 13:04:18 -0600
commit3fa6396a7b092258c994d0bee6719b89b45c7bf8 (patch)
tree0e0c1b842831bae8d4bfc4b643ebb6f4f7d13f7f /src/compiler/index.ts
parenta3b20a9affaee976c3e1f3019016fb096b1516fb (diff)
downloadastro-3fa6396a7b092258c994d0bee6719b89b45c7bf8.tar.gz
astro-3fa6396a7b092258c994d0bee6719b89b45c7bf8.tar.zst
astro-3fa6396a7b092258c994d0bee6719b89b45c7bf8.zip
Extract Astro styles to external stylesheets (#43)
* Extract Astro styles to external stylesheets * Require relative URLs in Markdown layouts
Diffstat (limited to 'src/compiler/index.ts')
-rw-r--r--src/compiler/index.ts15
1 files changed, 6 insertions, 9 deletions
diff --git a/src/compiler/index.ts b/src/compiler/index.ts
index 8104ef4b4..1afa97c87 100644
--- a/src/compiler/index.ts
+++ b/src/compiler/index.ts
@@ -10,7 +10,6 @@ import { CompileResult, TransformResult } from '../@types/astro';
import { parse } from '../parser/index.js';
import { createMarkdownHeadersCollector } from '../micromark-collect-headers.js';
import { encodeMarkdown } from '../micromark-encode.js';
-import { defaultLogOptions } from '../logger.js';
import { optimize } from './optimize/index.js';
import { codegen } from './codegen.js';
@@ -75,14 +74,14 @@ async function convertMdToJsx(
const raw = `---
${imports}
- ${frontmatterData.layout ? `export const __layout = ${JSON.stringify(frontmatterData.layout)};` : ''}
+ ${frontmatterData.layout ? `import {__renderPage as __layout} from '${frontmatterData.layout}';` : 'const __layout = undefined;'}
export const __content = ${stringifiedSetupContext};
---
<section>${mdHtml}</section>`;
const convertOptions = { compileOptions, filename, fileID };
- return convertAstroToJsx(raw, convertOptions);
+ return await convertAstroToJsx(raw, convertOptions);
}
type SupportedExtensions = '.astro' | '.md';
@@ -94,9 +93,9 @@ async function transformFromSource(
const fileID = path.relative(projectRoot, filename);
switch (path.extname(filename) as SupportedExtensions) {
case '.astro':
- return convertAstroToJsx(contents, { compileOptions, filename, fileID });
+ return await convertAstroToJsx(contents, { compileOptions, filename, fileID });
case '.md':
- return convertMdToJsx(contents, { compileOptions, filename, fileID });
+ return await convertMdToJsx(contents, { compileOptions, filename, fileID });
default:
throw new Error('Not Supported!');
}
@@ -108,8 +107,6 @@ export async function compileComponent(
): Promise<CompileResult> {
const sourceJsx = await transformFromSource(source, { compileOptions, filename, projectRoot });
const isPage = path.extname(filename) === '.md' || sourceJsx.items.some((item) => item.name === 'html');
- // sort <style> tags first
- sourceJsx.items.sort((a, b) => (a.name === 'style' && b.name !== 'style' ? -1 : 0));
// return template
let modJsx = `
@@ -144,8 +141,7 @@ export async function __renderPage({request, children, props}) {
// find layout, if one was given.
if (currentChild.layout) {
- const layoutComponent = (await import('/_astro/layouts/' + currentChild.layout.replace(/.*layouts\\//, "").replace(/\.astro$/, '.js')));
- return layoutComponent.__renderPage({
+ return currentChild.layout({
request,
props: {content: currentChild.content},
children: [childBodyResult],
@@ -162,5 +158,6 @@ export async function __renderPage() { throw new Error("No <html> page element f
return {
result: sourceJsx,
contents: modJsx,
+ css: sourceJsx.css,
};
}