![Tom](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2023-08-29%2F5841799811344_a93f20b94a044b7f6f89_192.jpg&w=96&q=75)
![goose-honk-on-fire emoji](/_next/image?url=https%3A%2F%2Femoji.slack-edge.com%2FT0266FRGM%2Fgoose-honk-on-fire%2F72d15424a5785148.gif&w=96&q=75)
Posts tagged with :goose-honk-on-fire:
![Tom](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2023-08-29%2F5841799811344_a93f20b94a044b7f6f89_192.jpg&w=96&q=75)
![cwi](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2021-08-21%2F2405926167154_c0843564f38f6e19f149_192.jpg&w=96&q=75)
![ArcadeWise](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2022-12-27%2F4564327110326_b4aca2ff5dc5656c16e8_192.png&w=96&q=75)
![tetraoxygen](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2022-06-18%2F3688573836146_08df6a283385926ec5d5_192.png&w=96&q=75)
![rishi](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2023-06-17%2F5436191364262_871f10efad02ccd8a027_192.png&w=96&q=75)
define middleware { test, logger } from "./api" define guards { authed } from "./api" define handlers { getAllTodos, postTodos } from "./api" global | middleware logger fragment getTodosFragment(level) | guard authed(level) | middleware test route "/todos" { | middleware test get { | expand getTodosFragment("user") getAll } post { | expand getTodosFragment("admin") postTodos } } 🛠️ The Idyllic language reverses the conventional paradigm that surrounds Node REST APIs: usually, you have to write your functions _for a framework_. With Idyllic, you can assemble your API completely independently of your functions themselves—now, an API is simply a wrapper over regular old Typescript functions! The language itself comes with a pretty big suite of features (you can read more about them at the Github page): • Static typing with Typescript & definition types • Parameterized, first-class macro support with Fragments • Data pipelines with Sequences • First-class support for Middleware and Guards • Query parameter capturing • Request type definitions 🕸️ The repository also comes with a minimal HTTP server that takes in a compiled Idyll and starts up a fully-functioning API from it: import { IdyllicCompiler } from "@idyllic/compiler"; import { IdyllicServer } from "@idyllic/server"; (async () => { // The fromFile static method reads the file into a string for us const compiler = await IdyllicCompiler.fromFile("ast.idl") // The compile method executes all 5 stages of compilation automatically. const compiled = await compiler.compile() // The server constructor takes in a compiled Idyllic object. const server = new IdyllicServer(compiled) // The start function takes in a port number (defaults to 3000) and a function to be executed on start. server.start(3000, () => { console.log("Idyllic server has started!") }) })()💨 This server implementation’s pretty fast, too: in most cases, it comes close to (and in some cases, beats) Express! It’s derived directly from node’s built-in
http
module.
Idyllic’s been a project that I’ve dreamt of making for quite a while now, and I’m super happy with how it turned out! I’ve included a little walkthrough of an Idyllic project down below :) I can’t wait to see what you’ll build with it!
Special thanks to @JackyZhao @matthewgleich @safin.singh for being awesome along the way ✨![anthonykung](/_next/image?url=https%3A%2F%2Favatars.slack-edge.com%2F2020-08-10%2F1316696952864_84f4cfca4c448a91cbf3_192.png&w=96&q=75)
![thestarmansart](/_next/image?url=https%3A%2F%2Fdl.airtable.com%2F.attachments%2F5684139c172c97780f45a8239ebb0891%2Ffc7628b6%2F1182030843491_76f908afb7438fc8ab4f_192.png&w=96&q=75)