@siyavuyachagi/typesharp 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,263 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.generate = generate;
40
+ exports.cleanOutputDirectory = cleanOutputDirectory;
41
+ exports.loadConfig = loadConfig;
42
+ exports.createSampleConfig = createSampleConfig;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const parser_1 = require("../parser");
46
+ const generator_1 = require("../generator");
47
+ const chalk_1 = __importDefault(require("chalk"));
48
+ /**
49
+ * Default configuration values
50
+ */
51
+ const DEFAULT_CONFIG = {
52
+ targetAnnotation: 'TypeSharp',
53
+ singleOutputFile: false,
54
+ fileNamingConvention: 'kebab',
55
+ namingConvention: 'camel'
56
+ };
57
+ /**
58
+ * Load configuration from a file
59
+ */
60
+ function loadConfigFromFile(filePath) {
61
+ const ext = path.extname(filePath);
62
+ if (ext === '.json') {
63
+ const content = fs.readFileSync(filePath, 'utf-8');
64
+ const config = JSON.parse(content);
65
+ return mergeWithDefaults(config);
66
+ }
67
+ if (ext === '.js' || ext === '.ts') {
68
+ // For TypeScript/JavaScript files, we need to require them
69
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
70
+ const config = require(path.resolve(filePath));
71
+ const exportedConfig = config.default || config;
72
+ return mergeWithDefaults(exportedConfig);
73
+ }
74
+ throw new Error(`Unsupported config file format: ${ext}`);
75
+ }
76
+ /**
77
+ * Merge user config with defaults
78
+ */
79
+ function mergeWithDefaults(config) {
80
+ if (!config.projectFiles) {
81
+ throw new Error('targetPath is required in configuration');
82
+ }
83
+ if (!config.outputPath) {
84
+ throw new Error('outputPath is required in configuration');
85
+ }
86
+ return {
87
+ ...DEFAULT_CONFIG,
88
+ ...config
89
+ };
90
+ }
91
+ async function generate(configPath) {
92
+ try {
93
+ console.log(chalk_1.default.cyan.bold('\n🚀 TypeSharp - Starting generation...'));
94
+ // Load configuration
95
+ const config = loadConfig(configPath);
96
+ console.log(chalk_1.default.green.bold('\n✓ Configuration loaded'));
97
+ // Display project files
98
+ const projectFiles = Array.isArray(config.projectFiles)
99
+ ? config.projectFiles
100
+ : [config.projectFiles];
101
+ if (projectFiles.length === 1) {
102
+ console.log(chalk_1.default.cyan(`-> Target:`), chalk_1.default.white(projectFiles[0]));
103
+ }
104
+ else {
105
+ console.log(chalk_1.default.cyan(`-> Targets (${projectFiles.length} projects):`));
106
+ projectFiles.forEach((file, index) => {
107
+ console.log(chalk_1.default.cyan(` ${index + 1}.`), chalk_1.default.white(file));
108
+ });
109
+ }
110
+ console.log(chalk_1.default.cyan(`-> Output:`), chalk_1.default.white(config.outputPath));
111
+ console.log(chalk_1.default.cyan(`-> Annotation:`), chalk_1.default.white(`[${config.targetAnnotation}]`));
112
+ console.log(chalk_1.default.cyan(`-> Single file:`), chalk_1.default.white(config.singleOutputFile));
113
+ if (config.fileSuffix) {
114
+ console.log(chalk_1.default.cyan(`-> File suffix:`), chalk_1.default.white(config.fileSuffix));
115
+ }
116
+ // Validate configuration
117
+ console.log(chalk_1.default.cyan('\n⧖ Configuration validation...'));
118
+ validateConfig(config);
119
+ console.log(chalk_1.default.green.bold('✓ Configuration validated'));
120
+ // Clean output directory
121
+ cleanOutputDirectory(config.outputPath);
122
+ // Parse C# files from all projects
123
+ console.log(chalk_1.default.cyan('\n⧖ Parsing C# files...'));
124
+ const parseResults = await (0, parser_1.parseCSharpFiles)(config);
125
+ if (parseResults.length === 0) {
126
+ console.warn(chalk_1.default.yellow.bold('❗ Warning:'), chalk_1.default.white(`No C# files found with [TypeSharp] attribute\n`));
127
+ return;
128
+ }
129
+ // Collect all classes
130
+ const allClasses = parseResults.flatMap(result => result.classes);
131
+ console.log(chalk_1.default.green.bold(`✓ Found ${allClasses.length} class(es) with [${config.targetAnnotation}] attribute`));
132
+ // Generate TypeScript files
133
+ console.log(chalk_1.default.blue.cyan('\n⧖ Generating TypeScript files...'));
134
+ (0, generator_1.generateTypeScriptFiles)(config, parseResults);
135
+ console.log(chalk_1.default.green.bold('✅ Generation completed successfully!\n'));
136
+ }
137
+ catch (error) {
138
+ if (error instanceof Error) {
139
+ console.error(chalk_1.default.red.bold(`\n❌ Error:`), chalk_1.default.white(error.message));
140
+ }
141
+ else {
142
+ console.error(chalk_1.default.red.bold(`\n❌ An unknown error occurred`));
143
+ }
144
+ throw error;
145
+ }
146
+ }
147
+ /**
148
+ * Deletes all contents of a directory but keeps the directory itself.
149
+ * @param dir Path to the directory to clean
150
+ */
151
+ function cleanOutputDirectory(dir) {
152
+ if (!fs.existsSync(dir))
153
+ return;
154
+ const entries = fs.readdirSync(dir);
155
+ console.log('\nRemoving:');
156
+ for (const entry of entries) {
157
+ const fullPath = path.join(dir, entry);
158
+ console.log(chalk_1.default.red('-', chalk_1.default.strikethrough(`${fullPath}`)));
159
+ const stat = fs.lstatSync(fullPath);
160
+ if (stat.isDirectory()) {
161
+ fs.rmSync(fullPath, { recursive: true, force: true });
162
+ }
163
+ else {
164
+ fs.unlinkSync(fullPath);
165
+ }
166
+ }
167
+ }
168
+ /**
169
+ * Load configuration from file or use provided config
170
+ */
171
+ function loadConfig(configPath) {
172
+ if (configPath && fs.existsSync(configPath)) {
173
+ return loadConfigFromFile(configPath);
174
+ }
175
+ // Look for default config files
176
+ const defaultPaths = [
177
+ 'typesharp.config.ts',
178
+ 'typesharp.config.js',
179
+ 'typesharp.config.json'
180
+ ];
181
+ for (const defaultPath of defaultPaths) {
182
+ if (fs.existsSync(defaultPath)) {
183
+ return loadConfigFromFile(defaultPath);
184
+ }
185
+ }
186
+ throw new Error('No configuration file found. Please create typesharp.config.ts, typesharp.config.js, or typesharp.config.json');
187
+ }
188
+ /**
189
+ * Validate configuration
190
+ */
191
+ function validateConfig(config) {
192
+ // Convert single project to array for unified handling
193
+ const projectFiles = Array.isArray(config.projectFiles)
194
+ ? config.projectFiles
195
+ : [config.projectFiles];
196
+ // Validate each project file
197
+ for (const projectFile of projectFiles) {
198
+ if (!fs.existsSync(projectFile)) {
199
+ throw new Error(`Project file does not exist: ${projectFile}`);
200
+ }
201
+ const stats = fs.statSync(projectFile);
202
+ if (!stats.isFile()) {
203
+ throw new Error(`Target path is not a file: ${projectFile}`);
204
+ }
205
+ if (!projectFile.endsWith('.csproj')) {
206
+ throw new Error(`Target file is not a .csproj: ${projectFile}`);
207
+ }
208
+ }
209
+ /**
210
+ * Optional fields sanitization
211
+ */
212
+ if (config.targetAnnotation) {
213
+ const original = config.targetAnnotation;
214
+ // Remove spaces, [ and ]
215
+ config.targetAnnotation = config.targetAnnotation.replace(/[ \[\]]/g, '');
216
+ if (config.targetAnnotation !== original) {
217
+ console.warn(chalk_1.default.yellow.bold('❗ Warning:'), chalk_1.default.white(`remove invalid characters (space, [ or ]) from your`), chalk_1.default.bold('targetAnnotation'), `\n`);
218
+ }
219
+ }
220
+ }
221
+ /**
222
+ * Create a sample configuration file
223
+ */
224
+ function createSampleConfig(format = 'json') {
225
+ const sampleConfig = {
226
+ // Show array format as example
227
+ projectFiles: [
228
+ 'C:/Users/User/Desktop/MyApp/Api/Api.csproj',
229
+ 'C:/Users/User/Desktop/MyApp/Domain/Domain.csproj'
230
+ ],
231
+ outputPath: './app/types',
232
+ targetAnnotation: 'TypeSharp',
233
+ singleOutputFile: false,
234
+ fileNamingConvention: 'kebab',
235
+ namingConvention: 'camel',
236
+ };
237
+ let fileName;
238
+ let content;
239
+ if (format === 'json') {
240
+ fileName = 'typesharp.config.json';
241
+ content = JSON.stringify(sampleConfig, null, 2);
242
+ }
243
+ else if (format === 'js') {
244
+ fileName = 'typesharp.config.js';
245
+ content = `module.exports = ${JSON.stringify(sampleConfig, null, 2)};\n`;
246
+ }
247
+ else {
248
+ fileName = 'typesharp.config.ts';
249
+ content = `import type { TypeSharpConfig } from 'typesharp';
250
+
251
+ const config: TypeSharpConfig = ${JSON.stringify(sampleConfig, null, 2)};
252
+
253
+ export default config;
254
+ `;
255
+ }
256
+ if (fs.existsSync(fileName)) {
257
+ console.log(chalk_1.default.yellow.bold('❗ Warning:'), chalk_1.default.white(`${fileName} already exists. Skipping creation.`));
258
+ return;
259
+ }
260
+ fs.writeFileSync(fileName, content, 'utf-8');
261
+ console.log(chalk_1.default.green.bold('✅ Created'), chalk_1.default.white(`./${fileName}`));
262
+ }
263
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ParseResult, TypeSharpConfig } from '../types';
2
+ /**
3
+ * Generate TypeScript files from parsed C# classes
4
+ */
5
+ export declare function generateTypeScriptFiles(config: TypeSharpConfig, parseResults: ParseResult[]): void;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG7D;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,WAAW,EAAE,GAC1B,IAAI,CAcN"}
@@ -0,0 +1,346 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.generateTypeScriptFiles = generateTypeScriptFiles;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ /**
44
+ * Generate TypeScript files from parsed C# classes
45
+ */
46
+ function generateTypeScriptFiles(config, parseResults) {
47
+ const outputPath = config.outputPath;
48
+ if (!fs.existsSync(outputPath)) {
49
+ fs.mkdirSync(outputPath, { recursive: true });
50
+ }
51
+ if (config.singleOutputFile) {
52
+ const allClasses = parseResults.flatMap(r => r.classes);
53
+ generateSingleFile(allClasses, outputPath, config);
54
+ }
55
+ else {
56
+ // Generate one TypeScript file per C# file (preserves grouping)
57
+ generateMultipleFiles(outputPath, config, parseResults);
58
+ }
59
+ }
60
+ /**
61
+ * Generate a single file with all types
62
+ */
63
+ function generateSingleFile(classes, outputPath, config) {
64
+ const content = classes
65
+ .map(cls => generateTypeScriptClass(cls, config))
66
+ .join('\n\n');
67
+ const header = generateFileHeader();
68
+ const fullContent = `${header}\n\n${content}\n`;
69
+ const fileName = 'types.ts';
70
+ const filePath = path.join(outputPath, fileName);
71
+ fs.writeFileSync(filePath, fullContent, 'utf-8');
72
+ console.log(chalk_1.default.whiteBright(` - Generated:`), chalk_1.default.blue(filePath));
73
+ }
74
+ /**
75
+ * Generate multiple files - one TypeScript file per C# source file
76
+ * This preserves the original grouping of classes
77
+ */
78
+ function generateMultipleFiles(outputPath, config, parseResults) {
79
+ // Build a map of class names to their file paths for import resolution
80
+ const classToFileMap = buildClassToFileMap(parseResults, config, outputPath);
81
+ for (const result of parseResults) {
82
+ // Generate content for all classes in this C# file
83
+ const content = result.classes
84
+ .map(cls => generateTypeScriptClass(cls, config))
85
+ .join('\n\n');
86
+ // Preserve folder structure
87
+ const relativeDir = path.dirname(result.relativePath);
88
+ const targetDir = path.join(outputPath, relativeDir);
89
+ // Create directory if needed
90
+ if (!fs.existsSync(targetDir)) {
91
+ fs.mkdirSync(targetDir, { recursive: true });
92
+ }
93
+ // Get the original C# filename without extension
94
+ const originalFileName = path.basename(result.relativePath, '.cs');
95
+ // Apply file suffix if configured
96
+ let baseName = originalFileName;
97
+ if (config.fileSuffix) {
98
+ const convention = config.fileNamingConvention || 'kebab';
99
+ const suffix = convertFileName(config.fileSuffix, convention);
100
+ baseName = `${baseName}-${suffix}`;
101
+ }
102
+ // Apply naming convention to the filename
103
+ const fileName = convertFileName(baseName, config.fileNamingConvention || 'kebab');
104
+ const filePath = path.join(targetDir, `${fileName}.ts`);
105
+ // Generate imports for this file
106
+ const currentClassNames = result.classes.map(c => c.name);
107
+ const imports = generateImports(result.classes, classToFileMap, filePath, currentClassNames);
108
+ const header = generateFileHeader();
109
+ const fullContent = imports
110
+ ? `${header}\n\n${imports}\n\n${content}\n`
111
+ : `${header}\n\n${content}\n`;
112
+ fs.writeFileSync(filePath, fullContent, 'utf-8');
113
+ console.log(chalk_1.default.whiteBright(` - Generated:`), chalk_1.default.blue(filePath));
114
+ }
115
+ }
116
+ /**
117
+ * Build a map of class names to their output file paths
118
+ */
119
+ function buildClassToFileMap(parseResults, config, outputPath) {
120
+ const map = new Map();
121
+ for (const result of parseResults) {
122
+ const relativeDir = path.dirname(result.relativePath);
123
+ const targetDir = path.join(outputPath, relativeDir);
124
+ const originalFileName = path.basename(result.relativePath, '.cs');
125
+ let baseName = originalFileName;
126
+ if (config.fileSuffix) {
127
+ const convention = config.fileNamingConvention || 'kebab';
128
+ const suffix = convertFileName(config.fileSuffix, convention);
129
+ baseName = `${baseName}-${suffix}`;
130
+ }
131
+ const fileName = convertFileName(baseName, config.fileNamingConvention || 'kebab');
132
+ const filePath = path.join(targetDir, `${fileName}.ts`);
133
+ // Map all classes in this file to this file path
134
+ for (const cls of result.classes) {
135
+ map.set(cls.name, filePath);
136
+ }
137
+ }
138
+ return map;
139
+ }
140
+ /**
141
+ * Generate import statements for referenced types
142
+ */
143
+ function generateImports(classes, classToFileMap, currentFilePath, currentClassNames) {
144
+ const imports = new Map(); // filePath -> Set of class names
145
+ for (const cls of classes) {
146
+ // Skip enums as they don't have properties
147
+ if (cls.isEnum)
148
+ continue;
149
+ // Check inheritance
150
+ if (cls.inheritsFrom && !currentClassNames.includes(cls.inheritsFrom)) {
151
+ const referencedFilePath = classToFileMap.get(cls.inheritsFrom);
152
+ if (referencedFilePath && referencedFilePath !== currentFilePath) {
153
+ if (!imports.has(referencedFilePath)) {
154
+ imports.set(referencedFilePath, new Set());
155
+ }
156
+ imports.get(referencedFilePath).add(cls.inheritsFrom);
157
+ }
158
+ }
159
+ // Check property types
160
+ for (const prop of cls.properties) {
161
+ // Extract base type (remove array brackets and nullable)
162
+ let referencedType = prop.type;
163
+ // Skip primitive types
164
+ if (isPrimitiveType(referencedType))
165
+ continue;
166
+ // Skip if it's in the same file
167
+ if (currentClassNames.includes(referencedType))
168
+ continue;
169
+ const referencedFilePath = classToFileMap.get(referencedType);
170
+ if (referencedFilePath && referencedFilePath !== currentFilePath) {
171
+ if (!imports.has(referencedFilePath)) {
172
+ imports.set(referencedFilePath, new Set());
173
+ }
174
+ imports.get(referencedFilePath).add(referencedType);
175
+ }
176
+ }
177
+ }
178
+ // Generate import statements
179
+ const importStatements = [];
180
+ for (const [filePath, classNames] of imports.entries()) {
181
+ const relativePath = getRelativeImportPath(currentFilePath, filePath);
182
+ const sortedNames = Array.from(classNames).sort();
183
+ importStatements.push(`import type { ${sortedNames.join(', ')} } from '${relativePath}';`);
184
+ }
185
+ return importStatements.length > 0 ? importStatements.join('\n') : '';
186
+ }
187
+ /**
188
+ * Get relative import path from one file to another
189
+ */
190
+ function getRelativeImportPath(fromFile, toFile) {
191
+ const fromDir = path.dirname(fromFile);
192
+ let relativePath = path.relative(fromDir, toFile);
193
+ // Remove .ts extension
194
+ relativePath = relativePath.replace(/\.ts$/, '');
195
+ // Ensure it starts with ./ or ../
196
+ if (!relativePath.startsWith('.')) {
197
+ relativePath = './' + relativePath;
198
+ }
199
+ // Convert Windows backslashes to forward slashes
200
+ relativePath = relativePath.replace(/\\/g, '/');
201
+ return relativePath;
202
+ }
203
+ /**
204
+ * Check if a type is a primitive TypeScript type
205
+ */
206
+ function isPrimitiveType(type) {
207
+ const primitives = ['string', 'number', 'boolean', 'any', 'void', 'null', 'undefined'];
208
+ return primitives.includes(type);
209
+ }
210
+ /**
211
+ * Generate TypeScript interface or enum from C# class
212
+ */
213
+ function generateTypeScriptClass(cls, config) {
214
+ if (cls.isEnum) {
215
+ return generateEnum(cls);
216
+ }
217
+ return generateInterface(cls, config);
218
+ }
219
+ /**
220
+ * Generate TypeScript enum
221
+ */
222
+ function generateEnum(cls) {
223
+ const values = cls.enumValues || [];
224
+ const enumValues = values
225
+ .map(v => ` ${v} = '${v}'`)
226
+ .join(',\n');
227
+ return `export enum ${cls.name} {\n${enumValues}\n}`;
228
+ }
229
+ /**
230
+ * Generate TypeScript interface
231
+ */
232
+ function generateInterface(cls, config) {
233
+ const properties = cls.properties
234
+ .map(prop => generateProperty(prop, config.namingConvention || 'camel'))
235
+ .join('\n');
236
+ // Build generic parameters for the interface
237
+ const genericParams = cls.genericParameters && cls.genericParameters.length > 0
238
+ ? `<${cls.genericParameters.join(', ')}>`
239
+ : '';
240
+ // Build extends clause with generics
241
+ let extendsClause = '';
242
+ if (cls.inheritsFrom) {
243
+ const baseGenerics = cls.baseClassGenerics && cls.baseClassGenerics.length > 0
244
+ ? `<${cls.baseClassGenerics.join(', ')}>`
245
+ : '';
246
+ extendsClause = ` extends ${cls.inheritsFrom}${baseGenerics}`;
247
+ }
248
+ return `export interface ${cls.name}${genericParams}${extendsClause} {\n${properties}\n}`;
249
+ }
250
+ /**
251
+ * Generate a single property
252
+ */
253
+ function generateProperty(prop, convention) {
254
+ const propertyName = convertPropertyName(prop.name, convention);
255
+ let type = prop.type;
256
+ // Handle arrays: append [] only when prop.isArray is true and the type does not already look like a Record or an array
257
+ const alreadyArrayLike = /\[\]$/.test(type);
258
+ const isRecordType = /^Record<.*>$/.test(type);
259
+ if (prop.isArray && !isRecordType && !alreadyArrayLike) {
260
+ type = `${type}[]`;
261
+ }
262
+ // Handle nullable
263
+ if (prop.isNullable) {
264
+ type = `${type} | null`;
265
+ }
266
+ return ` ${propertyName}: ${type};`;
267
+ }
268
+ /**
269
+ * Convert property name to specified convention
270
+ */
271
+ function convertPropertyName(name, convention) {
272
+ switch (convention) {
273
+ case 'camel':
274
+ return toCamelCase(name);
275
+ case 'pascal':
276
+ return toPascalCase(name);
277
+ case 'snake':
278
+ return toSnakeCase(name);
279
+ case 'kebab':
280
+ return toKebabCase(name);
281
+ default:
282
+ return name;
283
+ }
284
+ }
285
+ /**
286
+ * Convert file name to specified convention
287
+ */
288
+ function convertFileName(name, convention) {
289
+ switch (convention) {
290
+ case 'kebab':
291
+ return toKebabCase(name);
292
+ case 'snake':
293
+ return toSnakeCase(name);
294
+ case 'camel':
295
+ return toCamelCase(name);
296
+ case 'pascal':
297
+ return toPascalCase(name);
298
+ default:
299
+ return name;
300
+ }
301
+ }
302
+ /**
303
+ * Convert string to camelCase
304
+ */
305
+ function toCamelCase(str) {
306
+ const pascal = toPascalCase(str);
307
+ return pascal.charAt(0).toLowerCase() + pascal.slice(1);
308
+ }
309
+ /**
310
+ * Convert string to PascalCase
311
+ */
312
+ function toPascalCase(str) {
313
+ return str
314
+ .replace(/[_-](.)/g, (_, char) => char.toUpperCase())
315
+ .replace(/^(.)/, (_, char) => char.toUpperCase());
316
+ }
317
+ /**
318
+ * Convert string to snake_case
319
+ */
320
+ function toSnakeCase(str) {
321
+ return str
322
+ .replace(/([A-Z])/g, '_$1')
323
+ .toLowerCase()
324
+ .replace(/^_/, '');
325
+ }
326
+ /**
327
+ * Convert string to kebab-case
328
+ */
329
+ function toKebabCase(str) {
330
+ return str
331
+ .replace(/([A-Z])/g, '-$1')
332
+ .toLowerCase()
333
+ .replace(/^-/, '');
334
+ }
335
+ /**
336
+ * Generate file header comment
337
+ */
338
+ function generateFileHeader() {
339
+ const timestamp = new Date().toISOString();
340
+ return `/**
341
+ * Auto-generated by TypeSharp
342
+ * Generated at: ${timestamp}
343
+ * Do not edit this file manually
344
+ */`;
345
+ }
346
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Split a comma-separated generic-argument string into top-level args,
3
+ * i.e. respects nested <...> and does NOT split commas inside nested generics.
4
+ * Example: "string, List<Dictionary<string, Foo>>, int" -> ["string", "List<Dictionary<string, Foo>>", "int"]
5
+ */
6
+ declare function splitTopLevelGenericArgs(s: string): string[];
7
+ /**
8
+ * Find the index of the matching '>' for the first '<' at startIdx.
9
+ * Returns -1 if not found.
10
+ */
11
+ declare function findMatchingAngleBracket(s: string, startIdx: number): number;
12
+ //# sourceMappingURL=helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../src/helpers/helper.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,iBAAS,wBAAwB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBrD;AAED;;;GAGG;AACH,iBAAS,wBAAwB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUrE"}