@mnemonica/tactica 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,478 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MnemonicaAnalyzer = void 0;
37
+ const ts = __importStar(require("typescript"));
38
+ const graph_1 = require("./graph");
39
+ /**
40
+ * AST Analyzer for finding Mnemonica define() and decorate() calls
41
+ */
42
+ class MnemonicaAnalyzer {
43
+ constructor(program) {
44
+ this.errors = [];
45
+ this.graph = new graph_1.TypeGraphImpl();
46
+ // Store program for future use (currently unused but kept for extensibility)
47
+ void program;
48
+ }
49
+ /**
50
+ * Analyze a source file for Mnemonica type definitions
51
+ */
52
+ analyzeFile(sourceFile) {
53
+ this.errors = [];
54
+ this.visitNode(sourceFile, sourceFile);
55
+ return {
56
+ types: this.graph.getAllTypes(),
57
+ errors: this.errors,
58
+ };
59
+ }
60
+ /**
61
+ * Analyze source code string
62
+ */
63
+ analyzeSource(sourceCode, fileName = 'temp.ts') {
64
+ const sourceFile = ts.createSourceFile(fileName, sourceCode, ts.ScriptTarget.Latest, true);
65
+ return this.analyzeFile(sourceFile);
66
+ }
67
+ /**
68
+ * Get the type graph
69
+ */
70
+ getGraph() {
71
+ return this.graph;
72
+ }
73
+ /**
74
+ * Visit a node in the AST
75
+ */
76
+ visitNode(node, sourceFile, currentClass) {
77
+ // Check for define() calls
78
+ if (this.isDefineCall(node)) {
79
+ this.processDefineCall(node, sourceFile);
80
+ }
81
+ // Check for decorate() decorator
82
+ if (this.isDecorateDecorator(node)) {
83
+ this.processDecorateDecorator(node, sourceFile, currentClass);
84
+ }
85
+ // Track class declarations for decorator parent lookup
86
+ if (ts.isClassDeclaration(node)) {
87
+ // Visit children with this class as the current context
88
+ ts.forEachChild(node, child => this.visitNode(child, sourceFile, node));
89
+ }
90
+ else {
91
+ // Recursively visit children
92
+ ts.forEachChild(node, child => this.visitNode(child, sourceFile, currentClass));
93
+ }
94
+ }
95
+ /**
96
+ * Check if a node is a define() call
97
+ */
98
+ isDefineCall(node) {
99
+ if (!ts.isCallExpression(node)) {
100
+ return false;
101
+ }
102
+ const expression = node.expression;
103
+ // Check for direct call: define('TypeName', ...)
104
+ if (ts.isIdentifier(expression) && expression.text === 'define') {
105
+ return true;
106
+ }
107
+ // Check for method call: SomeType.define('SubType', ...)
108
+ if (ts.isPropertyAccessExpression(expression)) {
109
+ return expression.name?.text === 'define';
110
+ }
111
+ return false;
112
+ }
113
+ /**
114
+ * Check if a node is a @decorate() decorator
115
+ */
116
+ isDecorateDecorator(node) {
117
+ if (!ts.isDecorator(node)) {
118
+ return false;
119
+ }
120
+ const expression = node.expression;
121
+ // Check for @decorate
122
+ if (ts.isIdentifier(expression) && expression.text === 'decorate') {
123
+ return true;
124
+ }
125
+ // Check for @decorate() or @decorate(ParentType)
126
+ if (ts.isCallExpression(expression)) {
127
+ const fnName = expression.expression;
128
+ if (ts.isIdentifier(fnName) && fnName.text === 'decorate') {
129
+ return true;
130
+ }
131
+ }
132
+ return false;
133
+ }
134
+ /**
135
+ * Process a define() call
136
+ */
137
+ processDefineCall(call, sourceFile) {
138
+ const { line, character } = ts.getLineAndCharacterOfPosition(sourceFile, call.getStart(sourceFile));
139
+ // Get the type name from arguments
140
+ const typeName = this.extractTypeName(call);
141
+ if (!typeName) {
142
+ this.errors.push({
143
+ message: 'Could not extract type name from define() call',
144
+ file: sourceFile.fileName,
145
+ line: line + 1,
146
+ column: character + 1,
147
+ });
148
+ return;
149
+ }
150
+ // Determine parent type
151
+ const parentNode = this.findParentType(call);
152
+ // Create type node
153
+ const node = graph_1.TypeGraphImpl.createNode(typeName, parentNode, sourceFile.fileName, line + 1, character + 1);
154
+ // Extract properties from constructor function
155
+ node.properties = this.extractProperties(call);
156
+ // Add to graph
157
+ if (parentNode) {
158
+ this.graph.addChild(parentNode, node);
159
+ }
160
+ else {
161
+ this.graph.addRoot(node);
162
+ }
163
+ }
164
+ /**
165
+ * Process a @decorate() decorator
166
+ */
167
+ processDecorateDecorator(decorator, sourceFile, classDeclParam) {
168
+ const { line, character } = ts.getLineAndCharacterOfPosition(sourceFile, decorator.getStart(sourceFile));
169
+ // Get the class declaration - use the passed context if parent is not set
170
+ const classDecl = decorator.parent || classDeclParam;
171
+ if (!classDecl || !classDecl.name) {
172
+ this.errors.push({
173
+ message: 'Decorated class has no name',
174
+ file: sourceFile.fileName,
175
+ line: line + 1,
176
+ column: character + 1,
177
+ });
178
+ return;
179
+ }
180
+ const typeName = classDecl.name.text;
181
+ if (!typeName) {
182
+ this.errors.push({
183
+ message: 'Decorated class has no name',
184
+ file: sourceFile.fileName,
185
+ line: line + 1,
186
+ column: character + 1,
187
+ });
188
+ return;
189
+ }
190
+ // Try to find parent type from decorator arguments
191
+ let parentNode;
192
+ if (ts.isCallExpression(decorator.expression)) {
193
+ const args = decorator.expression.arguments;
194
+ if (args.length > 0 && ts.isIdentifier(args[0])) {
195
+ const parentName = args[0].text;
196
+ // First try exact match
197
+ parentNode = this.graph.findType(parentName);
198
+ // Then search through all types for one with matching name
199
+ if (!parentNode) {
200
+ for (const type of this.graph.getAllTypes()) {
201
+ if (type.name === parentName) {
202
+ parentNode = type;
203
+ break;
204
+ }
205
+ }
206
+ }
207
+ }
208
+ }
209
+ // Create type node
210
+ const node = graph_1.TypeGraphImpl.createNode(typeName, parentNode, sourceFile.fileName, line + 1, character + 1);
211
+ // Extract properties from class members
212
+ node.properties = this.extractClassProperties(classDecl);
213
+ // Add to graph
214
+ if (parentNode) {
215
+ this.graph.addChild(parentNode, node);
216
+ }
217
+ else {
218
+ this.graph.addRoot(node);
219
+ }
220
+ }
221
+ /**
222
+ * Extract type name from define() call arguments
223
+ */
224
+ extractTypeName(call) {
225
+ const args = call.arguments;
226
+ // define('TypeName', handler) or define(() => class)
227
+ if (args.length === 0) {
228
+ return undefined;
229
+ }
230
+ const firstArg = args[0];
231
+ // String literal: define('TypeName', ...)
232
+ if (ts.isStringLiteral(firstArg)) {
233
+ return firstArg.text;
234
+ }
235
+ // Function with name: define(function TypeName() {})
236
+ if (ts.isFunctionExpression(firstArg) && firstArg.name) {
237
+ return firstArg.name.text;
238
+ }
239
+ // Arrow function returning class: define(() => class TypeName {})
240
+ if (ts.isArrowFunction(firstArg)) {
241
+ const body = firstArg.body;
242
+ if (ts.isClassExpression(body) && body.name) {
243
+ return body.name.text;
244
+ }
245
+ }
246
+ return undefined;
247
+ }
248
+ /**
249
+ * Find parent type node for nested define calls
250
+ */
251
+ findParentType(call) {
252
+ const expression = call.expression;
253
+ // Check for method call: SomeType.define('SubType', ...)
254
+ if (!ts.isPropertyAccessExpression(expression)) {
255
+ return undefined;
256
+ }
257
+ // Get the object being called on (SomeType in SomeType.define)
258
+ const obj = expression.expression;
259
+ if (ts.isIdentifier(obj)) {
260
+ // Direct reference to parent type - search by simple name
261
+ const name = obj.text;
262
+ // First try exact match
263
+ const exact = this.graph.findType(name);
264
+ if (exact)
265
+ return exact;
266
+ // Then search through all types for one with matching name
267
+ for (const type of this.graph.getAllTypes()) {
268
+ if (type.name === name) {
269
+ return type;
270
+ }
271
+ }
272
+ return undefined;
273
+ }
274
+ if (ts.isPropertyAccessExpression(obj)) {
275
+ // Nested access: instance.Type.define - try to resolve
276
+ const chain = this.getPropertyChain(obj);
277
+ if (chain.length > 0) {
278
+ return this.graph.findType(chain.join('.'));
279
+ }
280
+ }
281
+ return undefined;
282
+ }
283
+ /**
284
+ * Get property chain from nested access
285
+ */
286
+ getPropertyChain(expr) {
287
+ const chain = [];
288
+ let current = expr;
289
+ while (ts.isPropertyAccessExpression(current)) {
290
+ if (current.name) {
291
+ chain.unshift(current.name.text);
292
+ }
293
+ current = current.expression;
294
+ }
295
+ if (ts.isIdentifier(current)) {
296
+ chain.unshift(current.text);
297
+ }
298
+ return chain;
299
+ }
300
+ /**
301
+ * Extract properties from constructor function
302
+ */
303
+ extractProperties(call) {
304
+ const properties = new Map();
305
+ const handlerArg = call.arguments[1];
306
+ if (!handlerArg) {
307
+ return properties;
308
+ }
309
+ // Handle function expression
310
+ if (ts.isFunctionExpression(handlerArg) || ts.isArrowFunction(handlerArg)) {
311
+ const body = handlerArg.body;
312
+ // Function body with statements
313
+ if (ts.isBlock(body)) {
314
+ for (const stmt of body.statements) {
315
+ if (ts.isExpressionStatement(stmt)) {
316
+ this.extractPropertyFromStatement(stmt.expression, properties);
317
+ }
318
+ }
319
+ }
320
+ }
321
+ // Handle class expression
322
+ if (ts.isClassExpression(handlerArg)) {
323
+ for (const member of handlerArg.members) {
324
+ if (ts.isPropertyDeclaration(member) && member.name) {
325
+ const name = ts.isIdentifier(member.name) ? member.name.text : '';
326
+ if (name) {
327
+ properties.set(name, {
328
+ name,
329
+ type: this.inferType(member.type),
330
+ optional: !!member.questionToken,
331
+ });
332
+ }
333
+ }
334
+ }
335
+ }
336
+ return properties;
337
+ }
338
+ /**
339
+ * Extract property assignment from statement
340
+ */
341
+ extractPropertyFromStatement(expr, properties) {
342
+ // Handle: this.property = value
343
+ if (ts.isBinaryExpression(expr) &&
344
+ expr.operatorToken.kind === ts.SyntaxKind.EqualsToken) {
345
+ const left = expr.left;
346
+ if (ts.isPropertyAccessExpression(left)) {
347
+ // Check if accessing 'this' (ThisKeyword)
348
+ if (left.expression.kind === ts.SyntaxKind.ThisKeyword) {
349
+ const name = left.name?.text;
350
+ if (name) {
351
+ properties.set(name, {
352
+ name,
353
+ type: this.inferTypeFromInitializer(expr.right),
354
+ optional: false,
355
+ });
356
+ }
357
+ }
358
+ }
359
+ }
360
+ // Handle: Object.assign(this, { prop: value })
361
+ if (ts.isCallExpression(expr)) {
362
+ const fn = expr.expression;
363
+ if (ts.isPropertyAccessExpression(fn) &&
364
+ fn.name?.text === 'assign' &&
365
+ ts.isIdentifier(fn.expression) &&
366
+ fn.expression.text === 'Object') {
367
+ const args = expr.arguments;
368
+ if (args.length >= 2 && args[0].kind === ts.SyntaxKind.ThisKeyword) {
369
+ // Extract properties from the second argument
370
+ const propsArg = args[1];
371
+ if (ts.isObjectLiteralExpression(propsArg)) {
372
+ for (const prop of propsArg.properties) {
373
+ if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {
374
+ const name = prop.name.text;
375
+ properties.set(name, {
376
+ name,
377
+ type: this.inferTypeFromInitializer(prop.initializer),
378
+ optional: false,
379
+ });
380
+ }
381
+ }
382
+ }
383
+ }
384
+ }
385
+ }
386
+ }
387
+ /**
388
+ * Extract properties from class declaration
389
+ */
390
+ extractClassProperties(classDecl) {
391
+ const properties = new Map();
392
+ for (const member of classDecl.members) {
393
+ if (ts.isPropertyDeclaration(member) && member.name) {
394
+ const name = ts.isIdentifier(member.name) ? member.name.text : '';
395
+ if (name) {
396
+ // If no explicit type but has initializer, infer from initializer
397
+ let type = this.inferType(member.type);
398
+ if (type === 'unknown' && member.initializer) {
399
+ type = this.inferTypeFromInitializer(member.initializer);
400
+ }
401
+ properties.set(name, {
402
+ name,
403
+ type,
404
+ optional: !!member.questionToken,
405
+ });
406
+ }
407
+ }
408
+ }
409
+ return properties;
410
+ }
411
+ /**
412
+ * Infer TypeScript type from type node
413
+ */
414
+ inferType(typeNode) {
415
+ if (!typeNode) {
416
+ return 'unknown';
417
+ }
418
+ switch (typeNode.kind) {
419
+ case ts.SyntaxKind.StringKeyword:
420
+ return 'string';
421
+ case ts.SyntaxKind.NumberKeyword:
422
+ return 'number';
423
+ case ts.SyntaxKind.BooleanKeyword:
424
+ return 'boolean';
425
+ case ts.SyntaxKind.UndefinedKeyword:
426
+ return 'undefined';
427
+ case ts.SyntaxKind.NullKeyword:
428
+ return 'null';
429
+ case ts.SyntaxKind.AnyKeyword:
430
+ return 'any';
431
+ case ts.SyntaxKind.UnknownKeyword:
432
+ return 'unknown';
433
+ case ts.SyntaxKind.VoidKeyword:
434
+ return 'void';
435
+ case ts.SyntaxKind.ArrayType:
436
+ return 'Array<' + this.inferType(typeNode.elementType) + '>';
437
+ case ts.SyntaxKind.TypeLiteral:
438
+ return 'object';
439
+ default:
440
+ // For complex types, return the text representation
441
+ return 'unknown';
442
+ }
443
+ }
444
+ /**
445
+ * Infer type from initializer
446
+ */
447
+ inferTypeFromInitializer(initializer) {
448
+ switch (initializer.kind) {
449
+ case ts.SyntaxKind.StringLiteral:
450
+ return 'string';
451
+ case ts.SyntaxKind.NumericLiteral:
452
+ return 'number';
453
+ case ts.SyntaxKind.TrueKeyword:
454
+ case ts.SyntaxKind.FalseKeyword:
455
+ return 'boolean';
456
+ case ts.SyntaxKind.NullKeyword:
457
+ return 'null';
458
+ case ts.SyntaxKind.UndefinedKeyword:
459
+ return 'undefined';
460
+ case ts.SyntaxKind.ArrayLiteralExpression:
461
+ return 'Array<unknown>';
462
+ case ts.SyntaxKind.ObjectLiteralExpression:
463
+ return 'object';
464
+ case ts.SyntaxKind.NewExpression: {
465
+ // Handle new Date(), new Map(), etc.
466
+ const newExpr = initializer;
467
+ if (ts.isIdentifier(newExpr.expression)) {
468
+ return newExpr.expression.text;
469
+ }
470
+ return 'object';
471
+ }
472
+ default:
473
+ return 'unknown';
474
+ }
475
+ }
476
+ }
477
+ exports.MnemonicaAnalyzer = MnemonicaAnalyzer;
478
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"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"}
package/lib/cli.d.ts ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env node
2
+ import { TacticaConfig } from './types';
3
+ /**
4
+ * CLI entry point for Tactica
5
+ *
6
+ * Can be used standalone without the Language Service Plugin
7
+ */
8
+ interface CLIOptions extends TacticaConfig {
9
+ watch?: boolean;
10
+ project?: string;
11
+ help?: boolean;
12
+ }
13
+ /**
14
+ * Parse command line arguments
15
+ */
16
+ declare function parseArgs(args: string[]): CLIOptions;
17
+ /**
18
+ * Run type generation
19
+ */
20
+ declare function run(options: CLIOptions): void;
21
+ /**
22
+ * Watch mode
23
+ */
24
+ declare function watch(options: CLIOptions): void;
25
+ /**
26
+ * Main entry point
27
+ */
28
+ declare function main(): void;
29
+ export { main, run, watch, parseArgs };