@m2k-5f/pgtx 2.7.1 → 2.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +48 -31
  2. package/dist/batch.d.ts +4 -1
  3. package/dist/batch.d.ts.map +1 -1
  4. package/dist/batch.js +14 -7
  5. package/dist/clauses/fragment.clause.js +1 -1
  6. package/dist/connection.d.ts +17 -16
  7. package/dist/connection.d.ts.map +1 -1
  8. package/dist/connection.js +182 -166
  9. package/dist/error.d.ts +4 -1
  10. package/dist/error.d.ts.map +1 -1
  11. package/dist/error.js +15 -7
  12. package/dist/pool.d.ts +1 -1
  13. package/dist/pool.d.ts.map +1 -1
  14. package/dist/pool.js +5 -3
  15. package/dist/protocol/connection-request-writer.d.ts +24 -11
  16. package/dist/protocol/connection-request-writer.d.ts.map +1 -1
  17. package/dist/protocol/connection-request-writer.js +217 -47
  18. package/dist/protocol/connection-response-reader.d.ts +5 -15
  19. package/dist/protocol/connection-response-reader.d.ts.map +1 -1
  20. package/dist/protocol/connection-response-reader.js +116 -76
  21. package/dist/protocol/constants.d.ts +37 -30
  22. package/dist/protocol/constants.d.ts.map +1 -1
  23. package/dist/protocol/constants.js +35 -29
  24. package/dist/protocol/socket-authorization.d.ts.map +1 -1
  25. package/dist/protocol/socket-authorization.js +7 -7
  26. package/dist/protocol/socket-connector.d.ts +4 -4
  27. package/dist/protocol/socket-connector.d.ts.map +1 -1
  28. package/dist/protocol/socket-connector.js +2 -2
  29. package/dist/query.d.ts +16 -20
  30. package/dist/query.d.ts.map +1 -1
  31. package/dist/query.js +15 -22
  32. package/dist/queue.d.ts +1 -0
  33. package/dist/queue.d.ts.map +1 -1
  34. package/dist/queue.js +1 -0
  35. package/dist/types.d.ts +3 -1
  36. package/dist/types.d.ts.map +1 -1
  37. package/dist/utils/template-compiler.d.ts +5 -2
  38. package/dist/utils/template-compiler.d.ts.map +1 -1
  39. package/dist/utils/template-compiler.js +4 -1
  40. package/dist/utils.d.ts +8 -0
  41. package/dist/utils.d.ts.map +1 -0
  42. package/dist/utils.js +73 -0
  43. package/package.json +2 -2
package/dist/query.d.ts CHANGED
@@ -1,41 +1,37 @@
1
- import { Future } from "fluent-future";
1
+ import { Future, Resolvers } from "fluent-future";
2
2
  import { ColumnDescription, QueryText, Row, StatementName } from "./types";
3
3
  import { PostgresError } from "./error";
4
4
  export declare abstract class Query {
5
5
  statement: StatementName;
6
6
  text: QueryText;
7
- args: (string | null)[];
7
+ args: unknown[];
8
8
  protected _timer?: NodeJS.Timeout;
9
- constructor(statement: StatementName, text: QueryText, args: (string | null)[], timeout: number);
10
- abstract reject(cause: PostgresError): void;
11
- abstract resolve(...args: any[]): void;
9
+ constructor(statement: StatementName, text: QueryText, args: unknown[], timeout: number);
10
+ abstract error(cause: PostgresError): void;
11
+ abstract complete(...args: any[]): void;
12
12
  }
13
13
  export declare class CollectQuery<T extends Row> extends Query {
14
14
  columns: ColumnDescription[] | null;
15
- future: Future<T[], PostgresError>;
16
- private _resolve;
17
- private _reject;
15
+ resolvers: Resolvers<Future<T[], PostgresError>>;
18
16
  private _rows;
19
- constructor(statement: StatementName, text: QueryText, args: (string | null)[], columns: ColumnDescription[] | null, timeout: number);
17
+ constructor(statement: StatementName, text: QueryText, args: unknown[], columns: ColumnDescription[] | null, timeout: number, resolvers: Resolvers<Future<T[], PostgresError>>);
20
18
  push(value: T): void;
21
- reject(cause: PostgresError): void;
22
- resolve(): void;
19
+ error(cause: PostgresError): void;
20
+ complete(): void;
23
21
  }
24
22
  export declare class ExecuteQuery extends Query {
25
- future: Future<void, PostgresError>;
26
- private _resolve;
27
- private _reject;
28
- constructor(statement: StatementName, text: QueryText, args: (string | null)[], timeout: number);
29
- reject(cause: PostgresError): void;
30
- resolve(): void;
23
+ resolvers: Resolvers<Future<void, PostgresError>>;
24
+ constructor(statement: StatementName, text: QueryText, args: unknown[], timeout: number, resolvers: Resolvers<Future<void, PostgresError>>);
25
+ error(cause: PostgresError): void;
26
+ complete(): void;
31
27
  }
32
28
  export declare class StreamQuery<T> extends Query {
33
29
  controller: ReadableStreamDefaultController<T>;
34
30
  columns: ColumnDescription[] | null;
35
- constructor(statement: StatementName, text: QueryText, args: (string | null)[], controller: ReadableStreamDefaultController<T>, columns: ColumnDescription[] | null, timeout: number);
31
+ constructor(statement: StatementName, text: QueryText, args: unknown[], controller: ReadableStreamDefaultController<T>, columns: ColumnDescription[] | null, timeout: number);
36
32
  push(value: T): void;
37
- reject(cause: PostgresError): void;
38
- resolve(): void;
33
+ error(cause: PostgresError): void;
34
+ complete(): void;
39
35
  }
40
36
  export type PostgresQuery = CollectQuery<any> | StreamQuery<any> | ExecuteQuery;
41
37
  //# sourceMappingURL=query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAa,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtF,OAAO,EAAmB,aAAa,EAAE,MAAM,SAAS,CAAC;AAGzD,8BAAsB,KAAK;IAIZ,SAAS,EAAE,aAAa;IACxB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IALlC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;gBAGtB,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAC9B,OAAO,EAAE,MAAM;IAQnB,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAE3C,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;CACzC;AAGD,qBAAa,YAAY,CAAC,CAAC,SAAS,GAAG,CAAE,SAAQ,KAAK;IAUvC,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI;IATvC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,aAAa,CAAC,CAAA;IACzC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,KAAK,CAAU;gBAGnB,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAChB,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,EAC1C,OAAO,EAAE,MAAM;IAWnB,IAAI,CAAC,KAAK,EAAE,CAAC;IAKb,MAAM,CAAC,KAAK,EAAE,aAAa;IAM3B,OAAO;CAIV;AAGD,qBAAa,YAAa,SAAQ,KAAK;IAC5B,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;IAC1C,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,OAAO,CAAiC;gBAE5C,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EACvB,OAAO,EAAE,MAAM;IASnB,MAAM,CAAC,KAAK,EAAE,aAAa;IAM3B,OAAO;CAIV;AAGD,qBAAa,WAAW,CAAC,CAAC,CAAE,SAAQ,KAAK;IAK1B,UAAU,EAAE,+BAA+B,CAAC,CAAC,CAAC;IAC9C,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI;gBAJ1C,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAChB,UAAU,EAAE,+BAA+B,CAAC,CAAC,CAAC,EAC9C,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,EAC1C,OAAO,EAAE,MAAM;IAMnB,IAAI,CAAC,KAAK,EAAE,CAAC;IAOb,MAAM,CAAC,KAAK,EAAE,aAAa;IAM3B,OAAO;CAMV;AAED,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,YAAY,CAAA"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAmB,aAAa,EAAE,MAAM,SAAS,CAAC;AAGzD,8BAAsB,KAAK;IAIZ,SAAS,EAAE,aAAa;IACxB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,OAAO,EAAE;IAL1B,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;gBAGtB,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,OAAO,EAAE,EACtB,OAAO,EAAE,MAAM;IAQnB,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAE1C,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;CAC1C;AAGD,qBAAa,YAAY,CAAC,CAAC,SAAS,GAAG,CAAE,SAAQ,KAAK;IAOvC,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAEnC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAR3D,OAAO,CAAC,KAAK,CAAU;gBAGnB,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,OAAO,EAAE,EACR,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,EAC1C,OAAO,EAAE,MAAM,EACR,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAM3D,IAAI,CAAC,KAAK,EAAE,CAAC;IAKb,KAAK,CAAC,KAAK,EAAE,aAAa;IAM1B,QAAQ;CAIX;AAGD,qBAAa,YAAa,SAAQ,KAAK;IAMxB,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;gBAJxD,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,OAAO,EAAE,EACf,OAAO,EAAE,MAAM,EACR,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAK5D,KAAK,CAAC,KAAK,EAAE,aAAa;IAM1B,QAAQ;CAIX;AAGD,qBAAa,WAAW,CAAC,CAAC,CAAE,SAAQ,KAAK;IAK1B,UAAU,EAAE,+BAA+B,CAAC,CAAC,CAAC;IAC9C,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI;gBAJ1C,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,OAAO,EAAE,EACR,UAAU,EAAE,+BAA+B,CAAC,CAAC,CAAC,EAC9C,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,EAC1C,OAAO,EAAE,MAAM;IAMnB,IAAI,CAAC,KAAK,EAAE,CAAC;IAOb,KAAK,CAAC,KAAK,EAAE,aAAa;IAM1B,QAAQ;CAMX;AAED,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,YAAY,CAAA"}
package/dist/query.js CHANGED
@@ -1,4 +1,3 @@
1
- import { Future } from "fluent-future";
2
1
  import { ErrQueryTimeout } from "./error";
3
2
  export class Query {
4
3
  constructor(statement, text, args, timeout) {
@@ -6,47 +5,41 @@ export class Query {
6
5
  this.text = text;
7
6
  this.args = args;
8
7
  this._timer = setTimeout(() => {
9
- this.reject(ErrQueryTimeout);
8
+ this.error(ErrQueryTimeout);
10
9
  }, timeout);
11
10
  }
12
11
  }
13
12
  export class CollectQuery extends Query {
14
- constructor(statement, text, args, columns, timeout) {
13
+ constructor(statement, text, args, columns, timeout, resolvers) {
15
14
  super(statement, text, args, timeout);
16
15
  this.columns = columns;
16
+ this.resolvers = resolvers;
17
17
  this._rows = [];
18
- const { future, reject, resolve } = Future.withResolvers();
19
- this.future = future;
20
- this._resolve = resolve;
21
- this._reject = reject;
22
18
  }
23
19
  push(value) {
24
20
  this._rows.push(value);
25
21
  }
26
- reject(cause) {
22
+ error(cause) {
27
23
  clearTimeout(this._timer);
28
- this._reject(cause);
24
+ this.resolvers.reject(cause);
29
25
  }
30
- resolve() {
26
+ complete() {
31
27
  clearTimeout(this._timer);
32
- this._resolve(this._rows);
28
+ this.resolvers.resolve(this._rows);
33
29
  }
34
30
  }
35
31
  export class ExecuteQuery extends Query {
36
- constructor(statement, text, args, timeout) {
32
+ constructor(statement, text, args, timeout, resolvers) {
37
33
  super(statement, text, args, timeout);
38
- const { future, reject, resolve } = Future.withResolvers();
39
- this.future = future;
40
- this._reject = reject;
41
- this._resolve = resolve;
34
+ this.resolvers = resolvers;
42
35
  }
43
- reject(cause) {
36
+ error(cause) {
44
37
  clearTimeout(this._timer);
45
- this._reject(cause);
38
+ this.resolvers.reject(cause);
46
39
  }
47
- resolve() {
40
+ complete() {
48
41
  clearTimeout(this._timer);
49
- this._resolve();
42
+ this.resolvers.resolve();
50
43
  }
51
44
  }
52
45
  export class StreamQuery extends Query {
@@ -61,11 +54,11 @@ export class StreamQuery extends Query {
61
54
  }
62
55
  catch { }
63
56
  }
64
- reject(cause) {
57
+ error(cause) {
65
58
  clearTimeout(this._timer);
66
59
  this.controller.error(cause);
67
60
  }
68
- resolve() {
61
+ complete() {
69
62
  clearTimeout(this._timer);
70
63
  try {
71
64
  this.controller.close();
package/dist/queue.d.ts CHANGED
@@ -9,6 +9,7 @@ export declare class Queue<T> {
9
9
  get size(): number;
10
10
  get hasMore(): boolean;
11
11
  get isFree(): boolean;
12
+ get residual(): T[];
12
13
  }
13
14
  export declare class RingQueue<T> {
14
15
  private readonly _queue;
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,qBAAa,KAAK,CAAC,CAAC;IAChB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAI;IAEpB,IAAI;IAUJ,IAAI,OAAO,MAEV;IAED,IAAI,IAAI,MAA+C;IAGvD,IAAI,KAAK,MAKR;IAGD,IAAI,CAAC,IAAI,EAAE,CAAC;IAIZ,IAAI,IAAI,WAEP;IAGD,IAAI,OAAO,YAEV;IAGD,IAAI,MAAM,YAA+C;CAC5D;AAID,qBAAa,SAAS,CAAC,CAAC;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAK;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAE9B,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,KAAK,CAAI;gBAEL,iBAAiB,SAAQ;IAOrC,IAAI;IAMJ,IAAI,OAAO,MAEV;IAED,IAAI,IAAI,MAEP;IAED,IAAI,KAAK,MAIR;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;IAMZ,IAAI,IAAI,WAEP;IAED,IAAI,OAAO,YAEV;IAED,IAAI,MAAM,YAET;IAED,IAAI,MAAM,YAET;CACJ"}
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,qBAAa,KAAK,CAAC,CAAC;IAChB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAI;IAEpB,IAAI;IAUJ,IAAI,OAAO,MAEV;IAED,IAAI,IAAI,MAA+C;IAGvD,IAAI,KAAK,MAKR;IAGD,IAAI,CAAC,IAAI,EAAE,CAAC;IAIZ,IAAI,IAAI,WAEP;IAGD,IAAI,OAAO,YAEV;IAGD,IAAI,MAAM,YAA+C;IAEzD,IAAI,QAAQ,QAA4C;CAC3D;AAID,qBAAa,SAAS,CAAC,CAAC;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAK;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAE9B,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,KAAK,CAAI;gBAEL,iBAAiB,SAAQ;IAOrC,IAAI;IAMJ,IAAI,OAAO,MAEV;IAED,IAAI,IAAI,MAEP;IAED,IAAI,KAAK,MAIR;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;IAMZ,IAAI,IAAI,WAEP;IAED,IAAI,OAAO,YAEV;IAED,IAAI,MAAM,YAET;IAED,IAAI,MAAM,YAET;CACJ"}
package/dist/queue.js CHANGED
@@ -30,6 +30,7 @@ export class Queue {
30
30
  return this._pointer < this._queue.length;
31
31
  }
32
32
  get isFree() { return this._pointer >= this._queue.length; }
33
+ get residual() { return this._queue.slice(this._pointer); }
33
34
  }
34
35
  export class RingQueue {
35
36
  constructor(requestedCapacity = 20000) {
package/dist/types.d.ts CHANGED
@@ -49,9 +49,11 @@ export type ConnectionConfig = {
49
49
  export type StatementName = Branded<string, 'StatementName'>;
50
50
  export type QueryText = Branded<string, 'QueryText'>;
51
51
  export type ChannelName = Branded<string, "ChannelName">;
52
- export type QueryMeta = {
52
+ export type ParameterDescription = DataTypeOid[];
53
+ export type StatementMeta = {
53
54
  statement: StatementName;
54
55
  columns: ColumnDescription[];
56
+ parameters: ParameterDescription;
55
57
  };
56
58
  export type PoolPartialConfig = ConnectionPartialConfig & {
57
59
  max?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,6 @@
1
- import { CompiledSqlQuery } from "../types";
2
- export declare function compileSqlTemplate(templates: TemplateStringsArray, args: unknown[], argOffset?: number): CompiledSqlQuery;
1
+ import { QueryText } from "../types";
2
+ export declare function compileSqlTemplate(templates: TemplateStringsArray, args: unknown[], argOffset?: number): {
3
+ args: (string | null)[];
4
+ text: QueryText;
5
+ };
3
6
  //# sourceMappingURL=template-compiler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-compiler.d.ts","sourceRoot":"","sources":["../../src/utils/template-compiler.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAIjE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,oBAAoB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,SAAS,SAAI,GAAG,gBAAgB,CAqCpH"}
1
+ {"version":3,"file":"template-compiler.d.ts","sourceRoot":"","sources":["../../src/utils/template-compiler.ts"],"names":[],"mappings":"AACA,OAAO,EAA0C,SAAS,EAAE,MAAM,UAAU,CAAA;AAI5E,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,oBAAoB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,SAAS,SAAI;;UAG5B,SAAS;EAqC9E"}
@@ -27,7 +27,10 @@ export function compileSqlTemplate(templates, args, argOffset = 0) {
27
27
  }
28
28
  });
29
29
  !args.some(value => value instanceof Clause) && cache.set(templates, query.text);
30
- return { args: query.args.map(prepareValue), text: query.text };
30
+ return {
31
+ args: query.args.map(prepareValue),
32
+ text: query.text
33
+ };
31
34
  }
32
35
  const prepareValue = (value) => {
33
36
  if (value === null || value === undefined) {
@@ -0,0 +1,8 @@
1
+ import { QueryText } from "./types";
2
+ export declare function compileSqlTemplate(templates: TemplateStringsArray, args: unknown[], argOffset?: number): {
3
+ args: unknown[];
4
+ text: QueryText;
5
+ };
6
+ export declare function prepareObject(obj: any): string;
7
+ export declare function prepareValue(value: unknown): string | null;
8
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAA0C,SAAS,EAAE,MAAM,SAAS,CAAA;AAI3E,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,oBAAoB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,SAAS,SAAI;;UAGpD,SAAS;EAkCtD;AAGD,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAM9C;AAGD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CA0C1D"}
package/dist/utils.js ADDED
@@ -0,0 +1,73 @@
1
+ import { Clause } from "./clauses/abstract.clause";
2
+ const cache = new WeakMap();
3
+ export function compileSqlTemplate(templates, args, argOffset = 0) {
4
+ const cached = cache.get(templates);
5
+ if (cached)
6
+ return { args, text: cached };
7
+ const templateLength = templates.length;
8
+ const query = {
9
+ text: '',
10
+ args: [],
11
+ };
12
+ templates.forEach((template, index) => {
13
+ query.text += template;
14
+ if (index === templateLength - 1)
15
+ return;
16
+ const value = args[index];
17
+ if (value instanceof Clause) {
18
+ value.mapIntoQuery(query);
19
+ }
20
+ else {
21
+ if (value === undefined) {
22
+ throw new TypeError(`Query parameter at position ${query.args.length + argOffset + 1} is undefined.
23
+ Use null if you want NULL in SQL, or ensure the value is defined.`);
24
+ }
25
+ query.args.push(value);
26
+ query.text += `$${query.args.length + argOffset}`;
27
+ }
28
+ });
29
+ !args.some(value => value instanceof Clause) && cache.set(templates, query.text);
30
+ return query;
31
+ }
32
+ export function prepareObject(obj) {
33
+ if (obj && typeof obj.toPG === "function") {
34
+ return JSON.stringify(obj.toPG());
35
+ }
36
+ return JSON.stringify(obj);
37
+ }
38
+ export function prepareValue(value) {
39
+ if (value === null || value === undefined) {
40
+ return null;
41
+ }
42
+ if (typeof value === "object") {
43
+ if (value instanceof Date) {
44
+ return value.toISOString();
45
+ }
46
+ if (Buffer.isBuffer(value) || value instanceof Uint8Array) {
47
+ return "\\x" + Buffer
48
+ .from(value.buffer, value.byteOffset, value.byteLength)
49
+ .toString("hex");
50
+ }
51
+ if (Array.isArray(value)) {
52
+ const elements = value.map(el => {
53
+ if (el === null || el === undefined)
54
+ return "NULL";
55
+ if (typeof el === "boolean")
56
+ return el ? "true" : "false";
57
+ if (typeof el === "object") {
58
+ const res = prepareValue(el);
59
+ return `"${res?.replace(/"/g, '\\"')}"`;
60
+ }
61
+ if (typeof el === "string") {
62
+ return `"${el
63
+ .replace(/\\/g, "\\\\")
64
+ .replace(/"/g, '\\"')}"`;
65
+ }
66
+ return String(el);
67
+ });
68
+ return `{${elements.join(",")}}`;
69
+ }
70
+ return prepareObject(value);
71
+ }
72
+ return String(value);
73
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m2k-5f/pgtx",
3
- "version": "2.7.1",
3
+ "version": "2.7.3",
4
4
  "type": "module",
5
5
  "description": "Blazing-fast PostgreSQL driver with pipeline support.",
6
6
  "files": [
@@ -11,7 +11,7 @@
11
11
  "build": "tsc",
12
12
  "prepublishOnly": "npm run build",
13
13
  "testGitHub": "node --import tsx --test $(find tests -name '*.test.ts')",
14
- "test": "node --import tsx --test ./tests/*.test.ts",
14
+ "test": "node --env-file=.env --import tsx --test ./tests/*.test.ts",
15
15
  "benchmark": "npx tsx benchmark.ts"
16
16
  },
17
17
  "repository": {