Senior Frontend Engineer
<html>
<body>
<h1>Hello, World!</h1>
<script src="./app.js"></script>
</body>
</html>
???
???
index.xyz
<html>
<body>
<% 'hello'.toUpperCase() %>
</body>
</html>
index.html
<html>
<body>
HELLO
</body>
</html>
index.xyz
<%
const content = require('./content.mdx');
const three: number = 3;
%>
<html>
<body>
<% three %>
<% content %>
</body>
</html>
index.html
<html>
<body>
3
<!-- MDX content as HTML here -->
</body>
</html>
index.xyz
<%
import content from './content.mdx';
const three: number = 3;
%>
<html>
<body>
<% three %>
<% content %>
</body>
</html>
temp-index.ts
import content from './content.mdx';
const three: number = 3;
export function html() {
return `
<html>
<body>
${three}
${content}
</body>
</html>
`
}
???
???
???
Introducing
Introducing
A Low-Level, Framework Agnostic,
Vite Powered Static-Site-Generator
vite-plugin-sitemap
vite-plugin-md-to-html
@mdx-js/rollup
// vite.config.ts
import { defineConfig } from 'abell';
import mdx from '@mdx-js/rollup';
import { vitePluginJSXToHTML } from 'vite-plugin-jsx-to-html';
export default defineConfig({
plugins: [
mdx(), // Turns MDX to JSX
vitePluginJSXToHTML({ extensions: ['.mdx'] }), // Turns JSX to HTML
]
})
// vite.config.ts
import { defineConfig } from 'abell';
import mdx from '@mdx-js/rollup';
import { vitePluginJSXToHTML } from 'vite-plugin-jsx-to-html';
import rehypeSlug from 'rehype-slug';
export default defineConfig({
plugins: [
mdx({
rehypePlugins: [rehypeSlug]
}), // Turns MDX to JSX
vitePluginJSXToHTML({ extensions: ['.mdx'] }), // Turns JSX to HTML
]
})
import index from './index.abell';
import layout from './layout.abell';
const response = await fetch('https://your-wordpress-site.com/wp-json/wp/v2/posts').then((res) => res.json());
const posts = response.data;
export const makeRoutes = () => {
return [
{
path: '/',
render: () => index()
}
...posts.map((post) => ({
path: post.slug,
render: () => layout(post.content.rendered)
}))
]
}
All of JS Ecosystem 🫡
npx create-abell