unsplash / intlc

Compile ICU messages into code. Supports TypeScript and JSX. No runtime.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Webpack & tsc plugins

samhh opened this issue · comments

The current Web workflow works pretty nicely with intlc able to compile everything in under a second, but it adds some extra moving parts separate from the main builds.

What we do right now is compile *.translations.json to *.ts and import from the latter in TypeScript. What we could potentially do instead is import directly from *.translations.json. The Webpack plugin would handle runtime compilation and the tsc plugin, a la typescript-plugin-toml, would handle the language server side of things. The pattern should ideally be configurable in both cases.

The only question is whether the plugin infrastructure supports returning raw TypeScript code for tsc to check, which it'd obtain via a shell call to intlc. I haven't checked if the linked plugin is doing that or returning only computed type information. If the latter that might be doable but it'd be a good chunk more complex.

the tsc plugin, a la typescript-plugin-toml, would handle the language server side of things

Reminds me of this for CSS Modules: https://github.com/timothykang/css-module-types

The Webpack plugin would handle runtime compilation and the tsc plugin, a la typescript-plugin-toml, would handle the language server side of things.

How would this work when we run tsc to type check the project? If I understand correctly, TS language service plugins don't effect tsc. Taken from https://github.com/RyanCavanaugh/sample-ts-plugin:

Examples of things language plugins cannot do:

  • Customize the type system to change what is or isn't an error when running tsc

I think we'd still need to manually compile translation JSON to TS before we run tsc.

Related TS issues:

You're right, if typechecking is limited to the editor then we'd be losing type safety versus compiling directly via intlc first and then running tsc.

Might it be worth considering ttypescript given how pervasive translation imports are?