test-gen-js 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/LICENSE +22 -0
  3. package/README.md +538 -0
  4. package/bin/cli.js +4 -0
  5. package/dist/analyzer/componentAnalyzer.d.ts +12 -0
  6. package/dist/analyzer/componentAnalyzer.d.ts.map +1 -0
  7. package/dist/analyzer/componentAnalyzer.js +223 -0
  8. package/dist/analyzer/componentAnalyzer.js.map +1 -0
  9. package/dist/analyzer/fileAnalyzer.d.ts +17 -0
  10. package/dist/analyzer/fileAnalyzer.d.ts.map +1 -0
  11. package/dist/analyzer/fileAnalyzer.js +201 -0
  12. package/dist/analyzer/fileAnalyzer.js.map +1 -0
  13. package/dist/analyzer/functionAnalyzer.d.ts +12 -0
  14. package/dist/analyzer/functionAnalyzer.d.ts.map +1 -0
  15. package/dist/analyzer/functionAnalyzer.js +184 -0
  16. package/dist/analyzer/functionAnalyzer.js.map +1 -0
  17. package/dist/analyzer/index.d.ts +7 -0
  18. package/dist/analyzer/index.d.ts.map +1 -0
  19. package/dist/analyzer/index.js +14 -0
  20. package/dist/analyzer/index.js.map +1 -0
  21. package/dist/cli.d.ts +3 -0
  22. package/dist/cli.d.ts.map +1 -0
  23. package/dist/cli.js +113 -0
  24. package/dist/cli.js.map +1 -0
  25. package/dist/generator/index.d.ts +6 -0
  26. package/dist/generator/index.d.ts.map +1 -0
  27. package/dist/generator/index.js +12 -0
  28. package/dist/generator/index.js.map +1 -0
  29. package/dist/generator/mockGenerator.d.ts +14 -0
  30. package/dist/generator/mockGenerator.d.ts.map +1 -0
  31. package/dist/generator/mockGenerator.js +123 -0
  32. package/dist/generator/mockGenerator.js.map +1 -0
  33. package/dist/generator/testGenerator.d.ts +14 -0
  34. package/dist/generator/testGenerator.d.ts.map +1 -0
  35. package/dist/generator/testGenerator.js +301 -0
  36. package/dist/generator/testGenerator.js.map +1 -0
  37. package/dist/index.d.ts +9 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +32 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/parser/astParser.d.ts +15 -0
  42. package/dist/parser/astParser.d.ts.map +1 -0
  43. package/dist/parser/astParser.js +100 -0
  44. package/dist/parser/astParser.js.map +1 -0
  45. package/dist/parser/index.d.ts +6 -0
  46. package/dist/parser/index.d.ts.map +1 -0
  47. package/dist/parser/index.js +12 -0
  48. package/dist/parser/index.js.map +1 -0
  49. package/dist/parser/typeExtractor.d.ts +14 -0
  50. package/dist/parser/typeExtractor.d.ts.map +1 -0
  51. package/dist/parser/typeExtractor.js +165 -0
  52. package/dist/parser/typeExtractor.js.map +1 -0
  53. package/dist/templates/component.ejs +67 -0
  54. package/dist/templates/function.ejs +59 -0
  55. package/dist/templates/snapshot.ejs +48 -0
  56. package/dist/types.d.ts +95 -0
  57. package/dist/types.d.ts.map +1 -0
  58. package/dist/types.js +6 -0
  59. package/dist/types.js.map +1 -0
  60. package/dist/utils/fileUtils.d.ts +43 -0
  61. package/dist/utils/fileUtils.d.ts.map +1 -0
  62. package/dist/utils/fileUtils.js +109 -0
  63. package/dist/utils/fileUtils.js.map +1 -0
  64. package/dist/utils/index.d.ts +6 -0
  65. package/dist/utils/index.d.ts.map +1 -0
  66. package/dist/utils/index.js +22 -0
  67. package/dist/utils/index.js.map +1 -0
  68. package/dist/utils/naming.d.ts +37 -0
  69. package/dist/utils/naming.d.ts.map +1 -0
  70. package/dist/utils/naming.js +73 -0
  71. package/dist/utils/naming.js.map +1 -0
  72. package/package.json +84 -0
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+ /**
3
+ * Component Analyzer
4
+ * Extracts information from React/React Native components
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.analyzeComponent = analyzeComponent;
44
+ const traverse_1 = __importDefault(require("@babel/traverse"));
45
+ const t = __importStar(require("@babel/types"));
46
+ const typeExtractor_1 = require("../parser/typeExtractor");
47
+ /**
48
+ * Analyze a component and extract its information
49
+ */
50
+ function analyzeComponent(nodePath, filePath) {
51
+ let name;
52
+ let funcNode;
53
+ if (t.isFunctionDeclaration(nodePath.node)) {
54
+ if (!nodePath.node.id)
55
+ return null;
56
+ name = nodePath.node.id.name;
57
+ funcNode = nodePath.node;
58
+ }
59
+ else if (t.isVariableDeclarator(nodePath.node)) {
60
+ if (!t.isIdentifier(nodePath.node.id))
61
+ return null;
62
+ if (!t.isArrowFunctionExpression(nodePath.node.init) &&
63
+ !t.isFunctionExpression(nodePath.node.init)) {
64
+ return null;
65
+ }
66
+ name = nodePath.node.id.name;
67
+ funcNode = nodePath.node.init;
68
+ }
69
+ else {
70
+ return null;
71
+ }
72
+ // Extract props
73
+ const props = extractProps(funcNode);
74
+ // Extract hooks
75
+ const hooks = extractHooks(funcNode);
76
+ // Extract event handlers
77
+ const events = extractEvents(funcNode);
78
+ // Check if component accepts children
79
+ const children = props.some((p) => p.name === 'children');
80
+ return {
81
+ name,
82
+ type: t.isFunctionDeclaration(funcNode)
83
+ ? 'function'
84
+ : t.isArrowFunctionExpression(funcNode)
85
+ ? 'arrow'
86
+ : 'function',
87
+ props,
88
+ hooks,
89
+ events,
90
+ children,
91
+ imports: [], // Filled by file analyzer
92
+ filePath,
93
+ };
94
+ }
95
+ /**
96
+ * Extract props from a function component
97
+ */
98
+ function extractProps(node) {
99
+ const props = [];
100
+ const firstParam = node.params[0];
101
+ if (!firstParam)
102
+ return props;
103
+ // Destructured props: ({ title, onPress })
104
+ if (t.isObjectPattern(firstParam)) {
105
+ for (const prop of firstParam.properties) {
106
+ if (t.isObjectProperty(prop) && t.isIdentifier(prop.key)) {
107
+ const propInfo = {
108
+ name: prop.key.name,
109
+ type: 'any',
110
+ required: true,
111
+ };
112
+ // Check for default value
113
+ if (t.isAssignmentPattern(prop.value)) {
114
+ propInfo.required = false;
115
+ propInfo.defaultValue = getDefaultValueString(prop.value.right);
116
+ }
117
+ // Check for type annotation
118
+ if (t.isIdentifier(prop.value) && prop.value.typeAnnotation) {
119
+ propInfo.type = (0, typeExtractor_1.extractTypes)(prop.value.typeAnnotation);
120
+ }
121
+ props.push(propInfo);
122
+ }
123
+ }
124
+ // Check for TypeScript type annotation on the parameter
125
+ if (firstParam.typeAnnotation && t.isTSTypeAnnotation(firstParam.typeAnnotation)) {
126
+ const typeNode = firstParam.typeAnnotation.typeAnnotation;
127
+ if (t.isTSTypeLiteral(typeNode)) {
128
+ for (const member of typeNode.members) {
129
+ if (t.isTSPropertySignature(member)) {
130
+ const key = member.key;
131
+ if (t.isIdentifier(key)) {
132
+ const existingProp = props.find((p) => p.name === key.name);
133
+ if (existingProp && member.typeAnnotation) {
134
+ existingProp.type = (0, typeExtractor_1.extractTypes)(member.typeAnnotation);
135
+ existingProp.required = !member.optional;
136
+ }
137
+ }
138
+ }
139
+ }
140
+ }
141
+ }
142
+ }
143
+ // Props as identifier: (props)
144
+ if (t.isIdentifier(firstParam)) {
145
+ // Can't extract individual props without type info
146
+ // Check for TypeScript type annotation
147
+ if (firstParam.typeAnnotation && t.isTSTypeAnnotation(firstParam.typeAnnotation)) {
148
+ const typeNode = firstParam.typeAnnotation.typeAnnotation;
149
+ if (t.isTSTypeLiteral(typeNode)) {
150
+ for (const member of typeNode.members) {
151
+ if (t.isTSPropertySignature(member)) {
152
+ const key = member.key;
153
+ if (t.isIdentifier(key)) {
154
+ props.push({
155
+ name: key.name,
156
+ type: (0, typeExtractor_1.extractTypes)(member.typeAnnotation),
157
+ required: !member.optional,
158
+ });
159
+ }
160
+ }
161
+ }
162
+ }
163
+ }
164
+ }
165
+ return props;
166
+ }
167
+ /**
168
+ * Extract hooks used in the component
169
+ */
170
+ function extractHooks(node) {
171
+ const hooks = new Set();
172
+ const body = t.isBlockStatement(node.body) ? node.body : null;
173
+ if (!body)
174
+ return [];
175
+ (0, traverse_1.default)(body, {
176
+ CallExpression(path) {
177
+ if (t.isIdentifier(path.node.callee)) {
178
+ const name = path.node.callee.name;
179
+ if (name.startsWith('use')) {
180
+ hooks.add(name);
181
+ }
182
+ }
183
+ },
184
+ }, undefined, { node: body });
185
+ return Array.from(hooks);
186
+ }
187
+ /**
188
+ * Extract event handler props (onPress, onClick, etc.)
189
+ */
190
+ function extractEvents(node) {
191
+ const events = new Set();
192
+ const props = extractProps(node);
193
+ // Check props for event handlers
194
+ for (const prop of props) {
195
+ if (prop.name.startsWith('on') &&
196
+ prop.name.length > 2 &&
197
+ prop.name[2] === prop.name[2].toUpperCase()) {
198
+ events.add(prop.name);
199
+ }
200
+ }
201
+ return Array.from(events);
202
+ }
203
+ /**
204
+ * Get string representation of a default value
205
+ */
206
+ function getDefaultValueString(node) {
207
+ if (t.isStringLiteral(node))
208
+ return `'${node.value}'`;
209
+ if (t.isNumericLiteral(node))
210
+ return String(node.value);
211
+ if (t.isBooleanLiteral(node))
212
+ return String(node.value);
213
+ if (t.isNullLiteral(node))
214
+ return 'null';
215
+ if (t.isIdentifier(node) && node.name === 'undefined')
216
+ return 'undefined';
217
+ if (t.isArrayExpression(node))
218
+ return '[]';
219
+ if (t.isObjectExpression(node))
220
+ return '{}';
221
+ return 'undefined';
222
+ }
223
+ //# sourceMappingURL=componentAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"componentAnalyzer.js","sourceRoot":"","sources":["../../src/analyzer/componentAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * File Analyzer
3
+ * Analyzes a file to extract components, functions, and their information
4
+ */
5
+ import type { FileAnalysis } from '../types';
6
+ /**
7
+ * Analyze a single file
8
+ */
9
+ export declare function analyzeFile(filePath: string): Promise<FileAnalysis>;
10
+ /**
11
+ * Analyze all files in a directory
12
+ */
13
+ export declare function analyzeDirectory(_dirPath: string, _options?: {
14
+ pattern?: string;
15
+ exclude?: string[];
16
+ }): Promise<FileAnalysis[]>;
17
+ //# sourceMappingURL=fileAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzer/fileAnalyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,KAAK,EACV,YAAY,EAMb,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAoGzE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAClD,OAAO,CAAC,YAAY,EAAE,CAAC,CAGzB"}
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ /**
3
+ * File Analyzer
4
+ * Analyzes a file to extract components, functions, and their information
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.analyzeFile = analyzeFile;
44
+ exports.analyzeDirectory = analyzeDirectory;
45
+ const traverse_1 = __importDefault(require("@babel/traverse"));
46
+ const t = __importStar(require("@babel/types"));
47
+ const path_1 = __importDefault(require("path"));
48
+ const parser_1 = require("../parser");
49
+ const componentAnalyzer_1 = require("./componentAnalyzer");
50
+ const functionAnalyzer_1 = require("./functionAnalyzer");
51
+ /**
52
+ * Analyze a single file
53
+ */
54
+ async function analyzeFile(filePath) {
55
+ const absolutePath = path_1.default.resolve(filePath);
56
+ const ast = await (0, parser_1.parseFile)(absolutePath);
57
+ const components = [];
58
+ const functions = [];
59
+ const imports = [];
60
+ // Extract imports
61
+ (0, traverse_1.default)(ast, {
62
+ ImportDeclaration(nodePath) {
63
+ const source = nodePath.node.source.value;
64
+ const specifiers = nodePath.node.specifiers.map((spec) => {
65
+ if (t.isImportDefaultSpecifier(spec)) {
66
+ return spec.local.name;
67
+ }
68
+ if (t.isImportSpecifier(spec)) {
69
+ return t.isIdentifier(spec.imported) ? spec.imported.name : spec.local.name;
70
+ }
71
+ if (t.isImportNamespaceSpecifier(spec)) {
72
+ return `* as ${spec.local.name}`;
73
+ }
74
+ return '';
75
+ });
76
+ imports.push({
77
+ source,
78
+ specifiers,
79
+ isDefault: nodePath.node.specifiers.some((s) => t.isImportDefaultSpecifier(s)),
80
+ });
81
+ },
82
+ });
83
+ // Analyze components and functions
84
+ (0, traverse_1.default)(ast, {
85
+ // Function declarations
86
+ FunctionDeclaration(nodePath) {
87
+ if (!nodePath.node.id)
88
+ return;
89
+ const name = nodePath.node.id.name;
90
+ const isExported = t.isExportNamedDeclaration(nodePath.parent) ||
91
+ t.isExportDefaultDeclaration(nodePath.parent);
92
+ if (isReactComponent(nodePath.node)) {
93
+ const componentInfo = (0, componentAnalyzer_1.analyzeComponent)(nodePath, absolutePath);
94
+ if (componentInfo) {
95
+ components.push(componentInfo);
96
+ }
97
+ }
98
+ else if (isExported) {
99
+ const functionInfo = (0, functionAnalyzer_1.analyzeFunction)(nodePath, absolutePath);
100
+ if (functionInfo) {
101
+ functions.push(functionInfo);
102
+ }
103
+ }
104
+ },
105
+ // Arrow function expressions (const MyComponent = () => {})
106
+ VariableDeclarator(nodePath) {
107
+ if (!t.isIdentifier(nodePath.node.id))
108
+ return;
109
+ if (!t.isArrowFunctionExpression(nodePath.node.init) && !t.isFunctionExpression(nodePath.node.init)) {
110
+ return;
111
+ }
112
+ const name = nodePath.node.id.name;
113
+ const funcNode = nodePath.node.init;
114
+ // Check if exported
115
+ const variableDeclaration = nodePath.parentPath;
116
+ const isExported = variableDeclaration &&
117
+ (t.isExportNamedDeclaration(variableDeclaration.parent) ||
118
+ t.isExportDefaultDeclaration(variableDeclaration.parent));
119
+ if (isReactComponent(funcNode)) {
120
+ const componentInfo = (0, componentAnalyzer_1.analyzeComponent)(nodePath, absolutePath);
121
+ if (componentInfo) {
122
+ components.push(componentInfo);
123
+ }
124
+ }
125
+ else if (isExported) {
126
+ const functionInfo = (0, functionAnalyzer_1.analyzeFunction)(nodePath, absolutePath);
127
+ if (functionInfo) {
128
+ functions.push(functionInfo);
129
+ }
130
+ }
131
+ },
132
+ });
133
+ // Determine framework and file type
134
+ const framework = detectFramework(imports);
135
+ const fileType = determineFileType(components, functions);
136
+ return {
137
+ filePath: absolutePath,
138
+ fileType,
139
+ framework,
140
+ components,
141
+ functions,
142
+ imports,
143
+ };
144
+ }
145
+ /**
146
+ * Analyze all files in a directory
147
+ */
148
+ async function analyzeDirectory(_dirPath, _options) {
149
+ // TODO: Implement directory scanning
150
+ throw new Error('Directory scanning is not yet implemented');
151
+ }
152
+ /**
153
+ * Check if a function/arrow function is a React component
154
+ */
155
+ function isReactComponent(node) {
156
+ let hasJSX = false;
157
+ // Check if the function body contains JSX
158
+ if (t.isBlockStatement(node.body)) {
159
+ // Function with block body
160
+ (0, traverse_1.default)(node.body, {
161
+ JSXElement() {
162
+ hasJSX = true;
163
+ },
164
+ JSXFragment() {
165
+ hasJSX = true;
166
+ },
167
+ }, undefined, { node });
168
+ }
169
+ else if (t.isJSXElement(node.body) || t.isJSXFragment(node.body)) {
170
+ // Arrow function with direct JSX return
171
+ hasJSX = true;
172
+ }
173
+ return hasJSX;
174
+ }
175
+ /**
176
+ * Detect the framework based on imports
177
+ */
178
+ function detectFramework(imports) {
179
+ for (const imp of imports) {
180
+ if (imp.source === 'react-native' || imp.source.startsWith('react-native')) {
181
+ return 'react-native';
182
+ }
183
+ if (imp.source === 'react' || imp.source.startsWith('react')) {
184
+ return 'react';
185
+ }
186
+ }
187
+ return 'vanilla';
188
+ }
189
+ /**
190
+ * Determine the file type based on contents
191
+ */
192
+ function determineFileType(components, functions) {
193
+ if (components.length > 0) {
194
+ return 'component';
195
+ }
196
+ if (functions.length > 0) {
197
+ return 'function';
198
+ }
199
+ return 'unknown';
200
+ }
201
+ //# sourceMappingURL=fileAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileAnalyzer.js","sourceRoot":"","sources":["../../src/analyzer/fileAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Function Analyzer
3
+ * Extracts information from JavaScript/TypeScript functions
4
+ */
5
+ import type { NodePath } from '@babel/traverse';
6
+ import * as t from '@babel/types';
7
+ import type { FunctionInfo } from '../types';
8
+ /**
9
+ * Analyze a function and extract its information
10
+ */
11
+ export declare function analyzeFunction(nodePath: NodePath<t.FunctionDeclaration | t.VariableDeclarator>, filePath: string): FunctionInfo | null;
12
+ //# sourceMappingURL=functionAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functionAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzer/functionAnalyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAElC,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,UAAU,CAAC;AAExD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,mBAAmB,GAAG,CAAC,CAAC,kBAAkB,CAAC,EAChE,QAAQ,EAAE,MAAM,GACf,YAAY,GAAG,IAAI,CAkDrB"}
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ /**
3
+ * Function Analyzer
4
+ * Extracts information from JavaScript/TypeScript functions
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.analyzeFunction = analyzeFunction;
41
+ const t = __importStar(require("@babel/types"));
42
+ const typeExtractor_1 = require("../parser/typeExtractor");
43
+ /**
44
+ * Analyze a function and extract its information
45
+ */
46
+ function analyzeFunction(nodePath, filePath) {
47
+ let name;
48
+ let funcNode;
49
+ if (t.isFunctionDeclaration(nodePath.node)) {
50
+ if (!nodePath.node.id)
51
+ return null;
52
+ name = nodePath.node.id.name;
53
+ funcNode = nodePath.node;
54
+ }
55
+ else if (t.isVariableDeclarator(nodePath.node)) {
56
+ if (!t.isIdentifier(nodePath.node.id))
57
+ return null;
58
+ if (!t.isArrowFunctionExpression(nodePath.node.init) &&
59
+ !t.isFunctionExpression(nodePath.node.init)) {
60
+ return null;
61
+ }
62
+ name = nodePath.node.id.name;
63
+ funcNode = nodePath.node.init;
64
+ }
65
+ else {
66
+ return null;
67
+ }
68
+ // Extract parameters
69
+ const params = extractParams(funcNode);
70
+ // Extract return type
71
+ const returnType = extractReturnType(funcNode);
72
+ // Check if async
73
+ const isAsync = funcNode.async || false;
74
+ // Check if exported
75
+ const parent = nodePath.parent;
76
+ const isExported = t.isExportNamedDeclaration(parent) ||
77
+ t.isExportDefaultDeclaration(parent) ||
78
+ (t.isVariableDeclaration(parent) &&
79
+ nodePath.parentPath &&
80
+ (t.isExportNamedDeclaration(nodePath.parentPath.parent) ||
81
+ t.isExportDefaultDeclaration(nodePath.parentPath.parent)));
82
+ return {
83
+ name,
84
+ params,
85
+ returnType,
86
+ isAsync,
87
+ isExported,
88
+ imports: [], // Filled by file analyzer
89
+ filePath,
90
+ };
91
+ }
92
+ /**
93
+ * Extract function parameters
94
+ */
95
+ function extractParams(node) {
96
+ const params = [];
97
+ for (const param of node.params) {
98
+ // Simple identifier: (name)
99
+ if (t.isIdentifier(param)) {
100
+ params.push({
101
+ name: param.name,
102
+ type: (0, typeExtractor_1.extractTypes)(param.typeAnnotation),
103
+ optional: false,
104
+ });
105
+ }
106
+ // Assignment pattern with default: (name = 'default')
107
+ if (t.isAssignmentPattern(param)) {
108
+ if (t.isIdentifier(param.left)) {
109
+ params.push({
110
+ name: param.left.name,
111
+ type: (0, typeExtractor_1.extractTypes)(param.left.typeAnnotation),
112
+ optional: true,
113
+ defaultValue: getDefaultValueString(param.right),
114
+ });
115
+ }
116
+ }
117
+ // Rest parameter: (...args)
118
+ if (t.isRestElement(param)) {
119
+ if (t.isIdentifier(param.argument)) {
120
+ params.push({
121
+ name: `...${param.argument.name}`,
122
+ type: (0, typeExtractor_1.extractTypes)(param.typeAnnotation) || 'any[]',
123
+ optional: true,
124
+ });
125
+ }
126
+ }
127
+ // Object pattern: ({ a, b })
128
+ if (t.isObjectPattern(param)) {
129
+ const propNames = param.properties
130
+ .filter((p) => t.isObjectProperty(p))
131
+ .map((p) => (t.isIdentifier(p.key) ? p.key.name : ''))
132
+ .filter(Boolean)
133
+ .join(', ');
134
+ params.push({
135
+ name: `{ ${propNames} }`,
136
+ type: (0, typeExtractor_1.extractTypes)(param.typeAnnotation),
137
+ optional: false,
138
+ });
139
+ }
140
+ // Array pattern: ([a, b])
141
+ if (t.isArrayPattern(param)) {
142
+ params.push({
143
+ name: '[...]',
144
+ type: (0, typeExtractor_1.extractTypes)(param.typeAnnotation),
145
+ optional: false,
146
+ });
147
+ }
148
+ }
149
+ return params;
150
+ }
151
+ /**
152
+ * Extract return type from function
153
+ */
154
+ function extractReturnType(node) {
155
+ if (node.returnType) {
156
+ return (0, typeExtractor_1.extractTypes)(node.returnType);
157
+ }
158
+ // For async functions, wrap in Promise
159
+ if (node.async) {
160
+ return 'Promise<any>';
161
+ }
162
+ return 'any';
163
+ }
164
+ /**
165
+ * Get string representation of a default value
166
+ */
167
+ function getDefaultValueString(node) {
168
+ if (t.isStringLiteral(node))
169
+ return `'${node.value}'`;
170
+ if (t.isNumericLiteral(node))
171
+ return String(node.value);
172
+ if (t.isBooleanLiteral(node))
173
+ return String(node.value);
174
+ if (t.isNullLiteral(node))
175
+ return 'null';
176
+ if (t.isIdentifier(node) && node.name === 'undefined')
177
+ return 'undefined';
178
+ if (t.isArrayExpression(node))
179
+ return '[]';
180
+ if (t.isObjectExpression(node))
181
+ return '{}';
182
+ return 'undefined';
183
+ }
184
+ //# sourceMappingURL=functionAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functionAnalyzer.js","sourceRoot":"","sources":["../../src/analyzer/functionAnalyzer.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUH,0CAqDC;AA5DD,gDAAkC;AAClC,2DAAuD;AAGvD;;GAEG;AACH,SAAgB,eAAe,CAC7B,QAAgE,EAChE,QAAgB;IAEhB,IAAI,IAAY,CAAC;IACjB,IAAI,QAAkF,CAAC;IAEvF,IAAI,CAAC,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACnC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QAC7B,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,CAAC;SAAM,IAAI,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;QACnD,IACE,CAAC,CAAC,CAAC,yBAAyB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAChD,CAAC,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAC3C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QAC7B,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qBAAqB;IACrB,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAEvC,sBAAsB;IACtB,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAE/C,iBAAiB;IACjB,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC;IAExC,oBAAoB;IACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC/B,MAAM,UAAU,GACd,CAAC,CAAC,wBAAwB,CAAC,MAAM,CAAC;QAClC,CAAC,CAAC,0BAA0B,CAAC,MAAM,CAAC;QACpC,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC;YAC9B,QAAQ,CAAC,UAAU;YACnB,CAAC,CAAC,CAAC,wBAAwB,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;gBACrD,CAAC,CAAC,0BAA0B,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAEjE,OAAO;QACL,IAAI;QACJ,MAAM;QACN,UAAU;QACV,OAAO;QACP,UAAU;QACV,OAAO,EAAE,EAAE,EAAE,0BAA0B;QACvC,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CACpB,IAA8E;IAE9E,MAAM,MAAM,GAAgB,EAAE,CAAC;IAE/B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,4BAA4B;QAC5B,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,IAAA,4BAAY,EAAC,KAAK,CAAC,cAAc,CAAC;gBACxC,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;QACL,CAAC;QAED,sDAAsD;QACtD,IAAI,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;oBACrB,IAAI,EAAE,IAAA,4BAAY,EAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;oBAC7C,QAAQ,EAAE,IAAI;oBACd,YAAY,EAAE,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC;iBACjD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;oBACjC,IAAI,EAAE,IAAA,4BAAY,EAAC,KAAK,CAAC,cAAc,CAAC,IAAI,OAAO;oBACnD,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU;iBAC/B,MAAM,CAAC,CAAC,CAAC,EAAyB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;iBAC3D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBACrD,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,KAAK,SAAS,IAAI;gBACxB,IAAI,EAAE,IAAA,4BAAY,EAAC,KAAK,CAAC,cAAc,CAAC;gBACxC,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;QACL,CAAC;QAED,0BAA0B;QAC1B,IAAI,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,IAAA,4BAAY,EAAC,KAAK,CAAC,cAAc,CAAC;gBACxC,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,IAA8E;IAE9E,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,IAAA,4BAAY,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAED,uCAAuC;IACvC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,IAAkB;IAC/C,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC;IACtD,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IACzC,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,WAAW,CAAC;IAC1E,IAAI,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,WAAW,CAAC;AACrB,CAAC"}