0x-lang 0.1.14 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +30 -6
- package/dist/cli.js.map +1 -1
- package/dist/compiler.d.ts +3 -1
- package/dist/compiler.js +42 -0
- package/dist/compiler.js.map +1 -1
- package/dist/generators/ai-bridge.d.ts +7 -0
- package/dist/generators/ai-bridge.js +283 -0
- package/dist/generators/ai-bridge.js.map +1 -0
- package/dist/generators/backend.d.ts +2 -0
- package/dist/generators/backend.js +387 -0
- package/dist/generators/backend.js.map +1 -0
- package/dist/generators/react-native.d.ts +2 -0
- package/dist/generators/react-native.js +639 -0
- package/dist/generators/react-native.js.map +1 -0
- package/dist/generators/react.d.ts +19 -1
- package/dist/generators/react.js +7 -7
- package/dist/generators/react.js.map +1 -1
- package/dist/generators/terraform.d.ts +2 -0
- package/dist/generators/terraform.js +350 -0
- package/dist/generators/terraform.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/package.json +12 -3
package/dist/cli.js
CHANGED
|
@@ -4,31 +4,49 @@ import { readFileSync, writeFileSync, mkdirSync, existsSync, watchFile } from 'f
|
|
|
4
4
|
import { resolve, basename, join } from 'path';
|
|
5
5
|
import { compile } from './compiler.js';
|
|
6
6
|
import { initProject } from './init.js';
|
|
7
|
+
import { getLanguageSpec } from './generators/ai-bridge.js';
|
|
8
|
+
const VALID_TARGETS = ['react', 'vue', 'svelte', 'backend', 'react-native', 'terraform'];
|
|
7
9
|
const HELP = `
|
|
8
10
|
0x Compiler CLI
|
|
9
11
|
|
|
10
12
|
Usage:
|
|
11
|
-
0x build <file.ai> --target <target> [--output <dir>]
|
|
13
|
+
0x build <file.ai> --target <target> [--output <dir>] [--compact]
|
|
12
14
|
0x dev <file.ai> --target <target>
|
|
13
15
|
0x bench <file.ai>
|
|
16
|
+
0x spec
|
|
14
17
|
0x init [project-name]
|
|
15
18
|
|
|
16
19
|
Commands:
|
|
17
20
|
build Compile .ai file to target framework code
|
|
18
21
|
dev Watch mode — recompile on file changes
|
|
19
22
|
bench Show token efficiency benchmark
|
|
23
|
+
spec Print the 0x language specification (for AI/LLM agents)
|
|
20
24
|
init Create a new 0x project
|
|
21
25
|
|
|
26
|
+
Targets:
|
|
27
|
+
react React JSX + hooks (web frontend)
|
|
28
|
+
vue Vue 3 SFC (web frontend)
|
|
29
|
+
svelte Svelte component (web frontend)
|
|
30
|
+
backend Express.js server (API server)
|
|
31
|
+
react-native React Native (mobile)
|
|
32
|
+
terraform Terraform HCL (infrastructure)
|
|
33
|
+
|
|
22
34
|
Options:
|
|
23
|
-
--target <target> Target framework
|
|
35
|
+
--target <target> Target framework (comma-separated for multiple)
|
|
24
36
|
--output <dir> Output directory (default: ./dist/)
|
|
37
|
+
--compact AI-optimized compact output (strips comments, minimizes whitespace)
|
|
38
|
+
--no-sourcemap Disable source maps
|
|
25
39
|
--help Show this help message
|
|
26
40
|
|
|
27
41
|
Examples:
|
|
28
42
|
0x build todo.ai --target react
|
|
43
|
+
0x build api.ai --target backend
|
|
44
|
+
0x build infra.ai --target terraform
|
|
29
45
|
0x build todo.ai --target react,vue,svelte --output ./dist/
|
|
46
|
+
0x build todo.ai --target react --compact
|
|
30
47
|
0x dev todo.ai --target react
|
|
31
48
|
0x bench todo.ai
|
|
49
|
+
0x spec
|
|
32
50
|
0x init my-app
|
|
33
51
|
`;
|
|
34
52
|
function main() {
|
|
@@ -48,6 +66,9 @@ function main() {
|
|
|
48
66
|
case 'bench':
|
|
49
67
|
benchCommand(args.slice(1));
|
|
50
68
|
break;
|
|
69
|
+
case 'spec':
|
|
70
|
+
console.log(getLanguageSpec());
|
|
71
|
+
break;
|
|
51
72
|
case 'init':
|
|
52
73
|
initProject(args[1] || 'my-0x-app');
|
|
53
74
|
break;
|
|
@@ -92,13 +113,16 @@ function buildCommand(args) {
|
|
|
92
113
|
console.log(`\n0x Compiler v0.1.5`);
|
|
93
114
|
console.log(`Compiling: ${file}\n`);
|
|
94
115
|
for (const target of targets) {
|
|
95
|
-
if (!
|
|
96
|
-
console.error(`Error: Unknown target '${target}'. Use
|
|
116
|
+
if (!VALID_TARGETS.includes(target)) {
|
|
117
|
+
console.error(`Error: Unknown target '${target}'. Use: ${VALID_TARGETS.join(', ')}`);
|
|
97
118
|
process.exit(1);
|
|
98
119
|
}
|
|
99
120
|
try {
|
|
100
|
-
const
|
|
101
|
-
const
|
|
121
|
+
const compact = process.argv.includes('--compact');
|
|
122
|
+
const noSourceMap = process.argv.includes('--no-sourcemap');
|
|
123
|
+
const result = compile(source, { target: target, compact, sourceMap: noSourceMap ? false : undefined });
|
|
124
|
+
const extMap = { react: 'jsx', vue: 'vue', svelte: 'svelte', backend: 'ts', 'react-native': 'tsx', terraform: 'tf' };
|
|
125
|
+
const ext = extMap[target] || 'js';
|
|
102
126
|
const outDir = resolve(output, target);
|
|
103
127
|
const outFile = join(outDir, `${name}.${ext}`);
|
|
104
128
|
if (!existsSync(outDir)) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,SAAS;AAET,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/compiler.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { GeneratedCode } from './ast.js';
|
|
2
|
+
export type CompileTarget = 'react' | 'vue' | 'svelte' | 'backend' | 'react-native' | 'terraform';
|
|
2
3
|
export interface CompileOptions {
|
|
3
|
-
target:
|
|
4
|
+
target: CompileTarget;
|
|
4
5
|
validate?: boolean;
|
|
5
6
|
sourceMap?: boolean;
|
|
6
7
|
useClient?: boolean;
|
|
8
|
+
compact?: boolean;
|
|
7
9
|
}
|
|
8
10
|
export declare function compile(source: string, options: CompileOptions): GeneratedCode;
|
package/dist/compiler.js
CHANGED
|
@@ -3,6 +3,9 @@ import { parse } from './parser.js';
|
|
|
3
3
|
import { generateReact } from './generators/react.js';
|
|
4
4
|
import { generateVue } from './generators/vue.js';
|
|
5
5
|
import { generateSvelte } from './generators/svelte.js';
|
|
6
|
+
import { generateBackend } from './generators/backend.js';
|
|
7
|
+
import { generateReactNative } from './generators/react-native.js';
|
|
8
|
+
import { generateTerraform } from './generators/terraform.js';
|
|
6
9
|
import { validate } from './validator.js';
|
|
7
10
|
export function compile(source, options) {
|
|
8
11
|
const ast = parse(source);
|
|
@@ -25,6 +28,15 @@ export function compile(source, options) {
|
|
|
25
28
|
case 'svelte':
|
|
26
29
|
result = generateSvelte(ast);
|
|
27
30
|
break;
|
|
31
|
+
case 'backend':
|
|
32
|
+
result = generateBackend(ast);
|
|
33
|
+
break;
|
|
34
|
+
case 'react-native':
|
|
35
|
+
result = generateReactNative(ast);
|
|
36
|
+
break;
|
|
37
|
+
case 'terraform':
|
|
38
|
+
result = generateTerraform(ast);
|
|
39
|
+
break;
|
|
28
40
|
default:
|
|
29
41
|
throw new Error(`Unknown target: ${options.target}`);
|
|
30
42
|
}
|
|
@@ -41,6 +53,36 @@ export function compile(source, options) {
|
|
|
41
53
|
if (options.useClient === false && options.target === 'react') {
|
|
42
54
|
result = { ...result, code: result.code.replace(/^'use client';\n\n/gm, '') };
|
|
43
55
|
}
|
|
56
|
+
// Post-process: compact mode for AI-optimized output
|
|
57
|
+
if (options.compact) {
|
|
58
|
+
result = compactify(result);
|
|
59
|
+
}
|
|
44
60
|
return result;
|
|
45
61
|
}
|
|
62
|
+
function compactify(result) {
|
|
63
|
+
let code = result.code;
|
|
64
|
+
// Strip source map comments
|
|
65
|
+
code = code.replace(/\{\/\* 0x:L\d+ \*\/\}/g, '');
|
|
66
|
+
code = code.replace(/<!-- 0x:L\d+ -->/g, '');
|
|
67
|
+
// Strip block comments
|
|
68
|
+
code = code.replace(/\{\/\*[\s\S]*?\*\/\}/g, '');
|
|
69
|
+
code = code.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
70
|
+
// Strip single-line comments (but not URLs or sourceMappingURL)
|
|
71
|
+
code = code.replace(/^(\s*)\/\/(?!#).*$/gm, '');
|
|
72
|
+
// Strip "Generated by 0x" header comments
|
|
73
|
+
code = code.replace(/^\/\/ Generated by 0x.*$/gm, '');
|
|
74
|
+
// Collapse multiple empty lines to single empty line
|
|
75
|
+
code = code.replace(/\n{3,}/g, '\n\n');
|
|
76
|
+
// Remove trailing whitespace on each line
|
|
77
|
+
code = code.replace(/[ \t]+$/gm, '');
|
|
78
|
+
// Trim
|
|
79
|
+
code = code.trim();
|
|
80
|
+
return {
|
|
81
|
+
...result,
|
|
82
|
+
code,
|
|
83
|
+
lineCount: code.split('\n').length,
|
|
84
|
+
tokenCount: code.split(/\s+/).filter(t => t.length > 0).length,
|
|
85
|
+
sourceMap: undefined,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
46
88
|
//# sourceMappingURL=compiler.js.map
|
package/dist/compiler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAAA,uBAAuB;AAEvB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CompileTarget } from '../compiler.js';
|
|
2
|
+
/** Returns the 0x language specification as a structured reference for LLM system prompts */
|
|
3
|
+
export declare function getLanguageSpec(): string;
|
|
4
|
+
/** Generate a structured LLM prompt for creating 0x code from a natural language description */
|
|
5
|
+
export declare function generatePrompt(description: string, target?: CompileTarget): string;
|
|
6
|
+
/** Generate a 0x code skeleton from a feature description */
|
|
7
|
+
export declare function compileFromDescription(description: string): string;
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
// 0x → AI/LLM Bridge
|
|
2
|
+
// Provides language spec, prompt generation, and skeleton creation for AI agents
|
|
3
|
+
/** Returns the 0x language specification as a structured reference for LLM system prompts */
|
|
4
|
+
export function getLanguageSpec() {
|
|
5
|
+
return `# 0x Language Specification
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
0x is a declarative, AI-first programming language that compiles to React, Vue, Svelte, Express.js, React Native, and Terraform.
|
|
9
|
+
|
|
10
|
+
## Basic Syntax
|
|
11
|
+
|
|
12
|
+
### Pages & Components
|
|
13
|
+
\`\`\`
|
|
14
|
+
page TodoApp:
|
|
15
|
+
state todos: list[any] = []
|
|
16
|
+
state input: str = ""
|
|
17
|
+
|
|
18
|
+
layout vertical gap=16:
|
|
19
|
+
text "Todo App" size=xl bold
|
|
20
|
+
input input placeholder="Add todo"
|
|
21
|
+
button "Add":
|
|
22
|
+
todos.push({id: Date.now(), text: input})
|
|
23
|
+
input = ""
|
|
24
|
+
for todo in todos:
|
|
25
|
+
layout horizontal:
|
|
26
|
+
text todo.text
|
|
27
|
+
button "Delete" -> todos = todos.filter(t => t.id != todo.id)
|
|
28
|
+
\`\`\`
|
|
29
|
+
|
|
30
|
+
### State & Derived
|
|
31
|
+
\`\`\`
|
|
32
|
+
state count: int = 0
|
|
33
|
+
state items: list[str] = []
|
|
34
|
+
derived total = items.length
|
|
35
|
+
derived filtered = items.filter(i => i.active)
|
|
36
|
+
\`\`\`
|
|
37
|
+
|
|
38
|
+
### Props
|
|
39
|
+
\`\`\`
|
|
40
|
+
component Card:
|
|
41
|
+
prop title
|
|
42
|
+
prop subtitle = "Default"
|
|
43
|
+
layout vertical:
|
|
44
|
+
text title size=lg bold
|
|
45
|
+
text subtitle color=gray
|
|
46
|
+
\`\`\`
|
|
47
|
+
|
|
48
|
+
### Control Flow
|
|
49
|
+
\`\`\`
|
|
50
|
+
if condition:
|
|
51
|
+
text "True"
|
|
52
|
+
else:
|
|
53
|
+
text "False"
|
|
54
|
+
|
|
55
|
+
for item in items:
|
|
56
|
+
text item.name
|
|
57
|
+
|
|
58
|
+
show when isVisible:
|
|
59
|
+
text "Visible"
|
|
60
|
+
\`\`\`
|
|
61
|
+
|
|
62
|
+
### Events & Actions
|
|
63
|
+
\`\`\`
|
|
64
|
+
button "Click" -> count += 1
|
|
65
|
+
|
|
66
|
+
button "Save":
|
|
67
|
+
await api.post("/save", data)
|
|
68
|
+
\`\`\`
|
|
69
|
+
|
|
70
|
+
### Lifecycle
|
|
71
|
+
\`\`\`
|
|
72
|
+
onMount:
|
|
73
|
+
const data = await fetch("/api/data")
|
|
74
|
+
|
|
75
|
+
onDestroy:
|
|
76
|
+
clearInterval(timer)
|
|
77
|
+
|
|
78
|
+
watch count:
|
|
79
|
+
console.log("Count changed:", count)
|
|
80
|
+
\`\`\`
|
|
81
|
+
|
|
82
|
+
### API
|
|
83
|
+
\`\`\`
|
|
84
|
+
api userApi:
|
|
85
|
+
base = "/api"
|
|
86
|
+
get users = "/users"
|
|
87
|
+
post createUser = "/users"
|
|
88
|
+
\`\`\`
|
|
89
|
+
|
|
90
|
+
### UI Elements
|
|
91
|
+
- \`layout\` — div/View container (horizontal, vertical, grid, wrap)
|
|
92
|
+
- \`text\` — text content with size, color, bold
|
|
93
|
+
- \`button\` — click handler with label
|
|
94
|
+
- \`input\` — text input with bind, placeholder
|
|
95
|
+
- \`image\` — image with src, alt, size
|
|
96
|
+
- \`link\` — anchor with href, label
|
|
97
|
+
- \`toggle\` — checkbox/switch with bind
|
|
98
|
+
- \`select\` — dropdown with options, bind
|
|
99
|
+
- \`modal\` — dialog with title, trigger
|
|
100
|
+
- \`table\` — data table with columns
|
|
101
|
+
- \`form\` — form with fields and validation
|
|
102
|
+
- \`chart\` — data visualization (bar, line, pie)
|
|
103
|
+
- \`upload\` — file upload handler
|
|
104
|
+
|
|
105
|
+
### Styles
|
|
106
|
+
\`\`\`
|
|
107
|
+
style card:
|
|
108
|
+
padding = 16
|
|
109
|
+
radius = 8
|
|
110
|
+
shadow = "0 2px 4px rgba(0,0,0,0.1)"
|
|
111
|
+
bg = "#fff"
|
|
112
|
+
\`\`\`
|
|
113
|
+
|
|
114
|
+
### Backend (Express Server Target)
|
|
115
|
+
\`\`\`
|
|
116
|
+
endpoint GET "/api/users":
|
|
117
|
+
const users = await db.users.findAll()
|
|
118
|
+
res.json(users)
|
|
119
|
+
|
|
120
|
+
middleware auth:
|
|
121
|
+
if !req.headers.authorization:
|
|
122
|
+
res.status(401).json({error: "Unauthorized"})
|
|
123
|
+
next()
|
|
124
|
+
|
|
125
|
+
cron cleanup "0 3 * * *":
|
|
126
|
+
await deleteExpiredSessions()
|
|
127
|
+
|
|
128
|
+
queue emailSender:
|
|
129
|
+
await sendEmail(job.data)
|
|
130
|
+
|
|
131
|
+
webhook stripe "/webhooks/stripe":
|
|
132
|
+
const event = req.body
|
|
133
|
+
await processPayment(event)
|
|
134
|
+
|
|
135
|
+
cache sessions redis:
|
|
136
|
+
ttl = 3600
|
|
137
|
+
\`\`\`
|
|
138
|
+
|
|
139
|
+
### Infrastructure (Terraform Target)
|
|
140
|
+
\`\`\`
|
|
141
|
+
deploy aws:
|
|
142
|
+
region: "us-east-1"
|
|
143
|
+
|
|
144
|
+
storage files s3:
|
|
145
|
+
bucket: "my-app-files"
|
|
146
|
+
|
|
147
|
+
env prod:
|
|
148
|
+
DATABASE_URL = "postgres://..." secret
|
|
149
|
+
API_KEY = "sk-..." secret
|
|
150
|
+
|
|
151
|
+
docker node:20-alpine:
|
|
152
|
+
port: 3000
|
|
153
|
+
|
|
154
|
+
domain example.com:
|
|
155
|
+
ssl: true
|
|
156
|
+
\`\`\`
|
|
157
|
+
|
|
158
|
+
## Compile Targets
|
|
159
|
+
| Target | Output | Use Case |
|
|
160
|
+
|--------|--------|----------|
|
|
161
|
+
| react | React JSX + hooks | Web frontend |
|
|
162
|
+
| vue | Vue 3 SFC | Web frontend |
|
|
163
|
+
| svelte | Svelte component | Web frontend |
|
|
164
|
+
| backend | Express.js server | API server |
|
|
165
|
+
| react-native | React Native | Mobile apps |
|
|
166
|
+
| terraform | Terraform HCL | Infrastructure |
|
|
167
|
+
|
|
168
|
+
## Key Principles
|
|
169
|
+
1. Indentation-based scoping (2 spaces)
|
|
170
|
+
2. State is reactive by default
|
|
171
|
+
3. Minimal boilerplate — no imports, no types needed
|
|
172
|
+
4. AI-optimized: 60-70% fewer tokens than equivalent JS/TS
|
|
173
|
+
`;
|
|
174
|
+
}
|
|
175
|
+
/** Generate a structured LLM prompt for creating 0x code from a natural language description */
|
|
176
|
+
export function generatePrompt(description, target = 'react') {
|
|
177
|
+
return `You are a 0x language expert. Generate 0x code for the following requirement.
|
|
178
|
+
|
|
179
|
+
## Target
|
|
180
|
+
Compile target: ${target}
|
|
181
|
+
|
|
182
|
+
## Requirement
|
|
183
|
+
${description}
|
|
184
|
+
|
|
185
|
+
## Rules
|
|
186
|
+
1. Use valid 0x syntax (indentation-based, 2 spaces)
|
|
187
|
+
2. Use state for reactive data, derived for computed values
|
|
188
|
+
3. Use layout, text, button, input for UI elements
|
|
189
|
+
4. Use endpoint, middleware, cron for backend logic
|
|
190
|
+
5. Use deploy, storage, env for infrastructure
|
|
191
|
+
6. Keep it minimal — 0x is designed to be concise
|
|
192
|
+
|
|
193
|
+
## Output
|
|
194
|
+
Return ONLY valid 0x code, no explanations.`;
|
|
195
|
+
}
|
|
196
|
+
/** Generate a 0x code skeleton from a feature description */
|
|
197
|
+
export function compileFromDescription(description) {
|
|
198
|
+
const lower = description.toLowerCase();
|
|
199
|
+
const lines = [];
|
|
200
|
+
// Detect intent
|
|
201
|
+
const isBackend = /api|server|endpoint|backend|auth|database|queue|cron/.test(lower);
|
|
202
|
+
const isMobile = /mobile|app|native|ios|android/.test(lower);
|
|
203
|
+
const isInfra = /deploy|infra|docker|cloud|storage|cdn/.test(lower);
|
|
204
|
+
if (isBackend) {
|
|
205
|
+
lines.push(`// 0x Backend — ${description}`);
|
|
206
|
+
lines.push('');
|
|
207
|
+
if (/auth/.test(lower)) {
|
|
208
|
+
lines.push('middleware auth:');
|
|
209
|
+
lines.push(' if !req.headers.authorization:');
|
|
210
|
+
lines.push(' res.status(401).json({error: "Unauthorized"})');
|
|
211
|
+
lines.push(' next()');
|
|
212
|
+
lines.push('');
|
|
213
|
+
}
|
|
214
|
+
if (/user|crud/.test(lower)) {
|
|
215
|
+
lines.push('endpoint GET "/api/users":');
|
|
216
|
+
lines.push(' const users = await db.users.findAll()');
|
|
217
|
+
lines.push(' res.json(users)');
|
|
218
|
+
lines.push('');
|
|
219
|
+
lines.push('endpoint POST "/api/users":');
|
|
220
|
+
lines.push(' const user = await db.users.create(req.body)');
|
|
221
|
+
lines.push(' res.status(201).json(user)');
|
|
222
|
+
lines.push('');
|
|
223
|
+
}
|
|
224
|
+
if (/queue|job|background/.test(lower)) {
|
|
225
|
+
lines.push('queue worker:');
|
|
226
|
+
lines.push(' await processJob(job.data)');
|
|
227
|
+
lines.push('');
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
else if (isInfra) {
|
|
231
|
+
lines.push(`// 0x Infrastructure — ${description}`);
|
|
232
|
+
lines.push('');
|
|
233
|
+
if (/aws|deploy/.test(lower)) {
|
|
234
|
+
lines.push('deploy aws:');
|
|
235
|
+
lines.push(' region: "us-east-1"');
|
|
236
|
+
lines.push('');
|
|
237
|
+
}
|
|
238
|
+
if (/docker/.test(lower)) {
|
|
239
|
+
lines.push('docker node:20-alpine:');
|
|
240
|
+
lines.push(' port: 3000');
|
|
241
|
+
lines.push('');
|
|
242
|
+
}
|
|
243
|
+
if (/storage|s3/.test(lower)) {
|
|
244
|
+
lines.push('storage files s3:');
|
|
245
|
+
lines.push(' bucket: "my-app-files"');
|
|
246
|
+
lines.push('');
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
// Default: UI page
|
|
251
|
+
const pageName = extractPageName(description);
|
|
252
|
+
lines.push(`page ${pageName}:`);
|
|
253
|
+
lines.push(' state loading: bool = true');
|
|
254
|
+
lines.push(' state data: list[any] = []');
|
|
255
|
+
lines.push('');
|
|
256
|
+
lines.push(' onMount:');
|
|
257
|
+
lines.push(' const res = await fetch("/api/data")');
|
|
258
|
+
lines.push(' data = await res.json()');
|
|
259
|
+
lines.push(' loading = false');
|
|
260
|
+
lines.push('');
|
|
261
|
+
lines.push(' layout vertical gap=16 padding=24:');
|
|
262
|
+
lines.push(` text "${pageName}" size=xl bold`);
|
|
263
|
+
if (/list|table|grid/.test(lower)) {
|
|
264
|
+
lines.push(' for item in data:');
|
|
265
|
+
lines.push(' layout horizontal gap=8:');
|
|
266
|
+
lines.push(' text item.name');
|
|
267
|
+
}
|
|
268
|
+
if (/form|input|create/.test(lower)) {
|
|
269
|
+
lines.push(' input bind=newItem placeholder="Enter value"');
|
|
270
|
+
lines.push(' button "Submit":');
|
|
271
|
+
lines.push(' await api.post("/data", {name: newItem})');
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return lines.join('\n');
|
|
275
|
+
}
|
|
276
|
+
function extractPageName(desc) {
|
|
277
|
+
const words = desc.split(/\s+/).filter(w => w.length > 2 && /^[A-Za-z]+$/.test(w));
|
|
278
|
+
if (words.length > 0) {
|
|
279
|
+
return words[0].charAt(0).toUpperCase() + words[0].slice(1) + 'Page';
|
|
280
|
+
}
|
|
281
|
+
return 'MyPage';
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=ai-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-bridge.js","sourceRoot":"","sources":["../../src/generators/ai-bridge.ts"],"names":[],"mappings":"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"}
|