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 从公开仓库中收录这些内容。

举报或申请下架