Open Sembiance opened 2 years ago
Thank you for the initial exploration @Sembiance!
CC: @HarisaranG since you also mentioned you were interested in exploring a Deno version of the library. I'll intro you both in our Slack community to potentially collaborate.
@Sembiance I needed a TypeSense Deno client, so I implemented one this week: https://github.com/bradenmacdonald/typesense-deno
Thanks a lot for the research you put in this thread, it saved me some time! If you're curious about the exact changes it took, you can see them in this commit
My use case is fairly limited (indexing documents and generating restricted API keys), so I haven't tested it thoroughly but the parts I am using are working well.
@jasonbosco Let me know if you'd like to move it to the typesense org on GitHub or change it in any way. I'd also like to publish it on https://deno.land/x since that's where most Deno users would look for something like this.
It's also possible to do work to have one version of the code that compiles out to work for either Node or Deno (as I have done with e.g. the Neo4j JavaScript driver), but that can be more work and I think a separate deno-optimized version is preferable in this case :)
Any new version for 2024?
It would be awesome if there was a Deno compatible typesense module.
You can almost directly
import * as Typsense from src/Typesense.ts
but there are some issue:Deno requires all local imports to have explict .ts extensions So instead of
import ApiCall from './ApiCall'
useimport ApiCall from './ApiCall.ts'
Also Errors, instead ofimport { ObjectNotFound } from './Errors'
useimport { ObjectNotFound } from './Errors/ObjectNotFound.ts'
Keys.ts needs modified to use the
hmac
andbase64
modules from Deno: Change:import { createHmac } from 'crypto'
toAnd change lines
to
This is where I gave up because there are at least 3 remaining issues:
Documents.ts needs a
ReadStream
Deno equilivantAll of
axios
needs replaced in ApiCall.ts Maybe you could use the Deno versionhttps://github.com/roonie007/axiod
but much more ideally you could use the built in Denofetch
supportLastly, there may be other 'nodejs' specific APIs being used in the code that I didn't look for