tulios / mappersmith

is a lightweight rest client for node.js and the browser
https://www.npmjs.com/package/mappersmith
MIT License
335 stars 72 forks source link

configs.fetch is badly typed #388

Closed klippx closed 10 months ago

klippx commented 1 year ago

Screenshot 2023-09-22 at 16 56 21

klippx commented 1 year ago

The problem here is:

  1. mappersmith is isomorphic (since the beginning)
  2. mappersmith aims to be 0 dependencies library (since the beginning)
  3. mappersmith wants to be a TS project and provide typings (fairly new thing, started as typings and evolved into first class TS project)

[3] is not really finished though. The thing is that mappersmith uses fetch as if it is a global instance, which TS treats as lib.dom which ofc makes no sense for node projects. This makes types implicitly have a web context (where fetch is native).

Even even we split typings into .node.ts and .web.ts which is done in this branch we still cannot export a project with different typings, this is a limitation in TS as they only support one "typings" field, see issue https://github.com/microsoft/TypeScript/issues/29128

So we are completely out of options here in terms of actual types.

  1. Is blocked by TS: a library cannot be isomorphic but with different types
  2. We cannot rely on userland using e.g node-fetch or native fetch (new since node 20 which isnt even LTS) so we cannot provide typings as long as this is a configs "plugin" since we dont know what it is, exactly.

The best way forward is probably to use an adapter type that "works" for browser and node.

klippx commented 10 months ago

Will not work on this