feat(ext/node): add sqlite-type symbol for DatabaseSync#30511
Conversation
This comment was marked as outdated.
This comment was marked as outdated.
| ObjectDefineProperty(DatabaseSync.prototype, sqliteTypeSymbol, { | ||
| __proto__: null, | ||
| value: "node:sqlite", |
There was a problem hiding this comment.
@littledivy is this okay, or should we do it in Rust?
There was a problem hiding this comment.
yea this can be done in Rust:
#[getter]
#[symbol("sqlite-type")]
fn sqlite_type(&self) -> bool {
true
}There was a problem hiding this comment.
thanks! let me fix it
Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com> Signed-off-by: Alex Yang <himself65@outlook.com>
|
|
||
| // Returns "node:sqlite" for Node.js compatibility | ||
| #[getter] | ||
| #[symbol("sqlite-type")] |
There was a problem hiding this comment.
@littledivy this seems to panic now... Should we fix it in deno_core and for the time being use the previous version in JS?
There was a problem hiding this comment.
oh we reuse the name as a Rust identifier in the macro. I think we can revert to the JS version for now @himself65. I will open a deno_core PR to fix the panic.
bartlomieju
left a comment
There was a problem hiding this comment.
Reverted to using a JS symbol for now. LGTM, thanks!
Related: nodejs/node@d1eabcb Related: nodejs/node#59405 Related: better-auth/better-auth#3869 Related: oven-sh/bun#22109 Nowadays, there are tons of database packages, like sqlite3, sqlite, better-sqlite, bun:sqlite... Checking the difference from them is pretty hard. instanceof is not good, since the developer will still need to import the module, which is costly. I think we should provide a symbol to distinguish different SQLite classes, at least nodejs could make the first step. --------- Signed-off-by: Alex Yang <himself65@outlook.com> Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
Related: nodejs/node@d1eabcb
Related: nodejs/node#59405
Related: better-auth/better-auth#3869
Related: oven-sh/bun#22109
Nowadays, there are tons of database packages, like sqlite3, sqlite, better-sqlite, bun:sqlite... Checking the difference from them is pretty hard.
instanceof is not good, since the developer will still need to import the module, which is costly.
I think we should provide a symbol to distinguish different SQLite classes, at least nodejs could make the first step
This symbol could help with lots of duplicate properties checking, like https://github.com/kysely-org/kysely, https://github.com/knex/knex
It helps the library author to write an adapter for a different SQLite library. Right now, the library is checking the prototype method to determine whether it's node:sqlite, bun:sqlite, or better-sqlite... It was a lot of performance, and it's not stable as the API could change
https://github.com/better-auth/better-auth/blob/375e9f3ced6f3842c133f4cae689cb2a604ba94a/packages/better-auth/src/adapters/kysely-adapter/dialect.ts#L53-L109
I hope there's an easy way. like a symbol tag, to determine the user's land SQLite lib