@slonik/sql-tag 48.12.3 → 48.13.0

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 (150) hide show
  1. package/README.md +0 -1
  2. package/dist/Logger.js +2 -2
  3. package/dist/factories/createPrimitiveValueExpressions.d.ts +1 -1
  4. package/dist/factories/createPrimitiveValueExpressions.js +10 -10
  5. package/dist/factories/createSqlTag.d.ts +2 -2
  6. package/dist/factories/createSqlTag.d.ts.map +1 -1
  7. package/dist/factories/createSqlTag.js +16 -16
  8. package/dist/factories/createSqlTag.js.map +1 -1
  9. package/dist/factories/createSqlTag.test/array.test.js +44 -44
  10. package/dist/factories/createSqlTag.test/array.test.js.map +1 -1
  11. package/dist/factories/createSqlTag.test/date.test.js +9 -9
  12. package/dist/factories/createSqlTag.test/date.test.js.map +1 -1
  13. package/dist/factories/createSqlTag.test/identifier.test.js +11 -14
  14. package/dist/factories/createSqlTag.test/identifier.test.js.map +1 -1
  15. package/dist/factories/createSqlTag.test/interval.test.js +10 -10
  16. package/dist/factories/createSqlTag.test/join.test.js +24 -24
  17. package/dist/factories/createSqlTag.test/join.test.js.map +1 -1
  18. package/dist/factories/createSqlTag.test/json.test.js +27 -27
  19. package/dist/factories/createSqlTag.test/json.test.js.map +1 -1
  20. package/dist/factories/createSqlTag.test/jsonb.test.js +27 -27
  21. package/dist/factories/createSqlTag.test/jsonb.test.js.map +1 -1
  22. package/dist/factories/createSqlTag.test/literalValue.test.js +5 -5
  23. package/dist/factories/createSqlTag.test/literalValue.test.js.map +1 -1
  24. package/dist/factories/createSqlTag.test/sql.test.js +37 -37
  25. package/dist/factories/createSqlTag.test/sql.test.js.map +1 -1
  26. package/dist/factories/createSqlTag.test/timestamp.test.js +9 -9
  27. package/dist/factories/createSqlTag.test/timestamp.test.js.map +1 -1
  28. package/dist/factories/createSqlTag.test/type.test.js +4 -4
  29. package/dist/factories/createSqlTag.test/typeAlias.test.js +8 -8
  30. package/dist/factories/createSqlTag.test/unnest.test.js +25 -25
  31. package/dist/factories/createSqlTag.test/unnest.test.js.map +1 -1
  32. package/dist/factories/createSqlTag.test/uuid.test.js +10 -10
  33. package/dist/factories/createSqlTag.test/uuid.test.js.map +1 -1
  34. package/dist/factories/createSqlTokenSqlFragment.d.ts +1 -1
  35. package/dist/factories/createSqlTokenSqlFragment.d.ts.map +1 -1
  36. package/dist/factories/createSqlTokenSqlFragment.js +28 -67
  37. package/dist/factories/createSqlTokenSqlFragment.js.map +1 -1
  38. package/dist/index.d.ts +5 -5
  39. package/dist/index.js +4 -4
  40. package/dist/sqlFragmentFactories/createArraySqlFragment.d.ts +1 -1
  41. package/dist/sqlFragmentFactories/createArraySqlFragment.d.ts.map +1 -1
  42. package/dist/sqlFragmentFactories/createArraySqlFragment.js +15 -15
  43. package/dist/sqlFragmentFactories/createArraySqlFragment.js.map +1 -1
  44. package/dist/sqlFragmentFactories/createBinarySqlFragment.d.ts +1 -1
  45. package/dist/sqlFragmentFactories/createBinarySqlFragment.js +4 -4
  46. package/dist/sqlFragmentFactories/createDateSqlFragment.d.ts +1 -1
  47. package/dist/sqlFragmentFactories/createDateSqlFragment.d.ts.map +1 -1
  48. package/dist/sqlFragmentFactories/createDateSqlFragment.js +5 -5
  49. package/dist/sqlFragmentFactories/createDateSqlFragment.js.map +1 -1
  50. package/dist/sqlFragmentFactories/createFragmentSqlFragment.d.ts +1 -1
  51. package/dist/sqlFragmentFactories/createFragmentSqlFragment.d.ts.map +1 -1
  52. package/dist/sqlFragmentFactories/createFragmentSqlFragment.js +7 -7
  53. package/dist/sqlFragmentFactories/createFragmentSqlFragment.js.map +1 -1
  54. package/dist/sqlFragmentFactories/createIdentifierSqlFragment.d.ts +1 -1
  55. package/dist/sqlFragmentFactories/createIdentifierSqlFragment.d.ts.map +1 -1
  56. package/dist/sqlFragmentFactories/createIdentifierSqlFragment.js +6 -6
  57. package/dist/sqlFragmentFactories/createIdentifierSqlFragment.js.map +1 -1
  58. package/dist/sqlFragmentFactories/createIntervalSqlFragment.d.ts +1 -1
  59. package/dist/sqlFragmentFactories/createIntervalSqlFragment.d.ts.map +1 -1
  60. package/dist/sqlFragmentFactories/createIntervalSqlFragment.js +10 -20
  61. package/dist/sqlFragmentFactories/createIntervalSqlFragment.js.map +1 -1
  62. package/dist/sqlFragmentFactories/createJsonSqlFragment.d.ts +1 -1
  63. package/dist/sqlFragmentFactories/createJsonSqlFragment.d.ts.map +1 -1
  64. package/dist/sqlFragmentFactories/createJsonSqlFragment.js +16 -18
  65. package/dist/sqlFragmentFactories/createJsonSqlFragment.js.map +1 -1
  66. package/dist/sqlFragmentFactories/createListSqlFragment.d.ts +1 -1
  67. package/dist/sqlFragmentFactories/createListSqlFragment.d.ts.map +1 -1
  68. package/dist/sqlFragmentFactories/createListSqlFragment.js +9 -9
  69. package/dist/sqlFragmentFactories/createListSqlFragment.js.map +1 -1
  70. package/dist/sqlFragmentFactories/createQuerySqlFragment.d.ts +1 -1
  71. package/dist/sqlFragmentFactories/createQuerySqlFragment.d.ts.map +1 -1
  72. package/dist/sqlFragmentFactories/createQuerySqlFragment.js +7 -7
  73. package/dist/sqlFragmentFactories/createQuerySqlFragment.js.map +1 -1
  74. package/dist/sqlFragmentFactories/createTimestampSqlFragment.d.ts +1 -1
  75. package/dist/sqlFragmentFactories/createTimestampSqlFragment.d.ts.map +1 -1
  76. package/dist/sqlFragmentFactories/createTimestampSqlFragment.js +5 -7
  77. package/dist/sqlFragmentFactories/createTimestampSqlFragment.js.map +1 -1
  78. package/dist/sqlFragmentFactories/createUnnestSqlFragment.d.ts +1 -1
  79. package/dist/sqlFragmentFactories/createUnnestSqlFragment.d.ts.map +1 -1
  80. package/dist/sqlFragmentFactories/createUnnestSqlFragment.js +19 -20
  81. package/dist/sqlFragmentFactories/createUnnestSqlFragment.js.map +1 -1
  82. package/dist/sqlFragmentFactories/createUuidSqlFragment.d.ts +1 -1
  83. package/dist/sqlFragmentFactories/createUuidSqlFragment.js +5 -5
  84. package/dist/tokens.d.ts.map +1 -1
  85. package/dist/tokens.js +14 -14
  86. package/dist/tokens.js.map +1 -1
  87. package/dist/types.d.ts +5 -5
  88. package/dist/types.d.ts.map +1 -1
  89. package/dist/utilities/countArrayDimensions.js +1 -1
  90. package/dist/utilities/countArrayDimensions.test.js +6 -6
  91. package/dist/utilities/escapeIdentifier.test.js +5 -5
  92. package/dist/utilities/escapeLiteralValue.js +2 -2
  93. package/dist/utilities/escapeLiteralValue.test.js +7 -7
  94. package/dist/utilities/formatSlonikPlaceholder.js +1 -1
  95. package/dist/utilities/isPlainObject.js +1 -1
  96. package/dist/utilities/isPrimitiveValueExpression.js +4 -4
  97. package/dist/utilities/isSqlToken.d.ts +1 -1
  98. package/dist/utilities/isSqlToken.d.ts.map +1 -1
  99. package/dist/utilities/isSqlToken.js +9 -9
  100. package/dist/utilities/isSqlToken.js.map +1 -1
  101. package/dist/utilities/safeStringify.js +3 -3
  102. package/dist/utilities/stripArrayNotation.js +1 -1
  103. package/dist/utilities/stripArrayNotation.test.js +6 -6
  104. package/package.json +35 -39
  105. package/src/Logger.ts +2 -2
  106. package/src/declarations.d.ts +2 -2
  107. package/src/factories/createPrimitiveValueExpressions.ts +11 -11
  108. package/src/factories/createSqlTag.test/array.test.ts +54 -66
  109. package/src/factories/createSqlTag.test/date.test.ts +9 -11
  110. package/src/factories/createSqlTag.test/identifier.test.ts +11 -14
  111. package/src/factories/createSqlTag.test/interval.test.ts +10 -10
  112. package/src/factories/createSqlTag.test/join.test.ts +25 -31
  113. package/src/factories/createSqlTag.test/json.test.ts +27 -30
  114. package/src/factories/createSqlTag.test/jsonb.test.ts +27 -30
  115. package/src/factories/createSqlTag.test/literalValue.test.ts +5 -7
  116. package/src/factories/createSqlTag.test/sql.test.ts +38 -41
  117. package/src/factories/createSqlTag.test/timestamp.test.ts +9 -14
  118. package/src/factories/createSqlTag.test/type.test.ts +4 -4
  119. package/src/factories/createSqlTag.test/typeAlias.test.ts +9 -9
  120. package/src/factories/createSqlTag.test/unnest.test.ts +25 -34
  121. package/src/factories/createSqlTag.test/uuid.test.ts +10 -12
  122. package/src/factories/createSqlTag.ts +26 -47
  123. package/src/factories/createSqlTokenSqlFragment.ts +30 -74
  124. package/src/index.ts +5 -5
  125. package/src/sqlFragmentFactories/createArraySqlFragment.ts +17 -22
  126. package/src/sqlFragmentFactories/createBinarySqlFragment.ts +5 -5
  127. package/src/sqlFragmentFactories/createDateSqlFragment.ts +6 -8
  128. package/src/sqlFragmentFactories/createFragmentSqlFragment.ts +9 -11
  129. package/src/sqlFragmentFactories/createIdentifierSqlFragment.ts +8 -12
  130. package/src/sqlFragmentFactories/createIntervalSqlFragment.ts +11 -23
  131. package/src/sqlFragmentFactories/createJsonSqlFragment.ts +17 -25
  132. package/src/sqlFragmentFactories/createListSqlFragment.ts +10 -14
  133. package/src/sqlFragmentFactories/createQuerySqlFragment.ts +9 -11
  134. package/src/sqlFragmentFactories/createTimestampSqlFragment.ts +6 -11
  135. package/src/sqlFragmentFactories/createUnnestSqlFragment.ts +20 -29
  136. package/src/sqlFragmentFactories/createUuidSqlFragment.ts +6 -6
  137. package/src/tokens.ts +14 -16
  138. package/src/types.ts +65 -87
  139. package/src/utilities/countArrayDimensions.test.ts +6 -6
  140. package/src/utilities/countArrayDimensions.ts +1 -1
  141. package/src/utilities/escapeIdentifier.test.ts +5 -5
  142. package/src/utilities/escapeLiteralValue.test.ts +7 -7
  143. package/src/utilities/escapeLiteralValue.ts +2 -2
  144. package/src/utilities/formatSlonikPlaceholder.ts +1 -1
  145. package/src/utilities/isPlainObject.ts +1 -1
  146. package/src/utilities/isPrimitiveValueExpression.ts +4 -4
  147. package/src/utilities/isSqlToken.ts +10 -12
  148. package/src/utilities/safeStringify.ts +3 -3
  149. package/src/utilities/stripArrayNotation.test.ts +6 -6
  150. package/src/utilities/stripArrayNotation.ts +1 -1
@@ -8,7 +8,7 @@ export const escapeLiteralValue = (subject) => {
8
8
  if (character === "'") {
9
9
  escaped += character + character;
10
10
  }
11
- else if (character === '\\') {
11
+ else if (character === "\\") {
12
12
  escaped += character + character;
13
13
  hasBackslash = true;
14
14
  }
@@ -18,7 +18,7 @@ export const escapeLiteralValue = (subject) => {
18
18
  }
19
19
  escaped += "'";
20
20
  if (hasBackslash === true) {
21
- escaped = 'E' + escaped;
21
+ escaped = "E" + escaped;
22
22
  }
23
23
  return escaped;
24
24
  };
@@ -1,9 +1,9 @@
1
- import { escapeLiteralValue } from './escapeLiteralValue.js';
2
- import test from 'ava';
3
- test('escapes SQL literal value', (t) => {
4
- t.is(escapeLiteralValue('foo'), "'foo'");
5
- t.is(escapeLiteralValue('foo bar'), "'foo bar'");
6
- t.is(escapeLiteralValue('"foo"'), '\'"foo"\'');
7
- t.is(escapeLiteralValue('foo\\bar'), "E'foo\\\\bar'");
1
+ import { escapeLiteralValue } from "./escapeLiteralValue.js";
2
+ import test from "ava";
3
+ test("escapes SQL literal value", (t) => {
4
+ t.is(escapeLiteralValue("foo"), "'foo'");
5
+ t.is(escapeLiteralValue("foo bar"), "'foo bar'");
6
+ t.is(escapeLiteralValue('"foo"'), "'\"foo\"'");
7
+ t.is(escapeLiteralValue("foo\\bar"), "E'foo\\\\bar'");
8
8
  });
9
9
  //# sourceMappingURL=escapeLiteralValue.test.js.map
@@ -11,6 +11,6 @@
11
11
  * This way, we can safely detect placeholders that are part of a nested fragment.
12
12
  */
13
13
  export const formatSlonikPlaceholder = (index) => {
14
- return '$slonik_' + String(index);
14
+ return "$slonik_" + String(index);
15
15
  };
16
16
  //# sourceMappingURL=formatSlonikPlaceholder.js.map
@@ -1,5 +1,5 @@
1
1
  export const isPlainObject = (subject) => {
2
- if (typeof subject !== 'object' || subject === null) {
2
+ if (typeof subject !== "object" || subject === null) {
3
3
  return false;
4
4
  }
5
5
  const prototype = Object.getPrototypeOf(subject);
@@ -1,8 +1,8 @@
1
1
  export const isPrimitiveValueExpression = (maybe) => {
2
- return (typeof maybe === 'string' ||
3
- typeof maybe === 'number' ||
4
- typeof maybe === 'boolean' ||
5
- typeof maybe === 'bigint' ||
2
+ return (typeof maybe === "string" ||
3
+ typeof maybe === "number" ||
4
+ typeof maybe === "boolean" ||
5
+ typeof maybe === "bigint" ||
6
6
  maybe === null);
7
7
  };
8
8
  //# sourceMappingURL=isPrimitiveValueExpression.js.map
@@ -1,3 +1,3 @@
1
- import type { SqlToken as SqlTokenType } from '../types.js';
1
+ import type { SqlToken as SqlTokenType } from "../types.js";
2
2
  export declare const isSqlToken: (subject: unknown) => subject is SqlTokenType;
3
3
  //# sourceMappingURL=isSqlToken.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isSqlToken.d.ts","sourceRoot":"","sources":["../../src/utilities/isSqlToken.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,aAAa,CAAC;AAmC5D,eAAO,MAAM,UAAU,GAAI,SAAS,OAAO,KAAG,OAAO,IAAI,YAmCxD,CAAC"}
1
+ {"version":3,"file":"isSqlToken.d.ts","sourceRoot":"","sources":["../../src/utilities/isSqlToken.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,aAAa,CAAC;AAiC5D,eAAO,MAAM,UAAU,GAAI,SAAS,OAAO,KAAG,OAAO,IAAI,YAmCxD,CAAC"}
@@ -1,6 +1,6 @@
1
- import { ArrayToken, BinaryToken, ComparisonPredicateToken, DateToken, FragmentToken, IdentifierToken, IntervalToken, JsonBinaryToken, JsonToken, ListToken, QueryToken, TimestampToken, UnnestToken, UuidToken, } from '../tokens.js';
2
- import { hasOwnProperty } from './hasOwnProperty.js';
3
- import { UnexpectedStateError } from '@slonik/errors';
1
+ import { ArrayToken, BinaryToken, ComparisonPredicateToken, DateToken, FragmentToken, IdentifierToken, IntervalToken, JsonBinaryToken, JsonToken, ListToken, QueryToken, TimestampToken, UnnestToken, UuidToken, } from "../tokens.js";
2
+ import { hasOwnProperty } from "./hasOwnProperty.js";
3
+ import { UnexpectedStateError } from "@slonik/errors";
4
4
  const Tokens = [
5
5
  ArrayToken,
6
6
  BinaryToken,
@@ -19,24 +19,24 @@ const Tokens = [
19
19
  ];
20
20
  const tokenNames = new Set(Tokens.map((token) => {
21
21
  const tokenTypeName = Symbol.keyFor(token);
22
- if (typeof tokenTypeName !== 'string') {
23
- throw new UnexpectedStateError('Expected token type be a symbol with inferrable key');
22
+ if (typeof tokenTypeName !== "string") {
23
+ throw new UnexpectedStateError("Expected token type be a symbol with inferrable key");
24
24
  }
25
25
  return tokenTypeName;
26
26
  }));
27
27
  export const isSqlToken = (subject) => {
28
- if (typeof subject !== 'object' || subject === null) {
28
+ if (typeof subject !== "object" || subject === null) {
29
29
  return false;
30
30
  }
31
- if (!hasOwnProperty(subject, 'type')) {
31
+ if (!hasOwnProperty(subject, "type")) {
32
32
  return false;
33
33
  }
34
34
  const tokenType = subject.type;
35
- if (typeof tokenType !== 'symbol') {
35
+ if (typeof tokenType !== "symbol") {
36
36
  return false;
37
37
  }
38
38
  const tokenTypeName = Symbol.keyFor(tokenType);
39
- if (typeof tokenTypeName !== 'string') {
39
+ if (typeof tokenTypeName !== "string") {
40
40
  return false;
41
41
  }
42
42
  // It is worth clarifying that we don't care if symbols match.
@@ -1 +1 @@
1
- {"version":3,"file":"isSqlToken.js","sourceRoot":"","sources":["../../src/utilities/isSqlToken.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,WAAW,EACX,wBAAwB,EACxB,SAAS,EACT,aAAa,EACb,eAAe,EACf,aAAa,EACb,eAAe,EACf,SAAS,EACT,SAAS,EACT,UAAU,EACV,cAAc,EACd,WAAW,EACX,SAAS,GACV,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,MAAM,GAAG;IACb,UAAU;IACV,WAAW;IACX,wBAAwB;IACxB,SAAS;IACT,aAAa;IACb,eAAe;IACf,aAAa;IACb,eAAe;IACf,SAAS;IACT,SAAS;IACT,UAAU;IACV,cAAc;IACd,WAAW;IACX,SAAS;CACD,CAAC;AAEX,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;IACnB,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE3C,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,oBAAoB,CAC5B,qDAAqD,CACtD,CAAC;IACJ,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAgB,EAA2B,EAAE;IACtE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/B,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAE/C,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8DAA8D;IAC9D,4BAA4B;IAC5B,+BAA+B;IAC/B,8BAA8B;IAC9B,EAAE;IACF,gDAAgD;IAChD,8CAA8C;IAC9C,sDAAsD;IACtD,EAAE;IACF,yDAAyD;IACzD,oDAAoD;IACpD,6CAA6C;IAC7C,kCAAkC;IAClC,OAAO,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACvC,CAAC,CAAC"}
1
+ {"version":3,"file":"isSqlToken.js","sourceRoot":"","sources":["../../src/utilities/isSqlToken.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,WAAW,EACX,wBAAwB,EACxB,SAAS,EACT,aAAa,EACb,eAAe,EACf,aAAa,EACb,eAAe,EACf,SAAS,EACT,SAAS,EACT,UAAU,EACV,cAAc,EACd,WAAW,EACX,SAAS,GACV,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,MAAM,GAAG;IACb,UAAU;IACV,WAAW;IACX,wBAAwB;IACxB,SAAS;IACT,aAAa;IACb,eAAe;IACf,aAAa;IACb,eAAe;IACf,SAAS;IACT,SAAS;IACT,UAAU;IACV,cAAc;IACd,WAAW;IACX,SAAS;CACD,CAAC;AAEX,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;IACnB,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE3C,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,oBAAoB,CAAC,qDAAqD,CAAC,CAAC;IACxF,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAgB,EAA2B,EAAE;IACtE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/B,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAE/C,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8DAA8D;IAC9D,4BAA4B;IAC5B,+BAA+B;IAC/B,8BAA8B;IAC9B,EAAE;IACF,gDAAgD;IAChD,8CAA8C;IAC9C,sDAAsD;IACtD,EAAE;IACF,yDAAyD;IACzD,oDAAoD;IACpD,6CAA6C;IAC7C,kCAAkC;IAClC,OAAO,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACvC,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
- import { configure } from 'safe-stable-stringify';
1
+ import { configure } from "safe-stable-stringify";
2
2
  const stringify = configure({
3
3
  bigint: true,
4
- circularValue: '[Circular]',
4
+ circularValue: "[Circular]",
5
5
  strict: true,
6
6
  });
7
7
  export const safeStringify = (subject) => {
@@ -13,7 +13,7 @@ export const safeStringify = (subject) => {
13
13
  }
14
14
  const result = stringify(subject);
15
15
  if (result === undefined) {
16
- throw new Error('Expected result to be string');
16
+ throw new Error("Expected result to be string");
17
17
  }
18
18
  return result;
19
19
  };
@@ -1,6 +1,6 @@
1
1
  export const stripArrayNotation = (identifierName) => {
2
2
  let tail = identifierName.trim();
3
- while (tail.endsWith('[]')) {
3
+ while (tail.endsWith("[]")) {
4
4
  tail = tail.trim().slice(0, -2);
5
5
  }
6
6
  return tail;
@@ -1,8 +1,8 @@
1
- import { stripArrayNotation } from './stripArrayNotation.js';
2
- import test from 'ava';
3
- test('strips array notation', (t) => {
4
- t.is(stripArrayNotation('foo'), 'foo');
5
- t.is(stripArrayNotation('foo[]'), 'foo');
6
- t.is(stripArrayNotation('foo[][]'), 'foo');
1
+ import { stripArrayNotation } from "./stripArrayNotation.js";
2
+ import test from "ava";
3
+ test("strips array notation", (t) => {
4
+ t.is(stripArrayNotation("foo"), "foo");
5
+ t.is(stripArrayNotation("foo[]"), "foo");
6
+ t.is(stripArrayNotation("foo[][]"), "foo");
7
7
  });
8
8
  //# sourceMappingURL=stripArrayNotation.test.js.map
package/package.json CHANGED
@@ -1,67 +1,63 @@
1
1
  {
2
+ "name": "@slonik/sql-tag",
3
+ "version": "48.13.0",
4
+ "description": "A Node.js PostgreSQL client with strict types, detailed logging and assertions.",
5
+ "keywords": [
6
+ "postgresql",
7
+ "promise",
8
+ "types"
9
+ ],
10
+ "license": "BSD-3-Clause",
2
11
  "author": {
3
- "email": "gajus@gajus.com",
4
12
  "name": "Gajus Kuizinas",
13
+ "email": "gajus@gajus.com",
5
14
  "url": "http://gajus.com"
6
15
  },
7
- "ava": {
8
- "extensions": [
9
- "ts"
10
- ],
11
- "files": [
12
- "src/**/*.test.ts"
13
- ],
14
- "nodeArguments": [
15
- "--import=tsimp"
16
- ]
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/gajus/slonik"
17
19
  },
20
+ "files": [
21
+ "./src",
22
+ "./dist"
23
+ ],
24
+ "type": "module",
25
+ "main": "./dist/index.js",
26
+ "types": "./dist/index.d.ts",
18
27
  "dependencies": {
19
- "@slonik/errors": "^48.12.3",
20
- "@slonik/types": "^48.12.3",
28
+ "@slonik/errors": "^48.13.0",
29
+ "@slonik/types": "^48.13.0",
21
30
  "roarr": "^7.21.4",
22
31
  "safe-stable-stringify": "^2.5.0",
23
32
  "serialize-error": "^12.0.0",
24
33
  "zod": "^4.3.6"
25
34
  },
26
- "description": "A Node.js PostgreSQL client with strict types, detailed logging and assertions.",
27
35
  "devDependencies": {
28
36
  "@standard-schema/spec": "^1.0.0",
29
37
  "@types/node": "^24.10.13",
30
38
  "ava": "^6.4.1",
31
39
  "cspell": "^9.6.4",
32
- "eslint": "9.39.2",
33
40
  "tsimp": "^2.0.12",
34
- "typescript": "^5.9.3",
35
- "typescript-eslint": "^8.55.0",
36
- "@slonik/eslint-config": "^48.12.3"
41
+ "typescript": "^5.9.3"
42
+ },
43
+ "ava": {
44
+ "extensions": [
45
+ "ts"
46
+ ],
47
+ "files": [
48
+ "src/**/*.test.ts"
49
+ ],
50
+ "nodeArguments": [
51
+ "--import=tsimp"
52
+ ]
37
53
  },
38
54
  "engines": {
39
55
  "node": ">=24"
40
56
  },
41
- "files": [
42
- "./src",
43
- "./dist"
44
- ],
45
- "keywords": [
46
- "postgresql",
47
- "promise",
48
- "types"
49
- ],
50
- "license": "BSD-3-Clause",
51
- "main": "./dist/index.js",
52
- "name": "@slonik/sql-tag",
53
- "repository": {
54
- "type": "git",
55
- "url": "https://github.com/gajus/slonik"
56
- },
57
- "type": "module",
58
- "types": "./dist/index.d.ts",
59
- "version": "48.12.3",
60
57
  "scripts": {
61
58
  "build": "rm -fr ./dist && tsc --project ./tsconfig.json",
62
- "lint": "npm run lint:cspell && npm run lint:eslint && npm run lint:tsc",
59
+ "lint": "npm run lint:cspell && npm run lint:tsc",
63
60
  "lint:cspell": "cspell . --no-progress --gitignore",
64
- "lint:eslint": "eslint --cache ./src",
65
61
  "lint:tsc": "tsc --noEmit",
66
62
  "test": "ava --verbose --serial"
67
63
  }
package/src/Logger.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { Roarr } from 'roarr';
1
+ import { Roarr } from "roarr";
2
2
 
3
3
  export const Logger = Roarr.child({
4
- package: '@slonik/sql-tag',
4
+ package: "@slonik/sql-tag",
5
5
  });
@@ -1,5 +1,5 @@
1
- declare module 'pg-cursor';
2
- declare module 'pg/lib/type-overrides' {
1
+ declare module "pg-cursor";
2
+ declare module "pg/lib/type-overrides" {
3
3
  const TypeOverrides: new () => {
4
4
  setTypeParser: (type: string, parser: (value: string) => unknown) => void;
5
5
  };
@@ -1,10 +1,10 @@
1
- import { Logger } from '../Logger.js';
2
- import type { PrimitiveValueExpression } from '../types.js';
3
- import { safeStringify } from '../utilities/safeStringify.js';
4
- import { UnexpectedStateError } from '@slonik/errors';
1
+ import { Logger } from "../Logger.js";
2
+ import type { PrimitiveValueExpression } from "../types.js";
3
+ import { safeStringify } from "../utilities/safeStringify.js";
4
+ import { UnexpectedStateError } from "@slonik/errors";
5
5
 
6
6
  const log = Logger.child({
7
- namespace: 'createPrimitiveValueExpressions',
7
+ namespace: "createPrimitiveValueExpressions",
8
8
  });
9
9
 
10
10
  export const createPrimitiveValueExpressions = (
@@ -19,10 +19,10 @@ export const createPrimitiveValueExpressions = (
19
19
  if (
20
20
  Array.isArray(value) ||
21
21
  Buffer.isBuffer(value) ||
22
- typeof value === 'string' ||
23
- typeof value === 'number' ||
24
- typeof value === 'boolean' ||
25
- typeof value === 'bigint' ||
22
+ typeof value === "string" ||
23
+ typeof value === "number" ||
24
+ typeof value === "boolean" ||
25
+ typeof value === "bigint" ||
26
26
  value === null
27
27
  ) {
28
28
  primitiveValueExpressions.push(value);
@@ -32,10 +32,10 @@ export const createPrimitiveValueExpressions = (
32
32
  value: JSON.parse(safeStringify(value)),
33
33
  values: JSON.parse(safeStringify(values)),
34
34
  },
35
- 'unexpected value expression',
35
+ "unexpected value expression",
36
36
  );
37
37
 
38
- throw new UnexpectedStateError('Unexpected value expression.');
38
+ throw new UnexpectedStateError("Unexpected value expression.");
39
39
  }
40
40
  }
41
41
 
@@ -1,12 +1,12 @@
1
- import { FragmentToken } from '../../tokens.js';
2
- import type { ArraySqlToken, SqlFragmentToken } from '../../types.js';
3
- import { createSqlTag } from '../createSqlTag.js';
4
- import test from 'ava';
1
+ import { FragmentToken } from "../../tokens.js";
2
+ import type { ArraySqlToken, SqlFragmentToken } from "../../types.js";
3
+ import { createSqlTag } from "../createSqlTag.js";
4
+ import test from "ava";
5
5
 
6
6
  const sql = createSqlTag();
7
7
 
8
- test('binds an empty array', (t) => {
9
- const query = sql.fragment`SELECT ${sql.array([], 'int4')}`;
8
+ test("binds an empty array", (t) => {
9
+ const query = sql.fragment`SELECT ${sql.array([], "int4")}`;
10
10
 
11
11
  t.deepEqual(query, {
12
12
  sql: 'SELECT $slonik_1::"int4"[]',
@@ -15,11 +15,11 @@ test('binds an empty array', (t) => {
15
15
  });
16
16
  });
17
17
 
18
- test('binds bigint', (t) => {
18
+ test("binds bigint", (t) => {
19
19
  const query = sql.fragment`SELECT ${sql.array(
20
20
  // eslint-disable-next-line unicorn/numeric-separators-style
21
21
  [9007199254740999n],
22
- 'int8',
22
+ "int8",
23
23
  )}`;
24
24
 
25
25
  t.deepEqual(query, {
@@ -30,8 +30,8 @@ test('binds bigint', (t) => {
30
30
  });
31
31
  });
32
32
 
33
- test('binds an array with multiple values', (t) => {
34
- const query = sql.fragment`SELECT ${sql.array([1, 2, 3], 'int4')}`;
33
+ test("binds an array with multiple values", (t) => {
34
+ const query = sql.fragment`SELECT ${sql.array([1, 2, 3], "int4")}`;
35
35
 
36
36
  t.deepEqual(query, {
37
37
  sql: 'SELECT $slonik_1::"int4"[]',
@@ -40,24 +40,18 @@ test('binds an array with multiple values', (t) => {
40
40
  });
41
41
  });
42
42
 
43
- test('binds an array with bytea values', (t) => {
44
- const query = sql.fragment`SELECT ${sql.array(
45
- [Buffer.from('foo')],
46
- 'bytea',
47
- )}`;
43
+ test("binds an array with bytea values", (t) => {
44
+ const query = sql.fragment`SELECT ${sql.array([Buffer.from("foo")], "bytea")}`;
48
45
 
49
46
  t.deepEqual(query, {
50
47
  sql: 'SELECT $slonik_1::"bytea"[]',
51
48
  type: FragmentToken,
52
- values: [[Buffer.from('foo')]],
49
+ values: [[Buffer.from("foo")]],
53
50
  });
54
51
  });
55
52
 
56
- test('offsets positional parameter indexes', (t) => {
57
- const query = sql.fragment`SELECT ${1}, ${sql.array(
58
- [1, 2, 3],
59
- 'int4',
60
- )}, ${3}`;
53
+ test("offsets positional parameter indexes", (t) => {
54
+ const query = sql.fragment`SELECT ${1}, ${sql.array([1, 2, 3], "int4")}, ${3}`;
61
55
 
62
56
  t.deepEqual(query, {
63
57
  sql: 'SELECT $slonik_1, $slonik_2::"int4"[], $slonik_3',
@@ -66,40 +60,34 @@ test('offsets positional parameter indexes', (t) => {
66
60
  });
67
61
  });
68
62
 
69
- test('binds a SQL token', (t) => {
70
- const query = sql.fragment`SELECT ${sql.array(
71
- [1, 2, 3],
72
- sql.fragment`int[]`,
73
- )}`;
63
+ test("binds a SQL token", (t) => {
64
+ const query = sql.fragment`SELECT ${sql.array([1, 2, 3], sql.fragment`int[]`)}`;
74
65
 
75
66
  t.deepEqual(query, {
76
- sql: 'SELECT $slonik_1::int[]',
67
+ sql: "SELECT $slonik_1::int[]",
77
68
  type: FragmentToken,
78
69
  values: [[1, 2, 3]],
79
70
  });
80
71
  });
81
72
 
82
- test('throws if array member is not a primitive value expression', (t) => {
73
+ test("throws if array member is not a primitive value expression", (t) => {
83
74
  const error = t.throws(() => {
84
75
  sql.fragment`SELECT ${sql.array(
85
76
  [
86
77
  // @ts-expect-error - intentional
87
78
  () => {},
88
79
  ],
89
- 'int',
80
+ "int",
90
81
  )}`;
91
82
  });
92
83
 
93
- t.is(
94
- error?.message,
95
- 'Invalid array member type. Must be a primitive value expression.',
96
- );
84
+ t.is(error?.message, "Invalid array member type. Must be a primitive value expression.");
97
85
  });
98
86
 
99
87
  test('throws if memberType is not a string or SqlToken of different type than "SLONIK_TOKEN_FRAGMENT"', (t) => {
100
88
  const error = t.throws(() => {
101
89
  // @ts-expect-error - intentional
102
- sql.fragment`SELECT ${sql.array([1, 2, 3], sql.identifier(['int']))}`;
90
+ sql.fragment`SELECT ${sql.array([1, 2, 3], sql.identifier(["int"]))}`;
103
91
  });
104
92
 
105
93
  t.is(
@@ -115,11 +103,11 @@ function assertType<T>(_value: T): void {
115
103
  }
116
104
 
117
105
  test('produces ArraySqlToken<"int4"> for integer arrays', (t) => {
118
- const arrayToken = sql.array([1, 2, 3], 'int4');
106
+ const arrayToken = sql.array([1, 2, 3], "int4");
119
107
 
120
- assertType<ArraySqlToken<'int4'>>(arrayToken);
108
+ assertType<ArraySqlToken<"int4">>(arrayToken);
121
109
 
122
- t.is(arrayToken.memberType, 'int4');
110
+ t.is(arrayToken.memberType, "int4");
123
111
  t.deepEqual(arrayToken.values, [1, 2, 3]);
124
112
 
125
113
  const query = sql.fragment`SELECT ${arrayToken}`;
@@ -131,46 +119,46 @@ test('produces ArraySqlToken<"int4"> for integer arrays', (t) => {
131
119
  });
132
120
 
133
121
  test('produces ArraySqlToken<"text"> for text arrays', (t) => {
134
- const arrayToken = sql.array(['a', 'b', 'c'], 'text');
122
+ const arrayToken = sql.array(["a", "b", "c"], "text");
135
123
 
136
- assertType<ArraySqlToken<'text'>>(arrayToken);
124
+ assertType<ArraySqlToken<"text">>(arrayToken);
137
125
 
138
- t.is(arrayToken.memberType, 'text');
139
- t.deepEqual(arrayToken.values, ['a', 'b', 'c']);
126
+ t.is(arrayToken.memberType, "text");
127
+ t.deepEqual(arrayToken.values, ["a", "b", "c"]);
140
128
 
141
129
  const query = sql.fragment`SELECT ${arrayToken}`;
142
130
 
143
131
  t.deepEqual(query, {
144
132
  sql: 'SELECT $slonik_1::"text"[]',
145
133
  type: FragmentToken,
146
- values: [['a', 'b', 'c']],
134
+ values: [["a", "b", "c"]],
147
135
  });
148
136
  });
149
137
 
150
- test('type inference with different PostgreSQL types', (t) => {
151
- const int8Array = sql.array([1n, 2n], 'int8');
152
- assertType<ArraySqlToken<'int8'>>(int8Array);
153
- t.is(int8Array.memberType, 'int8');
138
+ test("type inference with different PostgreSQL types", (t) => {
139
+ const int8Array = sql.array([1n, 2n], "int8");
140
+ assertType<ArraySqlToken<"int8">>(int8Array);
141
+ t.is(int8Array.memberType, "int8");
154
142
 
155
- const float8Array = sql.array([1.1, 2.2, 3.3], 'float8');
156
- assertType<ArraySqlToken<'float8'>>(float8Array);
157
- t.is(float8Array.memberType, 'float8');
143
+ const float8Array = sql.array([1.1, 2.2, 3.3], "float8");
144
+ assertType<ArraySqlToken<"float8">>(float8Array);
145
+ t.is(float8Array.memberType, "float8");
158
146
 
159
- const boolArray = sql.array([true, false, true], 'bool');
160
- assertType<ArraySqlToken<'bool'>>(boolArray);
161
- t.is(boolArray.memberType, 'bool');
147
+ const boolArray = sql.array([true, false, true], "bool");
148
+ assertType<ArraySqlToken<"bool">>(boolArray);
149
+ t.is(boolArray.memberType, "bool");
162
150
 
163
- const uuidArray = sql.array(['550e8400-e29b-41d4-a716-446655440000'], 'uuid');
164
- assertType<ArraySqlToken<'uuid'>>(uuidArray);
165
- t.is(uuidArray.memberType, 'uuid');
151
+ const uuidArray = sql.array(["550e8400-e29b-41d4-a716-446655440000"], "uuid");
152
+ assertType<ArraySqlToken<"uuid">>(uuidArray);
153
+ t.is(uuidArray.memberType, "uuid");
166
154
 
167
- const timestampArray = sql.array([new Date().toISOString()], 'timestamp');
168
- assertType<ArraySqlToken<'timestamp'>>(timestampArray);
169
- t.is(timestampArray.memberType, 'timestamp');
155
+ const timestampArray = sql.array([new Date().toISOString()], "timestamp");
156
+ assertType<ArraySqlToken<"timestamp">>(timestampArray);
157
+ t.is(timestampArray.memberType, "timestamp");
170
158
 
171
- const jsonbArray = sql.array([JSON.stringify({ key: 'value' })], 'jsonb');
172
- assertType<ArraySqlToken<'jsonb'>>(jsonbArray);
173
- t.is(jsonbArray.memberType, 'jsonb');
159
+ const jsonbArray = sql.array([JSON.stringify({ key: "value" })], "jsonb");
160
+ assertType<ArraySqlToken<"jsonb">>(jsonbArray);
161
+ t.is(jsonbArray.memberType, "jsonb");
174
162
 
175
163
  const query = sql.fragment`
176
164
  SELECT
@@ -184,16 +172,16 @@ test('type inference with different PostgreSQL types', (t) => {
184
172
  t.truthy(query.sql.includes('::"bool"[]'));
185
173
  });
186
174
 
187
- test('backward compatibility - existing code without explicit types still works', (t) => {
188
- const arrayToken = sql.array([1, 2, 3], 'int4');
175
+ test("backward compatibility - existing code without explicit types still works", (t) => {
176
+ const arrayToken = sql.array([1, 2, 3], "int4");
189
177
 
190
178
  const token: ArraySqlToken = arrayToken;
191
179
 
192
- t.is(token.memberType, 'int4');
180
+ t.is(token.memberType, "int4");
193
181
 
194
182
  const fragmentArray = sql.array([1, 2, 3], sql.fragment`int[]`);
195
183
 
196
- t.is(typeof fragmentArray.memberType, 'object');
184
+ t.is(typeof fragmentArray.memberType, "object");
197
185
  t.is((fragmentArray.memberType as SqlFragmentToken).type, FragmentToken);
198
186
 
199
187
  t.deepEqual(fragmentArray.values, [1, 2, 3]);
@@ -201,7 +189,7 @@ test('backward compatibility - existing code without explicit types still works'
201
189
  const query = sql.fragment`SELECT ${fragmentArray}`;
202
190
 
203
191
  t.deepEqual(query, {
204
- sql: 'SELECT $slonik_1::int[]',
192
+ sql: "SELECT $slonik_1::int[]",
205
193
  type: FragmentToken,
206
194
  values: [[1, 2, 3]],
207
195
  });
@@ -1,26 +1,24 @@
1
- import { FragmentToken } from '../../tokens.js';
2
- import { createSqlTag } from '../createSqlTag.js';
3
- import test from 'ava';
1
+ import { FragmentToken } from "../../tokens.js";
2
+ import { createSqlTag } from "../createSqlTag.js";
3
+ import test from "ava";
4
4
 
5
5
  const sql = createSqlTag();
6
6
 
7
- test('binds a date', (t) => {
8
- const query = sql.fragment`SELECT ${sql.date(
9
- new Date('2022-08-19T03:27:24.951Z'),
10
- )}`;
7
+ test("binds a date", (t) => {
8
+ const query = sql.fragment`SELECT ${sql.date(new Date("2022-08-19T03:27:24.951Z"))}`;
11
9
 
12
10
  t.deepEqual(query, {
13
- sql: 'SELECT $slonik_1::date',
11
+ sql: "SELECT $slonik_1::date",
14
12
  type: FragmentToken,
15
- values: ['2022-08-19'],
13
+ values: ["2022-08-19"],
16
14
  });
17
15
  });
18
16
 
19
- test('throws if not instance of Date', (t) => {
17
+ test("throws if not instance of Date", (t) => {
20
18
  const error = t.throws(() => {
21
19
  // @ts-expect-error - intentional
22
20
  sql.fragment`SELECT ${sql.date(1)}`;
23
21
  });
24
22
 
25
- t.is(error?.message, 'Date parameter value must be an instance of Date.');
23
+ t.is(error?.message, "Date parameter value must be an instance of Date.");
26
24
  });