Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mmmommm/dropts
typescript compiler written in Go.
https://github.com/mmmommm/dropts
Last synced: 3 months ago
JSON representation
typescript compiler written in Go.
- Host: GitHub
- URL: https://github.com/mmmommm/dropts
- Owner: mmmommm
- License: mit
- Created: 2021-12-20T05:58:48.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2022-05-01T07:51:37.000Z (over 2 years ago)
- Last Synced: 2024-06-21T18:09:31.140Z (5 months ago)
- Language: Go
- Size: 685 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-github-star - dropts
README
# dropts
quote from esbuild
only drop type definition and transform enum jsx etc...## function dependency
input -> lexer -> parser -> compiler -> output
// SourceCode ~~Scanner~~> Tokens ~~Parser~~> AST ~~Emitter~~> JavaScript// NewLexer -> newParser -> Parse -> parseFile -> maybeParseFile -> scanAllDependencies -> ScanBundle -> Compile -> buildImpl -> Build
# memo
parseの処理でtsを落としてASTに変換してそれをcompileImplに渡してASTをjsに変換する、CompileでcompileImplをラップして外部公開parseFileでの結果は parseArgsの `args.results` に入る、scannerに入れられてresultの値を各種scannerに実装されているメソッドで加工している、
scannerに渡されたparseResultは各種scanの過程を経て `ScanBundle` で呼ばれてcompileの処理に渡される# impl memo
playgroundで特定の文字列を受け取ってcompileした結果を返すapiとして提供するのであれば、stringで引数を取ってそれを `lexer, parser, compiler` の順に渡すようにすれば問題ない。esbuildのようにcliなどでファイル単位で渡したものを全てcompileしてファイル依存解消してminifyして返すようにするためには設計考える必要あり。
input ~~Lexer~~> Tokens ~~Parser~~> AST ~~Compiler~~> Javascript
# package
## lexer
渡されたTypescriptコードを型を落としたTokenに変換する
内部で `lexer.skipTypescript` を読んで型を落とす## parser
渡されたTokenをASTに変換する## compiler
渡されたASTをJavascriptコードに変換するオプションはつけないあくまでAPIに文字列として渡されたTypescriptコードを変換することだけする
`parser.Parse` の内部で `newLexer` を読んでいるので `parser.Parse` にstringでtypescriptコードを渡す
## sample code
```ts
const x: number = 1;
function square(x: number): number {
return x ** 2;
}
```## run
`go run main.go const x:number=1;`