@siyavuyachagi/typesharp 0.1.0 → 0.1.2

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 (42) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +196 -49
  3. package/dist/cli/index.js +7 -5
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/core/create-sample-config.d.ts +5 -0
  6. package/dist/core/create-sample-config.d.ts.map +1 -0
  7. package/dist/core/create-sample-config.js +110 -0
  8. package/dist/core/create-sample-config.js.map +1 -0
  9. package/dist/core/index.d.ts +5 -5
  10. package/dist/core/index.d.ts.map +1 -1
  11. package/dist/core/index.js +36 -66
  12. package/dist/core/index.js.map +1 -1
  13. package/dist/generator/index.js +77 -53
  14. package/dist/generator/index.js.map +1 -1
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +1 -2
  18. package/dist/index.js.map +1 -1
  19. package/dist/parser/index.d.ts.map +1 -1
  20. package/dist/parser/index.js +12 -176
  21. package/dist/parser/index.js.map +1 -1
  22. package/dist/parser/parse-properties.d.ts +6 -0
  23. package/dist/parser/parse-properties.d.ts.map +1 -0
  24. package/dist/parser/parse-properties.js +250 -0
  25. package/dist/parser/parse-properties.js.map +1 -0
  26. package/dist/parser/resolve-project-files-from-source.d.ts +29 -0
  27. package/dist/parser/resolve-project-files-from-source.d.ts.map +1 -0
  28. package/dist/parser/resolve-project-files-from-source.js +98 -0
  29. package/dist/parser/resolve-project-files-from-source.js.map +1 -0
  30. package/dist/types/index.d.ts +7 -1
  31. package/dist/types/index.d.ts.map +1 -1
  32. package/dist/types/naming-convention-config.d.ts +9 -0
  33. package/dist/types/naming-convention-config.d.ts.map +1 -0
  34. package/dist/types/naming-convention-config.js +3 -0
  35. package/dist/types/naming-convention-config.js.map +1 -0
  36. package/dist/types/naming-convention.d.ts +5 -0
  37. package/dist/types/naming-convention.d.ts.map +1 -0
  38. package/dist/types/naming-convention.js +3 -0
  39. package/dist/types/naming-convention.js.map +1 -0
  40. package/dist/types/typesharp-config.d.ts +29 -25
  41. package/dist/types/typesharp-config.d.ts.map +1 -1
  42. package/package.json +14 -6
@@ -37,15 +37,15 @@ exports.parseCSharpFiles = parseCSharpFiles;
37
37
  const fs = __importStar(require("fs"));
38
38
  const path = __importStar(require("path"));
39
39
  const glob_1 = require("glob");
40
+ const resolve_project_files_from_source_1 = require("./resolve-project-files-from-source");
41
+ const parse_properties_1 = require("./parse-properties");
40
42
  /**
41
43
  * Parse C# files in the target project(s)
42
44
  */
43
45
  async function parseCSharpFiles(config) {
44
46
  const targetAnnotation = config.targetAnnotation ?? 'TypeSharp';
45
47
  // Convert single project to array for unified handling
46
- const projectFiles = Array.isArray(config.projectFiles)
47
- ? config.projectFiles
48
- : [config.projectFiles];
48
+ const projectFiles = (0, resolve_project_files_from_source_1.resolveProjectFilesFromSource)(config.source);
49
49
  const allResults = [];
50
50
  // Process each project
51
51
  for (const projectFile of projectFiles) {
@@ -75,22 +75,24 @@ function parseClassesFromFile(content, targetAnnotation) {
75
75
  // Remove comments
76
76
  const cleanContent = removeComments(content);
77
77
  // Find all classes/enums with the target annotation
78
- const annotationRegex = new RegExp(`\\[${targetAnnotation}\\]`, 'g');
78
+ const annotationRegex = new RegExp(`\\[${targetAnnotation}(?:Attribute)?(?:\\(\\s*"([^"]*)"\\s*\\))?\\]`, 'g');
79
79
  const matches = [...cleanContent.matchAll(annotationRegex)];
80
80
  for (const match of matches) {
81
81
  const startIndex = match.index;
82
82
  const afterAnnotation = cleanContent.substring(startIndex);
83
83
  // Check if it's an enum
84
- const enumMatch = afterAnnotation.match(/\[[\w]+\]\s*public\s+enum\s+(\w+)/);
84
+ const enumMatch = afterAnnotation.match(/(?:\[[\w]+(?:\([^)]*\))?\]\s*)*public\s+enum\s+(\w+)/);
85
85
  if (enumMatch) {
86
- const enumClass = parseEnum(afterAnnotation, enumMatch[1]);
86
+ const typeNameOverride = match[1] ?? undefined;
87
+ const enumClass = parseEnum(afterAnnotation, typeNameOverride ?? enumMatch[1]);
87
88
  if (enumClass)
88
89
  classes.push(enumClass);
89
90
  continue;
90
91
  }
91
92
  // Parse as class with full generic support
92
93
  // Matches: public class ClassName<T, U> : BaseClass<T>
93
- const classMatch = afterAnnotation.match(/\[[\w]+\]\s*public\s+class\s+(\w+)(?:<([^>]+)>)?(?:\s*:\s*(\w+)(?:<([^>]+)>)?)?/);
94
+ // Now supports multiple stacked attributes before the class declaration
95
+ const classMatch = afterAnnotation.match(/(?:\[[\w]+(?:\([^)]*\))?\]\s*)*public\s+class\s+(\w+)(?:<([^>]+)>)?(?:\s*:\s*(\w+)(?:<([^>]+)>)?)?/);
94
96
  if (classMatch) {
95
97
  const className = classMatch[1];
96
98
  const genericParams = classMatch[2]; // e.g., "T" or "T, U"
@@ -98,7 +100,7 @@ function parseClassesFromFile(content, targetAnnotation) {
98
100
  const baseGenerics = classMatch[4]; // e.g., "T" or "T, U"
99
101
  const classBody = extractClassBody(afterAnnotation);
100
102
  if (classBody) {
101
- const properties = parseProperties(classBody);
103
+ const properties = (0, parse_properties_1.parseProperties)(classBody);
102
104
  // Parse generic parameters
103
105
  const genericParameters = genericParams
104
106
  ? genericParams.split(',').map(p => p.trim())
@@ -106,8 +108,9 @@ function parseClassesFromFile(content, targetAnnotation) {
106
108
  const baseClassGenerics = baseGenerics
107
109
  ? baseGenerics.split(',').map(p => p.trim())
108
110
  : undefined;
111
+ const typeNameOverride = match[1] ?? undefined;
109
112
  classes.push({
110
- name: className,
113
+ name: typeNameOverride ?? className,
111
114
  properties,
112
115
  inheritsFrom,
113
116
  isEnum: false,
@@ -160,173 +163,6 @@ function extractClassBody(content) {
160
163
  }
161
164
  return null;
162
165
  }
163
- /**
164
- * Parse properties from class body
165
- */
166
- function parseProperties(classBody) {
167
- const properties = [];
168
- // Match property declarations with get/set
169
- const propertyRegex = /public\s+([\w<>[\]?]+)\s+(\w+)\s*\{\s*get;\s*set;\s*\}/g;
170
- let match;
171
- while ((match = propertyRegex.exec(classBody)) !== null) {
172
- const type = match[1];
173
- const name = match[2];
174
- properties.push(parsePropertyType(name, type));
175
- }
176
- // Also match computed/expression-bodied properties (with =>)
177
- // These are read-only, so we'll skip them for now since they don't have set;
178
- // If you want to include them, uncomment below:
179
- /*
180
- const computedPropertyRegex = /public\s+([\w<>[\]?]+)\s+(\w+)\s*=>/g;
181
- while ((match = computedPropertyRegex.exec(classBody)) !== null) {
182
- const type = match[1]!;
183
- const name = match[2]!;
184
-
185
- properties.push(parsePropertyType(name, type));
186
- }
187
- */
188
- return properties;
189
- }
190
- /**
191
- * Find the index of the matching '>' for the first '<' at startIdx.
192
- * Returns -1 if not found.
193
- */
194
- function findMatchingAngleBracket(s, startIdx) {
195
- let depth = 0;
196
- for (let i = startIdx; i < s.length; i++) {
197
- if (s[i] === '<')
198
- depth++;
199
- else if (s[i] === '>') {
200
- depth--;
201
- if (depth === 0)
202
- return i;
203
- }
204
- }
205
- return -1;
206
- }
207
- /**
208
- * Split a comma-separated generic-argument string into top-level args,
209
- * i.e. respects nested <...> and does NOT split commas inside nested generics.
210
- * Example: "string, List<Dictionary<string, Foo>>, int" -> ["string", "List<Dictionary<string, Foo>>", "int"]
211
- */
212
- function splitTopLevelGenericArgs(s) {
213
- const parts = [];
214
- let depth = 0;
215
- let buf = '';
216
- for (let i = 0; i < s.length; i++) {
217
- const ch = s[i];
218
- if (ch === '<') {
219
- depth++;
220
- buf += ch;
221
- }
222
- else if (ch === '>') {
223
- depth--;
224
- buf += ch;
225
- }
226
- else if (ch === ',' && depth === 0) {
227
- parts.push(buf.trim());
228
- buf = '';
229
- }
230
- else {
231
- buf += ch;
232
- }
233
- }
234
- if (buf.trim().length > 0)
235
- parts.push(buf.trim());
236
- return parts;
237
- }
238
- function parsePropertyType(name, csType) {
239
- let raw = csType.trim();
240
- let isNullable = false;
241
- // Extract nullable marker (T?)
242
- if (raw.endsWith('?')) {
243
- isNullable = true;
244
- raw = raw.slice(0, -1).trim();
245
- }
246
- // Recursive resolver: returns { tsType, isArray }
247
- function resolveType(typeText) {
248
- const t = typeText.trim();
249
- // 1) Array syntax: T[]
250
- if (t.endsWith('[]')) {
251
- const inner = t.slice(0, -2).trim();
252
- const resolved = resolveType(inner);
253
- // If inner is already an array, keep it as array-of-array semantics;
254
- // mark as array so generator will append [] (or use resolved.tsType which may include [] already)
255
- return { tsType: resolved.tsType, isArray: true };
256
- }
257
- // 2) Dictionary-like types (handle Dictionary, IDictionary, IReadOnlyDictionary)
258
- if (/^(?:[\w\.]+\.)?(?:Dictionary|IDictionary|IReadOnlyDictionary)\s*</.test(t)) {
259
- // locate first '<' and its matching '>'
260
- const firstAngle = t.indexOf('<');
261
- const lastAngle = findMatchingAngleBracket(t, firstAngle);
262
- if (firstAngle !== -1 && lastAngle !== -1) {
263
- const inner = t.slice(firstAngle + 1, lastAngle).trim();
264
- const args = splitTopLevelGenericArgs(inner);
265
- if (args.length === 2) {
266
- const keyCs = args[0];
267
- const valueCs = args[1];
268
- // Guard against undefined/null/empty parts before resolving
269
- if (typeof keyCs !== 'string' || typeof valueCs !== 'string' || keyCs.trim() === '' || valueCs.trim() === '') {
270
- // Fallback: avoid throwing — emit a generic record
271
- return { tsType: 'Record<string, any>', isArray: false };
272
- }
273
- const resolvedKey = resolveType(keyCs);
274
- const resolvedValue = resolveType(valueCs);
275
- // Normalize key to a safe TS key type: Record<K extends keyof any, V>
276
- // If key is not primitive 'string' or 'number' or 'symbol', coerce to 'string'
277
- const keyTsRaw = resolvedKey.tsType;
278
- const safeKey = keyTsRaw === 'string' || keyTsRaw === 'number' || keyTsRaw === 'symbol'
279
- ? keyTsRaw
280
- : 'string';
281
- // Build value type (respect nested arrays)
282
- const valueType = resolvedValue.isArray ? `${resolvedValue.tsType}[]` : resolvedValue.tsType;
283
- return { tsType: `Record<${safeKey}, ${valueType}>`, isArray: false };
284
- }
285
- // else: fallthrough to other checks (malformed or >2 args) — do not falsely match
286
- }
287
- }
288
- // 3) Collections: List<T>, IEnumerable<T>, ICollection<T>, IList<T>
289
- const collectionMatch = t.match(/^(?:List|IEnumerable|ICollection|IList)\s*<\s*(.+)\s*>$/);
290
- if (collectionMatch) {
291
- const inner = collectionMatch[1].trim();
292
- const resolvedInner = resolveType(inner);
293
- // Collections become inner[] in TS; mark isArray true and tsType = resolvedInner.tsType
294
- // The generator will append [].
295
- return { tsType: resolvedInner.tsType, isArray: true };
296
- }
297
- // 4) Fallback: map primitive / known types, else return as-is (class name)
298
- return { tsType: mapCSharpTypeToTypeScript(t), isArray: false };
299
- }
300
- const resolved = resolveType(raw);
301
- return {
302
- name,
303
- type: resolved.tsType,
304
- isNullable,
305
- isArray: resolved.isArray,
306
- isGeneric: false,
307
- genericType: undefined
308
- };
309
- }
310
- /**
311
- * Map C# primitive types to TypeScript types
312
- */
313
- function mapCSharpTypeToTypeScript(csType) {
314
- const typeMap = {
315
- 'string': 'string',
316
- 'int': 'number',
317
- 'long': 'number',
318
- 'double': 'number',
319
- 'float': 'number',
320
- 'decimal': 'number',
321
- 'bool': 'boolean',
322
- 'DateTime': 'string',
323
- 'DateOnly': 'string',
324
- 'TimeOnly': 'string',
325
- 'Guid': 'string',
326
- 'object': 'any'
327
- };
328
- return typeMap[csType] || csType;
329
- }
330
166
  /**
331
167
  * Remove single-line and multi-line comments
332
168
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { CSharpProperty } from "../types";
2
+ /**
3
+ * Parse properties from class body
4
+ */
5
+ export declare function parseProperties(classBody: string): CSharpProperty[];
6
+ //# sourceMappingURL=parse-properties.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-properties.d.ts","sourceRoot":"","sources":["../../src/parser/parse-properties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE,CAsDnE"}
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseProperties = parseProperties;
4
+ /**
5
+ * Parse properties from class body
6
+ */
7
+ function parseProperties(classBody) {
8
+ const properties = [];
9
+ let match;
10
+ // Match property declarations with get/set
11
+ const propertyRegex = /public\s+([\w<>[\]?]+)\s+(\w+)\s*\{\s*get;\s*set;\s*\}/g;
12
+ while ((match = propertyRegex.exec(classBody)) !== null) {
13
+ const type = match[1];
14
+ const name = match[2];
15
+ const tsAttrs = extractTypeSharpAttributeInfo(classBody, match.index);
16
+ if (tsAttrs.ignore)
17
+ continue;
18
+ const resolvedName = tsAttrs.overrideName ?? name;
19
+ const resolvedType = tsAttrs.overrideType ?? type;
20
+ const obs = extractObsoleteInfo(classBody, match.index);
21
+ properties.push({ ...parsePropertyType(resolvedName, resolvedType), ...obs });
22
+ }
23
+ // Also match computed/expression-bodied properties (with =>)
24
+ const computedPropertyRegex = /public\s+([\w<>[\]?]+)\s+(\w+)\s*=>/g;
25
+ while ((match = computedPropertyRegex.exec(classBody)) !== null) {
26
+ const type = match[1];
27
+ const name = match[2];
28
+ const tsAttrs = extractTypeSharpAttributeInfo(classBody, match.index);
29
+ if (tsAttrs.ignore)
30
+ continue;
31
+ const resolvedName = tsAttrs.overrideName ?? name;
32
+ const resolvedType = tsAttrs.overrideType ?? type;
33
+ const obs = extractObsoleteInfo(classBody, match.index);
34
+ properties.push({ ...parsePropertyType(resolvedName, resolvedType), ...obs });
35
+ }
36
+ // { get { return ...; } }
37
+ const getBlockRegex = /public\s+([\w<>[\]?]+)\s+(\w+)\s*\{\s*get\s*\{[^}]*\}\s*\}/g;
38
+ while ((match = getBlockRegex.exec(classBody)) !== null) {
39
+ const type = match[1];
40
+ const name = match[2];
41
+ const tsAttrs = extractTypeSharpAttributeInfo(classBody, match.index);
42
+ if (tsAttrs.ignore)
43
+ continue;
44
+ const resolvedName = tsAttrs.overrideName ?? name;
45
+ const resolvedType = tsAttrs.overrideType ?? type;
46
+ const obs = extractObsoleteInfo(classBody, match.index);
47
+ properties.push({ ...parsePropertyType(resolvedName, resolvedType), ...obs });
48
+ }
49
+ return properties;
50
+ }
51
+ function extractObsoleteInfo(classBody, matchIndex) {
52
+ const before = classBody.substring(0, matchIndex);
53
+ const lines = before.split('\n');
54
+ // Walk backwards, only through attribute lines and whitespace
55
+ // Stop as soon as we hit a line that isn't an attribute or blank
56
+ for (let i = lines.length - 1; i >= 0; i--) {
57
+ const line = lines[i].trim();
58
+ if (line === '')
59
+ continue;
60
+ // If it's an attribute line, check for Obsolete
61
+ if (line.startsWith('[')) {
62
+ const obsoleteMatch = line.match(/\[Obsolete(?:Attribute)?\s*(?:\(\s*"([^"]*)"\s*(?:,\s*(?:true|false))?\s*\))?\]/i);
63
+ if (obsoleteMatch) {
64
+ return {
65
+ isDeprecated: true,
66
+ deprecationMessage: obsoleteMatch[1] ?? undefined
67
+ };
68
+ }
69
+ // It's a different attribute — keep walking back (stacked attributes)
70
+ continue;
71
+ }
72
+ // Hit a non-attribute, non-blank line — stop looking
73
+ break;
74
+ }
75
+ return { isDeprecated: false };
76
+ }
77
+ function extractTypeSharpAttributeInfo(classBody, matchIndex) {
78
+ const before = classBody.substring(0, matchIndex);
79
+ const lines = before.split('\n');
80
+ let ignore = false;
81
+ let overrideName;
82
+ let overrideType;
83
+ for (let i = lines.length - 1; i >= 0; i--) {
84
+ const line = lines[i].trim();
85
+ if (line === '')
86
+ continue;
87
+ if (!line.startsWith('['))
88
+ break;
89
+ if (/\[TypeIgnore\]/.test(line))
90
+ ignore = true;
91
+ const nameMatch = line.match(/\[TypeName\s*\(\s*"([^"]+)"\s*\)\]/);
92
+ if (nameMatch)
93
+ overrideName = nameMatch[1];
94
+ const asMatch = line.match(/\[TypeAs\s*\(\s*"([^"]+)"\s*\)\]/);
95
+ if (asMatch)
96
+ overrideType = asMatch[1];
97
+ }
98
+ return { ignore, overrideName, overrideType };
99
+ }
100
+ function parsePropertyType(name, csType) {
101
+ let raw = csType.trim();
102
+ let isNullable = false;
103
+ // Extract nullable marker (T?)
104
+ if (raw.endsWith('?')) {
105
+ isNullable = true;
106
+ raw = raw.slice(0, -1).trim();
107
+ }
108
+ // Recursive resolver: returns { tsType, isArray }
109
+ function resolveType(typeText) {
110
+ const t = typeText.trim();
111
+ // 1) Array syntax: T[]
112
+ if (t.endsWith('[]')) {
113
+ const inner = t.slice(0, -2).trim();
114
+ const resolved = resolveType(inner);
115
+ // If inner is already an array, keep it as array-of-array semantics;
116
+ // mark as array so generator will append [] (or use resolved.tsType which may include [] already)
117
+ return { tsType: resolved.tsType, isArray: true };
118
+ }
119
+ // 2) Dictionary-like types (handle Dictionary, IDictionary, IReadOnlyDictionary)
120
+ if (/^(?:[\w\.]+\.)?(?:Dictionary|IDictionary|IReadOnlyDictionary)\s*</.test(t)) {
121
+ // locate first '<' and its matching '>'
122
+ const firstAngle = t.indexOf('<');
123
+ const lastAngle = findMatchingAngleBracket(t, firstAngle);
124
+ if (firstAngle !== -1 && lastAngle !== -1) {
125
+ const inner = t.slice(firstAngle + 1, lastAngle).trim();
126
+ const args = splitTopLevelGenericArgs(inner);
127
+ if (args.length === 2) {
128
+ const keyCs = args[0];
129
+ const valueCs = args[1];
130
+ // Guard against undefined/null/empty parts before resolving
131
+ if (typeof keyCs !== 'string' || typeof valueCs !== 'string' || keyCs.trim() === '' || valueCs.trim() === '') {
132
+ // Fallback: avoid throwing — emit a generic record
133
+ return { tsType: 'Record<string, any>', isArray: false };
134
+ }
135
+ const resolvedKey = resolveType(keyCs);
136
+ const resolvedValue = resolveType(valueCs);
137
+ // Normalize key to a safe TS key type: Record<K extends keyof any, V>
138
+ // If key is not primitive 'string' or 'number' or 'symbol', coerce to 'string'
139
+ const keyTsRaw = resolvedKey.tsType;
140
+ const safeKey = keyTsRaw === 'string' || keyTsRaw === 'number' || keyTsRaw === 'symbol'
141
+ ? keyTsRaw
142
+ : 'string';
143
+ // Build value type (respect nested arrays)
144
+ const valueType = resolvedValue.isArray ? `${resolvedValue.tsType}[]` : resolvedValue.tsType;
145
+ return { tsType: `Record<${safeKey}, ${valueType}>`, isArray: false };
146
+ }
147
+ // else: fallthrough to other checks (malformed or >2 args) — do not falsely match
148
+ }
149
+ }
150
+ // 3) Collections: List<T>, IEnumerable<T>, ICollection<T>, IList<T>
151
+ const collectionMatch = t.match(/^(?:List|IEnumerable|ICollection|IList)\s*<\s*(.+)\s*>$/);
152
+ if (collectionMatch) {
153
+ const inner = collectionMatch[1].trim();
154
+ const resolvedInner = resolveType(inner);
155
+ // Collections become inner[] in TS; mark isArray true and tsType = resolvedInner.tsType
156
+ // The generator will append [].
157
+ return { tsType: resolvedInner.tsType, isArray: true };
158
+ }
159
+ // 4) Fallback: map primitive / known types, else return as-is (class name)
160
+ return { tsType: mapCSharpTypeToTypeScript(t), isArray: false };
161
+ }
162
+ const resolved = resolveType(raw);
163
+ return {
164
+ name,
165
+ type: resolved.tsType,
166
+ isNullable,
167
+ isArray: resolved.isArray,
168
+ isGeneric: false,
169
+ genericType: undefined,
170
+ isDeprecated: false,
171
+ deprecationMessage: undefined,
172
+ };
173
+ }
174
+ /**
175
+ * Find the index of the matching '>' for the first '<' at startIdx.
176
+ * Returns -1 if not found.
177
+ */
178
+ function findMatchingAngleBracket(s, startIdx) {
179
+ let depth = 0;
180
+ for (let i = startIdx; i < s.length; i++) {
181
+ if (s[i] === '<')
182
+ depth++;
183
+ else if (s[i] === '>') {
184
+ depth--;
185
+ if (depth === 0)
186
+ return i;
187
+ }
188
+ }
189
+ return -1;
190
+ }
191
+ /**
192
+ * Split a comma-separated generic-argument string into top-level args,
193
+ * i.e. respects nested <...> and does NOT split commas inside nested generics.
194
+ * Example: "string, List<Dictionary<string, Foo>>, int" -> ["string", "List<Dictionary<string, Foo>>", "int"]
195
+ */
196
+ function splitTopLevelGenericArgs(s) {
197
+ const parts = [];
198
+ let depth = 0;
199
+ let buf = '';
200
+ for (let i = 0; i < s.length; i++) {
201
+ const ch = s[i];
202
+ if (ch === '<') {
203
+ depth++;
204
+ buf += ch;
205
+ }
206
+ else if (ch === '>') {
207
+ depth--;
208
+ buf += ch;
209
+ }
210
+ else if (ch === ',' && depth === 0) {
211
+ parts.push(buf.trim());
212
+ buf = '';
213
+ }
214
+ else {
215
+ buf += ch;
216
+ }
217
+ }
218
+ if (buf.trim().length > 0)
219
+ parts.push(buf.trim());
220
+ return parts;
221
+ }
222
+ /**
223
+ * Map C# primitive types to TypeScript types
224
+ */
225
+ function mapCSharpTypeToTypeScript(csType) {
226
+ const typeMap = {
227
+ 'bool': 'boolean',
228
+ 'byte': 'number',
229
+ 'byte[]': 'Blob',
230
+ 'decimal': 'number',
231
+ 'double': 'number',
232
+ 'DateOnly': 'string',
233
+ 'DateTime': 'string',
234
+ 'float': 'number',
235
+ 'FileStream': 'Blob',
236
+ 'FormFile': 'File',
237
+ 'Guid': 'string',
238
+ 'int': 'number',
239
+ 'IFormFile': 'File',
240
+ 'IFormFileCollection': 'File[]',
241
+ 'long': 'number',
242
+ 'MemoryStream': 'Blob',
243
+ 'object': 'any',
244
+ 'string': 'string',
245
+ 'Stream': 'Blob',
246
+ 'TimeOnly': 'string',
247
+ };
248
+ return typeMap[csType] || csType;
249
+ }
250
+ //# sourceMappingURL=parse-properties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-properties.js","sourceRoot":"","sources":["../../src/parser/parse-properties.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Resolves a list of `.csproj` file paths from one or more source entries.
3
+ *
4
+ * Supported source types:
5
+ * - `.csproj` — used directly
6
+ * - `.sln` — parsed using regex to extract referenced `.csproj` paths
7
+ * - `.slnx` — parsed as XML to extract `<Project Path="..." />` entries
8
+ *
9
+ * @param source - A single path or array of paths to `.csproj`, `.sln`, or `.slnx` files
10
+ * @returns A flat array of resolved absolute `.csproj` file paths
11
+ * @throws If a source file type is not `.csproj`, `.sln`, or `.slnx`
12
+ *
13
+ * @example
14
+ * // Single solution file
15
+ * resolveProjectFilesFromSource('C:/MyApp/MyApp.sln');
16
+ *
17
+ * @example
18
+ * // XML solution file
19
+ * resolveProjectFilesFromSource('C:/MyApp/MyApp.slnx');
20
+ *
21
+ * @example
22
+ * // Mixed sources
23
+ * resolveProjectFilesFromSource([
24
+ * 'C:/MyApp/MyApp.slnx',
25
+ * 'C:/Other/Other.csproj'
26
+ * ]);
27
+ */
28
+ export declare function resolveProjectFilesFromSource(source: string | string[]): string[];
29
+ //# sourceMappingURL=resolve-project-files-from-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-project-files-from-source.d.ts","sourceRoot":"","sources":["../../src/parser/resolve-project-files-from-source.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CA8BjF"}