Codegen

作者 vercel-labsfc2a696a50a3無授權條款18K 個星標收錄於 2026年10月8日更新於 2026年10月8日儲存庫昨天更新

Code generation utilities for json-render. Use when generating code from UI specs, building custom code exporters, traversing specs, or serializing props for @json-render/codegen.

精選僅含說明Software Development
AI 產生的概覽

介紹 @json-render/codegen 工具,用於把 json-render UI 規格轉換為框架程式碼。

功能
此技能說明 @json-render/codegen 套件,這是一組與框架無關的工具,用於從 json-render UI 樹產生程式碼。內容涵蓋樹狀走訪輔助函式,可走訪規格並收集用到的元件、狀態路徑與動作,以及把屬性值序列化為可用於 JSX 字串的序列化輔助函式。它也展示 GeneratedFile 與 CodeGenerator 型別,並簡述如何為 Next.js、Remix 等框架建立自訂匯出器。
適用情境
適用於從 UI 規格產生程式碼、建立自訂程式碼匯出器、走訪規格,或為 @json-render/codegen 序列化屬性的情境。適合需要走訪或序列化行為的 json-render UI 樹開發者。
執行需求
需要 @json-render/codegen npm 套件與 @json-render/core 型別;範例使用 TypeScript。不附帶指令碼,僅為說明文件。

@json-render/codegen

Framework-agnostic utilities for generating code from json-render UI trees. Use these to build custom code exporters for Next.js, Remix, or other frameworks.

Installation

bash
npm install @json-render/codegen

Tree Traversal

typescript
import {  traverseSpec,  collectUsedComponents,  collectStatePaths,  collectActions,} from "@json-render/codegen";
// Walk the spec depth-firsttraverseSpec(spec, (element, key, depth, parent) => {  console.log(`${" ".repeat(depth * 2)}${key}: ${element.type}`);});
// Get all component types usedconst components = collectUsedComponents(spec);// Set { "Card", "Metric", "Button" }
// Get all state paths referencedconst statePaths = collectStatePaths(spec);// Set { "analytics/revenue", "user/name" }
// Get all action namesconst actions = collectActions(spec);// Set { "submit_form", "refresh_data" }

Serialization

typescript
import {  serializePropValue,  serializeProps,  escapeString,  type SerializeOptions,} from "@json-render/codegen";
// Serialize a single valueserializePropValue("hello");// { value: '"hello"', needsBraces: false }
serializePropValue({ $state: "/user/name" });// { value: '{ $state: "/user/name" }', needsBraces: true }
// Serialize props for JSXserializeProps({ title: "Dashboard", columns: 3, disabled: true });// 'title="Dashboard" columns={3} disabled'
// Escape strings for codeescapeString('hello "world"');// 'hello \"world\"'

SerializeOptions

typescript
interface SerializeOptions {  quotes?: "single" | "double";  indent?: number;}

Types

typescript
import type { GeneratedFile, CodeGenerator } from "@json-render/codegen";
const myGenerator: CodeGenerator = {  generate(spec) {    return [      { path: "package.json", content: "..." },      { path: "app/page.tsx", content: "..." },    ];  },};

Building a Custom Generator

typescript
import {  collectUsedComponents,  collectStatePaths,  traverseSpec,  serializeProps,  type GeneratedFile,} from "@json-render/codegen";import type { Spec } from "@json-render/core";
export function generateNextJSProject(spec: Spec): GeneratedFile[] {  const files: GeneratedFile[] = [];  const components = collectUsedComponents(spec);  // Generate package.json, component files, main page...  return files;}

來源與署名

來源:vercel-labs/json-render位於skills/codegen提交fc2a696

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架