@jetstart/core 1.1.1
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/.eslintrc.json +6 -0
- package/README.md +124 -0
- package/dist/build/builder.d.ts +57 -0
- package/dist/build/builder.d.ts.map +1 -0
- package/dist/build/builder.js +151 -0
- package/dist/build/builder.js.map +1 -0
- package/dist/build/cache.d.ts +51 -0
- package/dist/build/cache.d.ts.map +1 -0
- package/dist/build/cache.js +152 -0
- package/dist/build/cache.js.map +1 -0
- package/dist/build/dsl-parser.d.ts +54 -0
- package/dist/build/dsl-parser.d.ts.map +1 -0
- package/dist/build/dsl-parser.js +373 -0
- package/dist/build/dsl-parser.js.map +1 -0
- package/dist/build/dsl-types.d.ts +47 -0
- package/dist/build/dsl-types.d.ts.map +1 -0
- package/dist/build/dsl-types.js +7 -0
- package/dist/build/dsl-types.js.map +1 -0
- package/dist/build/gradle-injector.d.ts +14 -0
- package/dist/build/gradle-injector.d.ts.map +1 -0
- package/dist/build/gradle-injector.js +77 -0
- package/dist/build/gradle-injector.js.map +1 -0
- package/dist/build/gradle.d.ts +43 -0
- package/dist/build/gradle.d.ts.map +1 -0
- package/dist/build/gradle.js +281 -0
- package/dist/build/gradle.js.map +1 -0
- package/dist/build/index.d.ts +10 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +26 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/parser.d.ts +12 -0
- package/dist/build/parser.d.ts.map +1 -0
- package/dist/build/parser.js +71 -0
- package/dist/build/parser.js.map +1 -0
- package/dist/build/watcher.d.ts +30 -0
- package/dist/build/watcher.d.ts.map +1 -0
- package/dist/build/watcher.js +120 -0
- package/dist/build/watcher.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/server/http.d.ts +12 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +32 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/index.d.ts +35 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +262 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/middleware.d.ts +7 -0
- package/dist/server/middleware.d.ts.map +1 -0
- package/dist/server/middleware.js +42 -0
- package/dist/server/middleware.js.map +1 -0
- package/dist/server/routes.d.ts +7 -0
- package/dist/server/routes.d.ts.map +1 -0
- package/dist/server/routes.js +104 -0
- package/dist/server/routes.js.map +1 -0
- package/dist/types/index.d.ts +20 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +23 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +10 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +33 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/qr.d.ts +8 -0
- package/dist/utils/qr.d.ts.map +1 -0
- package/dist/utils/qr.js +48 -0
- package/dist/utils/qr.js.map +1 -0
- package/dist/utils/session.d.ts +18 -0
- package/dist/utils/session.d.ts.map +1 -0
- package/dist/utils/session.js +49 -0
- package/dist/utils/session.js.map +1 -0
- package/dist/websocket/handler.d.ts +25 -0
- package/dist/websocket/handler.d.ts.map +1 -0
- package/dist/websocket/handler.js +126 -0
- package/dist/websocket/handler.js.map +1 -0
- package/dist/websocket/index.d.ts +18 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/dist/websocket/index.js +40 -0
- package/dist/websocket/index.js.map +1 -0
- package/dist/websocket/manager.d.ts +16 -0
- package/dist/websocket/manager.d.ts.map +1 -0
- package/dist/websocket/manager.js +58 -0
- package/dist/websocket/manager.js.map +1 -0
- package/package.json +78 -0
- package/src/build/builder.ts +192 -0
- package/src/build/cache.ts +144 -0
- package/src/build/dsl-parser.ts +382 -0
- package/src/build/dsl-types.ts +50 -0
- package/src/build/gradle-injector.ts +64 -0
- package/src/build/gradle.ts +305 -0
- package/src/build/index.ts +10 -0
- package/src/build/parser.ts +75 -0
- package/src/build/watcher.ts +103 -0
- package/src/index.ts +20 -0
- package/src/server/http.ts +38 -0
- package/src/server/index.ts +272 -0
- package/src/server/middleware.ts +43 -0
- package/src/server/routes.ts +116 -0
- package/src/types/index.ts +21 -0
- package/src/utils/index.ts +7 -0
- package/src/utils/logger.ts +28 -0
- package/src/utils/qr.ts +46 -0
- package/src/utils/session.ts +58 -0
- package/src/websocket/handler.ts +150 -0
- package/src/websocket/index.ts +56 -0
- package/src/websocket/manager.ts +63 -0
- package/tests/build.test.ts +13 -0
- package/tests/server.test.ts +13 -0
- package/tsconfig.json +25 -0
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.DSLParser = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const logger_1 = require("../utils/logger");
|
|
40
|
+
/**
|
|
41
|
+
* DSL Parser
|
|
42
|
+
* Converts Kotlin Compose code to JSON DSL for runtime interpretation
|
|
43
|
+
*/
|
|
44
|
+
class DSLParser {
|
|
45
|
+
static TAG = 'DSLParser';
|
|
46
|
+
/**
|
|
47
|
+
* Parse a Kotlin file and extract UI definition
|
|
48
|
+
*/
|
|
49
|
+
static parseFile(filePath) {
|
|
50
|
+
try {
|
|
51
|
+
if (!fs.existsSync(filePath)) {
|
|
52
|
+
return {
|
|
53
|
+
success: false,
|
|
54
|
+
errors: [`File not found: ${filePath}`]
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
58
|
+
return this.parseContent(content, filePath);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
return {
|
|
62
|
+
success: false,
|
|
63
|
+
errors: [`Failed to read file: ${error}`]
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Parse Kotlin content and extract UI definition
|
|
69
|
+
*/
|
|
70
|
+
static parseContent(content, filePath) {
|
|
71
|
+
try {
|
|
72
|
+
(0, logger_1.log)(`Parsing Kotlin file: ${path.basename(filePath)}`);
|
|
73
|
+
// FIRST: Check if there's a getDefaultDSL() function with JSON
|
|
74
|
+
const dslFromFunction = this.extractDSLFromFunction(content);
|
|
75
|
+
if (dslFromFunction) {
|
|
76
|
+
(0, logger_1.log)(`Extracted DSL from getDefaultDSL(): ${dslFromFunction.length} bytes`);
|
|
77
|
+
return {
|
|
78
|
+
success: true,
|
|
79
|
+
dsl: JSON.parse(dslFromFunction)
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
// FALLBACK: Try to find @Composable functions with Compose code
|
|
83
|
+
const composableMatch = this.findMainComposable(content);
|
|
84
|
+
if (!composableMatch) {
|
|
85
|
+
(0, logger_1.log)('No main composable found, generating default DSL');
|
|
86
|
+
return {
|
|
87
|
+
success: true,
|
|
88
|
+
dsl: this.generateDefaultDSL()
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// Parse the composable body
|
|
92
|
+
const element = this.parseComposableBody(composableMatch.body);
|
|
93
|
+
const dsl = {
|
|
94
|
+
version: '1.0',
|
|
95
|
+
screen: element
|
|
96
|
+
};
|
|
97
|
+
(0, logger_1.log)(`Successfully parsed DSL: ${JSON.stringify(dsl).length} bytes`);
|
|
98
|
+
return {
|
|
99
|
+
success: true,
|
|
100
|
+
dsl
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
(0, logger_1.log)(`Parse error: ${error}`);
|
|
105
|
+
return {
|
|
106
|
+
success: false,
|
|
107
|
+
errors: [`Parse error: ${error}`]
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Extract DSL JSON from getDefaultDSL() or similar function (legacy support)
|
|
113
|
+
*/
|
|
114
|
+
static extractDSLFromFunction(content) {
|
|
115
|
+
// Look for functions that return JSON strings (legacy approach)
|
|
116
|
+
const functionRegex = /fun\s+getDefaultDSL\s*\(\s*\)\s*:\s*String\s*\{\s*return\s*"""([\s\S]*?)"""/;
|
|
117
|
+
const match = content.match(functionRegex);
|
|
118
|
+
if (match && match[1]) {
|
|
119
|
+
let jsonString = match[1].trim();
|
|
120
|
+
jsonString = jsonString.replace(/\.trimIndent\(\)/, '');
|
|
121
|
+
return jsonString;
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Find the main @Composable function in the file
|
|
127
|
+
*/
|
|
128
|
+
static findMainComposable(content) {
|
|
129
|
+
// Look for @Composable functions (AppContent, MainScreen, etc.)
|
|
130
|
+
const composableRegex = /@Composable\s+fun\s+(\w+)\s*\([^)]*\)\s*\{/g;
|
|
131
|
+
const matches = [...content.matchAll(composableRegex)];
|
|
132
|
+
(0, logger_1.log)(`Found ${matches.length} @Composable functions`);
|
|
133
|
+
if (matches.length === 0) {
|
|
134
|
+
(0, logger_1.log)('No @Composable functions found in file');
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
// Use the first composable function (should be AppContent, not LoadingScreen)
|
|
138
|
+
const match = matches[0];
|
|
139
|
+
const functionName = match[1];
|
|
140
|
+
(0, logger_1.log)(`Parsing composable function: ${functionName}`);
|
|
141
|
+
const startIndex = match.index + match[0].length;
|
|
142
|
+
// Extract the function body (handle nested braces)
|
|
143
|
+
const body = this.extractFunctionBody(content, startIndex);
|
|
144
|
+
(0, logger_1.log)(`Extracted function body: ${body.substring(0, 100)}...`);
|
|
145
|
+
return {
|
|
146
|
+
name: functionName,
|
|
147
|
+
body
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Extract function body handling nested braces
|
|
152
|
+
*/
|
|
153
|
+
static extractFunctionBody(content, startIndex) {
|
|
154
|
+
let braceCount = 1;
|
|
155
|
+
let endIndex = startIndex;
|
|
156
|
+
while (braceCount > 0 && endIndex < content.length) {
|
|
157
|
+
if (content[endIndex] === '{')
|
|
158
|
+
braceCount++;
|
|
159
|
+
if (content[endIndex] === '}')
|
|
160
|
+
braceCount--;
|
|
161
|
+
endIndex++;
|
|
162
|
+
}
|
|
163
|
+
return content.substring(startIndex, endIndex - 1).trim();
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Parse the composable body and extract UI structure
|
|
167
|
+
*/
|
|
168
|
+
static parseComposableBody(body) {
|
|
169
|
+
// Try to find the root element (Column, Row, Box, etc.)
|
|
170
|
+
const layoutMatch = body.match(/(Column|Row|Box)\s*\(/);
|
|
171
|
+
if (!layoutMatch) {
|
|
172
|
+
// Fallback: Simple text content
|
|
173
|
+
const textMatch = body.match(/Text\s*\(\s*text\s*=\s*"([^"]+)"/);
|
|
174
|
+
if (textMatch) {
|
|
175
|
+
return {
|
|
176
|
+
type: 'Text',
|
|
177
|
+
text: textMatch[1]
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
// Default fallback
|
|
181
|
+
return {
|
|
182
|
+
type: 'Column',
|
|
183
|
+
modifier: { fillMaxSize: true, padding: 16 },
|
|
184
|
+
horizontalAlignment: 'CenterHorizontally',
|
|
185
|
+
verticalArrangement: 'Center',
|
|
186
|
+
children: [
|
|
187
|
+
{
|
|
188
|
+
type: 'Text',
|
|
189
|
+
text: 'Hot Reload Active',
|
|
190
|
+
style: 'headlineMedium'
|
|
191
|
+
}
|
|
192
|
+
]
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
const layoutType = layoutMatch[1];
|
|
196
|
+
const layoutStartIndex = layoutMatch.index + layoutMatch[0].length;
|
|
197
|
+
// Extract FULL layout declaration (parameters + body with children)
|
|
198
|
+
// We need to extract from after "Column(" to the end, including ) { ... }
|
|
199
|
+
const layoutFullContent = body.substring(layoutStartIndex);
|
|
200
|
+
return this.parseLayout(layoutType, layoutFullContent);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Parse a layout element (Column, Row, Box)
|
|
204
|
+
*/
|
|
205
|
+
static parseLayout(type, content) {
|
|
206
|
+
const element = { type };
|
|
207
|
+
// Parse modifier
|
|
208
|
+
const modifierMatch = content.match(/modifier\s*=\s*Modifier([^,\n}]+)/);
|
|
209
|
+
if (modifierMatch) {
|
|
210
|
+
element.modifier = this.parseModifier(modifierMatch[1]);
|
|
211
|
+
}
|
|
212
|
+
// Parse alignment
|
|
213
|
+
const alignmentMatch = content.match(/horizontalAlignment\s*=\s*Alignment\.(\w+)/);
|
|
214
|
+
if (alignmentMatch) {
|
|
215
|
+
element.horizontalAlignment = alignmentMatch[1];
|
|
216
|
+
}
|
|
217
|
+
const arrangementMatch = content.match(/verticalArrangement\s*=\s*Arrangement\.(\w+)/);
|
|
218
|
+
if (arrangementMatch) {
|
|
219
|
+
element.verticalArrangement = arrangementMatch[1];
|
|
220
|
+
}
|
|
221
|
+
// Parse children (content inside the braces)
|
|
222
|
+
const childrenMatch = content.match(/\)\s*\{([\s\S]+)\}$/);
|
|
223
|
+
if (childrenMatch) {
|
|
224
|
+
element.children = this.parseChildren(childrenMatch[1]);
|
|
225
|
+
}
|
|
226
|
+
return element;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Parse modifier chain
|
|
230
|
+
*/
|
|
231
|
+
static parseModifier(modifierChain) {
|
|
232
|
+
const modifier = {};
|
|
233
|
+
if (modifierChain.includes('.fillMaxSize()'))
|
|
234
|
+
modifier.fillMaxSize = true;
|
|
235
|
+
if (modifierChain.includes('.fillMaxWidth()'))
|
|
236
|
+
modifier.fillMaxWidth = true;
|
|
237
|
+
if (modifierChain.includes('.fillMaxHeight()'))
|
|
238
|
+
modifier.fillMaxHeight = true;
|
|
239
|
+
const paddingMatch = modifierChain.match(/\.padding\((\d+)\.dp\)/);
|
|
240
|
+
if (paddingMatch) {
|
|
241
|
+
modifier.padding = parseInt(paddingMatch[1]);
|
|
242
|
+
}
|
|
243
|
+
const sizeMatch = modifierChain.match(/\.size\((\d+)\.dp\)/);
|
|
244
|
+
if (sizeMatch) {
|
|
245
|
+
modifier.size = parseInt(sizeMatch[1]);
|
|
246
|
+
}
|
|
247
|
+
const heightMatch = modifierChain.match(/\.height\((\d+)\.dp\)/);
|
|
248
|
+
if (heightMatch) {
|
|
249
|
+
modifier.height = parseInt(heightMatch[1]);
|
|
250
|
+
}
|
|
251
|
+
const widthMatch = modifierChain.match(/\.width\((\d+)\.dp\)/);
|
|
252
|
+
if (widthMatch) {
|
|
253
|
+
modifier.width = parseInt(widthMatch[1]);
|
|
254
|
+
}
|
|
255
|
+
return modifier;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Parse children elements (handles multi-line elements)
|
|
259
|
+
* Maintains source code order
|
|
260
|
+
*/
|
|
261
|
+
static parseChildren(content) {
|
|
262
|
+
// Remove all newlines and extra whitespace for easier parsing
|
|
263
|
+
const normalized = content.replace(/\s+/g, ' ');
|
|
264
|
+
// Track elements with their positions for proper ordering
|
|
265
|
+
const elements = [];
|
|
266
|
+
const usedText = new Set();
|
|
267
|
+
// First pass: Parse Button elements and track their text to avoid duplicates
|
|
268
|
+
const buttonRegex = /Button\s*\(\s*onClick\s*=\s*\{[^}]*\}(?:[^)]*modifier\s*=\s*Modifier\.fillMaxWidth\s*\(\s*\))?[^)]*\)\s*\{\s*Text\s*\(\s*"([^"]+)"\s*\)/g;
|
|
269
|
+
let match;
|
|
270
|
+
while ((match = buttonRegex.exec(normalized)) !== null) {
|
|
271
|
+
const buttonText = match[1];
|
|
272
|
+
elements.push({
|
|
273
|
+
position: match.index,
|
|
274
|
+
element: {
|
|
275
|
+
type: 'Button',
|
|
276
|
+
text: buttonText,
|
|
277
|
+
onClick: 'handleButtonClick',
|
|
278
|
+
modifier: normalized.includes('fillMaxWidth') ? { fillMaxWidth: true } : undefined
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
usedText.add(buttonText);
|
|
282
|
+
}
|
|
283
|
+
// Parse Spacer elements
|
|
284
|
+
const spacerRegex = /Spacer\s*\(\s*modifier\s*=\s*Modifier\.height\s*\(\s*(\d+)\.dp\s*\)/g;
|
|
285
|
+
while ((match = spacerRegex.exec(normalized)) !== null) {
|
|
286
|
+
elements.push({
|
|
287
|
+
position: match.index,
|
|
288
|
+
element: {
|
|
289
|
+
type: 'Spacer',
|
|
290
|
+
height: parseInt(match[1])
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
// Parse Text elements (multiple patterns, skip if text is in a button)
|
|
295
|
+
const textPatterns = [
|
|
296
|
+
/Text\s*\(\s*text\s*=\s*"([^"]+)"[^)]*style\s*=\s*MaterialTheme\.typography\.(\w+)/g,
|
|
297
|
+
/Text\s*\(\s*"([^"]+)"[^)]*style\s*=\s*MaterialTheme\.typography\.(\w+)/g,
|
|
298
|
+
/Text\s*\(\s*text\s*=\s*"([^"]+)"/g,
|
|
299
|
+
/Text\s*\(\s*"([^"]+)"\s*\)/g
|
|
300
|
+
];
|
|
301
|
+
for (const regex of textPatterns) {
|
|
302
|
+
while ((match = regex.exec(normalized)) !== null) {
|
|
303
|
+
const text = match[1];
|
|
304
|
+
// Skip if this text is already used in a button
|
|
305
|
+
if (!usedText.has(text)) {
|
|
306
|
+
elements.push({
|
|
307
|
+
position: match.index,
|
|
308
|
+
element: {
|
|
309
|
+
type: 'Text',
|
|
310
|
+
text: text,
|
|
311
|
+
style: match[2] || undefined
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
usedText.add(text);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// Sort by position to maintain source order
|
|
319
|
+
elements.sort((a, b) => a.position - b.position);
|
|
320
|
+
// Return just the elements, in correct order
|
|
321
|
+
return elements.map(e => e.element);
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Extract content within parentheses (handles nesting)
|
|
325
|
+
*/
|
|
326
|
+
static extractParenthesesContent(content, startIndex) {
|
|
327
|
+
let parenCount = 1;
|
|
328
|
+
let endIndex = startIndex;
|
|
329
|
+
while (parenCount > 0 && endIndex < content.length) {
|
|
330
|
+
if (content[endIndex] === '(')
|
|
331
|
+
parenCount++;
|
|
332
|
+
if (content[endIndex] === ')')
|
|
333
|
+
parenCount--;
|
|
334
|
+
endIndex++;
|
|
335
|
+
}
|
|
336
|
+
return content.substring(startIndex, endIndex - 1);
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Generate default DSL when parsing fails
|
|
340
|
+
*/
|
|
341
|
+
static generateDefaultDSL() {
|
|
342
|
+
return {
|
|
343
|
+
version: '1.0',
|
|
344
|
+
screen: {
|
|
345
|
+
type: 'Column',
|
|
346
|
+
modifier: {
|
|
347
|
+
fillMaxSize: true,
|
|
348
|
+
padding: 16
|
|
349
|
+
},
|
|
350
|
+
horizontalAlignment: 'CenterHorizontally',
|
|
351
|
+
verticalArrangement: 'Center',
|
|
352
|
+
children: [
|
|
353
|
+
{
|
|
354
|
+
type: 'Text',
|
|
355
|
+
text: 'Welcome to JetStart! 🚀',
|
|
356
|
+
style: 'headlineMedium'
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
type: 'Spacer',
|
|
360
|
+
height: 16
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
type: 'Text',
|
|
364
|
+
text: 'Edit your code to see hot reload',
|
|
365
|
+
style: 'bodyMedium'
|
|
366
|
+
}
|
|
367
|
+
]
|
|
368
|
+
}
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
exports.DSLParser = DSLParser;
|
|
373
|
+
//# sourceMappingURL=dsl-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsl-parser.js","sourceRoot":"","sources":["../../src/build/dsl-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DSL Type Definitions for Server-Side
|
|
3
|
+
* Represents UI elements that can be sent to Android app as JSON
|
|
4
|
+
*/
|
|
5
|
+
export interface UIDefinition {
|
|
6
|
+
version: string;
|
|
7
|
+
screen: DSLElement;
|
|
8
|
+
}
|
|
9
|
+
export interface DSLElement {
|
|
10
|
+
type: string;
|
|
11
|
+
text?: string;
|
|
12
|
+
style?: string;
|
|
13
|
+
color?: string;
|
|
14
|
+
modifier?: DSLModifier;
|
|
15
|
+
horizontalAlignment?: string;
|
|
16
|
+
verticalArrangement?: string;
|
|
17
|
+
contentAlignment?: string;
|
|
18
|
+
height?: number;
|
|
19
|
+
width?: number;
|
|
20
|
+
onClick?: string;
|
|
21
|
+
enabled?: boolean;
|
|
22
|
+
imageVector?: string;
|
|
23
|
+
tint?: string;
|
|
24
|
+
contentDescription?: string;
|
|
25
|
+
children?: DSLElement[];
|
|
26
|
+
}
|
|
27
|
+
export interface DSLModifier {
|
|
28
|
+
fillMaxSize?: boolean;
|
|
29
|
+
fillMaxWidth?: boolean;
|
|
30
|
+
fillMaxHeight?: boolean;
|
|
31
|
+
padding?: number;
|
|
32
|
+
paddingHorizontal?: number;
|
|
33
|
+
paddingVertical?: number;
|
|
34
|
+
size?: number;
|
|
35
|
+
height?: number;
|
|
36
|
+
width?: number;
|
|
37
|
+
weight?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Parse result from Kotlin file
|
|
41
|
+
*/
|
|
42
|
+
export interface ParseResult {
|
|
43
|
+
success: boolean;
|
|
44
|
+
dsl?: UIDefinition;
|
|
45
|
+
errors?: string[];
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=dsl-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsl-types.d.ts","sourceRoot":"","sources":["../../src/build/dsl-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsl-types.js","sourceRoot":"","sources":["../../src/build/dsl-types.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gradle BuildConfig Injector
|
|
3
|
+
* Injects buildConfigField values into build.gradle
|
|
4
|
+
*/
|
|
5
|
+
export interface BuildConfigField {
|
|
6
|
+
type: string;
|
|
7
|
+
name: string;
|
|
8
|
+
value: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Inject buildConfigFields into app/build.gradle
|
|
12
|
+
*/
|
|
13
|
+
export declare function injectBuildConfigFields(projectPath: string, fields: BuildConfigField[]): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=gradle-injector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gradle-injector.d.ts","sourceRoot":"","sources":["../../src/build/gradle-injector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,gBAAgB,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CA0Cf"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Gradle BuildConfig Injector
|
|
4
|
+
* Injects buildConfigField values into build.gradle
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.injectBuildConfigFields = injectBuildConfigFields;
|
|
41
|
+
const fs = __importStar(require("fs-extra"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const logger_1 = require("../utils/logger");
|
|
44
|
+
/**
|
|
45
|
+
* Inject buildConfigFields into app/build.gradle
|
|
46
|
+
*/
|
|
47
|
+
async function injectBuildConfigFields(projectPath, fields) {
|
|
48
|
+
const buildGradlePath = path.join(projectPath, 'app', 'build.gradle');
|
|
49
|
+
if (!fs.existsSync(buildGradlePath)) {
|
|
50
|
+
(0, logger_1.log)('Warning: build.gradle not found, skipping injection');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
let content = await fs.readFile(buildGradlePath, 'utf-8');
|
|
54
|
+
// Find the defaultConfig block
|
|
55
|
+
const defaultConfigRegex = /defaultConfig\s*\{([^}]*(?:\{[^}]*\}[^}]*)*)\}/;
|
|
56
|
+
const match = content.match(defaultConfigRegex);
|
|
57
|
+
if (!match) {
|
|
58
|
+
(0, logger_1.log)('Warning: defaultConfig not found in build.gradle');
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const defaultConfigBlock = match[1];
|
|
62
|
+
// Remove existing JetStart buildConfigFields
|
|
63
|
+
let updatedBlock = defaultConfigBlock.replace(/\/\/ JetStart injected fields[\s\S]*?\/\/ End JetStart fields\n/g, '');
|
|
64
|
+
// Add new buildConfigFields
|
|
65
|
+
const fieldLines = fields.map(f => {
|
|
66
|
+
// For String type, escape the value with quotes
|
|
67
|
+
const escapedValue = f.type === 'String' ? `\\"${f.value}\\"` : f.value;
|
|
68
|
+
return ` buildConfigField "${f.type}", "${f.name}", "${escapedValue}"`;
|
|
69
|
+
}).join('\n');
|
|
70
|
+
updatedBlock = updatedBlock.trimEnd() + '\n\n // JetStart injected fields\n' +
|
|
71
|
+
fieldLines + '\n // End JetStart fields\n ';
|
|
72
|
+
// Replace the defaultConfig block
|
|
73
|
+
content = content.replace(defaultConfigRegex, `defaultConfig {${updatedBlock}}`);
|
|
74
|
+
await fs.writeFile(buildGradlePath, content, 'utf-8');
|
|
75
|
+
(0, logger_1.log)('Injected buildConfigFields into build.gradle');
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=gradle-injector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gradle-injector.js","sourceRoot":"","sources":["../../src/build/gradle-injector.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeH,0DA6CC;AA1DD,6CAA+B;AAC/B,2CAA6B;AAC7B,4CAAsC;AAQtC;;GAEG;AACI,KAAK,UAAU,uBAAuB,CAC3C,WAAmB,EACnB,MAA0B;IAE1B,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;IAEtE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,IAAA,YAAG,EAAC,qDAAqD,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAE1D,+BAA+B;IAC/B,MAAM,kBAAkB,GAAG,gDAAgD,CAAC;IAC5E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAEhD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAA,YAAG,EAAC,kDAAkD,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IAED,MAAM,kBAAkB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEpC,6CAA6C;IAC7C,IAAI,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAC3C,kEAAkE,EAClE,EAAE,CACH,CAAC;IAEF,4BAA4B;IAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAChC,gDAAgD;QAChD,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACxE,OAAO,6BAA6B,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,OAAO,YAAY,GAAG,CAAC;IAChF,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,YAAY,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,2CAA2C;QACjF,UAAU,GAAG,wCAAwC,CAAC;IAExD,kCAAkC;IAClC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,kBAAkB,YAAY,GAAG,CAAC,CAAC;IAEjF,MAAM,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,IAAA,YAAG,EAAC,8CAA8C,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gradle Executor
|
|
3
|
+
* Spawns and manages Gradle build processes
|
|
4
|
+
*/
|
|
5
|
+
import { BuildConfig, BuildResult } from '@jetstart/shared';
|
|
6
|
+
export interface GradleExecutorOptions {
|
|
7
|
+
javaHome?: string;
|
|
8
|
+
androidHome?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class GradleExecutor {
|
|
11
|
+
private javaHome;
|
|
12
|
+
private androidHome;
|
|
13
|
+
constructor(options?: GradleExecutorOptions);
|
|
14
|
+
/**
|
|
15
|
+
* Execute Gradle build
|
|
16
|
+
*/
|
|
17
|
+
execute(config: BuildConfig): Promise<BuildResult>;
|
|
18
|
+
/**
|
|
19
|
+
* Ensure Android SDK is configured (auto-detect and create local.properties)
|
|
20
|
+
*/
|
|
21
|
+
private ensureAndroidSdk;
|
|
22
|
+
/**
|
|
23
|
+
* Find Gradle executable (prioritize system gradle for speed)
|
|
24
|
+
*/
|
|
25
|
+
private findGradle;
|
|
26
|
+
/**
|
|
27
|
+
* Find executable in PATH
|
|
28
|
+
*/
|
|
29
|
+
private findInPath;
|
|
30
|
+
/**
|
|
31
|
+
* Build Gradle arguments
|
|
32
|
+
*/
|
|
33
|
+
private buildGradleArgs;
|
|
34
|
+
/**
|
|
35
|
+
* Build environment variables
|
|
36
|
+
*/
|
|
37
|
+
private buildEnv;
|
|
38
|
+
/**
|
|
39
|
+
* Run Gradle process and collect output
|
|
40
|
+
*/
|
|
41
|
+
private runGradle;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=gradle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gradle.d.ts","sourceRoot":"","sources":["../../src/build/gradle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG5D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,WAAW,CAAqB;gBAE5B,OAAO,GAAE,qBAA0B;IAK/C;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IA4BxD;;OAEG;YACW,gBAAgB;IA6D9B;;OAEG;IACH,OAAO,CAAC,UAAU;IAwBlB;;OAEG;IACH,OAAO,CAAC,UAAU;IAelB;;OAEG;IACH,OAAO,CAAC,eAAe;IA4BvB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAehB;;OAEG;IACH,OAAO,CAAC,SAAS;CAsFlB"}
|