@typed-sql/mysql 1.0.0-beta.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.
- package/CHANGELOG.md +17 -0
- package/LICENSE +21 -0
- package/README.md +69 -0
- package/dist/packages/mysql/src/index.d.ts +19 -0
- package/dist/packages/mysql/src/index.d.ts.map +1 -0
- package/dist/packages/mysql/src/index.js +43 -0
- package/dist/packages/mysql/src/index.js.map +1 -0
- package/dist/packages/mysql/src/mysql2.d.ts +29 -0
- package/dist/packages/mysql/src/mysql2.d.ts.map +1 -0
- package/dist/packages/mysql/src/mysql2.js +104 -0
- package/dist/packages/mysql/src/mysql2.js.map +1 -0
- package/dist/packages/mysql/src/provider.d.ts +26 -0
- package/dist/packages/mysql/src/provider.d.ts.map +1 -0
- package/dist/packages/mysql/src/provider.js +85 -0
- package/dist/packages/mysql/src/provider.js.map +1 -0
- package/dist/packages/mysql/src/resolver.d.ts +24 -0
- package/dist/packages/mysql/src/resolver.d.ts.map +1 -0
- package/dist/packages/mysql/src/resolver.js +435 -0
- package/dist/packages/mysql/src/resolver.js.map +1 -0
- package/dist/packages/mysql/src/runtime.d.ts +36 -0
- package/dist/packages/mysql/src/runtime.d.ts.map +1 -0
- package/dist/packages/mysql/src/runtime.js +133 -0
- package/dist/packages/mysql/src/runtime.js.map +1 -0
- package/dist/packages/mysql/src/type-policy.d.ts +13 -0
- package/dist/packages/mysql/src/type-policy.d.ts.map +1 -0
- package/dist/packages/mysql/src/type-policy.js +54 -0
- package/dist/packages/mysql/src/type-policy.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
var _a;
|
|
2
|
+
import { renderQuery } from "@typed-sql/core";
|
|
3
|
+
const defaultRuntimePolicy = {
|
|
4
|
+
bigint: "bigint",
|
|
5
|
+
decimal: "string",
|
|
6
|
+
date: "Date",
|
|
7
|
+
json: "unknown",
|
|
8
|
+
tinyint1: "boolean",
|
|
9
|
+
};
|
|
10
|
+
const mysqlTypes = { tiny: 1, longlong: 8, date: 10, datetime: 12, timestamp: 7, json: 245, decimal: 246 };
|
|
11
|
+
export const mysqlRenderer = Object.freeze({
|
|
12
|
+
placeholder: () => "?",
|
|
13
|
+
quoteIdentifier: (identifier) => `\`${identifier.replaceAll("`", "``")}\``,
|
|
14
|
+
});
|
|
15
|
+
function encoded(value) {
|
|
16
|
+
return typeof value === "bigint" ? value.toString() : Array.isArray(value) ? value.map(encoded) : value;
|
|
17
|
+
}
|
|
18
|
+
function finite(value, label) {
|
|
19
|
+
const result = Number(value);
|
|
20
|
+
if (!Number.isFinite(result))
|
|
21
|
+
throw new RangeError(`${label} value ${value} cannot be represented as a finite number`);
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
function decode(value, field, policy, decimal) {
|
|
25
|
+
if (value === null || value === undefined)
|
|
26
|
+
return value;
|
|
27
|
+
if (field.columnType === mysqlTypes.longlong) {
|
|
28
|
+
if (policy.bigint === "bigint")
|
|
29
|
+
return BigInt(String(value));
|
|
30
|
+
if (policy.bigint === "number") {
|
|
31
|
+
const result = finite(String(value), "bigint");
|
|
32
|
+
if (!Number.isSafeInteger(result))
|
|
33
|
+
throw new RangeError(`bigint value ${value} exceeds JavaScript's safe integer range`);
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
return String(value);
|
|
37
|
+
}
|
|
38
|
+
if (field.columnType === mysqlTypes.decimal) {
|
|
39
|
+
if (policy.decimal === "number")
|
|
40
|
+
return finite(String(value), "decimal");
|
|
41
|
+
if (policy.decimal === "Decimal") {
|
|
42
|
+
if (decimal === undefined)
|
|
43
|
+
throw new TypeError("decimal=Decimal requires a decimal(value) codec");
|
|
44
|
+
return decimal(String(value));
|
|
45
|
+
}
|
|
46
|
+
return String(value);
|
|
47
|
+
}
|
|
48
|
+
if ([mysqlTypes.date, mysqlTypes.datetime, mysqlTypes.timestamp].includes(field.columnType)) {
|
|
49
|
+
return policy.date === "string" ? String(value) : value instanceof Date ? value : new Date(String(value));
|
|
50
|
+
}
|
|
51
|
+
if (field.columnType === mysqlTypes.json && policy.json === "string")
|
|
52
|
+
return typeof value === "string" ? value : JSON.stringify(value);
|
|
53
|
+
if (field.columnType === mysqlTypes.tiny && field.columnLength === 1 && policy.tinyint1 === "boolean")
|
|
54
|
+
return value === true || value === 1 || value === "1";
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
57
|
+
class MySqlDatabaseImplementation {
|
|
58
|
+
#pool;
|
|
59
|
+
#connection;
|
|
60
|
+
#ownsPool;
|
|
61
|
+
#policy;
|
|
62
|
+
#decimal;
|
|
63
|
+
#depth;
|
|
64
|
+
constructor(pool, connection, ownsPool, policy, decimal, depth) {
|
|
65
|
+
this.#pool = pool;
|
|
66
|
+
this.#connection = connection;
|
|
67
|
+
this.#ownsPool = ownsPool;
|
|
68
|
+
this.#policy = policy;
|
|
69
|
+
this.#decimal = decimal;
|
|
70
|
+
this.#depth = depth;
|
|
71
|
+
}
|
|
72
|
+
async execute(query) {
|
|
73
|
+
const rendered = renderQuery(query, mysqlRenderer);
|
|
74
|
+
const result = await (this.#connection ?? this.#pool).execute(rendered.text, rendered.values.map(encoded));
|
|
75
|
+
if (!Array.isArray(result.rows))
|
|
76
|
+
return [];
|
|
77
|
+
const fields = result.fields ?? [];
|
|
78
|
+
return result.rows.map((row) => Object.fromEntries(Object.entries(row).map(([key, value]) => {
|
|
79
|
+
const field = fields.find((candidate) => candidate.name === key);
|
|
80
|
+
return [key, field === undefined ? value : decode(value, field, this.#policy, this.#decimal)];
|
|
81
|
+
})));
|
|
82
|
+
}
|
|
83
|
+
async transaction(fn) {
|
|
84
|
+
if (this.#connection !== undefined)
|
|
85
|
+
return this.#nested(fn);
|
|
86
|
+
const connection = await this.#pool.getConnection();
|
|
87
|
+
try {
|
|
88
|
+
await connection.beginTransaction();
|
|
89
|
+
const result = await fn(new _a(this.#pool, connection, false, this.#policy, this.#decimal, 1));
|
|
90
|
+
await connection.commit();
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
try {
|
|
95
|
+
await connection.rollback();
|
|
96
|
+
}
|
|
97
|
+
catch { /* Preserve the original failure. */ }
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
connection.release();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async #nested(fn) {
|
|
105
|
+
const connection = this.#connection;
|
|
106
|
+
const depth = this.#depth + 1;
|
|
107
|
+
const savepoint = `typed_sql_${depth}`;
|
|
108
|
+
await connection.query(`SAVEPOINT ${savepoint}`);
|
|
109
|
+
try {
|
|
110
|
+
const result = await fn(new _a(this.#pool, connection, false, this.#policy, this.#decimal, depth));
|
|
111
|
+
await connection.query(`RELEASE SAVEPOINT ${savepoint}`);
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
await connection.query(`ROLLBACK TO SAVEPOINT ${savepoint}`);
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async close() {
|
|
120
|
+
if (this.#connection !== undefined)
|
|
121
|
+
throw new Error("Cannot close a database from inside a transaction");
|
|
122
|
+
if (this.#ownsPool)
|
|
123
|
+
await this.#pool.end();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
_a = MySqlDatabaseImplementation;
|
|
127
|
+
export function createMySqlDatabase(options) {
|
|
128
|
+
const policy = { ...defaultRuntimePolicy, ...options.typePolicy };
|
|
129
|
+
if (policy.decimal === "Decimal" && options.decimal === undefined)
|
|
130
|
+
throw new TypeError("decimal=Decimal requires a decimal(value) codec");
|
|
131
|
+
return new MySqlDatabaseImplementation(options.pool, undefined, options.ownsPool ?? false, policy, options.decimal, 0);
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SchemaSnapshot } from "@typed-sql/schema";
|
|
2
|
+
export interface MySqlTypePolicy {
|
|
3
|
+
readonly bigint: "bigint" | "string" | "number";
|
|
4
|
+
readonly decimal: "string" | "number" | "Decimal";
|
|
5
|
+
readonly date: "Date" | "string";
|
|
6
|
+
readonly json: "unknown" | "JsonValue" | "string";
|
|
7
|
+
readonly tinyint1: "boolean" | "number";
|
|
8
|
+
readonly unknown: "unknown" | "never";
|
|
9
|
+
}
|
|
10
|
+
export declare const defaultMySqlTypePolicy: MySqlTypePolicy;
|
|
11
|
+
export declare function isKnownMySqlType(databaseType: string, schema?: SchemaSnapshot): boolean;
|
|
12
|
+
export declare function mapMySqlType(databaseType: string, policy: MySqlTypePolicy, schema?: SchemaSnapshot): string;
|
|
13
|
+
//# sourceMappingURL=type-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-policy.d.ts","sourceRoot":"","sources":["../../../../src/type-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC;CACvC;AAED,eAAO,MAAM,sBAAsB,EAAE,eAOnC,CAAC;AAcH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAOvF;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,MAAM,CAc3G"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export const defaultMySqlTypePolicy = Object.freeze({
|
|
2
|
+
bigint: "bigint",
|
|
3
|
+
decimal: "string",
|
|
4
|
+
date: "Date",
|
|
5
|
+
json: "unknown",
|
|
6
|
+
tinyint1: "boolean",
|
|
7
|
+
unknown: "unknown",
|
|
8
|
+
});
|
|
9
|
+
const normalized = (value) => value.trim().toLowerCase().replace(/\s+/gu, " ");
|
|
10
|
+
const baseType = (value) => normalized(value).replace(/\s+unsigned$/u, "").replace(/\(.*/u, "");
|
|
11
|
+
function enumValues(databaseType) {
|
|
12
|
+
const match = /^enum\((.*)\)$/iu.exec(databaseType.trim());
|
|
13
|
+
if (match?.[1] === undefined)
|
|
14
|
+
return undefined;
|
|
15
|
+
const values = [];
|
|
16
|
+
const pattern = /'((?:''|\\.|[^'])*)'/gu;
|
|
17
|
+
for (const value of match[1].matchAll(pattern))
|
|
18
|
+
values.push(value[1].replaceAll("''", "'").replace(/\\(.)/gu, "$1"));
|
|
19
|
+
return values;
|
|
20
|
+
}
|
|
21
|
+
export function isKnownMySqlType(databaseType, schema) {
|
|
22
|
+
const type = baseType(databaseType);
|
|
23
|
+
return [
|
|
24
|
+
"tinyint", "smallint", "mediumint", "int", "integer", "bigint", "decimal", "numeric", "float", "double", "real", "bit",
|
|
25
|
+
"boolean", "bool", "char", "varchar", "tinytext", "text", "mediumtext", "longtext", "binary", "varbinary", "tinyblob", "blob",
|
|
26
|
+
"mediumblob", "longblob", "date", "datetime", "timestamp", "time", "year", "json", "enum", "set",
|
|
27
|
+
].includes(type) || schema?.domains?.[type] !== undefined;
|
|
28
|
+
}
|
|
29
|
+
export function mapMySqlType(databaseType, policy, schema) {
|
|
30
|
+
const type = baseType(databaseType);
|
|
31
|
+
const values = enumValues(databaseType);
|
|
32
|
+
if (values !== undefined)
|
|
33
|
+
return values.map((value) => JSON.stringify(value)).join(" | ") || "never";
|
|
34
|
+
if (type === "tinyint" && /^tinyint\(1\)/iu.test(databaseType))
|
|
35
|
+
return policy.tinyint1;
|
|
36
|
+
if (["tinyint", "smallint", "mediumint", "int", "integer", "float", "double", "real", "bit", "year"].includes(type))
|
|
37
|
+
return "number";
|
|
38
|
+
if (type === "bigint")
|
|
39
|
+
return policy.bigint;
|
|
40
|
+
if (type === "decimal" || type === "numeric")
|
|
41
|
+
return policy.decimal;
|
|
42
|
+
if (type === "boolean" || type === "bool")
|
|
43
|
+
return "boolean";
|
|
44
|
+
if (["char", "varchar", "tinytext", "text", "mediumtext", "longtext", "set", "time"].includes(type))
|
|
45
|
+
return "string";
|
|
46
|
+
if (["binary", "varbinary", "tinyblob", "blob", "mediumblob", "longblob"].includes(type))
|
|
47
|
+
return "Uint8Array";
|
|
48
|
+
if (["date", "datetime", "timestamp"].includes(type))
|
|
49
|
+
return policy.date;
|
|
50
|
+
if (type === "json")
|
|
51
|
+
return policy.json;
|
|
52
|
+
return schema?.domains?.[type]?.tsType ?? policy.unknown;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=type-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-policy.js","sourceRoot":"","sources":["../../../../src/type-policy.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@typed-sql/mysql",
|
|
3
|
+
"version": "1.0.0-beta.0",
|
|
4
|
+
"description": "MySQL grammar, schema introspection, type resolution, and application-owned mysql2 integration for typed-sql.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Lojhan",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/Lojhan/typed-sql.git",
|
|
10
|
+
"directory": "packages/mysql"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/Lojhan/typed-sql#readme",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/Lojhan/typed-sql/issues"
|
|
15
|
+
},
|
|
16
|
+
"engines": {
|
|
17
|
+
"node": ">=22.11"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist/**/*.js",
|
|
21
|
+
"dist/**/*.d.ts",
|
|
22
|
+
"dist/**/*.map",
|
|
23
|
+
"README.md",
|
|
24
|
+
"LICENSE",
|
|
25
|
+
"CHANGELOG.md"
|
|
26
|
+
],
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"sideEffects": false,
|
|
31
|
+
"type": "module",
|
|
32
|
+
"exports": {
|
|
33
|
+
".": "./dist/packages/mysql/src/index.js",
|
|
34
|
+
"./runtime": "./dist/packages/mysql/src/runtime.js",
|
|
35
|
+
"./mysql2": "./dist/packages/mysql/src/mysql2.js"
|
|
36
|
+
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"@typed-sql/schema": "1.0.0-beta.0",
|
|
39
|
+
"@typed-sql/ast": "1.0.0-beta.0",
|
|
40
|
+
"@typed-sql/core": "1.0.0-beta.0"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"test": "poku test --reporter=compact --enforce",
|
|
44
|
+
"coverage": "poku test --coverage=@pokujs/c8 --coverageConfig=.c8rc.json --reporter=compact --enforce"
|
|
45
|
+
}
|
|
46
|
+
}
|