Skip to content

Instantly share code, notes, and snippets.

@max10rogerio
Last active June 14, 2021 20:14
Show Gist options
  • Save max10rogerio/f2ead85854d24e0cf1106006c0d2a6e3 to your computer and use it in GitHub Desktop.
Save max10rogerio/f2ead85854d24e0cf1106006c0d2a6e3 to your computer and use it in GitHub Desktop.
Replace object param keys for number ref to use with postgres driver
// Example
// https://www.typescriptlang.org/play?#code/MYewdgziA2CmB0w4EMBOAKAlAKG6SALgATCqzIGwBKsAZrGWMLEQLxHpm0BcRYArgFsARg0y8IBVAEswAczYA+IgAMAOgBINAby4BfFXnCSSZCrAAKaZINiVUAaVgBPNhwDWLiVNlzxRSRl5JVVuHU9nA1x8EwIQAGUARQAZNwAeABUiWAAPSjAAEwgiEGEAK1hgYnZkMGdFdAgAR2hvILkAGiIAB2tbewheDP8AbUDfLv4wdzAQAHcwEYBdJZDtbCJNojhiLgBJQty3AEYNrZ2+WDn4lrdm6DPNmOJYMB9YYvYAeXLKgnhXu8IOheqgbHYGBAcFsSMZiGhUFYwYJPkRlrgYbQQBhnmiIl0AG7IaD8WCrEC0bJvGQfTBEdYwmG40Hg+xuUjkShI1kMJzOdARaGMp5wohkORHdhgK5EGhyACiOW6IL6ENQXQA5HINULhbiuAxXsx2WZKDR6IxmJw6AcCrkcI9GdLrrcpVcbtB4GRutBkFbxbkugbLbAHcLNgjuSj4N1+BAABboIkk0OOmH7Q45ADUWcdegxWzIBH4qDAaOdHq6kb6ECW2Hz2Fk9lofpYUeKDK2YHBbV8juxdtQvA1AEF4gBhDVEAA+RA1ABF5RONY7oNJBNICLwBCIGPXcAB6A9ECJ8cFEWREWjSVAmbogCCb6TgIyEHo1468dtuTubbu2YdBGQHINQ6ftUEHYcx0nMCYTXDctyIY4AAYwIbI8TxcM9bAvMtfTvB8nxfZkawAJi-Gsf3AyC52g0DV3XTdeBQ2Cux7OcgJAtDolFe43EMGEIFgOAqiINMtgAKlY4VuHgzciDHC98ggAB9boGDU5AJUdWhUBAQQxPDIgCGQYQ4EMrY5njQ0LOFWYcPYbh-1gaiGCIYRXGcohuAHPc4MY4hZIC7BDFfEwyAgfhoAIY43DiJJkjSdsGnuLoWRRY4cH1D4ooIUi4oSFIkprFKWjSsiHRiGAEGgEA5HQDUqCXABVZIsmOHUwuq+BavqiLcsyrq4B6uqGqa+JWqyUjOqq4beoagBZEACmkWhnF8YzrLFHLoqIApwDUDViGEMx3ACW4sVQPaZAJNz70kOQIpm4xuvm-rotIzAgA
const createReference = (ref: number): string => `\$${ref}`
const createParameterKey = (key: string): string => `:${key}`
const toSQL = <T extends object = any>(sql: string, parameters: T): [string, unknown[]] => {
let refIndex = 1
let newSql = sql
const entries = Object.entries(params)
const arrParams = []
for(const [key, value] of entries) {
const parameter = createParameterKey(key)
const regex = new RegExp(parameter, 'g')
const reference = createReference(refIndex)
newSql = newSql.replace(regex, reference)
arrParams.push(value)
refIndex++
}
return [newSql, arrParams]
}
@max10rogerio
Copy link
Author

max10rogerio commented Jun 14, 2021

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment