@triptease/sql-template 0.3.4
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/CompositeTemplate.d.ts +9 -0
- package/CompositeTemplate.js +21 -0
- package/README.md +0 -0
- package/SQL.d.ts +4 -0
- package/SQL.js +39 -0
- package/api.d.ts +12 -0
- package/api.js +12 -0
- package/index.d.ts +2 -0
- package/index.js +10 -0
- package/package.json +26 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SqlTemplate } from "./api";
|
|
2
|
+
export declare class CompositeTemplate implements SqlTemplate {
|
|
3
|
+
private fragments;
|
|
4
|
+
private joiner;
|
|
5
|
+
constructor(fragments: SqlTemplate[], joiner: string);
|
|
6
|
+
get text(): string;
|
|
7
|
+
get values(): ReadonlyArray<any>;
|
|
8
|
+
}
|
|
9
|
+
export declare function compose(fragments: SqlTemplate[], joiner?: string): SqlTemplate;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.compose = exports.CompositeTemplate = void 0;
|
|
4
|
+
class CompositeTemplate {
|
|
5
|
+
constructor(fragments, joiner) {
|
|
6
|
+
this.fragments = fragments;
|
|
7
|
+
this.joiner = joiner;
|
|
8
|
+
}
|
|
9
|
+
get text() {
|
|
10
|
+
return this.fragments.map(f => f.text).join(this.joiner);
|
|
11
|
+
}
|
|
12
|
+
get values() {
|
|
13
|
+
return this.fragments.flatMap(f => f.values);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.CompositeTemplate = CompositeTemplate;
|
|
17
|
+
function compose(fragments, joiner = ', ') {
|
|
18
|
+
return new CompositeTemplate(fragments, joiner);
|
|
19
|
+
}
|
|
20
|
+
exports.compose = compose;
|
|
21
|
+
//# sourceMappingURL=CompositeTemplate.js.map
|
package/README.md
ADDED
|
File without changes
|
package/SQL.d.ts
ADDED
package/SQL.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.raw = exports.spread = exports.SQL = void 0;
|
|
4
|
+
const CompositeTemplate_1 = require("./CompositeTemplate");
|
|
5
|
+
const api_1 = require("./api");
|
|
6
|
+
const placeholder = `?`;
|
|
7
|
+
function calculateAdditionalText(value) {
|
|
8
|
+
if ((0, api_1.isSqlTemplate)(value))
|
|
9
|
+
return value.text;
|
|
10
|
+
return placeholder;
|
|
11
|
+
}
|
|
12
|
+
function calculateNewValues(value) {
|
|
13
|
+
if (value === undefined)
|
|
14
|
+
return [null];
|
|
15
|
+
if ((0, api_1.isSqlTemplate)(value))
|
|
16
|
+
return value.values;
|
|
17
|
+
return [value];
|
|
18
|
+
}
|
|
19
|
+
function SQL(text, ...values) {
|
|
20
|
+
return text.reduce((a, t, i) => {
|
|
21
|
+
if (i === values.length)
|
|
22
|
+
return (0, api_1.sqlTemplate)(a.text + t, a.values);
|
|
23
|
+
const value = values[i];
|
|
24
|
+
const newText = t + calculateAdditionalText(value);
|
|
25
|
+
const newValues = calculateNewValues(value);
|
|
26
|
+
return (0, api_1.sqlTemplate)(a.text + newText, [...a.values, ...newValues]);
|
|
27
|
+
}, EmptySqlTemplate);
|
|
28
|
+
}
|
|
29
|
+
exports.SQL = SQL;
|
|
30
|
+
const EmptySqlTemplate = (0, api_1.sqlTemplate)('', []);
|
|
31
|
+
function spread(values) {
|
|
32
|
+
return (0, CompositeTemplate_1.compose)(values.map(v => (0, api_1.sqlTemplate)(placeholder, calculateNewValues(v))));
|
|
33
|
+
}
|
|
34
|
+
exports.spread = spread;
|
|
35
|
+
function raw(value) {
|
|
36
|
+
return (0, api_1.sqlTemplate)(value, []);
|
|
37
|
+
}
|
|
38
|
+
exports.raw = raw;
|
|
39
|
+
//# sourceMappingURL=SQL.js.map
|
package/api.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare type SimpleObject = {
|
|
2
|
+
[key: string]: any;
|
|
3
|
+
};
|
|
4
|
+
export interface SqlClient {
|
|
5
|
+
query(template: SqlTemplate): Promise<SimpleObject[]>;
|
|
6
|
+
}
|
|
7
|
+
export interface SqlTemplate {
|
|
8
|
+
readonly text: string;
|
|
9
|
+
readonly values: ReadonlyArray<any>;
|
|
10
|
+
}
|
|
11
|
+
export declare function isSqlTemplate(value: any): value is SqlTemplate;
|
|
12
|
+
export declare function sqlTemplate(text: string, values: ReadonlyArray<any>): SqlTemplate;
|
package/api.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sqlTemplate = exports.isSqlTemplate = void 0;
|
|
4
|
+
function isSqlTemplate(value) {
|
|
5
|
+
return value && typeof value['text'] === 'string' && Array.isArray(value['values']);
|
|
6
|
+
}
|
|
7
|
+
exports.isSqlTemplate = isSqlTemplate;
|
|
8
|
+
function sqlTemplate(text, values) {
|
|
9
|
+
return { text, values };
|
|
10
|
+
}
|
|
11
|
+
exports.sqlTemplate = sqlTemplate;
|
|
12
|
+
//# sourceMappingURL=api.js.map
|
package/index.d.ts
ADDED
package/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.raw = exports.spread = exports.SQL = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
(0, tslib_1.__exportStar)(require("./api"), exports);
|
|
6
|
+
var SQL_1 = require("./SQL");
|
|
7
|
+
Object.defineProperty(exports, "SQL", { enumerable: true, get: function () { return SQL_1.SQL; } });
|
|
8
|
+
Object.defineProperty(exports, "spread", { enumerable: true, get: function () { return SQL_1.spread; } });
|
|
9
|
+
Object.defineProperty(exports, "raw", { enumerable: true, get: function () { return SQL_1.raw; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@triptease/sql-template",
|
|
3
|
+
"version": "0.3.4",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "git+ssh://git@github.com/triptease/sql-template.git"
|
|
7
|
+
},
|
|
8
|
+
"author": "Triptease",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"bugs": {
|
|
11
|
+
"url": "https://github.com/triptease/sql-template/issues"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://github.com/triptease/sql-template/",
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"directory": "../dist",
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"*.js",
|
|
20
|
+
"*.d.ts"
|
|
21
|
+
],
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"tslib": "^2.3.1"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {}
|
|
26
|
+
}
|