1.2.3 • Published 3 years ago

sureql v1.2.3

Weekly downloads
936
License
ISC
Repository
github
Last release
3 years ago

sureql

Create TypeScript wrappers for PostgreSQL statements with named parameters.

Examples

The CLI (exposed through the usual npx sureql / yarn run sureql workflows) expects 1+ directories of .sql files following the same rules and syntax as yesql and a TypeScript output directory as arguments, and will compile, for example, this:

-- selectUsingTwoDisparateKeys
SELECT mt.blah_id
FROM   public.mytable mt
WHERE  mt.customer_id = :'customerId'
AND    mt.date_of_purchase < :'dateOfPurchase'
;

... into this, a TypeScript wrapper function which takes named parameters validated at compile time!:

import { QueryConfig as PgQuery } from "pg";

import { MissingValueError } from "./common";

export const argumentPattern = /(?<prefix>::?)(?<quote>['"]?)(?<key>[a-zA-Z0-9_]+)\k<quote>/g;
export const rawQuery = `-- selectUsingTwoDisparateKeys
SELECT mt.blah_id
FROM   public.mytable mt
WHERE  mt.customer_id = :'customerId'
AND    mt.date_of_purchase < :'dateOfPurchase'
;
`;

export interface InputParameters {
  customerId: any;
  dateOfPurchase: any;
}

export default function generateQuery(parameters: Readonly<InputParameters>): PgQuery {
  const values: any[] = [];
  const text = rawQuery.replace(
    argumentPattern,
    (_, prefix: string, _quote: string, key: string) => {
      if (prefix === "::") {
        return prefix + key;
      } else if (key in parameters) {
        // for each named value in the query, replace with a
        // positional placeholder and accumulate the value in
        // the values list
        values.push(parameters[key as keyof InputParameters]);
        return `$${values.length}`;
      }

      throw new MissingValueError(key, rawQuery);
    }
  );
  return {
    text,
    values,
    name: "selectUsingTwoDisparateKeys",
  };
}

Releasing sureql

Versioning and tagging is all managed with Semantic Release, so assuming commit messages follow the expected format, this is fairly hands-off.

Legal

sureql is released under the ISC License, the same terms as yesql, which it was originally forked from. See LICENSE.md for the full text.

1.2.3

3 years ago

1.2.2

3 years ago

1.2.1

3 years ago

1.2.0

4 years ago

1.1.0

4 years ago

1.0.2-josh5

4 years ago

1.0.2-josh6

4 years ago

1.1.0-josh2

4 years ago

1.1.0-josh1

4 years ago

1.0.2-josh4

4 years ago

1.0.2-josh3

4 years ago

1.0.2-josh2

4 years ago

1.0.2-josh1

4 years ago

1.0.2-josh

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago