GithubHelp home page GithubHelp logo

aleclarson / astro-compiler Goto Github PK

View Code? Open in Web Editor NEW

This project forked from withastro/compiler

0.0 1.0 0.0 12.49 MB

The Astro v2 compiler. Written in Go, distributed as WASM.

License: Other

JavaScript 1.82% Go 90.38% TypeScript 7.76% Makefile 0.04%

astro-compiler's Introduction

Astro Compiler

Astro’s Go + WASM compiler.

⚠️ Currently in beta!

Install

npm install @astrojs/compiler

Usage

Note: Public APIs are likely to change before 1.0! Use at your own discretion.

Transform .astro to valid TypeScript

The Astro compiler can convert .astro syntax to a TypeScript Module whose default export generates HTML.

Some notes...

  • TypeScript is valid .astro syntax! The output code may need an additional post-processing step to generate valid JavaScript.
  • .astro files rely on a server implementation exposed as astro/internal in the Node ecosystem. Other runtimes currently need to bring their own rendering implementation and reference it via internalURL. This is a pain point we're looking into fixing.
import { transform } from '@astrojs/compiler';

const result = await transform(source, {
  site: 'https://mysite.dev',
  sourcefile: '/Users/astro/Code/project/src/pages/index.astro',
  sourcemap: 'both',
  internalURL: 'astro/internal',
});

Parse .astro and return an AST

The Astro compiler can emit an AST using the parse method.

Some notes...

  • Position data is currently incomplete and in some cases incorrect. We're working on it!
  • A TextNode can represent both HTML text and JavaScript/TypeScript source code.
  • The @astrojs/compiler/utils entrypoint exposes a walk function that can be used to traverse the AST. It also exposes the is helper which can be used as guards to derive the proper types for each node.
import { parse } from '@astrojs/compiler';
import { walk, is } from '@astrojs/compiler/utils';

const result = await parse(source, {
  position: false, // defaults to `true`
});

walk(result.ast, (node) => {
  // `tag` nodes are `element` | `custom-element` | `component`
  if (is.tag(node)) {
    console.log(node.name);
  }
})

Contributing

CONTRIBUTING.md

astro-compiler's People

Contributors

antonyfaris avatar drwpow avatar fredkschott avatar github-actions[bot] avatar janimo avatar jonathantneal avatar matthewp avatar natemoo-re avatar siilwyn avatar williamtetlow avatar xnuray98s avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.