{"_id":"@adaptive-tests/typescript","name":"@adaptive-tests/typescript","dist-tags":{"latest":"0.3.0"},"versions":{"0.3.0":{"name":"@adaptive-tests/typescript","version":"0.3.0","description":"TypeScript extension for adaptive-tests - AI-ready testing infrastructure that survives refactors.","main":"index.js","types":"types/index.d.ts","scripts":{"test":"jest","build":"tsc","lint":"eslint src/","restore":"node scripts/restore.js","refactor":"node scripts/refactor.js","broken":"node scripts/demo-broken.js","restore-broken":"node scripts/restore-broken.js","restore-ts":"node scripts/restore-ts.js","refactor-ts":"node scripts/refactor-ts.js","demo-broken-ts":"node scripts/demo-broken-ts.js"},"publishConfig":{"access":"public"},"keywords":["testing","adaptive","typescript","ai-ready","autonomous-development","refactoring","ast-discovery","jest","mocha","test-automation","dynamic-discovery"],"author":{"name":"Jason Kempf","email":"jasonkempf@gmail.com"},"license":"MIT","peerDependencies":{"typescript":">=4.0.0","ts-node":">=10.0.0"},"dependencies":{"@adaptive-tests/javascript":"^0.3.0"},"devDependencies":{"@types/jest":"^29.5.12","@types/node":"^20.12.7","@typescript-eslint/eslint-plugin":"^7.16.1","@typescript-eslint/parser":"^7.16.1","eslint":"^8.57.0","glob":"^11.0.3","jest":"^29.7.0","ts-jest":"^29.4.4","ts-node":"^10.9.2","typescript":"^5.4.5"},"engines":{"node":">=16.0.0"},"_id":"@adaptive-tests/typescript@0.3.0","gitHead":"3c4834f22b06a2a35ff3f71a934af67024c5980c","_nodeVersion":"24.8.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-XulvDVqJktfHscu2Ow/6OM5Anwj6V4qQKLxi5FM3eQmXNAcF7xQJNmNSAOcP6rVeLWPRCScBX0KBJ7PpQd9vig==","shasum":"c4d3dfa103ca94ca8e9b3ea3339f516ab8a13461","tarball":"https://registry.npmjs.org/@adaptive-tests/typescript/-/typescript-0.3.0.tgz","fileCount":80,"unpackedSize":160804,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIE3r1j3egZ0E2GrGNpdvUggFwg0G5nDqLtsjQKFOslrwAiEAzeGluht4hAbFBC/GVgoUmIogZaojpKkyt3o3dM/ev9E="}]},"_npmUser":{"name":"anon57396","email":"jasonkempf@gmail.com"},"directories":{},"maintainers":[{"name":"anon57396","email":"jasonkempf@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/typescript_0.3.0_1758413558132_0.5401957783401541"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-21T00:12:38.074Z","0.3.0":"2025-09-21T00:12:38.318Z","modified":"2025-09-21T00:12:38.592Z"},"maintainers":[{"name":"anon57396","email":"jasonkempf@gmail.com"}],"description":"TypeScript extension for adaptive-tests - AI-ready testing infrastructure that survives refactors.","keywords":["testing","adaptive","typescript","ai-ready","autonomous-development","refactoring","ast-discovery","jest","mocha","test-automation","dynamic-discovery"],"author":{"name":"Jason Kempf","email":"jasonkempf@gmail.com"},"license":"MIT","readme":"# @adaptive-tests/typescript\n\n**AI-ready testing infrastructure for TypeScript projects**\n\n## Installation\n\n```bash\n# Install the meta package + TypeScript companion\nnpm install adaptive-tests @adaptive-tests/typescript\n\n# Peer dependencies (if not already installed)\nnpm install --save-dev typescript ts-node\n```\n\n## Quick Start\n\n### Basic TypeScript Discovery\n\n```typescript\nimport { discover } from 'adaptive-tests';\nimport { getTypeScriptDiscoveryEngine } from 'adaptive-tests-typescript';\n\ndescribe('UserService', () => {\n  let UserService: any;\n\n  beforeAll(async () => {\n    // TypeScript-aware discovery\n    const engine = getTypeScriptDiscoveryEngine('./src');\n    UserService = await engine.discoverTarget({\n      name: 'UserService',\n      type: 'class',\n      methods: ['findById', 'create'],\n      interfaces: ['IUserService']  // TypeScript-specific\n    });\n  });\n\n  test('finds user by ID', async () => {\n    const service = new UserService();\n    const user = await service.findById(1);\n    expect(user).toBeDefined();\n  });\n});\n```\n\n### Interface Discovery\n\n```typescript\nimport { discoverInterface } from 'adaptive-tests-typescript';\n\ndescribe('Payment interfaces', () => {\n  test('discovers payment gateway interface', async () => {\n    const IPaymentGateway = await discoverInterface({\n      name: 'IPaymentGateway',\n      methods: ['processPayment', 'refund'],\n      properties: ['supportedCurrencies']\n    });\n\n    // Test implementations of the interface\n    const StripeGateway = await discover({\n      name: 'StripeGateway',\n      implements: ['IPaymentGateway']\n    });\n\n    expect(StripeGateway).toBeDefined();\n  });\n});\n```\n\n### Generic Type Discovery\n\n```typescript\ndescribe('Generic classes', () => {\n  test('discovers repository with generic types', async () => {\n    const UserRepository = await discover({\n      name: 'Repository',\n      type: 'class',\n      generics: ['User'],  // Repository<User>\n      methods: ['findAll', 'save']\n    });\n\n    const repo = new UserRepository();\n    expect(repo.findAll).toBeDefined();\n  });\n});\n```\n\n---\n\n## TypeScript-Specific Features\n\n### Type-Aware Discovery\n\nThe TypeScript engine understands:\n\n- **Interfaces**: `interface IUserService { ... }`\n- **Abstract classes**: `abstract class BaseService { ... }`\n- **Generic types**: `class Repository<T> { ... }`\n- **Decorators**: `@Injectable() class UserService { ... }`\n- **Enums**: `enum UserRole { Admin, User }`\n- **Type aliases**: `type UserId = string;`\n\n### Advanced Signatures\n\n```typescript\n// Interface discovery\nawait discover({\n  name: 'IUserService',\n  type: 'interface',\n  methods: ['findById', 'create'],\n  properties: ['cache']\n});\n\n// Abstract class discovery\nawait discover({\n  name: 'BaseController',\n  type: 'abstract',\n  methods: ['authorize', 'validate']\n});\n\n// Decorator-based discovery\nawait discover({\n  name: 'UserController',\n  type: 'class',\n  decorators: ['@Controller', '@Injectable'],\n  methods: ['getUser', 'createUser']\n});\n\n// Generic class discovery\nawait discover({\n  name: 'Repository',\n  type: 'class',\n  generics: ['T'],\n  methods: ['find', 'save', 'delete']\n});\n```\n\n### TypeScript Configuration\n\nCreate `adaptive-tests.config.ts`:\n\n```typescript\nimport { Config } from 'adaptive-tests-typescript';\n\nconst config: Config = {\n  typescript: {\n    // tsconfig.json path\n    configFile: './tsconfig.json',\n\n    // Parse decorators\n    experimentalDecorators: true,\n\n    // Include .tsx files\n    jsx: true,\n\n    // Strict type checking\n    strict: true\n  },\n\n  discovery: {\n    // TypeScript file patterns\n    include: ['src/**/*.ts', 'src/**/*.tsx'],\n\n    // Exclude compiled output\n    exclude: ['dist/**', 'build/**', '**/*.d.ts']\n  }\n};\n\nexport default config;\n```\n\n---\n\n## Examples\n\n### React Component (TypeScript)\n\n```typescript\n// src/components/UserCard.tsx\ninterface Props {\n  user: User;\n  onClick?: () => void;\n}\n\nexport const UserCard: React.FC<Props> = ({ user, onClick }) => {\n  return <div onClick={onClick}>{user.name}</div>;\n};\n```\n\n```typescript\n// tests/UserCard.adaptive.test.tsx\nimport { discover } from 'adaptive-tests';\nimport { render } from '@testing-library/react';\n\ndescribe('UserCard Component', () => {\n  let UserCard: any;\n\n  beforeAll(async () => {\n    UserCard = await discover({\n      name: 'UserCard',\n      type: 'function',\n      exports: 'named',\n      frameworks: ['react']  // Framework hint\n    });\n  });\n\n  test('renders user name', () => {\n    const user = { name: 'John Doe' };\n    const { getByText } = render(<UserCard user={user} />);\n    expect(getByText('John Doe')).toBeInTheDocument();\n  });\n});\n```\n\n### Service with Dependency Injection\n\n```typescript\n// src/services/UserService.ts\n@Injectable()\nexport class UserService implements IUserService {\n  constructor(\n    private repository: UserRepository,\n    private cache: CacheService\n  ) {}\n\n  async findById(id: string): Promise<User> {\n    // Implementation\n  }\n}\n```\n\n```typescript\n// tests/UserService.adaptive.test.ts\ndescribe('UserService', () => {\n  test('discovers service with dependencies', async () => {\n    const UserService = await discover({\n      name: 'UserService',\n      type: 'class',\n      decorators: ['Injectable'],\n      implements: ['IUserService'],\n      dependencies: ['UserRepository', 'CacheService']\n    });\n\n    expect(UserService).toBeDefined();\n  });\n});\n```\n\n---\n\n## Framework Integration\n\n### Jest with TypeScript\n\n```javascript\n// jest.config.js\nmodule.exports = {\n  preset: 'ts-jest',\n  testEnvironment: 'node',\n  setupFilesAfterEnv: ['adaptive-tests-typescript/setup'],\n  moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n  transform: {\n    '^.+\\\\.(ts|tsx)$': 'ts-jest'\n  }\n};\n```\n\n### Vitest with TypeScript\n\n```typescript\n// vitest.config.ts\nimport { defineConfig } from 'vitest/config';\n\nexport default defineConfig({\n  test: {\n    environment: 'node',\n    setupFiles: ['adaptive-tests-typescript/setup']\n  }\n});\n```\n\n---\n\n## API Reference\n\n### `getTypeScriptDiscoveryEngine(rootPath?)`\n\nCreates a TypeScript-aware discovery engine:\n\n```typescript\nimport { getTypeScriptDiscoveryEngine } from 'adaptive-tests-typescript';\n\nconst engine = getTypeScriptDiscoveryEngine('./src');\nconst UserService = await engine.discoverTarget('UserService');\n```\n\n### `discoverInterface(signature, rootPath?)`\n\nDiscovers TypeScript interfaces:\n\n```typescript\nimport { discoverInterface } from 'adaptive-tests-typescript';\n\nconst IUserService = await discoverInterface({\n  name: 'IUserService',\n  methods: ['findById', 'create']\n});\n```\n\n### `discoverType(signature, rootPath?)`\n\nDiscovers type aliases and complex types:\n\n```typescript\nimport { discoverType } from 'adaptive-tests-typescript';\n\nconst UserId = await discoverType({\n  name: 'UserId',\n  type: 'alias'\n});\n```\n\n---\n\n## Migration from JavaScript\n\n### Existing JavaScript Tests\n\nIf you have existing adaptive tests in JavaScript, they'll continue working. To add TypeScript support:\n\n1. Install the TypeScript extension\n2. Update imports to use TypeScript-aware discovery\n3. Add TypeScript-specific signatures as needed\n\n### Example Migration\n\n**Before (JavaScript):**\n\n```javascript\nconst UserService = await discover('UserService');\n```\n\n**After (TypeScript):**\n\n```typescript\nconst UserService = await discover({\n  name: 'UserService',\n  type: 'class',\n  implements: ['IUserService'],  // Now type-aware!\n  decorators: ['Injectable']\n});\n```\n\n---\n\n## Troubleshooting\n\n### Common Issues\n\n**TypeScript compilation errors**\n\n```bash\n# Ensure ts-node is installed and configured\nnpm install --save-dev ts-node\n```\n\n**Interface discovery fails**\n\n```typescript\n// Use more specific signatures\nconst IUserService = await discoverInterface({\n  name: 'IUserService',\n  methods: ['findById'],\n  location: './src/interfaces'  // Narrow the search\n});\n```\n\n**Generic type issues**\n\n```typescript\n// Be explicit about generic constraints\nconst Repository = await discover({\n  name: 'Repository',\n  generics: ['T extends BaseEntity'],\n  methods: ['save', 'find']\n});\n```\n\n---\n\n## Development\n\n### Building from Source\n\n```bash\ngit clone https://github.com/anon57396/adaptive-tests.git\ncd adaptive-tests/languages/typescript\nnpm install\nnpm run build\nnpm test\n```\n\n### Contributing\n\nWe welcome TypeScript-specific contributions! See [CONTRIBUTING.md](../../CONTRIBUTING.md) for guidelines.\n\n---\n\n## License\n\nMIT - See [LICENSE](../../LICENSE) for details.\n\n---\n\n**Ready to make your TypeScript tests refactoring-proof?**\n\n```bash\nnpm install adaptive-tests adaptive-tests-typescript\n```\n\nStart with the [Quick Start](#quick-start) guide above!\n","readmeFilename":"README.md","_rev":"1-b955e1913214900cdfc2538dacfac941"}