@tantawowa/hosanna-tools 0.1.0

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.
@@ -0,0 +1,553 @@
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 (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.containsHosannaView = exports.getViewMetadata = exports.generateStructForFile = void 0;
27
+ // hs:exclude-from-platform roku
28
+ /* eslint-disable @typescript-eslint/no-explicit-any */
29
+ const fs = __importStar(require("fs"));
30
+ const path = __importStar(require("path"));
31
+ const ts = __importStar(require("typescript"));
32
+ function getImports(sourceFile) {
33
+ const importMap = new Map();
34
+ let baseViewPath;
35
+ function extractTypeReferences(typeNode, sourceFile) {
36
+ if (!typeNode)
37
+ return;
38
+ switch (typeNode.kind) {
39
+ case ts.SyntaxKind.Identifier: {
40
+ const typeName = typeNode.text;
41
+ if (!importMap.has(typeName)) {
42
+ importMap.set(typeName, sourceFile.fileName);
43
+ }
44
+ break;
45
+ }
46
+ case ts.SyntaxKind.TypeReference: {
47
+ const typeRef = typeNode;
48
+ if (ts.isIdentifier(typeRef.typeName)) {
49
+ const typeName = typeRef.typeName.getText();
50
+ if (!importMap.has(typeName)) {
51
+ importMap.set(typeName, sourceFile.fileName);
52
+ }
53
+ }
54
+ if (typeRef.typeArguments) {
55
+ typeRef.typeArguments.forEach((arg) => extractTypeReferences(arg, sourceFile));
56
+ }
57
+ break;
58
+ }
59
+ case ts.SyntaxKind.UnionType:
60
+ typeNode.types.forEach((type) => extractTypeReferences(type, sourceFile));
61
+ break;
62
+ case ts.SyntaxKind.ArrayType:
63
+ extractTypeReferences(typeNode.elementType, sourceFile);
64
+ break;
65
+ case ts.SyntaxKind.FunctionType: {
66
+ const funcType = typeNode;
67
+ funcType.parameters.forEach((param) => {
68
+ if (param.type) {
69
+ extractTypeReferences(param.type, sourceFile);
70
+ }
71
+ });
72
+ if (funcType.type) {
73
+ extractTypeReferences(funcType.type, sourceFile);
74
+ }
75
+ break;
76
+ }
77
+ case ts.SyntaxKind.TypeLiteral: {
78
+ typeNode.members.forEach((member) => {
79
+ if (ts.isPropertySignature(member) &&
80
+ member.type) {
81
+ extractTypeReferences(member.type, sourceFile);
82
+ }
83
+ });
84
+ break;
85
+ }
86
+ case ts.SyntaxKind.ParenthesizedType:
87
+ extractTypeReferences(typeNode.type, sourceFile);
88
+ break;
89
+ default: {
90
+ if (typeNode.typeName && ts.isIdentifier(typeNode.typeName)) {
91
+ const name = typeNode.typeName.getText();
92
+ if (!importMap.has(name)) {
93
+ importMap.set(name, sourceFile.fileName);
94
+ }
95
+ }
96
+ break;
97
+ }
98
+ }
99
+ }
100
+ ts.forEachChild(sourceFile, (node) => {
101
+ var _a, _b, _c, _d;
102
+ if (ts.isImportDeclaration(node)) {
103
+ const importClause = node.importClause;
104
+ const modulePath = (_a = node.moduleSpecifier) === null || _a === void 0 ? void 0 : _a.text;
105
+ const importClauseNode = importClause === null || importClause === void 0 ? void 0 : importClause.namedBindings;
106
+ if (importClause && modulePath && importClauseNode && ts.isNamedImports(importClauseNode)) {
107
+ const namedImports = importClause.namedBindings;
108
+ (_b = namedImports === null || namedImports === void 0 ? void 0 : namedImports.elements) === null || _b === void 0 ? void 0 : _b.forEach((element) => {
109
+ const importName = element.name.getText();
110
+ importMap.set(importName, modulePath);
111
+ if (importName === 'BaseView') {
112
+ baseViewPath = modulePath;
113
+ }
114
+ });
115
+ }
116
+ }
117
+ if (ts.isExportDeclaration(node) && node.exportClause && ts.isNamedExports(node.exportClause)) {
118
+ const modulePath = (_c = node.moduleSpecifier) === null || _c === void 0 ? void 0 : _c.text;
119
+ if (modulePath) {
120
+ node.exportClause.elements.forEach((element) => {
121
+ const exportName = element.name.getText();
122
+ importMap.set(exportName, modulePath);
123
+ });
124
+ }
125
+ }
126
+ if (ts.isEnumDeclaration(node) || ts.isFunctionDeclaration(node) || ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node)) {
127
+ const exportName = (_d = node.name) === null || _d === void 0 ? void 0 : _d.getText();
128
+ if (exportName) {
129
+ const relativePath = './' + path.relative(path.dirname(sourceFile.fileName), sourceFile.fileName).replace(/\\/g, '/').replace(/\.ts$/, '');
130
+ importMap.set(exportName, relativePath);
131
+ }
132
+ }
133
+ // Check interface members for types, including function types
134
+ if (ts.isInterfaceDeclaration(node) && node.members) {
135
+ node.members.forEach((member) => {
136
+ if (ts.isPropertySignature(member) && member.type) {
137
+ extractTypeReferences(member.type, sourceFile);
138
+ }
139
+ });
140
+ }
141
+ });
142
+ if (baseViewPath) {
143
+ importMap.set('ViewStruct', baseViewPath.replace('/BaseView', '/view-api'));
144
+ importMap.set('ViewState', baseViewPath.replace('/BaseView', '/view-api'));
145
+ }
146
+ return importMap;
147
+ }
148
+ // Check if a specific import already exists in the original file
149
+ function hasImportStatement(originalContent, generatedFileName) {
150
+ const importRegex = new RegExp(`import\\s*{[^}]*\\b\\w+ViewStruct\\b[^}]*}\\s*from\\s*['"]\\./${path.basename(generatedFileName, '.ts')}['"];`, 's');
151
+ return importRegex.test(originalContent);
152
+ }
153
+ // Check if a specific export already exists in the original file
154
+ function hasExportStatement(originalContent) {
155
+ const exportRegex = /export\s*{[^}]*\b\w+ViewStruct\b[^}]*}/;
156
+ return exportRegex.test(originalContent);
157
+ }
158
+ let _rootProjectPath = '';
159
+ // Parse and generate struct based on the interface
160
+ function generateStructForFile(fileName, rootProjectPath) {
161
+ _rootProjectPath = rootProjectPath;
162
+ const sourceCode = fs.readFileSync(fileName).toString();
163
+ const sourceFile = ts.createSourceFile(fileName, sourceCode, ts.ScriptTarget.Latest, true);
164
+ const imports = getImports(sourceFile); // Get all imports from the original file
165
+ const baseFileName = path.basename(fileName, '.ts'); // Extract the base file name
166
+ const generatedStructs = [];
167
+ const requiredImports = new Set();
168
+ const viewMetadata = getViewMetadata(sourceFile);
169
+ if (!viewMetadata) {
170
+ return;
171
+ }
172
+ const { viewName: targetViewName, isAggregate: isAggregateView, className: viewClassName } = viewMetadata;
173
+ ts.forEachChild(sourceFile, (node) => {
174
+ if (ts.isInterfaceDeclaration(node)) {
175
+ const heritageClauses = node.heritageClauses;
176
+ if (heritageClauses) {
177
+ const isViewState = isInterfaceViewState(heritageClauses, sourceFile, imports);
178
+ if (isViewState) {
179
+ console.log(`Generating view struct for ${sourceFile.fileName}`);
180
+ const stateInterface = node.name.getText(); // E.g., "LabelState"
181
+ const structClassName = getTargetStructClassName(targetViewName);
182
+ //FIXME - we need to know the actual class name of this view!!! the way we work this out presently is wrong - it should come from the class that has the @view decorator
183
+ const generatorFunctionName = targetViewName; // E.g., "LabelView"
184
+ const requiredImportsMap = getImports(sourceFile);
185
+ const usedImports = new Set();
186
+ // Determine the correct base struct class
187
+ let baseStructClass = 'ViewStruct<T>';
188
+ heritageClauses.forEach(clause => {
189
+ clause.types.forEach(type => {
190
+ const typeName = type.expression.getText();
191
+ if (typeName !== 'ViewState' && imports.has(typeName)) {
192
+ const viewName = getViewNameForState(typeName, sourceFile, imports);
193
+ if (viewName) {
194
+ baseStructClass = `_${viewName}ViewStruct<T>`;
195
+ // console.log(`>>>Using base struct class ${baseStructClass} for ${typeName}`);
196
+ // baseStructClass = `${viewName}ViewStruct<${typeName}>`;
197
+ addImportsForExtendedViewStruct(typeName, viewName, sourceFile, imports, requiredImportsMap, usedImports);
198
+ }
199
+ }
200
+ });
201
+ });
202
+ const structMethods = node.members.map((member) => {
203
+ const memberName = member.name.getText();
204
+ const memberType = member.type ? member.type.getFullText(sourceFile).trim() : 'any';
205
+ return ` ${memberName}(${memberName}: ${memberType}) {
206
+ this.state.${memberName} = ${memberName};
207
+ return this;
208
+ }`;
209
+ });
210
+ requiredImportsMap.forEach((value, key) => requiredImports.add(key));
211
+ // Filter required imports to remove anything that is not used in the ViewState
212
+ node.members.forEach((member) => {
213
+ const memberType = member.type;
214
+ if (memberType) {
215
+ if (ts.isUnionTypeNode(memberType)) {
216
+ memberType.types.forEach((type) => {
217
+ const typeName = type.getText().replace(/<.*>/, '');
218
+ if (requiredImports.has(typeName)) {
219
+ usedImports.add(typeName);
220
+ }
221
+ });
222
+ }
223
+ else if (ts.isArrayTypeNode(memberType)) {
224
+ const elementType = memberType.elementType;
225
+ if (ts.isTypeReferenceNode(elementType)) {
226
+ const typeName = elementType.getText().replace(/<.*>/, '');
227
+ if (requiredImports.has(typeName)) {
228
+ usedImports.add(typeName);
229
+ }
230
+ }
231
+ }
232
+ else if (ts.isTypeReferenceNode(memberType)) {
233
+ const typeName = memberType.typeName.getText();
234
+ if (requiredImports.has(typeName)) {
235
+ usedImports.add(typeName);
236
+ }
237
+ // Check for generic types
238
+ if (memberType.typeArguments) {
239
+ memberType.typeArguments.forEach((typeArg) => {
240
+ const typeArgName = typeArg.getText();
241
+ if (requiredImports.has(typeArgName)) {
242
+ usedImports.add(typeArgName);
243
+ }
244
+ });
245
+ }
246
+ }
247
+ else if (ts.isFunctionTypeNode(memberType)) {
248
+ // Walk parameter types
249
+ memberType.parameters.forEach((param) => {
250
+ if (param.type) {
251
+ const paramTypeName = getTypeName(param.type);
252
+ if (requiredImports.has(paramTypeName)) {
253
+ usedImports.add(paramTypeName);
254
+ }
255
+ }
256
+ });
257
+ // Return type
258
+ if (memberType.type) {
259
+ const returnTypeName = getTypeName(memberType.type);
260
+ if (requiredImports.has(returnTypeName)) {
261
+ usedImports.add(returnTypeName);
262
+ }
263
+ }
264
+ }
265
+ else {
266
+ const typeName = getTypeName(memberType);
267
+ if (requiredImports.has(typeName)) {
268
+ usedImports.add(typeName);
269
+ }
270
+ }
271
+ }
272
+ });
273
+ // Ensure types that are exported are imported
274
+ const relativePathToAppUtils = getRelativePath(fileName, './src/hosanna-bridge-lib/AppUtils');
275
+ const relativePathToInstancePool = getRelativePath(fileName, './src/hosanna-ui/hosanna-api');
276
+ const relativePathToHsStruct = getRelativePath(fileName, './src/hosanna-ui/lib/struct-decorators');
277
+ const relativePathToViewApi = getRelativePath(fileName, './src/hosanna-ui/views/lib/view-api');
278
+ const exportedTypes = getExportedTypes(sourceFile);
279
+ usedImports.delete('ViewStruct');
280
+ usedImports.delete('AppUtils');
281
+ usedImports.delete('Record'); //do not allow this to accidentally be imported
282
+ usedImports.delete('IInstancePool');
283
+ usedImports.delete('FocusChildChangeEvent');
284
+ usedImports.delete(viewClassName);
285
+ imports.delete(viewClassName);
286
+ let generatedStruct = `
287
+
288
+ /* eslint-disable */
289
+ import { ${viewClassName}, ${stateInterface} } from '${viewMetadata.importFileName}';
290
+ ${Array.from(usedImports).filter((type) => !exportedTypes.has(type)).map((type) => `import { ${type} } from '${imports.get(type)}';`).join('\n')}
291
+ import { FocusChildChangeEvent, ViewStruct, ViewState } from '${relativePathToViewApi}';
292
+ import { AppUtils } from '${relativePathToAppUtils}';
293
+ import { IInstancePool } from '${relativePathToInstancePool}';
294
+ import { hs_struct } from '${relativePathToHsStruct}';
295
+
296
+ ${Array.from(exportedTypes).map((type) => `import { ${type} } from './${baseFileName}';`).join('\n')}
297
+
298
+ export class _${structClassName}<T extends ${stateInterface}> extends ${baseStructClass} {
299
+ __viewClassName = '${viewClassName}';
300
+ ${structMethods.join('\n')}
301
+ override createHosannaView(): any {
302
+ const view = AppUtils.resolve<IInstancePool>('instancePool').get('${viewClassName}', ${viewClassName});
303
+ return view;
304
+ }
305
+ }
306
+
307
+ @hs_struct("${structClassName}"${isAggregateView ? ', true' : ''})
308
+ export class ${structClassName} extends _${structClassName}<${stateInterface}> {
309
+ }
310
+ `;
311
+ //CHECKME
312
+ //CHECKME
313
+ //CHECKME
314
+ //CHECKME
315
+ //FIXME -why was I creating new structs for children every time???
316
+ if (isAggregateView) {
317
+ generatedStruct += `
318
+ export function ${generatorFunctionName}(children: ViewStruct<ViewState>[]) {
319
+ // return new ${structClassName}({} as any).children(children);
320
+ const struct = AppUtils.resolve<IInstancePool>('instancePool').get<${structClassName}>('${structClassName}', ${structClassName});
321
+ struct.setState({} as any);
322
+ return struct.children(children);
323
+ }`;
324
+ }
325
+ else {
326
+ generatedStruct += `
327
+
328
+ export function ${generatorFunctionName}(state?: ${stateInterface}): ${structClassName} {
329
+ const struct = AppUtils.resolve<IInstancePool>('instancePool').get<${structClassName}>('${structClassName}', ${structClassName});
330
+ struct.setState(state as any);
331
+ return struct;
332
+ }
333
+ `;
334
+ }
335
+ generatedStructs.push(generatedStruct);
336
+ }
337
+ }
338
+ }
339
+ });
340
+ if (generatedStructs.length > 0) {
341
+ const generatedFileName = generateOutputFileName(fileName);
342
+ fs.writeFileSync(generatedFileName, generatedStructs.join('\n'));
343
+ updateOriginalFile(fileName, generatedFileName, baseFileName, targetViewName);
344
+ }
345
+ else if (targetViewName) {
346
+ console.warn(`Could not ascertain viewState for view ${targetViewName} in ${sourceFile.fileName}`);
347
+ }
348
+ }
349
+ exports.generateStructForFile = generateStructForFile;
350
+ function isInterfaceViewState(heritageClauses, sourceFile, imports) {
351
+ const parents = []; //!Do we need this???
352
+ for (const clause of heritageClauses) {
353
+ for (const t of clause.types) {
354
+ if (t.expression.getText().match(/(.*)ViewState/)) {
355
+ return true;
356
+ }
357
+ }
358
+ }
359
+ for (const clause of heritageClauses) {
360
+ for (const t of clause.types) {
361
+ const typeName = t.expression.getText();
362
+ parents.push(typeName); //!Do we need this???
363
+ if (isParentInterfaceViewState(typeName, sourceFile, imports)) {
364
+ return true;
365
+ }
366
+ }
367
+ }
368
+ // console.log(`Could not ascertain ViewState interface for ${sourceFile.fileName}: After checking parents ${parents.join(', ')}`);
369
+ return false;
370
+ }
371
+ function isParentInterfaceViewState(name, sourceFile, imports) {
372
+ const importPath = imports.get(name);
373
+ if (!importPath)
374
+ return false;
375
+ const resolvedPath = path.resolve(path.dirname(sourceFile.fileName), importPath + '.ts');
376
+ if (!fs.existsSync(resolvedPath))
377
+ return false;
378
+ const fileContent = fs.readFileSync(resolvedPath, 'utf-8');
379
+ const parentSourceFile = ts.createSourceFile(resolvedPath, fileContent, ts.ScriptTarget.Latest, true);
380
+ let parentInterface;
381
+ ts.forEachChild(parentSourceFile, (node) => {
382
+ if (ts.isInterfaceDeclaration(node) && node.name.getText() === name) {
383
+ parentInterface = node;
384
+ }
385
+ });
386
+ if (!parentInterface)
387
+ return false;
388
+ const heritageClauses = parentInterface.heritageClauses;
389
+ if (!heritageClauses)
390
+ return false;
391
+ return isInterfaceViewState(heritageClauses, parentSourceFile, getImports(parentSourceFile));
392
+ }
393
+ // Generate the new file name (e.g., Button.ts -> Button-generated-struct.ts)
394
+ function generateOutputFileName(fileName) {
395
+ const dirName = path.dirname(fileName);
396
+ const baseName = path.basename(fileName, '.ts');
397
+ return path.join(dirName, `${baseName}-generated-struct.ts`);
398
+ }
399
+ // Ensure the original file imports the generated file and exports the generated structs, only if they are missing
400
+ function updateOriginalFile(originalFileName, generatedFileName, baseFileName, targetViewName) {
401
+ const originalContent = fs.readFileSync(originalFileName).toString();
402
+ // Import statement to be added if missing
403
+ const importStatement = `import { ${targetViewName}ViewStruct, ${baseFileName} } from './${path.basename(generatedFileName, '.ts')}';\n`;
404
+ // Export statement to be added if missing
405
+ const exportStatement = `export { ${targetViewName}ViewStruct, ${baseFileName} };\n`;
406
+ let updatedContent = originalContent;
407
+ // Add export only if it doesn't already exist
408
+ if (!hasExportStatement(originalContent)) {
409
+ updatedContent = exportStatement + updatedContent;
410
+ }
411
+ // Add import at the top if it doesn't already exist
412
+ if (!hasImportStatement(originalContent, generatedFileName)) {
413
+ updatedContent = importStatement + updatedContent;
414
+ }
415
+ // Update the original file only if changes were made
416
+ if (updatedContent !== originalContent) {
417
+ fs.writeFileSync(originalFileName, updatedContent);
418
+ }
419
+ }
420
+ function getViewMetadata(sourceFile) {
421
+ let metadata;
422
+ ts.forEachChild(sourceFile, (node) => {
423
+ var _a, _b;
424
+ if (ts.isClassDeclaration(node)) {
425
+ const className = (_b = (_a = node.name) === null || _a === void 0 ? void 0 : _a.getText()) !== null && _b !== void 0 ? _b : 'UnknownClass';
426
+ // Check for @view
427
+ const viewDecoratorArg = getDecoratorArgument(node, 'view');
428
+ if (viewDecoratorArg) {
429
+ if (!metadata) {
430
+ metadata = {
431
+ viewName: viewDecoratorArg,
432
+ className,
433
+ isAggregate: false,
434
+ importFileName: './' + path.basename(sourceFile.fileName, '.ts'), // <-- Add this
435
+ };
436
+ }
437
+ else {
438
+ throw new Error(`Multiple @view/@aggregateView decorators found in ${sourceFile.fileName}. Only one is allowed.`);
439
+ }
440
+ }
441
+ // Check for @aggregateView
442
+ const aggregateViewDecoratorArg = getDecoratorArgument(node, 'aggregateView');
443
+ if (aggregateViewDecoratorArg) {
444
+ if (!metadata) {
445
+ metadata = {
446
+ viewName: aggregateViewDecoratorArg,
447
+ className,
448
+ isAggregate: true,
449
+ importFileName: './' + path.basename(sourceFile.fileName, '.ts'), // <-- Add this
450
+ };
451
+ }
452
+ else {
453
+ throw new Error(`Multiple @view/@aggregateView decorators found in ${sourceFile.fileName}. Only one is allowed.`);
454
+ }
455
+ }
456
+ }
457
+ });
458
+ return metadata;
459
+ }
460
+ exports.getViewMetadata = getViewMetadata;
461
+ function getDecoratorArgument(node, decoratorName) {
462
+ var _a, _b;
463
+ const decorator = (_a = node === null || node === void 0 ? void 0 : node.modifiers) === null || _a === void 0 ? void 0 : _a.find((modifier) => {
464
+ var _a, _b;
465
+ return (ts.isDecorator(modifier) &&
466
+ ts.isCallExpression(modifier === null || modifier === void 0 ? void 0 : modifier.expression) && ((_b = (_a = modifier === null || modifier === void 0 ? void 0 : modifier.expression) === null || _a === void 0 ? void 0 : _a.expression) === null || _b === void 0 ? void 0 : _b.text) === decoratorName);
467
+ });
468
+ if (decorator && ts.isCallExpression(decorator === null || decorator === void 0 ? void 0 : decorator.expression)) {
469
+ const decoratorExpression = decorator.expression;
470
+ return ((_b = decoratorExpression.arguments[0]) === null || _b === void 0 ? void 0 : _b.text) || null;
471
+ }
472
+ return null;
473
+ }
474
+ function getRelativePath(fileName, targetPath) {
475
+ const hosannaPath = path.resolve(_rootProjectPath, '../../hosanna-ui');
476
+ targetPath = targetPath.replace(`${hosannaPath}/`, '');
477
+ targetPath = targetPath.replace(/^\.?\/?src\//, '');
478
+ fileName = fileName.replace(`${hosannaPath}/`, '');
479
+ const absoluteTargetPath = path.resolve(_rootProjectPath, targetPath);
480
+ const fromDir = path.dirname(fileName);
481
+ const relative = path.relative(fromDir, absoluteTargetPath);
482
+ // debugger;
483
+ return relative.replace(/\\/g, '/');
484
+ }
485
+ function getExportedTypes(sourceFile) {
486
+ const exportTypes = new Set();
487
+ ts.forEachChild(sourceFile, (node) => {
488
+ var _a;
489
+ if (ts.isTypeAliasDeclaration(node) && ((_a = node.modifiers) === null || _a === void 0 ? void 0 : _a.some(mod => mod.kind === ts.SyntaxKind.ExportKeyword))) {
490
+ const exportName = node.name.getText();
491
+ exportTypes.add(exportName);
492
+ }
493
+ });
494
+ return exportTypes;
495
+ }
496
+ function containsHosannaView(filePath) {
497
+ const fileContent = fs.readFileSync(filePath, 'utf-8');
498
+ const viewRegex = /^\s*@(view|aggregateView)\(['"].*['"]\)/m;
499
+ return viewRegex.test(fileContent);
500
+ }
501
+ exports.containsHosannaView = containsHosannaView;
502
+ function getTargetStructClassName(targetViewName) {
503
+ if (!targetViewName) {
504
+ return 'ViewStruct';
505
+ }
506
+ if (targetViewName.endsWith('State')) {
507
+ targetViewName = targetViewName.replace('State', 'ViewStruct');
508
+ }
509
+ return `${targetViewName}ViewStruct`;
510
+ }
511
+ function getViewNameForState(viewStateName, sourceFile, imports) {
512
+ const importPath = imports.get(viewStateName);
513
+ if (!importPath)
514
+ return undefined;
515
+ const resolvedPath = path.resolve(path.dirname(sourceFile.fileName), importPath + '.ts');
516
+ if (!fs.existsSync(resolvedPath))
517
+ return undefined;
518
+ const fileContent = fs.readFileSync(resolvedPath, 'utf-8');
519
+ const importedSourceFile = ts.createSourceFile(resolvedPath, fileContent, ts.ScriptTarget.Latest, true);
520
+ const metadata = getViewMetadata(importedSourceFile);
521
+ return metadata === null || metadata === void 0 ? void 0 : metadata.viewName;
522
+ }
523
+ function addImportsForExtendedViewStruct(typeName, viewName, sourceFile, imports, requiredImportsMap, usedImports) {
524
+ const importPath = imports.get(typeName);
525
+ if (!importPath)
526
+ return;
527
+ const resolvedPath = path.resolve(path.dirname(sourceFile.fileName), importPath + '.ts');
528
+ if (!fs.existsSync(resolvedPath))
529
+ return;
530
+ const generatedStructImportPath = `./${path.join(path.dirname(importPath), `${path.basename(importPath)}-generated-struct`)}`;
531
+ // Add the necessary imports
532
+ requiredImportsMap.set(`${viewName}State`, importPath);
533
+ imports.set(`${viewName}State`, importPath);
534
+ usedImports.add(`${viewName}State`);
535
+ imports.set(`${viewName}ViewStruct`, generatedStructImportPath);
536
+ requiredImportsMap.set(`${viewName}ViewStruct`, generatedStructImportPath);
537
+ usedImports.add(`${viewName}ViewStruct`);
538
+ imports.set(`_${viewName}ViewStruct`, generatedStructImportPath);
539
+ requiredImportsMap.set(`_${viewName}ViewStruct`, generatedStructImportPath);
540
+ usedImports.add(`_${viewName}ViewStruct`);
541
+ }
542
+ function getTypeName(typeNode) {
543
+ if (ts.isTypeReferenceNode(typeNode)) {
544
+ return typeNode.typeName.getText().replace(/<.*>/, '');
545
+ }
546
+ else if (ts.isIdentifier(typeNode)) {
547
+ return typeNode.text;
548
+ }
549
+ else {
550
+ return typeNode.getText().replace(/<.*>/, '');
551
+ }
552
+ }
553
+ //# sourceMappingURL=struct-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"struct-generator.js","sourceRoot":"","sources":["../../src/generation/struct-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function generateView(rootFolder: string): Promise<void>;
@@ -0,0 +1,71 @@
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 (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.generateView = void 0;
27
+ const fs = __importStar(require("fs"));
28
+ const path = __importStar(require("path"));
29
+ const readline = __importStar(require("readline"));
30
+ const rl = readline.createInterface({
31
+ input: process.stdin,
32
+ output: process.stdout
33
+ });
34
+ function prompt(question) {
35
+ return new Promise((resolve) => rl.question(question, resolve));
36
+ }
37
+ async function generateView(rootFolder) {
38
+ const viewName = await prompt('Enter view name (e.g. Button): ');
39
+ const targetFolder = await prompt('Enter target folder relative to rootFolder (e.g. views/controls): ');
40
+ const viewClassName = `${viewName}View`;
41
+ const stateInterfaceName = `${viewName}State`;
42
+ const viewFilePath = path.resolve(rootFolder, targetFolder, `${viewName}.ts`);
43
+ const relativePathToLib = path.relative(path.dirname(viewFilePath), path.resolve(rootFolder, 'hosanna-ui/lib'));
44
+ const relativePathToViewsLib = path.relative(path.dirname(viewFilePath), path.resolve(rootFolder, 'hosanna-ui/views/lib'));
45
+ const content = `
46
+ import { layoutState, state, view } from '${relativePathToLib}/decorators';
47
+ import { BaseView } from '${relativePathToViewsLib}/BaseView';
48
+ import { ViewState, ViewStruct } from '${relativePathToViewsLib}/view-api';
49
+
50
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
51
+ export interface ${stateInterfaceName} extends ViewState {
52
+ }
53
+
54
+ @view('${viewName}')
55
+ export class ${viewClassName} extends BaseView<${stateInterfaceName}> {
56
+
57
+ protected override getViews(): ViewStruct<ViewState>[] {
58
+ return [];
59
+ }
60
+ }
61
+ `;
62
+ const outputDir = path.dirname(viewFilePath);
63
+ if (!fs.existsSync(outputDir)) {
64
+ fs.mkdirSync(outputDir, { recursive: true });
65
+ }
66
+ fs.writeFileSync(viewFilePath, content.trim());
67
+ console.log(`View ${viewName} created at ${viewFilePath}`);
68
+ rl.close(); // Close the readline interface here
69
+ }
70
+ exports.generateView = generateView;
71
+ //# sourceMappingURL=view-generator.js.map