@slonik/sql-tag 40.2.2
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.
- package/README.md +2 -0
- package/dist/Logger.d.ts +2 -0
- package/dist/Logger.d.ts.map +1 -0
- package/dist/Logger.js +8 -0
- package/dist/Logger.js.map +1 -0
- package/dist/factories/createPrimitiveValueExpressions.d.ts +3 -0
- package/dist/factories/createPrimitiveValueExpressions.d.ts.map +1 -0
- package/dist/factories/createPrimitiveValueExpressions.js +33 -0
- package/dist/factories/createPrimitiveValueExpressions.js.map +1 -0
- package/dist/factories/createSqlTag.d.ts +38 -0
- package/dist/factories/createSqlTag.d.ts.map +1 -0
- package/dist/factories/createSqlTag.js +170 -0
- package/dist/factories/createSqlTag.js.map +1 -0
- package/dist/factories/createSqlTag.test/array.test.d.ts +2 -0
- package/dist/factories/createSqlTag.test/array.test.d.ts.map +1 -0
- package/dist/factories/createSqlTag.test/array.test.js +76 -0
- package/dist/factories/createSqlTag.test/array.test.js.map +1 -0
- package/dist/factories/createSqlTag.test/date.test.d.ts +2 -0
- package/dist/factories/createSqlTag.test/date.test.d.ts.map +1 -0
- package/dist/factories/createSqlTag.test/date.test.js +25 -0
- package/dist/factories/createSqlTag.test/date.test.js.map +1 -0
- package/dist/factories/createSqlTag.test/identifier.test.d.ts +2 -0
- package/dist/factories/createSqlTag.test/identifier.test.d.ts.map +1 -0
- package/dist/factories/createSqlTag.test/identifier.test.js +38 -0
- package/dist/factories/createSqlTag.test/identifier.test.js.map +1 -0
- package/dist/factories/createSqlTag.test/interval.test.d.ts +2 -0
- package/dist/factories/createSqlTag.test/interval.test.d.ts.map +1 -0
- package/dist/factories/createSqlTag.test/interval.test.js +43 -0
- package/dist/factories/createSqlTag.test/interval.test.js.map +1 -0
- package/dist/factories/createSqlTag.test/join.test.d.ts +2 -0
- package/dist/factories/createSqlTag.test/join.test.d.ts.map +1 -0
- package/dist/factories/createSqlTag.test/join.test.js +87 -0
- package/dist/factories/createSqlTag.test/join.test.js.map +1 -0
- package/dist/factories/createSqlTag.test/json.test.d.ts +2 -0
- package/dist/factories/createSqlTag.test/json.test.d.ts.map +1 -0
- package/dist/factories/createSqlTag.test/json.test.js +88 -0
- package/dist/factories/createSqlTag.test/json.test.js.map +1 -0
- package/dist/factories/createSqlTag.test/jsonb.test.d.ts +2 -0
- package/dist/factories/createSqlTag.test/jsonb.test.d.ts.map +1 -0
- package/dist/factories/createSqlTag.test/jsonb.test.js +88 -0
- package/dist/factories/createSqlTag.test/jsonb.test.js.map +1 -0
- package/dist/factories/createSqlTag.test/literalValue.test.d.ts +2 -0
- package/dist/factories/createSqlTag.test/literalValue.test.d.ts.map +1 -0
- package/dist/factories/createSqlTag.test/literalValue.test.js +18 -0
- package/dist/factories/createSqlTag.test/literalValue.test.js.map +1 -0
- package/dist/factories/createSqlTag.test/sql.test.d.ts +2 -0
- package/dist/factories/createSqlTag.test/sql.test.d.ts.map +1 -0
- package/dist/factories/createSqlTag.test/sql.test.js +138 -0
- package/dist/factories/createSqlTag.test/sql.test.js.map +1 -0
- package/dist/factories/createSqlTag.test/timestamp.test.d.ts +2 -0
- package/dist/factories/createSqlTag.test/timestamp.test.d.ts.map +1 -0
- package/dist/factories/createSqlTag.test/timestamp.test.js +25 -0
- package/dist/factories/createSqlTag.test/timestamp.test.js.map +1 -0
- package/dist/factories/createSqlTag.test/type.test.d.ts +2 -0
- package/dist/factories/createSqlTag.test/type.test.d.ts.map +1 -0
- package/dist/factories/createSqlTag.test/type.test.js +19 -0
- package/dist/factories/createSqlTag.test/type.test.js.map +1 -0
- package/dist/factories/createSqlTag.test/typeAlias.test.d.ts +2 -0
- package/dist/factories/createSqlTag.test/typeAlias.test.d.ts.map +1 -0
- package/dist/factories/createSqlTag.test/typeAlias.test.js +47 -0
- package/dist/factories/createSqlTag.test/typeAlias.test.js.map +1 -0
- package/dist/factories/createSqlTag.test/unnest.test.d.ts +2 -0
- package/dist/factories/createSqlTag.test/unnest.test.d.ts.map +1 -0
- package/dist/factories/createSqlTag.test/unnest.test.js +127 -0
- package/dist/factories/createSqlTag.test/unnest.test.js.map +1 -0
- package/dist/factories/createSqlTokenSqlFragment.d.ts +3 -0
- package/dist/factories/createSqlTokenSqlFragment.d.ts.map +1 -0
- package/dist/factories/createSqlTokenSqlFragment.js +57 -0
- package/dist/factories/createSqlTokenSqlFragment.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/regexRules/slonikPlaceholderRegexRule.d.ts +2 -0
- package/dist/regexRules/slonikPlaceholderRegexRule.d.ts.map +1 -0
- package/dist/regexRules/slonikPlaceholderRegexRule.js +5 -0
- package/dist/regexRules/slonikPlaceholderRegexRule.js.map +1 -0
- package/dist/sqlFragmentFactories/createArraySqlFragment.d.ts +3 -0
- package/dist/sqlFragmentFactories/createArraySqlFragment.d.ts.map +1 -0
- package/dist/sqlFragmentFactories/createArraySqlFragment.js +48 -0
- package/dist/sqlFragmentFactories/createArraySqlFragment.js.map +1 -0
- package/dist/sqlFragmentFactories/createBinarySqlFragment.d.ts +3 -0
- package/dist/sqlFragmentFactories/createBinarySqlFragment.d.ts.map +1 -0
- package/dist/sqlFragmentFactories/createBinarySqlFragment.js +16 -0
- package/dist/sqlFragmentFactories/createBinarySqlFragment.js.map +1 -0
- package/dist/sqlFragmentFactories/createDateSqlFragment.d.ts +3 -0
- package/dist/sqlFragmentFactories/createDateSqlFragment.d.ts.map +1 -0
- package/dist/sqlFragmentFactories/createDateSqlFragment.js +16 -0
- package/dist/sqlFragmentFactories/createDateSqlFragment.js.map +1 -0
- package/dist/sqlFragmentFactories/createFragmentSqlFragment.d.ts +3 -0
- package/dist/sqlFragmentFactories/createFragmentSqlFragment.d.ts.map +1 -0
- package/dist/sqlFragmentFactories/createFragmentSqlFragment.js +34 -0
- package/dist/sqlFragmentFactories/createFragmentSqlFragment.js.map +1 -0
- package/dist/sqlFragmentFactories/createIdentifierSqlFragment.d.ts +3 -0
- package/dist/sqlFragmentFactories/createIdentifierSqlFragment.d.ts.map +1 -0
- package/dist/sqlFragmentFactories/createIdentifierSqlFragment.js +21 -0
- package/dist/sqlFragmentFactories/createIdentifierSqlFragment.js.map +1 -0
- package/dist/sqlFragmentFactories/createIntervalSqlFragment.d.ts +3 -0
- package/dist/sqlFragmentFactories/createIntervalSqlFragment.d.ts.map +1 -0
- package/dist/sqlFragmentFactories/createIntervalSqlFragment.js +57 -0
- package/dist/sqlFragmentFactories/createIntervalSqlFragment.js.map +1 -0
- package/dist/sqlFragmentFactories/createJsonSqlFragment.d.ts +3 -0
- package/dist/sqlFragmentFactories/createJsonSqlFragment.d.ts.map +1 -0
- package/dist/sqlFragmentFactories/createJsonSqlFragment.js +49 -0
- package/dist/sqlFragmentFactories/createJsonSqlFragment.js.map +1 -0
- package/dist/sqlFragmentFactories/createListSqlFragment.d.ts +3 -0
- package/dist/sqlFragmentFactories/createListSqlFragment.d.ts.map +1 -0
- package/dist/sqlFragmentFactories/createListSqlFragment.js +38 -0
- package/dist/sqlFragmentFactories/createListSqlFragment.js.map +1 -0
- package/dist/sqlFragmentFactories/createQuerySqlFragment.d.ts +3 -0
- package/dist/sqlFragmentFactories/createQuerySqlFragment.d.ts.map +1 -0
- package/dist/sqlFragmentFactories/createQuerySqlFragment.js +34 -0
- package/dist/sqlFragmentFactories/createQuerySqlFragment.js.map +1 -0
- package/dist/sqlFragmentFactories/createTimestampSqlFragment.d.ts +3 -0
- package/dist/sqlFragmentFactories/createTimestampSqlFragment.d.ts.map +1 -0
- package/dist/sqlFragmentFactories/createTimestampSqlFragment.js +18 -0
- package/dist/sqlFragmentFactories/createTimestampSqlFragment.js.map +1 -0
- package/dist/sqlFragmentFactories/createUnnestSqlFragment.d.ts +3 -0
- package/dist/sqlFragmentFactories/createUnnestSqlFragment.d.ts.map +1 -0
- package/dist/sqlFragmentFactories/createUnnestSqlFragment.js +81 -0
- package/dist/sqlFragmentFactories/createUnnestSqlFragment.js.map +1 -0
- package/dist/tokens.d.ts +14 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +17 -0
- package/dist/tokens.js.map +1 -0
- package/dist/types.d.ts +99 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utilities/countArrayDimensions.d.ts +2 -0
- package/dist/utilities/countArrayDimensions.d.ts.map +1 -0
- package/dist/utilities/countArrayDimensions.js +14 -0
- package/dist/utilities/countArrayDimensions.js.map +1 -0
- package/dist/utilities/countArrayDimensions.test.d.ts +2 -0
- package/dist/utilities/countArrayDimensions.test.d.ts.map +1 -0
- package/dist/utilities/countArrayDimensions.test.js +13 -0
- package/dist/utilities/countArrayDimensions.test.js.map +1 -0
- package/dist/utilities/escapeIdentifier.d.ts +5 -0
- package/dist/utilities/escapeIdentifier.d.ts.map +1 -0
- package/dist/utilities/escapeIdentifier.js +12 -0
- package/dist/utilities/escapeIdentifier.js.map +1 -0
- package/dist/utilities/escapeIdentifier.test.d.ts +2 -0
- package/dist/utilities/escapeIdentifier.test.d.ts.map +1 -0
- package/dist/utilities/escapeIdentifier.test.js +13 -0
- package/dist/utilities/escapeIdentifier.test.js.map +1 -0
- package/dist/utilities/escapeLiteralValue.d.ts +5 -0
- package/dist/utilities/escapeLiteralValue.d.ts.map +1 -0
- package/dist/utilities/escapeLiteralValue.js +29 -0
- package/dist/utilities/escapeLiteralValue.js.map +1 -0
- package/dist/utilities/escapeLiteralValue.test.d.ts +2 -0
- package/dist/utilities/escapeLiteralValue.test.d.ts.map +1 -0
- package/dist/utilities/escapeLiteralValue.test.js +14 -0
- package/dist/utilities/escapeLiteralValue.test.js.map +1 -0
- package/dist/utilities/formatSlonikPlaceholder.d.ts +14 -0
- package/dist/utilities/formatSlonikPlaceholder.d.ts.map +1 -0
- package/dist/utilities/formatSlonikPlaceholder.js +20 -0
- package/dist/utilities/formatSlonikPlaceholder.js.map +1 -0
- package/dist/utilities/hasOwnProperty.d.ts +6 -0
- package/dist/utilities/hasOwnProperty.d.ts.map +1 -0
- package/dist/utilities/hasOwnProperty.js +12 -0
- package/dist/utilities/hasOwnProperty.js.map +1 -0
- package/dist/utilities/isPlainObject.d.ts +2 -0
- package/dist/utilities/isPlainObject.d.ts.map +1 -0
- package/dist/utilities/isPlainObject.js +16 -0
- package/dist/utilities/isPlainObject.js.map +1 -0
- package/dist/utilities/isPrimitiveValueExpression.d.ts +2 -0
- package/dist/utilities/isPrimitiveValueExpression.d.ts.map +1 -0
- package/dist/utilities/isPrimitiveValueExpression.js +12 -0
- package/dist/utilities/isPrimitiveValueExpression.js.map +1 -0
- package/dist/utilities/isSqlToken.d.ts +3 -0
- package/dist/utilities/isSqlToken.d.ts.map +1 -0
- package/dist/utilities/isSqlToken.js +35 -0
- package/dist/utilities/isSqlToken.js.map +1 -0
- package/dist/utilities/safeStringify.d.ts +2 -0
- package/dist/utilities/safeStringify.d.ts.map +1 -0
- package/dist/utilities/safeStringify.js +18 -0
- package/dist/utilities/safeStringify.js.map +1 -0
- package/dist/utilities/stripArrayNotation.d.ts +2 -0
- package/dist/utilities/stripArrayNotation.d.ts.map +1 -0
- package/dist/utilities/stripArrayNotation.js +12 -0
- package/dist/utilities/stripArrayNotation.js.map +1 -0
- package/dist/utilities/stripArrayNotation.test.d.ts +2 -0
- package/dist/utilities/stripArrayNotation.test.d.ts.map +1 -0
- package/dist/utilities/stripArrayNotation.test.js +13 -0
- package/dist/utilities/stripArrayNotation.test.js.map +1 -0
- package/package.json +88 -0
- package/src/Logger.ts +5 -0
- package/src/declarations.d.ts +8 -0
- package/src/factories/createPrimitiveValueExpressions.ts +43 -0
- package/src/factories/createSqlTag.test/array.test.ts +107 -0
- package/src/factories/createSqlTag.test/date.test.ts +26 -0
- package/src/factories/createSqlTag.test/identifier.test.ts +39 -0
- package/src/factories/createSqlTag.test/interval.test.ts +44 -0
- package/src/factories/createSqlTag.test/join.test.ts +127 -0
- package/src/factories/createSqlTag.test/json.test.ts +106 -0
- package/src/factories/createSqlTag.test/jsonb.test.ts +106 -0
- package/src/factories/createSqlTag.test/literalValue.test.ts +17 -0
- package/src/factories/createSqlTag.test/sql.test.ts +165 -0
- package/src/factories/createSqlTag.test/timestamp.test.ts +29 -0
- package/src/factories/createSqlTag.test/type.test.ts +17 -0
- package/src/factories/createSqlTag.test/typeAlias.test.ts +53 -0
- package/src/factories/createSqlTag.test/unnest.test.ts +173 -0
- package/src/factories/createSqlTag.ts +256 -0
- package/src/factories/createSqlTokenSqlFragment.ts +60 -0
- package/src/index.ts +2 -0
- package/src/regexRules/slonikPlaceholderRegexRule.ts +1 -0
- package/src/sqlFragmentFactories/createArraySqlFragment.ts +67 -0
- package/src/sqlFragmentFactories/createBinarySqlFragment.ts +17 -0
- package/src/sqlFragmentFactories/createDateSqlFragment.ts +19 -0
- package/src/sqlFragmentFactories/createFragmentSqlFragment.ts +48 -0
- package/src/sqlFragmentFactories/createIdentifierSqlFragment.ts +24 -0
- package/src/sqlFragmentFactories/createIntervalSqlFragment.ts +71 -0
- package/src/sqlFragmentFactories/createJsonSqlFragment.ts +66 -0
- package/src/sqlFragmentFactories/createListSqlFragment.ts +48 -0
- package/src/sqlFragmentFactories/createQuerySqlFragment.ts +48 -0
- package/src/sqlFragmentFactories/createTimestampSqlFragment.ts +22 -0
- package/src/sqlFragmentFactories/createUnnestSqlFragment.ts +118 -0
- package/src/tokens.ts +14 -0
- package/src/types.ts +189 -0
- package/src/utilities/countArrayDimensions.test.ts +8 -0
- package/src/utilities/countArrayDimensions.ts +12 -0
- package/src/utilities/escapeIdentifier.test.ts +8 -0
- package/src/utilities/escapeIdentifier.ts +8 -0
- package/src/utilities/escapeLiteralValue.test.ts +9 -0
- package/src/utilities/escapeLiteralValue.ts +26 -0
- package/src/utilities/formatSlonikPlaceholder.ts +15 -0
- package/src/utilities/hasOwnProperty.ts +10 -0
- package/src/utilities/isPlainObject.ts +14 -0
- package/src/utilities/isPrimitiveValueExpression.ts +11 -0
- package/src/utilities/isSqlToken.ts +52 -0
- package/src/utilities/safeStringify.ts +25 -0
- package/src/utilities/stripArrayNotation.test.ts +8 -0
- package/src/utilities/stripArrayNotation.ts +9 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hasOwnProperty.d.ts","sourceRoot":"","sources":["../../src/utilities/hasOwnProperty.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,cAAc,gDACjB,CAAC,YACC,CAAC,qCAGZ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hasOwnProperty = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* A stricter type guard.
|
|
6
|
+
* @see https://tsplay.dev/WK8zGw
|
|
7
|
+
*/
|
|
8
|
+
const hasOwnProperty = (object, property) => {
|
|
9
|
+
return Object.prototype.hasOwnProperty.call(object, property);
|
|
10
|
+
};
|
|
11
|
+
exports.hasOwnProperty = hasOwnProperty;
|
|
12
|
+
//# sourceMappingURL=hasOwnProperty.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hasOwnProperty.js","sourceRoot":"","sources":["../../src/utilities/hasOwnProperty.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACI,MAAM,cAAc,GAAG,CAC5B,MAAS,EACT,QAAW,EACuB,EAAE;IACpC,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAChE,CAAC,CAAC;AALW,QAAA,cAAc,kBAKzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isPlainObject.d.ts","sourceRoot":"","sources":["../../src/utilities/isPlainObject.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,YAAa,OAAO,YAa7C,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isPlainObject = void 0;
|
|
4
|
+
const isPlainObject = (subject) => {
|
|
5
|
+
if (typeof subject !== 'object' || subject === null) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
const prototype = Object.getPrototypeOf(subject);
|
|
9
|
+
return ((prototype === null ||
|
|
10
|
+
prototype === Object.prototype ||
|
|
11
|
+
Object.getPrototypeOf(prototype) === null) &&
|
|
12
|
+
!(Symbol.toStringTag in subject) &&
|
|
13
|
+
!(Symbol.iterator in subject));
|
|
14
|
+
};
|
|
15
|
+
exports.isPlainObject = isPlainObject;
|
|
16
|
+
//# sourceMappingURL=isPlainObject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isPlainObject.js","sourceRoot":"","sources":["../../src/utilities/isPlainObject.ts"],"names":[],"mappings":";;;AAAO,MAAM,aAAa,GAAG,CAAC,OAAgB,EAAE,EAAE;IAChD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,CACL,CAAC,SAAS,KAAK,IAAI;QACjB,SAAS,KAAK,MAAM,CAAC,SAAS;QAC9B,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;QAC5C,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,OAAO,CAAC;QAChC,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,CAC9B,CAAC;AACJ,CAAC,CAAC;AAbW,QAAA,aAAa,iBAaxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isPrimitiveValueExpression.d.ts","sourceRoot":"","sources":["../../src/utilities/isPrimitiveValueExpression.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B,UAC9B,OAAO,uDASf,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isPrimitiveValueExpression = void 0;
|
|
4
|
+
const isPrimitiveValueExpression = (maybe) => {
|
|
5
|
+
return (typeof maybe === 'string' ||
|
|
6
|
+
typeof maybe === 'number' ||
|
|
7
|
+
typeof maybe === 'boolean' ||
|
|
8
|
+
typeof maybe === 'bigint' ||
|
|
9
|
+
maybe === null);
|
|
10
|
+
};
|
|
11
|
+
exports.isPrimitiveValueExpression = isPrimitiveValueExpression;
|
|
12
|
+
//# sourceMappingURL=isPrimitiveValueExpression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isPrimitiveValueExpression.js","sourceRoot":"","sources":["../../src/utilities/isPrimitiveValueExpression.ts"],"names":[],"mappings":";;;AAAO,MAAM,0BAA0B,GAAG,CACxC,KAAc,EACsC,EAAE;IACtD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS;QAC1B,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI,CACf,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,0BAA0B,8BAUrC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isSqlToken.d.ts","sourceRoot":"","sources":["../../src/utilities/isSqlToken.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,QAAQ,IAAI,YAAY,EAAE,MAAM,UAAU,CAAC;AAoBzD,eAAO,MAAM,UAAU,YAAa,OAAO,4BAgB1C,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isSqlToken = void 0;
|
|
4
|
+
const tokens_1 = require("../tokens");
|
|
5
|
+
const hasOwnProperty_1 = require("./hasOwnProperty");
|
|
6
|
+
const errors_1 = require("@slonik/errors");
|
|
7
|
+
const Tokens = [
|
|
8
|
+
tokens_1.ArrayToken,
|
|
9
|
+
tokens_1.BinaryToken,
|
|
10
|
+
tokens_1.ComparisonPredicateToken,
|
|
11
|
+
tokens_1.DateToken,
|
|
12
|
+
tokens_1.FragmentToken,
|
|
13
|
+
tokens_1.IdentifierToken,
|
|
14
|
+
tokens_1.IntervalToken,
|
|
15
|
+
tokens_1.JsonBinaryToken,
|
|
16
|
+
tokens_1.JsonToken,
|
|
17
|
+
tokens_1.ListToken,
|
|
18
|
+
tokens_1.QueryToken,
|
|
19
|
+
tokens_1.TimestampToken,
|
|
20
|
+
tokens_1.UnnestToken,
|
|
21
|
+
];
|
|
22
|
+
const isSqlToken = (subject) => {
|
|
23
|
+
if (typeof subject !== 'object' || subject === null) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
if (!(0, hasOwnProperty_1.hasOwnProperty)(subject, 'type')) {
|
|
27
|
+
throw new errors_1.UnexpectedStateError('Expected token to include "type" property.');
|
|
28
|
+
}
|
|
29
|
+
if (typeof subject.type !== 'string') {
|
|
30
|
+
throw new errors_1.UnexpectedStateError('Expected type to be string.');
|
|
31
|
+
}
|
|
32
|
+
return Tokens.includes(subject.type);
|
|
33
|
+
};
|
|
34
|
+
exports.isSqlToken = isSqlToken;
|
|
35
|
+
//# sourceMappingURL=isSqlToken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isSqlToken.js","sourceRoot":"","sources":["../../src/utilities/isSqlToken.ts"],"names":[],"mappings":";;;AAAA,sCAcmB;AAEnB,qDAAkD;AAClD,2CAAsD;AAEtD,MAAM,MAAM,GAAG;IACb,mBAAU;IACV,oBAAW;IACX,iCAAwB;IACxB,kBAAS;IACT,sBAAa;IACb,wBAAe;IACf,sBAAa;IACb,wBAAe;IACf,kBAAS;IACT,kBAAS;IACT,mBAAU;IACV,uBAAc;IACd,oBAAW;CACH,CAAC;AAEJ,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,IAAA,+BAAc,EAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,6BAAoB,CAC5B,4CAA4C,CAC7C,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,6BAAoB,CAAC,6BAA6B,CAAC,CAAC;IAChE,CAAC;IAED,OAAQ,MAA4B,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC,CAAC;AAhBW,QAAA,UAAU,cAgBrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safeStringify.d.ts","sourceRoot":"","sources":["../../src/utilities/safeStringify.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,aAAa,YACf,OAAO,aAEZ,MAAM,MAAM,GAAG,MAAM,CAAC,GACtB,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,GAC1C,IAAI,GACJ,SAAS,UACL,MAAM,GAAG,MAAM,KACtB,MAQF,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.safeStringify = void 0;
|
|
4
|
+
const safe_stable_stringify_1 = require("safe-stable-stringify");
|
|
5
|
+
const stringify = (0, safe_stable_stringify_1.configure)({
|
|
6
|
+
bigint: true,
|
|
7
|
+
circularValue: '[Circular]',
|
|
8
|
+
strict: true,
|
|
9
|
+
});
|
|
10
|
+
const safeStringify = (subject, replacer, space) => {
|
|
11
|
+
const result = stringify(subject, replacer, space);
|
|
12
|
+
if (result === undefined) {
|
|
13
|
+
throw new Error('Expected result to be string');
|
|
14
|
+
}
|
|
15
|
+
return result;
|
|
16
|
+
};
|
|
17
|
+
exports.safeStringify = safeStringify;
|
|
18
|
+
//# sourceMappingURL=safeStringify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safeStringify.js","sourceRoot":"","sources":["../../src/utilities/safeStringify.ts"],"names":[],"mappings":";;;AAAA,iEAAkD;AAElD,MAAM,SAAS,GAAG,IAAA,iCAAS,EAAC;IAC1B,MAAM,EAAE,IAAI;IACZ,aAAa,EAAE,YAAY;IAC3B,MAAM,EAAE,IAAI;CACb,CAAC,CAAC;AAEI,MAAM,aAAa,GAAG,CAC3B,OAAgB,EAChB,QAIa,EACb,KAAuB,EACf,EAAE;IACV,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAEnD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAhBW,QAAA,aAAa,iBAgBxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripArrayNotation.d.ts","sourceRoot":"","sources":["../../src/utilities/stripArrayNotation.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,mBAAoB,MAAM,KAAG,MAQ3D,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.stripArrayNotation = void 0;
|
|
4
|
+
const stripArrayNotation = (identifierName) => {
|
|
5
|
+
let tail = identifierName.trim();
|
|
6
|
+
while (tail.endsWith('[]')) {
|
|
7
|
+
tail = tail.trim().slice(0, -2);
|
|
8
|
+
}
|
|
9
|
+
return tail;
|
|
10
|
+
};
|
|
11
|
+
exports.stripArrayNotation = stripArrayNotation;
|
|
12
|
+
//# sourceMappingURL=stripArrayNotation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripArrayNotation.js","sourceRoot":"","sources":["../../src/utilities/stripArrayNotation.ts"],"names":[],"mappings":";;;AAAO,MAAM,kBAAkB,GAAG,CAAC,cAAsB,EAAU,EAAE;IACnE,IAAI,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC;IAEjC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AARW,QAAA,kBAAkB,sBAQ7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripArrayNotation.test.d.ts","sourceRoot":"","sources":["../../src/utilities/stripArrayNotation.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const stripArrayNotation_1 = require("./stripArrayNotation");
|
|
7
|
+
const ava_1 = __importDefault(require("ava"));
|
|
8
|
+
(0, ava_1.default)('strips array notation', (t) => {
|
|
9
|
+
t.is((0, stripArrayNotation_1.stripArrayNotation)('foo'), 'foo');
|
|
10
|
+
t.is((0, stripArrayNotation_1.stripArrayNotation)('foo[]'), 'foo');
|
|
11
|
+
t.is((0, stripArrayNotation_1.stripArrayNotation)('foo[][]'), 'foo');
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=stripArrayNotation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripArrayNotation.test.js","sourceRoot":"","sources":["../../src/utilities/stripArrayNotation.test.ts"],"names":[],"mappings":";;;;;AAAA,6DAA0D;AAC1D,8CAAuB;AAEvB,IAAA,aAAI,EAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE;IAClC,CAAC,CAAC,EAAE,CAAC,IAAA,uCAAkB,EAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,EAAE,CAAC,IAAA,uCAAkB,EAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC,CAAC,EAAE,CAAC,IAAA,uCAAkB,EAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"author": {
|
|
3
|
+
"email": "gajus@gajus.com",
|
|
4
|
+
"name": "Gajus Kuizinas",
|
|
5
|
+
"url": "http://gajus.com"
|
|
6
|
+
},
|
|
7
|
+
"ava": {
|
|
8
|
+
"extensions": [
|
|
9
|
+
"ts"
|
|
10
|
+
],
|
|
11
|
+
"files": [
|
|
12
|
+
"src/**/*.test.ts"
|
|
13
|
+
],
|
|
14
|
+
"require": [
|
|
15
|
+
"ts-node/register/transpile-only"
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@slonik/errors": "^40.2.2",
|
|
20
|
+
"roarr": "^7.21.1",
|
|
21
|
+
"safe-stable-stringify": "^2.4.3",
|
|
22
|
+
"serialize-error": "^8.0.0"
|
|
23
|
+
},
|
|
24
|
+
"description": "A Node.js PostgreSQL client with strict types, detailed logging and assertions.",
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@types/node": "^18.15.3",
|
|
27
|
+
"ava": "^5.3.1",
|
|
28
|
+
"cspell": "^8.6.0",
|
|
29
|
+
"eslint": "^8.57.0",
|
|
30
|
+
"eslint-config-canonical": "^42.8.1",
|
|
31
|
+
"nyc": "^15.1.0",
|
|
32
|
+
"ts-node": "^10.9.1",
|
|
33
|
+
"typescript": "^5.4.3",
|
|
34
|
+
"zod": "^3.22.4"
|
|
35
|
+
},
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=18"
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"./src",
|
|
41
|
+
"./dist"
|
|
42
|
+
],
|
|
43
|
+
"keywords": [
|
|
44
|
+
"postgresql",
|
|
45
|
+
"promise",
|
|
46
|
+
"types"
|
|
47
|
+
],
|
|
48
|
+
"license": "BSD-3-Clause",
|
|
49
|
+
"main": "./dist/index.js",
|
|
50
|
+
"name": "@slonik/sql-tag",
|
|
51
|
+
"nyc": {
|
|
52
|
+
"all": true,
|
|
53
|
+
"exclude": [
|
|
54
|
+
"src/bin",
|
|
55
|
+
"src/queries/*.ts",
|
|
56
|
+
"**/*.d.ts"
|
|
57
|
+
],
|
|
58
|
+
"include": [
|
|
59
|
+
"src/**/*.ts"
|
|
60
|
+
],
|
|
61
|
+
"reporter": [
|
|
62
|
+
"html",
|
|
63
|
+
"text-summary"
|
|
64
|
+
],
|
|
65
|
+
"require": [
|
|
66
|
+
"ts-node/register/transpile-only"
|
|
67
|
+
],
|
|
68
|
+
"silent": true,
|
|
69
|
+
"sourceMap": false
|
|
70
|
+
},
|
|
71
|
+
"peerDependencies": {
|
|
72
|
+
"zod": "^3"
|
|
73
|
+
},
|
|
74
|
+
"repository": {
|
|
75
|
+
"type": "git",
|
|
76
|
+
"url": "https://github.com/gajus/slonik"
|
|
77
|
+
},
|
|
78
|
+
"scripts": {
|
|
79
|
+
"build": "rm -fr ./dist && tsc --project ./tsconfig.json",
|
|
80
|
+
"lint": "npm run lint:cspell && npm run lint:eslint && npm run lint:tsc",
|
|
81
|
+
"lint:cspell": "cspell . --no-progress --gitignore",
|
|
82
|
+
"lint:eslint": "eslint --cache ./src",
|
|
83
|
+
"lint:tsc": "tsc --noEmit",
|
|
84
|
+
"test": "nyc ava --verbose --serial"
|
|
85
|
+
},
|
|
86
|
+
"types": "./dist/index.d.ts",
|
|
87
|
+
"version": "40.2.2"
|
|
88
|
+
}
|
package/src/Logger.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Logger } from '../Logger';
|
|
2
|
+
import { type PrimitiveValueExpression } from '../types';
|
|
3
|
+
import { safeStringify } from '../utilities/safeStringify';
|
|
4
|
+
import { UnexpectedStateError } from '@slonik/errors';
|
|
5
|
+
|
|
6
|
+
const log = Logger.child({
|
|
7
|
+
namespace: 'createPrimitiveValueExpressions',
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
export const createPrimitiveValueExpressions = (
|
|
11
|
+
values: readonly unknown[],
|
|
12
|
+
): readonly PrimitiveValueExpression[] => {
|
|
13
|
+
const primitiveValueExpressions: Array<
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
15
|
+
any[] | Buffer | boolean | number | string | bigint | null
|
|
16
|
+
> = [];
|
|
17
|
+
|
|
18
|
+
for (const value of values) {
|
|
19
|
+
if (
|
|
20
|
+
Array.isArray(value) ||
|
|
21
|
+
Buffer.isBuffer(value) ||
|
|
22
|
+
typeof value === 'string' ||
|
|
23
|
+
typeof value === 'number' ||
|
|
24
|
+
typeof value === 'boolean' ||
|
|
25
|
+
typeof value === 'bigint' ||
|
|
26
|
+
value === null
|
|
27
|
+
) {
|
|
28
|
+
primitiveValueExpressions.push(value);
|
|
29
|
+
} else {
|
|
30
|
+
log.warn(
|
|
31
|
+
{
|
|
32
|
+
value: JSON.parse(safeStringify(value)),
|
|
33
|
+
values: JSON.parse(safeStringify(values)),
|
|
34
|
+
},
|
|
35
|
+
'unexpected value expression',
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
throw new UnexpectedStateError('Unexpected value expression.');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return primitiveValueExpressions;
|
|
43
|
+
};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { FragmentToken } from '../../tokens';
|
|
2
|
+
import { createSqlTag } from '../createSqlTag';
|
|
3
|
+
import test from 'ava';
|
|
4
|
+
|
|
5
|
+
const sql = createSqlTag();
|
|
6
|
+
|
|
7
|
+
test('binds an empty array', (t) => {
|
|
8
|
+
const query = sql.fragment`SELECT ${sql.array([], 'int4')}`;
|
|
9
|
+
|
|
10
|
+
t.deepEqual(query, {
|
|
11
|
+
sql: 'SELECT $slonik_1::"int4"[]',
|
|
12
|
+
type: FragmentToken,
|
|
13
|
+
values: [[]],
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test('binds bigint', (t) => {
|
|
18
|
+
const query = sql.fragment`SELECT ${sql.array(
|
|
19
|
+
// eslint-disable-next-line unicorn/numeric-separators-style
|
|
20
|
+
[9007199254740999n],
|
|
21
|
+
'int8',
|
|
22
|
+
)}`;
|
|
23
|
+
|
|
24
|
+
t.deepEqual(query, {
|
|
25
|
+
sql: 'SELECT $slonik_1::"int8"[]',
|
|
26
|
+
type: FragmentToken,
|
|
27
|
+
// eslint-disable-next-line unicorn/numeric-separators-style
|
|
28
|
+
values: [[BigInt(9007199254740999n)]],
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test('binds an array with multiple values', (t) => {
|
|
33
|
+
const query = sql.fragment`SELECT ${sql.array([1, 2, 3], 'int4')}`;
|
|
34
|
+
|
|
35
|
+
t.deepEqual(query, {
|
|
36
|
+
sql: 'SELECT $slonik_1::"int4"[]',
|
|
37
|
+
type: FragmentToken,
|
|
38
|
+
values: [[1, 2, 3]],
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
test('binds an array with bytea values', (t) => {
|
|
43
|
+
const query = sql.fragment`SELECT ${sql.array(
|
|
44
|
+
[Buffer.from('foo')],
|
|
45
|
+
'bytea',
|
|
46
|
+
)}`;
|
|
47
|
+
|
|
48
|
+
t.deepEqual(query, {
|
|
49
|
+
sql: 'SELECT $slonik_1::"bytea"[]',
|
|
50
|
+
type: FragmentToken,
|
|
51
|
+
values: [[Buffer.from('foo')]],
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
test('offsets positional parameter indexes', (t) => {
|
|
56
|
+
const query = sql.fragment`SELECT ${1}, ${sql.array(
|
|
57
|
+
[1, 2, 3],
|
|
58
|
+
'int4',
|
|
59
|
+
)}, ${3}`;
|
|
60
|
+
|
|
61
|
+
t.deepEqual(query, {
|
|
62
|
+
sql: 'SELECT $slonik_1, $slonik_2::"int4"[], $slonik_3',
|
|
63
|
+
type: FragmentToken,
|
|
64
|
+
values: [1, [1, 2, 3], 3],
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test('binds a SQL token', (t) => {
|
|
69
|
+
const query = sql.fragment`SELECT ${sql.array(
|
|
70
|
+
[1, 2, 3],
|
|
71
|
+
sql.fragment`int[]`,
|
|
72
|
+
)}`;
|
|
73
|
+
|
|
74
|
+
t.deepEqual(query, {
|
|
75
|
+
sql: 'SELECT $slonik_1::int[]',
|
|
76
|
+
type: FragmentToken,
|
|
77
|
+
values: [[1, 2, 3]],
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
test('throws if array member is not a primitive value expression', (t) => {
|
|
82
|
+
const error = t.throws(() => {
|
|
83
|
+
sql.fragment`SELECT ${sql.array(
|
|
84
|
+
[
|
|
85
|
+
// @ts-expect-error - intentional
|
|
86
|
+
() => {},
|
|
87
|
+
],
|
|
88
|
+
'int',
|
|
89
|
+
)}`;
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
t.is(
|
|
93
|
+
error?.message,
|
|
94
|
+
'Invalid array member type. Must be a primitive value expression.',
|
|
95
|
+
);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
test('throws if memberType is not a string or SqlToken of different type than "SLONIK_TOKEN_FRAGMENT"', (t) => {
|
|
99
|
+
const error = t.throws(() => {
|
|
100
|
+
sql.fragment`SELECT ${sql.array([1, 2, 3], sql.identifier(['int']))}`;
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
t.is(
|
|
104
|
+
error?.message,
|
|
105
|
+
'Unsupported `memberType`. `memberType` must be a string or SqlToken of "SLONIK_TOKEN_FRAGMENT" type.',
|
|
106
|
+
);
|
|
107
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { FragmentToken } from '../../tokens';
|
|
2
|
+
import { createSqlTag } from '../createSqlTag';
|
|
3
|
+
import test from 'ava';
|
|
4
|
+
|
|
5
|
+
const sql = createSqlTag();
|
|
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
|
+
)}`;
|
|
11
|
+
|
|
12
|
+
t.deepEqual(query, {
|
|
13
|
+
sql: 'SELECT $slonik_1::date',
|
|
14
|
+
type: FragmentToken,
|
|
15
|
+
values: ['2022-08-19'],
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test('throws if not instance of Date', (t) => {
|
|
20
|
+
const error = t.throws(() => {
|
|
21
|
+
// @ts-expect-error - intentional
|
|
22
|
+
sql.fragment`SELECT ${sql.date(1)}`;
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
t.is(error?.message, 'Date parameter value must be an instance of Date.');
|
|
26
|
+
});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { FragmentToken } from '../../tokens';
|
|
2
|
+
import { createSqlTag } from '../createSqlTag';
|
|
3
|
+
import test from 'ava';
|
|
4
|
+
|
|
5
|
+
const sql = createSqlTag();
|
|
6
|
+
|
|
7
|
+
test('creates an object describing a query with inlined identifiers', (t) => {
|
|
8
|
+
const query = sql.fragment`SELECT ${'foo'} FROM ${sql.identifier(['bar'])}`;
|
|
9
|
+
|
|
10
|
+
t.deepEqual(query, {
|
|
11
|
+
sql: 'SELECT $slonik_1 FROM "bar"',
|
|
12
|
+
type: FragmentToken,
|
|
13
|
+
values: ['foo'],
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test('creates an object describing a query with inlined identifiers (specifier)', (t) => {
|
|
18
|
+
const query = sql.fragment`SELECT ${'foo'} FROM ${sql.identifier([
|
|
19
|
+
'bar',
|
|
20
|
+
'baz',
|
|
21
|
+
])}`;
|
|
22
|
+
|
|
23
|
+
t.deepEqual(query, {
|
|
24
|
+
sql: 'SELECT $slonik_1 FROM "bar"."baz"',
|
|
25
|
+
type: FragmentToken,
|
|
26
|
+
values: ['foo'],
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test('throws if an identifier name array member type is not a string', (t) => {
|
|
31
|
+
const error = t.throws(() => {
|
|
32
|
+
sql.fragment`${sql.identifier([
|
|
33
|
+
// @ts-expect-error - intentional
|
|
34
|
+
() => {},
|
|
35
|
+
])}`;
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
t.is(error?.message, 'Identifier name array member type must be a string.');
|
|
39
|
+
});
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { FragmentToken } from '../../tokens';
|
|
2
|
+
import { createSqlTag } from '../createSqlTag';
|
|
3
|
+
import test from 'ava';
|
|
4
|
+
|
|
5
|
+
const sql = createSqlTag();
|
|
6
|
+
|
|
7
|
+
test('creates an empty make_interval invocation', (t) => {
|
|
8
|
+
const query = sql.fragment`SELECT ${sql.interval({})}`;
|
|
9
|
+
|
|
10
|
+
t.deepEqual(query, {
|
|
11
|
+
sql: 'SELECT make_interval()',
|
|
12
|
+
type: FragmentToken,
|
|
13
|
+
values: [],
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test('creates an interval', (t) => {
|
|
18
|
+
const query = sql.fragment`SELECT ${sql.interval({
|
|
19
|
+
days: 4,
|
|
20
|
+
hours: 5,
|
|
21
|
+
minutes: 6,
|
|
22
|
+
months: 2,
|
|
23
|
+
seconds: 7,
|
|
24
|
+
weeks: 3,
|
|
25
|
+
years: 1,
|
|
26
|
+
})}`;
|
|
27
|
+
|
|
28
|
+
t.deepEqual(query, {
|
|
29
|
+
sql: 'SELECT make_interval(years => $slonik_1, months => $slonik_2, weeks => $slonik_3, days => $slonik_4, hours => $slonik_5, mins => $slonik_6, secs => $slonik_7)',
|
|
30
|
+
type: FragmentToken,
|
|
31
|
+
values: [1, 2, 3, 4, 5, 6, 7],
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
test('throws if contains unknown properties', (t) => {
|
|
36
|
+
const error = t.throws(() => {
|
|
37
|
+
sql.fragment`SELECT ${sql.interval({
|
|
38
|
+
// @ts-expect-error - intentional
|
|
39
|
+
foo: 'bar',
|
|
40
|
+
})}`;
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
t.is(error?.message, 'Interval input must not contain unknown properties.');
|
|
44
|
+
});
|