electric-sql/electric
View on GitHubIdea: lib which converts SQL queries to TS Shape Definitions
Open
#2392 opened on Feb 28, 2025
feature requestgood first issuehelp wanted
Description
Tweet: https://x.com/harrysolovay/status/1895146186916450808
Quick and dirty Claude prototype: https://claude.site/artifacts/eff6626c-ef98-4873-a7b0-8636463797c7
The idea is that:
// userShape
select * from users;
// latestProjectsShape
select id, title, status, description, created_at, updated_at
from projects
where created_at > now() - interval '1 month';
Becomes:
/**
* Shape function for userShape
* Original SQL: select * from users;
* @param url Base URL for the ShapeStream
* @returns ShapeStreamOptions
*/
export const userShape = (url: string): ShapeStreamOptions => {
return {
url,
params: {
table: 'users'
},
subscribe: true
}
}
/**
* Shape function for latestProjectsShape
* Original SQL: select id, title, status, description, created_at, updated_at from projects where created_at > now() - interval '1 month';
* @param url Base URL for the ShapeStream
* @returns ShapeStreamOptions
*/
export const latestProjectsShape = (url: string): ShapeStreamOptions => {
return {
url,
params: {
table: 'projects',
where: 'created_at > now() - interval \'1 month\'',
columns: ['id', 'title', 'status', 'description', 'created_at', 'updated_at']
},
subscribe: true
}
}
It could also be used as a TS lib in a build script so you loop over a bunch of e.g. Drizzle or Prisma queries (which are setup to output the raw SQL).
We could package this as a lib & CLI that people could use in their projects.