@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.
Files changed (116) hide show
  1. package/.eslintrc.json +6 -0
  2. package/README.md +124 -0
  3. package/dist/build/builder.d.ts +57 -0
  4. package/dist/build/builder.d.ts.map +1 -0
  5. package/dist/build/builder.js +151 -0
  6. package/dist/build/builder.js.map +1 -0
  7. package/dist/build/cache.d.ts +51 -0
  8. package/dist/build/cache.d.ts.map +1 -0
  9. package/dist/build/cache.js +152 -0
  10. package/dist/build/cache.js.map +1 -0
  11. package/dist/build/dsl-parser.d.ts +54 -0
  12. package/dist/build/dsl-parser.d.ts.map +1 -0
  13. package/dist/build/dsl-parser.js +373 -0
  14. package/dist/build/dsl-parser.js.map +1 -0
  15. package/dist/build/dsl-types.d.ts +47 -0
  16. package/dist/build/dsl-types.d.ts.map +1 -0
  17. package/dist/build/dsl-types.js +7 -0
  18. package/dist/build/dsl-types.js.map +1 -0
  19. package/dist/build/gradle-injector.d.ts +14 -0
  20. package/dist/build/gradle-injector.d.ts.map +1 -0
  21. package/dist/build/gradle-injector.js +77 -0
  22. package/dist/build/gradle-injector.js.map +1 -0
  23. package/dist/build/gradle.d.ts +43 -0
  24. package/dist/build/gradle.d.ts.map +1 -0
  25. package/dist/build/gradle.js +281 -0
  26. package/dist/build/gradle.js.map +1 -0
  27. package/dist/build/index.d.ts +10 -0
  28. package/dist/build/index.d.ts.map +1 -0
  29. package/dist/build/index.js +26 -0
  30. package/dist/build/index.js.map +1 -0
  31. package/dist/build/parser.d.ts +12 -0
  32. package/dist/build/parser.d.ts.map +1 -0
  33. package/dist/build/parser.js +71 -0
  34. package/dist/build/parser.js.map +1 -0
  35. package/dist/build/watcher.d.ts +30 -0
  36. package/dist/build/watcher.d.ts.map +1 -0
  37. package/dist/build/watcher.js +120 -0
  38. package/dist/build/watcher.js.map +1 -0
  39. package/dist/index.d.ts +11 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +26 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/server/http.d.ts +12 -0
  44. package/dist/server/http.d.ts.map +1 -0
  45. package/dist/server/http.js +32 -0
  46. package/dist/server/http.js.map +1 -0
  47. package/dist/server/index.d.ts +35 -0
  48. package/dist/server/index.d.ts.map +1 -0
  49. package/dist/server/index.js +262 -0
  50. package/dist/server/index.js.map +1 -0
  51. package/dist/server/middleware.d.ts +7 -0
  52. package/dist/server/middleware.d.ts.map +1 -0
  53. package/dist/server/middleware.js +42 -0
  54. package/dist/server/middleware.js.map +1 -0
  55. package/dist/server/routes.d.ts +7 -0
  56. package/dist/server/routes.d.ts.map +1 -0
  57. package/dist/server/routes.js +104 -0
  58. package/dist/server/routes.js.map +1 -0
  59. package/dist/types/index.d.ts +20 -0
  60. package/dist/types/index.d.ts.map +1 -0
  61. package/dist/types/index.js +6 -0
  62. package/dist/types/index.js.map +1 -0
  63. package/dist/utils/index.d.ts +7 -0
  64. package/dist/utils/index.d.ts.map +1 -0
  65. package/dist/utils/index.js +23 -0
  66. package/dist/utils/index.js.map +1 -0
  67. package/dist/utils/logger.d.ts +10 -0
  68. package/dist/utils/logger.d.ts.map +1 -0
  69. package/dist/utils/logger.js +33 -0
  70. package/dist/utils/logger.js.map +1 -0
  71. package/dist/utils/qr.d.ts +8 -0
  72. package/dist/utils/qr.d.ts.map +1 -0
  73. package/dist/utils/qr.js +48 -0
  74. package/dist/utils/qr.js.map +1 -0
  75. package/dist/utils/session.d.ts +18 -0
  76. package/dist/utils/session.d.ts.map +1 -0
  77. package/dist/utils/session.js +49 -0
  78. package/dist/utils/session.js.map +1 -0
  79. package/dist/websocket/handler.d.ts +25 -0
  80. package/dist/websocket/handler.d.ts.map +1 -0
  81. package/dist/websocket/handler.js +126 -0
  82. package/dist/websocket/handler.js.map +1 -0
  83. package/dist/websocket/index.d.ts +18 -0
  84. package/dist/websocket/index.d.ts.map +1 -0
  85. package/dist/websocket/index.js +40 -0
  86. package/dist/websocket/index.js.map +1 -0
  87. package/dist/websocket/manager.d.ts +16 -0
  88. package/dist/websocket/manager.d.ts.map +1 -0
  89. package/dist/websocket/manager.js +58 -0
  90. package/dist/websocket/manager.js.map +1 -0
  91. package/package.json +78 -0
  92. package/src/build/builder.ts +192 -0
  93. package/src/build/cache.ts +144 -0
  94. package/src/build/dsl-parser.ts +382 -0
  95. package/src/build/dsl-types.ts +50 -0
  96. package/src/build/gradle-injector.ts +64 -0
  97. package/src/build/gradle.ts +305 -0
  98. package/src/build/index.ts +10 -0
  99. package/src/build/parser.ts +75 -0
  100. package/src/build/watcher.ts +103 -0
  101. package/src/index.ts +20 -0
  102. package/src/server/http.ts +38 -0
  103. package/src/server/index.ts +272 -0
  104. package/src/server/middleware.ts +43 -0
  105. package/src/server/routes.ts +116 -0
  106. package/src/types/index.ts +21 -0
  107. package/src/utils/index.ts +7 -0
  108. package/src/utils/logger.ts +28 -0
  109. package/src/utils/qr.ts +46 -0
  110. package/src/utils/session.ts +58 -0
  111. package/src/websocket/handler.ts +150 -0
  112. package/src/websocket/index.ts +56 -0
  113. package/src/websocket/manager.ts +63 -0
  114. package/tests/build.test.ts +13 -0
  115. package/tests/server.test.ts +13 -0
  116. 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,7 @@
1
+ "use strict";
2
+ /**
3
+ * DSL Type Definitions for Server-Side
4
+ * Represents UI elements that can be sent to Android app as JSON
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=dsl-types.js.map
@@ -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"}