@voodocs/cli 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.
Files changed (52) hide show
  1. package/LICENSE +37 -0
  2. package/README.md +153 -0
  3. package/USAGE.md +314 -0
  4. package/cli.py +1340 -0
  5. package/examples/.cursorrules +437 -0
  6. package/examples/instructions/.claude/instructions.md +372 -0
  7. package/examples/instructions/.cursorrules +437 -0
  8. package/examples/instructions/.windsurfrules +437 -0
  9. package/examples/instructions/VOODOCS_INSTRUCTIONS.md +437 -0
  10. package/examples/math_example.py +41 -0
  11. package/examples/phase2_test.py +24 -0
  12. package/examples/test_compound_conditions.py +40 -0
  13. package/examples/test_math_example.py +186 -0
  14. package/lib/darkarts/README.md +115 -0
  15. package/lib/darkarts/__init__.py +16 -0
  16. package/lib/darkarts/annotations/__init__.py +34 -0
  17. package/lib/darkarts/annotations/parser.py +618 -0
  18. package/lib/darkarts/annotations/types.py +181 -0
  19. package/lib/darkarts/cli.py +128 -0
  20. package/lib/darkarts/core/__init__.py +32 -0
  21. package/lib/darkarts/core/interface.py +256 -0
  22. package/lib/darkarts/core/loader.py +231 -0
  23. package/lib/darkarts/core/plugin.py +215 -0
  24. package/lib/darkarts/core/registry.py +146 -0
  25. package/lib/darkarts/exceptions.py +51 -0
  26. package/lib/darkarts/parsers/typescript/dist/cli.d.ts +9 -0
  27. package/lib/darkarts/parsers/typescript/dist/cli.d.ts.map +1 -0
  28. package/lib/darkarts/parsers/typescript/dist/cli.js +69 -0
  29. package/lib/darkarts/parsers/typescript/dist/cli.js.map +1 -0
  30. package/lib/darkarts/parsers/typescript/dist/parser.d.ts +111 -0
  31. package/lib/darkarts/parsers/typescript/dist/parser.d.ts.map +1 -0
  32. package/lib/darkarts/parsers/typescript/dist/parser.js +365 -0
  33. package/lib/darkarts/parsers/typescript/dist/parser.js.map +1 -0
  34. package/lib/darkarts/parsers/typescript/package-lock.json +51 -0
  35. package/lib/darkarts/parsers/typescript/package.json +19 -0
  36. package/lib/darkarts/parsers/typescript/src/cli.ts +41 -0
  37. package/lib/darkarts/parsers/typescript/src/parser.ts +408 -0
  38. package/lib/darkarts/parsers/typescript/tsconfig.json +19 -0
  39. package/lib/darkarts/plugins/voodocs/__init__.py +379 -0
  40. package/lib/darkarts/plugins/voodocs/ai_native_plugin.py +151 -0
  41. package/lib/darkarts/plugins/voodocs/annotation_validator.py +280 -0
  42. package/lib/darkarts/plugins/voodocs/api_spec_generator.py +486 -0
  43. package/lib/darkarts/plugins/voodocs/documentation_generator.py +610 -0
  44. package/lib/darkarts/plugins/voodocs/html_exporter.py +260 -0
  45. package/lib/darkarts/plugins/voodocs/instruction_generator.py +706 -0
  46. package/lib/darkarts/plugins/voodocs/pdf_exporter.py +66 -0
  47. package/lib/darkarts/plugins/voodocs/test_generator.py +636 -0
  48. package/package.json +70 -0
  49. package/requirements.txt +13 -0
  50. package/templates/ci/github-actions.yml +73 -0
  51. package/templates/ci/gitlab-ci.yml +35 -0
  52. package/templates/ci/pre-commit-hook.sh +26 -0
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * CLI wrapper for the TypeScript annotation parser
5
+ *
6
+ * Usage: darkarts-ts-parser <file_path>
7
+ * Output: JSON to stdout
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ const parser_1 = require("./parser");
44
+ const fs = __importStar(require("fs"));
45
+ function main() {
46
+ const args = process.argv.slice(2);
47
+ if (args.length === 0) {
48
+ console.error('Usage: darkarts-ts-parser <file_path>');
49
+ process.exit(1);
50
+ }
51
+ const filePath = args[0];
52
+ // Check if file exists
53
+ if (!fs.existsSync(filePath)) {
54
+ console.error(`Error: File not found: ${filePath}`);
55
+ process.exit(1);
56
+ }
57
+ try {
58
+ const parser = new parser_1.TypeScriptAnnotationParser(filePath);
59
+ const result = parser.parse();
60
+ // Output JSON to stdout
61
+ console.log(JSON.stringify(result, null, 2));
62
+ }
63
+ catch (error) {
64
+ console.error(`Error parsing file: ${error}`);
65
+ process.exit(1);
66
+ }
67
+ }
68
+ main();
69
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AAEA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,qCAAsD;AACtD,uCAAyB;AAEzB,SAAS,IAAI;IACX,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEzB,uBAAuB;IACvB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,mCAA0B,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAE9B,wBAAwB;QACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * TypeScript/JavaScript Parser for DarkArts Annotations
3
+ *
4
+ * This parser uses the TypeScript Compiler API to extract @voodocs
5
+ * annotations from TypeScript and JavaScript files.
6
+ */
7
+ interface Annotation {
8
+ [key: string]: any;
9
+ }
10
+ interface FunctionInfo {
11
+ name: string;
12
+ line: number;
13
+ parameters: string[];
14
+ return_type: string | null;
15
+ annotations: Annotation;
16
+ is_async: boolean;
17
+ is_exported: boolean;
18
+ }
19
+ interface ClassInfo {
20
+ name: string;
21
+ line: number;
22
+ annotations: Annotation;
23
+ methods: FunctionInfo[];
24
+ is_exported: boolean;
25
+ }
26
+ interface ParseResult {
27
+ file_path: string;
28
+ language: string;
29
+ module_annotations: Annotation;
30
+ classes: ClassInfo[];
31
+ functions: FunctionInfo[];
32
+ interfaces: InterfaceInfo[];
33
+ }
34
+ interface InterfaceInfo {
35
+ name: string;
36
+ line: number;
37
+ annotations: Annotation;
38
+ is_exported: boolean;
39
+ }
40
+ export declare class TypeScriptAnnotationParser {
41
+ private filePath;
42
+ private sourceFile;
43
+ private sourceText;
44
+ constructor(filePath: string);
45
+ /**
46
+ * Parse the TypeScript file and extract all @voodocs annotations
47
+ */
48
+ parse(): ParseResult;
49
+ /**
50
+ * Extract module-level annotations from the top of the file
51
+ */
52
+ private extractModuleAnnotations;
53
+ /**
54
+ * Parse a class declaration
55
+ */
56
+ private parseClass;
57
+ /**
58
+ * Parse a function declaration
59
+ */
60
+ private parseFunction;
61
+ /**
62
+ * Parse a method declaration
63
+ */
64
+ private parseMethod;
65
+ /**
66
+ * Parse an interface declaration
67
+ */
68
+ private parseInterface;
69
+ /**
70
+ * Extract annotations from a node's JSDoc comments
71
+ */
72
+ private extractAnnotations;
73
+ /**
74
+ * Get leading comments for a node
75
+ */
76
+ private getLeadingComments;
77
+ /**
78
+ * Check if a comment contains @voodocs annotation
79
+ */
80
+ private isDarkArtsComment;
81
+ /**
82
+ * Parse the annotation text and extract key-value pairs
83
+ */
84
+ private parseAnnotationText;
85
+ /**
86
+ * Parse a value (string, array, or object)
87
+ */
88
+ private parseValue;
89
+ /**
90
+ * Extract parameter names from a function/method
91
+ */
92
+ private extractParameters;
93
+ /**
94
+ * Extract return type from a function/method
95
+ */
96
+ private extractReturnType;
97
+ /**
98
+ * Check if a function/method is async
99
+ */
100
+ private isAsync;
101
+ /**
102
+ * Check if a node is exported
103
+ */
104
+ private isExported;
105
+ /**
106
+ * Get the line number of a node
107
+ */
108
+ private getLineNumber;
109
+ }
110
+ export {};
111
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,UAAU,UAAU;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,UAAU,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,UAAU,CAAC;IACxB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,UAAU,CAAC;IAC/B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,UAAU,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,0BAA0B;IAIzB,OAAO,CAAC,QAAQ;IAH5B,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,UAAU,CAAS;gBAEP,QAAQ,EAAE,MAAM;IAUpC;;OAEG;IACI,KAAK,IAAI,WAAW;IAqC3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;OAEG;IACH,OAAO,CAAC,UAAU;IA2BlB;;OAEG;IACH,OAAO,CAAC,aAAa;IAerB;;OAEG;IACH,OAAO,CAAC,WAAW;IAenB;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA2C3B;;OAEG;IACH,OAAO,CAAC,UAAU;IAmElB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,OAAO;IAQf;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,OAAO,CAAC,aAAa;CAItB"}
@@ -0,0 +1,365 @@
1
+ "use strict";
2
+ /**
3
+ * TypeScript/JavaScript Parser for DarkArts Annotations
4
+ *
5
+ * This parser uses the TypeScript Compiler API to extract @voodocs
6
+ * annotations from TypeScript and JavaScript files.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.TypeScriptAnnotationParser = void 0;
43
+ const ts = __importStar(require("typescript"));
44
+ const fs = __importStar(require("fs"));
45
+ class TypeScriptAnnotationParser {
46
+ constructor(filePath) {
47
+ this.filePath = filePath;
48
+ this.sourceText = fs.readFileSync(filePath, 'utf-8');
49
+ this.sourceFile = ts.createSourceFile(filePath, this.sourceText, ts.ScriptTarget.Latest, true);
50
+ }
51
+ /**
52
+ * Parse the TypeScript file and extract all @voodocs annotations
53
+ */
54
+ parse() {
55
+ const result = {
56
+ file_path: this.filePath,
57
+ language: this.filePath.endsWith('.ts') ? 'typescript' : 'javascript',
58
+ module_annotations: this.extractModuleAnnotations(),
59
+ classes: [],
60
+ functions: [],
61
+ interfaces: []
62
+ };
63
+ // Visit all nodes in the AST
64
+ const visit = (node) => {
65
+ if (ts.isClassDeclaration(node)) {
66
+ const classInfo = this.parseClass(node);
67
+ if (classInfo) {
68
+ result.classes.push(classInfo);
69
+ }
70
+ }
71
+ else if (ts.isFunctionDeclaration(node)) {
72
+ const funcInfo = this.parseFunction(node);
73
+ if (funcInfo) {
74
+ result.functions.push(funcInfo);
75
+ }
76
+ }
77
+ else if (ts.isInterfaceDeclaration(node)) {
78
+ const interfaceInfo = this.parseInterface(node);
79
+ if (interfaceInfo) {
80
+ result.interfaces.push(interfaceInfo);
81
+ }
82
+ }
83
+ ts.forEachChild(node, visit);
84
+ };
85
+ visit(this.sourceFile);
86
+ return result;
87
+ }
88
+ /**
89
+ * Extract module-level annotations from the top of the file
90
+ */
91
+ extractModuleAnnotations() {
92
+ const leadingComments = this.getLeadingComments(this.sourceFile);
93
+ for (const comment of leadingComments) {
94
+ if (this.isDarkArtsComment(comment)) {
95
+ return this.parseAnnotationText(comment);
96
+ }
97
+ }
98
+ return {};
99
+ }
100
+ /**
101
+ * Parse a class declaration
102
+ */
103
+ parseClass(node) {
104
+ const name = node.name?.text;
105
+ if (!name)
106
+ return null;
107
+ const line = this.getLineNumber(node);
108
+ const annotations = this.extractAnnotations(node);
109
+ const methods = [];
110
+ // Extract methods
111
+ node.members.forEach(member => {
112
+ if (ts.isMethodDeclaration(member)) {
113
+ const methodInfo = this.parseMethod(member);
114
+ if (methodInfo) {
115
+ methods.push(methodInfo);
116
+ }
117
+ }
118
+ });
119
+ return {
120
+ name,
121
+ line,
122
+ annotations,
123
+ methods,
124
+ is_exported: this.isExported(node)
125
+ };
126
+ }
127
+ /**
128
+ * Parse a function declaration
129
+ */
130
+ parseFunction(node) {
131
+ const name = node.name?.text;
132
+ if (!name)
133
+ return null;
134
+ return {
135
+ name,
136
+ line: this.getLineNumber(node),
137
+ parameters: this.extractParameters(node),
138
+ return_type: this.extractReturnType(node),
139
+ annotations: this.extractAnnotations(node),
140
+ is_async: this.isAsync(node),
141
+ is_exported: this.isExported(node)
142
+ };
143
+ }
144
+ /**
145
+ * Parse a method declaration
146
+ */
147
+ parseMethod(node) {
148
+ const name = node.name.text;
149
+ if (!name)
150
+ return null;
151
+ return {
152
+ name,
153
+ line: this.getLineNumber(node),
154
+ parameters: this.extractParameters(node),
155
+ return_type: this.extractReturnType(node),
156
+ annotations: this.extractAnnotations(node),
157
+ is_async: this.isAsync(node),
158
+ is_exported: false // Methods are not directly exported
159
+ };
160
+ }
161
+ /**
162
+ * Parse an interface declaration
163
+ */
164
+ parseInterface(node) {
165
+ const name = node.name.text;
166
+ if (!name)
167
+ return null;
168
+ return {
169
+ name,
170
+ line: this.getLineNumber(node),
171
+ annotations: this.extractAnnotations(node),
172
+ is_exported: this.isExported(node)
173
+ };
174
+ }
175
+ /**
176
+ * Extract annotations from a node's JSDoc comments
177
+ */
178
+ extractAnnotations(node) {
179
+ const comments = this.getLeadingComments(node);
180
+ // Find the LAST (closest) @voodocs comment
181
+ let lastDarkArtsComment = null;
182
+ for (const comment of comments) {
183
+ if (this.isDarkArtsComment(comment)) {
184
+ lastDarkArtsComment = comment;
185
+ }
186
+ }
187
+ if (lastDarkArtsComment) {
188
+ return this.parseAnnotationText(lastDarkArtsComment);
189
+ }
190
+ return {};
191
+ }
192
+ /**
193
+ * Get leading comments for a node
194
+ */
195
+ getLeadingComments(node) {
196
+ const comments = [];
197
+ const fullText = this.sourceText;
198
+ const nodePos = node.getFullStart();
199
+ const ranges = ts.getLeadingCommentRanges(fullText, nodePos);
200
+ if (ranges) {
201
+ for (const range of ranges) {
202
+ const commentText = fullText.substring(range.pos, range.end);
203
+ comments.push(commentText);
204
+ }
205
+ }
206
+ return comments;
207
+ }
208
+ /**
209
+ * Check if a comment contains @voodocs annotation
210
+ */
211
+ isDarkArtsComment(comment) {
212
+ return comment.includes('@voodocs');
213
+ }
214
+ /**
215
+ * Parse the annotation text and extract key-value pairs
216
+ */
217
+ parseAnnotationText(comment) {
218
+ const annotation = {};
219
+ // Remove comment markers
220
+ let text = comment.replace(/^\/\*\*?|\*\/$/g, '').trim();
221
+ text = text.replace(/^\s*\*\s?/gm, ''); // Remove leading asterisks
222
+ // Remove @voodocs marker
223
+ text = text.replace(/@voodocs\s*/i, '');
224
+ // Parse key-value pairs
225
+ const lines = text.split('\n');
226
+ let currentKey = null;
227
+ let currentValue = [];
228
+ for (const line of lines) {
229
+ const trimmed = line.trim();
230
+ if (!trimmed)
231
+ continue;
232
+ // Check if this is a new key
233
+ const keyMatch = trimmed.match(/^(\w+):\s*(.*)$/);
234
+ if (keyMatch) {
235
+ // Save previous key-value pair
236
+ if (currentKey) {
237
+ annotation[currentKey] = this.parseValue(currentValue.join('\n'));
238
+ }
239
+ currentKey = keyMatch[1];
240
+ currentValue = [keyMatch[2]];
241
+ }
242
+ else if (currentKey) {
243
+ // Continue current value
244
+ currentValue.push(trimmed);
245
+ }
246
+ }
247
+ // Save last key-value pair
248
+ if (currentKey) {
249
+ annotation[currentKey] = this.parseValue(currentValue.join('\n'));
250
+ }
251
+ return annotation;
252
+ }
253
+ /**
254
+ * Parse a value (string, array, or object)
255
+ */
256
+ parseValue(value) {
257
+ value = value.trim();
258
+ // Try to parse as JSON array
259
+ if (value.startsWith('[') && value.endsWith(']')) {
260
+ try {
261
+ // Extract array content
262
+ const content = value.slice(1, -1).trim();
263
+ if (!content)
264
+ return [];
265
+ // Split by newlines first (each line is typically one item)
266
+ const items = [];
267
+ let currentItem = '';
268
+ let inQuotes = false;
269
+ let quoteChar = '';
270
+ for (let i = 0; i < content.length; i++) {
271
+ const char = content[i];
272
+ if ((char === '"' || char === "'") && (i === 0 || content[i - 1] !== '\\')) {
273
+ if (!inQuotes) {
274
+ inQuotes = true;
275
+ quoteChar = char;
276
+ }
277
+ else if (char === quoteChar) {
278
+ inQuotes = false;
279
+ }
280
+ }
281
+ if (char === ',' && !inQuotes) {
282
+ if (currentItem.trim()) {
283
+ items.push(currentItem.trim());
284
+ }
285
+ currentItem = '';
286
+ }
287
+ else {
288
+ currentItem += char;
289
+ }
290
+ }
291
+ // Add the last item
292
+ if (currentItem.trim()) {
293
+ items.push(currentItem.trim());
294
+ }
295
+ // Clean up each item
296
+ return items.map(item => {
297
+ item = item.trim();
298
+ // Remove surrounding quotes
299
+ if ((item.startsWith('"') && item.endsWith('"')) ||
300
+ (item.startsWith("'") && item.endsWith("'"))) {
301
+ return item.slice(1, -1);
302
+ }
303
+ return item;
304
+ });
305
+ }
306
+ catch (e) {
307
+ return value;
308
+ }
309
+ }
310
+ // Remove quotes if present
311
+ if ((value.startsWith('"') && value.endsWith('"')) ||
312
+ (value.startsWith("'") && value.endsWith("'"))) {
313
+ return value.slice(1, -1);
314
+ }
315
+ return value;
316
+ }
317
+ /**
318
+ * Extract parameter names from a function/method
319
+ */
320
+ extractParameters(node) {
321
+ return node.parameters.map(param => {
322
+ const name = param.name.text;
323
+ const type = param.type ? `: ${param.type.getText(this.sourceFile)}` : '';
324
+ return `${name}${type}`;
325
+ });
326
+ }
327
+ /**
328
+ * Extract return type from a function/method
329
+ */
330
+ extractReturnType(node) {
331
+ if (node.type) {
332
+ return node.type.getText(this.sourceFile);
333
+ }
334
+ return null;
335
+ }
336
+ /**
337
+ * Check if a function/method is async
338
+ */
339
+ isAsync(node) {
340
+ if (ts.canHaveModifiers(node)) {
341
+ const modifiers = ts.getModifiers(node);
342
+ return modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) || false;
343
+ }
344
+ return false;
345
+ }
346
+ /**
347
+ * Check if a node is exported
348
+ */
349
+ isExported(node) {
350
+ if (ts.canHaveModifiers(node)) {
351
+ const modifiers = ts.getModifiers(node);
352
+ return modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword) || false;
353
+ }
354
+ return false;
355
+ }
356
+ /**
357
+ * Get the line number of a node
358
+ */
359
+ getLineNumber(node) {
360
+ const { line } = this.sourceFile.getLineAndCharacterOfPosition(node.getStart());
361
+ return line + 1; // Convert to 1-indexed
362
+ }
363
+ }
364
+ exports.TypeScriptAnnotationParser = TypeScriptAnnotationParser;
365
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@darkarts/typescript-parser",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "@darkarts/typescript-parser",
9
+ "version": "1.0.0",
10
+ "dependencies": {
11
+ "typescript": "^5.3.0"
12
+ },
13
+ "bin": {
14
+ "darkarts-ts-parser": "dist/cli.js"
15
+ },
16
+ "devDependencies": {
17
+ "@types/node": "^20.10.0"
18
+ }
19
+ },
20
+ "node_modules/@types/node": {
21
+ "version": "20.19.26",
22
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.26.tgz",
23
+ "integrity": "sha512-0l6cjgF0XnihUpndDhk+nyD3exio3iKaYROSgvh/qSevPXax3L8p5DBRFjbvalnwatGgHEQn2R88y2fA3g4irg==",
24
+ "dev": true,
25
+ "license": "MIT",
26
+ "dependencies": {
27
+ "undici-types": "~6.21.0"
28
+ }
29
+ },
30
+ "node_modules/typescript": {
31
+ "version": "5.9.3",
32
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
33
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
34
+ "license": "Apache-2.0",
35
+ "bin": {
36
+ "tsc": "bin/tsc",
37
+ "tsserver": "bin/tsserver"
38
+ },
39
+ "engines": {
40
+ "node": ">=14.17"
41
+ }
42
+ },
43
+ "node_modules/undici-types": {
44
+ "version": "6.21.0",
45
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
46
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
47
+ "dev": true,
48
+ "license": "MIT"
49
+ }
50
+ }
51
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@darkarts/typescript-parser",
3
+ "version": "1.0.0",
4
+ "description": "TypeScript/JavaScript parser for DarkArts annotations",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "darkarts-ts-parser": "dist/cli.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "test": "node dist/test.js"
12
+ },
13
+ "dependencies": {
14
+ "typescript": "^5.3.0"
15
+ },
16
+ "devDependencies": {
17
+ "@types/node": "^20.10.0"
18
+ }
19
+ }
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * CLI wrapper for the TypeScript annotation parser
5
+ *
6
+ * Usage: darkarts-ts-parser <file_path>
7
+ * Output: JSON to stdout
8
+ */
9
+
10
+ import { TypeScriptAnnotationParser } from './parser';
11
+ import * as fs from 'fs';
12
+
13
+ function main() {
14
+ const args = process.argv.slice(2);
15
+
16
+ if (args.length === 0) {
17
+ console.error('Usage: darkarts-ts-parser <file_path>');
18
+ process.exit(1);
19
+ }
20
+
21
+ const filePath = args[0];
22
+
23
+ // Check if file exists
24
+ if (!fs.existsSync(filePath)) {
25
+ console.error(`Error: File not found: ${filePath}`);
26
+ process.exit(1);
27
+ }
28
+
29
+ try {
30
+ const parser = new TypeScriptAnnotationParser(filePath);
31
+ const result = parser.parse();
32
+
33
+ // Output JSON to stdout
34
+ console.log(JSON.stringify(result, null, 2));
35
+ } catch (error) {
36
+ console.error(`Error parsing file: ${error}`);
37
+ process.exit(1);
38
+ }
39
+ }
40
+
41
+ main();