tyson icon indicating copy to clipboard operation
tyson copied to clipboard

Embeddable configuration types

Open Xe opened this issue 2 years ago • 2 comments

I've been playing with TySON and I've been liking where this can go. I would like to be able to have my application ship a "config drive" or something in the form of an io.FS/embed.FS that's pre-baked with the type definitions. This would let me ship the types by default so I can write TySON configs like this:

import { Config } from "internal/config.ts";

export default {
  foo: "bar",
} satisfies Config;

What do you think about this? Shipping the types to editors would probably be a little bit hard, but I think it could be doable with some legwork.

Xe avatar Jul 20 '23 14:07 Xe

I think we definitely need a way for applications to define types and easily make those types available.

I've been debating two options:

  1. Something like you are suggesting, where the application embeds the types and makes them available
  2. Support for url-based imports, so that the types can easily be published anywhere

For case 2, you could imagine creating your types under a github repo, let's say org/types-repo

And after you've published that repo you can now write the following config:

import { Config } from "github.com/org/types-repo/config.ts";

export default {
  foo: "bar",
} satisfies Config;

Would approach 2 also address your use case? Or are there reasons why you would prefer one approach vs the other?

loreto avatar Jul 20 '23 15:07 loreto

I'd prefer embedding things directly into the application because adding a URL means that trying to validate configs in an environment like Nix builds (where there is no network stack) is nontrivial/annoying.

Xe avatar Jul 20 '23 20:07 Xe