// 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 = (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] }