Skip to content

feat: support subpath exports#144

Merged
Himenon merged 1 commit intomainfrom
feat/subpath
May 6, 2026
Merged

feat: support subpath exports#144
Himenon merged 1 commit intomainfrom
feat/subpath

Conversation

@Himenon
Copy link
Copy Markdown
Owner

@Himenon Himenon commented May 6, 2026

Summary

Implemented subpath exports to allow cleaner import paths without the dist/ prefix.

Changes:

  • Updated package.json with exports field for ./api, ./templates, ./types, and ./meta.
  • Added types field to each export for better type resolution.
  • Updated README.md, docs/ja/README-ja.md, and all files in examples/ to use the new import paths.

BREAKING CHANGE

Import paths for sub-modules have been updated. Custom templates or scripts using the old paths will need to be updated.

  • @himenon/openapi-typescript-code-generator/dist/templates -> @himenon/openapi-typescript-code-generator/templates
  • @himenon/openapi-typescript-code-generator/dist/types -> @himenon/openapi-typescript-code-generator/types
  • @himenon/openapi-typescript-code-generator/dist/api -> @himenon/openapi-typescript-code-generator/api
  • @himenon/openapi-typescript-code-generator/dist/meta -> @himenon/openapi-typescript-code-generator/meta

BREAKING CHANGE: Import paths for templates, types, api, and meta have been changed to remove the 'dist/' prefix.
- Old: @himenon/openapi-typescript-code-generator/dist/templates
- New: @himenon/openapi-typescript-code-generator/templates
@Himenon Himenon merged commit f2b2a57 into main May 6, 2026
2 checks passed
@Himenon Himenon deleted the feat/subpath branch May 6, 2026 03:37
@Himenon Himenon mentioned this pull request May 6, 2026
Himenon added a commit that referenced this pull request May 6, 2026
## Summary

This PR consolidates major architectural updates and improvements
previously discussed and implemented in #141 and #144. It aims to
achieve zero runtime dependencies and provide a modern development
experience with subpath exports.

### From #141: Complete Removal of TypeScript AST Dependency
- Replaced the TypeScript Compiler API (AST) with a string
template-based approach for code generation.
- Achieved **zero runtime dependencies** by removing the `typescript`
package from `src/`.
- Simplified internal logic and improved portability of the generated
code.

### From #144: Support for Subpath Exports
- Implemented Node.js Subpath Exports in `package.json` to allow cleaner
import paths.
- Updated all internal references, READMEs, and examples to use the new
paths (removing the `/dist/` prefix).
- Improved type resolution support in modern TypeScript environments.

## Breaking Changes & Migration Guide

### 1. Import Path Changes
Subpath exports are now supported. You should remove the `/dist/` prefix
from your import paths.

```diff
- import * as Templates from "@himenon/openapi-typescript-code-generator/dist/templates";
- import type * as Types from "@himenon/openapi-typescript-code-generator/dist/types";
- import { TsGenerator } from "@himenon/openapi-typescript-code-generator/dist/api";
+ import * as Templates from "@himenon/openapi-typescript-code-generator/templates";
+ import type * as Types from "@himenon/openapi-typescript-code-generator/types";
+ import { TsGenerator } from "@himenon/openapi-typescript-code-generator/api";
```

### 2. Type Definition Changes
The `IntermediateCode` type has been simplified from a union type to a
strict `string`.

```diff
- // Old: string | ts.Statement
- const code: Types.CodeGenerator.IntermediateCode = ts.factory.createIdentifier("...");
+ // New: string
+ const code: Types.CodeGenerator.IntermediateCode = "const x = 1;";
```

### 3. Internal Factory API Overhaul
The internal TypeScript AST factory wrapper (`TsGenerator.Factory`) has
been replaced with a string-based factory.

```diff
const factory = TsGenerator.Factory.create();

- // Old: returns ts.InterfaceDeclaration
- const node = factory.InterfaceDeclaration.create({ ... });
+ // New: returns string
+ const node = factory.InterfaceDeclaration.create({ ... });
```

## Changes Summary
- **Refactoring:** Consolidated 44 individual factory files into a
single optimized entry point.
- **Documentation:** Updated README.md and docs/ja/README-ja.md to
reflect the new API and import paths.

## Test Plan
```bash
# Verify no typescript dependency in src/
grep -r "from \"typescript\"" src/

# Run all tests (including new snapshots and functional tests)
pnpm test

# Verify code generation with examples
pnpm test:code:gen:class
pnpm test:code:gen:function
pnpm test:code:gen:currying-function
```

All tests have been verified to pass successfully in the local
environment.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant