@farming-labs/orm-sequelize 0.0.34
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/dist/index.cjs +202 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +28 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +177 -0
- package/dist/index.js.map +1 -0
- package/package.json +40 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
createSequelizeDriver: () => createSequelizeDriver,
|
|
24
|
+
normalizeSequelizeDialect: () => normalizeSequelizeDialect,
|
|
25
|
+
resolveSequelizeDialect: () => resolveSequelizeDialect
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(index_exports);
|
|
28
|
+
var import_orm = require("@farming-labs/orm");
|
|
29
|
+
var import_orm_sql = require("@farming-labs/orm-sql");
|
|
30
|
+
function isRecord(value) {
|
|
31
|
+
return !!value && typeof value === "object";
|
|
32
|
+
}
|
|
33
|
+
function toNumber(value) {
|
|
34
|
+
if (typeof value === "number" && Number.isFinite(value)) return value;
|
|
35
|
+
if (typeof value === "bigint") return Number(value);
|
|
36
|
+
return void 0;
|
|
37
|
+
}
|
|
38
|
+
function isSqlSelectLike(sql) {
|
|
39
|
+
return /^\s*(select|with|pragma|explain)\b/i.test(sql);
|
|
40
|
+
}
|
|
41
|
+
function formatMysqlDateForDecoder(value) {
|
|
42
|
+
return value.toISOString().replace("T", " ").replace("Z", "");
|
|
43
|
+
}
|
|
44
|
+
function normalizeMysqlRowValue(value) {
|
|
45
|
+
if (value instanceof Date) {
|
|
46
|
+
return formatMysqlDateForDecoder(value);
|
|
47
|
+
}
|
|
48
|
+
if (Array.isArray(value)) {
|
|
49
|
+
return value.map((entry) => normalizeMysqlRowValue(entry));
|
|
50
|
+
}
|
|
51
|
+
if (isRecord(value)) {
|
|
52
|
+
return Object.fromEntries(
|
|
53
|
+
Object.entries(value).map(([key, entry]) => [key, normalizeMysqlRowValue(entry)])
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
return value;
|
|
57
|
+
}
|
|
58
|
+
function normalizeRowsForDialect(rows, dialect) {
|
|
59
|
+
if (dialect !== "mysql") {
|
|
60
|
+
return rows;
|
|
61
|
+
}
|
|
62
|
+
return rows.map((row) => normalizeMysqlRowValue(row));
|
|
63
|
+
}
|
|
64
|
+
function normalizeSequelizeDialect(value) {
|
|
65
|
+
switch (value) {
|
|
66
|
+
case "postgres":
|
|
67
|
+
case "postgresql":
|
|
68
|
+
return "postgres";
|
|
69
|
+
case "mysql":
|
|
70
|
+
case "mariadb":
|
|
71
|
+
return "mysql";
|
|
72
|
+
default:
|
|
73
|
+
return void 0;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function resolveSequelizeDialect(sequelize, override) {
|
|
77
|
+
const dialect = override ?? normalizeSequelizeDialect(sequelize.options?.dialect);
|
|
78
|
+
if (!dialect) {
|
|
79
|
+
throw new Error(
|
|
80
|
+
'Could not determine the Sequelize dialect. Pass `dialect` explicitly or use a supported Sequelize dialect such as "postgres", "postgresql", "mysql", or "mariadb".'
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
return dialect;
|
|
84
|
+
}
|
|
85
|
+
function normalizeSequelizeResult(sql, result, dialect) {
|
|
86
|
+
if (!Array.isArray(result)) {
|
|
87
|
+
return {
|
|
88
|
+
rows: [],
|
|
89
|
+
affectedRows: 0
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const [rowsOrResult, metadata] = result;
|
|
93
|
+
const rows = Array.isArray(rowsOrResult) ? rowsOrResult : isRecord(rowsOrResult) ? [rowsOrResult] : [];
|
|
94
|
+
const metadataRecord = isRecord(metadata) ? metadata : void 0;
|
|
95
|
+
const rowsRecord = isRecord(rowsOrResult) ? rowsOrResult : void 0;
|
|
96
|
+
const affectedRows = toNumber(metadataRecord?.rowCount) ?? toNumber(metadataRecord?.affectedRows) ?? toNumber(rowsRecord?.rowCount) ?? toNumber(rowsRecord?.affectedRows) ?? (typeof metadata === "number" ? metadata : void 0) ?? (isSqlSelectLike(sql) ? rows.length : 0);
|
|
97
|
+
const insertId = metadataRecord?.insertId ?? rowsRecord?.insertId;
|
|
98
|
+
return {
|
|
99
|
+
rows: normalizeRowsForDialect(rows, dialect),
|
|
100
|
+
affectedRows,
|
|
101
|
+
insertId
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function sequelizeDriverCapabilities(dialect) {
|
|
105
|
+
return {
|
|
106
|
+
numericIds: "generated",
|
|
107
|
+
supportsJSON: true,
|
|
108
|
+
supportsDates: true,
|
|
109
|
+
supportsBooleans: true,
|
|
110
|
+
supportsTransactions: true,
|
|
111
|
+
supportsSchemaNamespaces: dialect === "postgres",
|
|
112
|
+
supportsTransactionalDDL: dialect !== "mysql",
|
|
113
|
+
nativeRelationLoading: "partial",
|
|
114
|
+
textComparison: "database-default",
|
|
115
|
+
textMatching: {
|
|
116
|
+
equality: "database-default",
|
|
117
|
+
contains: "database-default",
|
|
118
|
+
ordering: "database-default"
|
|
119
|
+
},
|
|
120
|
+
upsert: "native",
|
|
121
|
+
returning: {
|
|
122
|
+
create: true,
|
|
123
|
+
update: true,
|
|
124
|
+
delete: false
|
|
125
|
+
},
|
|
126
|
+
returningMode: {
|
|
127
|
+
create: "record",
|
|
128
|
+
update: "record",
|
|
129
|
+
delete: "none"
|
|
130
|
+
},
|
|
131
|
+
nativeRelations: {
|
|
132
|
+
singularChains: true,
|
|
133
|
+
hasMany: true,
|
|
134
|
+
manyToMany: true,
|
|
135
|
+
filtered: false,
|
|
136
|
+
ordered: false,
|
|
137
|
+
paginated: false
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function queryOptionsForDialect(dialect, params, transaction) {
|
|
142
|
+
return {
|
|
143
|
+
...dialect === "postgres" ? { bind: params } : { replacements: params },
|
|
144
|
+
...transaction ? { transaction } : {},
|
|
145
|
+
raw: true
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
function createSequelizeAdapter(sequelize, dialect) {
|
|
149
|
+
return {
|
|
150
|
+
dialect,
|
|
151
|
+
async query(sql, params) {
|
|
152
|
+
await sequelize.authenticate();
|
|
153
|
+
return normalizeSequelizeResult(
|
|
154
|
+
sql,
|
|
155
|
+
await sequelize.query(sql, queryOptionsForDialect(dialect, params)),
|
|
156
|
+
dialect
|
|
157
|
+
);
|
|
158
|
+
},
|
|
159
|
+
async transaction(run) {
|
|
160
|
+
await sequelize.authenticate();
|
|
161
|
+
return sequelize.transaction(async (transaction) => {
|
|
162
|
+
const transactionAdapter = {
|
|
163
|
+
dialect,
|
|
164
|
+
async query(sql, params) {
|
|
165
|
+
return normalizeSequelizeResult(
|
|
166
|
+
sql,
|
|
167
|
+
await sequelize.query(sql, queryOptionsForDialect(dialect, params, transaction)),
|
|
168
|
+
dialect
|
|
169
|
+
);
|
|
170
|
+
},
|
|
171
|
+
async transaction(nestedRun) {
|
|
172
|
+
return nestedRun(transactionAdapter);
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
return run(transactionAdapter);
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function createSequelizeDriver(config) {
|
|
181
|
+
const dialect = resolveSequelizeDialect(config.sequelize, config.dialect);
|
|
182
|
+
const handle = config.handle ?? (0, import_orm.createDriverHandle)({
|
|
183
|
+
kind: "sequelize",
|
|
184
|
+
client: config.sequelize,
|
|
185
|
+
dialect,
|
|
186
|
+
capabilities: {
|
|
187
|
+
...sequelizeDriverCapabilities(dialect),
|
|
188
|
+
...config.capabilities
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
return (0, import_orm_sql.createSqlDriverFromAdapter)(
|
|
192
|
+
createSequelizeAdapter(config.sequelize, dialect),
|
|
193
|
+
handle
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
197
|
+
0 && (module.exports = {
|
|
198
|
+
createSequelizeDriver,
|
|
199
|
+
normalizeSequelizeDialect,
|
|
200
|
+
resolveSequelizeDialect
|
|
201
|
+
});
|
|
202
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n createDriverHandle,\n type OrmDriver,\n type OrmDriverCapabilityInput,\n type OrmDriverHandle,\n type SchemaDefinition,\n} from \"@farming-labs/orm\";\nimport { createSqlDriverFromAdapter, type SqlAdapterLike } from \"@farming-labs/orm-sql\";\n\ntype SqlDialect = \"mysql\" | \"postgres\";\ntype SqlRow = Record<string, unknown>;\ntype SqlQueryResult = {\n rows: SqlRow[];\n affectedRows: number;\n insertId?: unknown;\n};\n\ntype SequelizeQueryOptionsLike = {\n bind?: readonly unknown[];\n replacements?: readonly unknown[];\n transaction?: SequelizeTransactionLike;\n raw?: boolean;\n};\n\ntype SequelizeQueryMetadataLike = {\n rowCount?: number;\n affectedRows?: number;\n insertId?: unknown;\n};\n\nexport type SequelizeDriverDialect = SqlDialect;\nexport type SequelizeDriverHandle<\n TClient = unknown,\n TDialect extends SequelizeDriverDialect = SequelizeDriverDialect,\n> = OrmDriverHandle<\"sequelize\", TClient, TDialect>;\n\nexport type SequelizeTransactionLike = {\n afterCommit?(callback: () => void): void;\n};\n\nexport type SequelizeLike = {\n readonly options?: {\n dialect?: string;\n };\n authenticate(): Promise<unknown>;\n close(): Promise<unknown>;\n query(...args: any[]): Promise<unknown>;\n transaction<TResult>(\n run: (transaction: SequelizeTransactionLike) => Promise<TResult>,\n ): Promise<TResult>;\n};\n\nexport type SequelizeDriverConfig<TSchema extends SchemaDefinition<any>> = {\n sequelize: SequelizeLike;\n dialect?: SequelizeDriverDialect;\n capabilities?: OrmDriverCapabilityInput;\n handle?: SequelizeDriverHandle<SequelizeLike>;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\";\n}\n\nfunction toNumber(value: unknown) {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"bigint\") return Number(value);\n return undefined;\n}\n\nfunction isSqlSelectLike(sql: string) {\n return /^\\s*(select|with|pragma|explain)\\b/i.test(sql);\n}\n\nfunction formatMysqlDateForDecoder(value: Date) {\n return value.toISOString().replace(\"T\", \" \").replace(\"Z\", \"\");\n}\n\nfunction normalizeMysqlRowValue(value: unknown): unknown {\n if (value instanceof Date) {\n return formatMysqlDateForDecoder(value);\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeMysqlRowValue(entry));\n }\n\n if (isRecord(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, normalizeMysqlRowValue(entry)]),\n );\n }\n\n return value;\n}\n\nfunction normalizeRowsForDialect(rows: SqlRow[], dialect: SequelizeDriverDialect) {\n if (dialect !== \"mysql\") {\n return rows;\n }\n\n return rows.map((row) => normalizeMysqlRowValue(row) as SqlRow);\n}\n\nexport function normalizeSequelizeDialect(value: unknown): SequelizeDriverDialect | undefined {\n switch (value) {\n case \"postgres\":\n case \"postgresql\":\n return \"postgres\";\n case \"mysql\":\n case \"mariadb\":\n return \"mysql\";\n default:\n return undefined;\n }\n}\n\nexport function resolveSequelizeDialect(\n sequelize: SequelizeLike,\n override?: SequelizeDriverDialect,\n): SequelizeDriverDialect {\n const dialect = override ?? normalizeSequelizeDialect(sequelize.options?.dialect);\n if (!dialect) {\n throw new Error(\n 'Could not determine the Sequelize dialect. Pass `dialect` explicitly or use a supported Sequelize dialect such as \"postgres\", \"postgresql\", \"mysql\", or \"mariadb\".',\n );\n }\n\n return dialect;\n}\n\nfunction normalizeSequelizeResult(\n sql: string,\n result: unknown,\n dialect: SequelizeDriverDialect,\n): SqlQueryResult {\n if (!Array.isArray(result)) {\n return {\n rows: [],\n affectedRows: 0,\n };\n }\n\n const [rowsOrResult, metadata] = result as [unknown, unknown];\n const rows = Array.isArray(rowsOrResult)\n ? (rowsOrResult as SqlRow[])\n : isRecord(rowsOrResult)\n ? [rowsOrResult as SqlRow]\n : [];\n\n const metadataRecord = isRecord(metadata) ? (metadata as SequelizeQueryMetadataLike) : undefined;\n const rowsRecord = isRecord(rowsOrResult)\n ? (rowsOrResult as SequelizeQueryMetadataLike)\n : undefined;\n\n const affectedRows =\n toNumber(metadataRecord?.rowCount) ??\n toNumber(metadataRecord?.affectedRows) ??\n toNumber(rowsRecord?.rowCount) ??\n toNumber(rowsRecord?.affectedRows) ??\n (typeof metadata === \"number\" ? metadata : undefined) ??\n (isSqlSelectLike(sql) ? rows.length : 0);\n\n const insertId = metadataRecord?.insertId ?? rowsRecord?.insertId;\n\n return {\n rows: normalizeRowsForDialect(rows, dialect),\n affectedRows,\n insertId,\n };\n}\n\nfunction sequelizeDriverCapabilities(dialect: SequelizeDriverDialect): OrmDriverCapabilityInput {\n return {\n numericIds: \"generated\",\n supportsJSON: true,\n supportsDates: true,\n supportsBooleans: true,\n supportsTransactions: true,\n supportsSchemaNamespaces: dialect === \"postgres\",\n supportsTransactionalDDL: dialect !== \"mysql\",\n nativeRelationLoading: \"partial\",\n textComparison: \"database-default\",\n textMatching: {\n equality: \"database-default\",\n contains: \"database-default\",\n ordering: \"database-default\",\n },\n upsert: \"native\",\n returning: {\n create: true,\n update: true,\n delete: false,\n },\n returningMode: {\n create: \"record\",\n update: \"record\",\n delete: \"none\",\n },\n nativeRelations: {\n singularChains: true,\n hasMany: true,\n manyToMany: true,\n filtered: false,\n ordered: false,\n paginated: false,\n },\n };\n}\n\nfunction queryOptionsForDialect(\n dialect: SequelizeDriverDialect,\n params: unknown[],\n transaction?: SequelizeTransactionLike,\n): SequelizeQueryOptionsLike {\n return {\n ...(dialect === \"postgres\" ? { bind: params } : { replacements: params }),\n ...(transaction ? { transaction } : {}),\n raw: true,\n };\n}\n\nfunction createSequelizeAdapter(\n sequelize: SequelizeLike,\n dialect: SequelizeDriverDialect,\n): SqlAdapterLike {\n return {\n dialect,\n async query(sql, params) {\n await sequelize.authenticate();\n return normalizeSequelizeResult(\n sql,\n await sequelize.query(sql, queryOptionsForDialect(dialect, params)),\n dialect,\n );\n },\n async transaction<TResult>(run: (adapter: SqlAdapterLike) => Promise<TResult>) {\n await sequelize.authenticate();\n\n return sequelize.transaction(async (transaction) => {\n const transactionAdapter: SqlAdapterLike = {\n dialect,\n async query(sql, params) {\n return normalizeSequelizeResult(\n sql,\n await sequelize.query(sql, queryOptionsForDialect(dialect, params, transaction)),\n dialect,\n );\n },\n async transaction<TResultInner>(\n nestedRun: (adapter: SqlAdapterLike) => Promise<TResultInner>,\n ) {\n return nestedRun(transactionAdapter);\n },\n };\n\n return run(transactionAdapter);\n });\n },\n };\n}\n\nexport function createSequelizeDriver<TSchema extends SchemaDefinition<any>>(\n config: SequelizeDriverConfig<TSchema>,\n): OrmDriver<TSchema, SequelizeDriverHandle<SequelizeLike>> {\n const dialect = resolveSequelizeDialect(config.sequelize, config.dialect);\n const handle =\n config.handle ??\n createDriverHandle({\n kind: \"sequelize\",\n client: config.sequelize,\n dialect,\n capabilities: {\n ...sequelizeDriverCapabilities(dialect),\n ...config.capabilities,\n },\n });\n\n return createSqlDriverFromAdapter<TSchema, SequelizeDriverHandle<SequelizeLike>>(\n createSequelizeAdapter(config.sequelize, dialect),\n handle,\n );\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { SchemaDefinition, OrmDriverCapabilityInput, OrmDriverHandle, OrmDriver } from '@farming-labs/orm';
|
|
2
|
+
|
|
3
|
+
type SqlDialect = "mysql" | "postgres";
|
|
4
|
+
type SequelizeDriverDialect = SqlDialect;
|
|
5
|
+
type SequelizeDriverHandle<TClient = unknown, TDialect extends SequelizeDriverDialect = SequelizeDriverDialect> = OrmDriverHandle<"sequelize", TClient, TDialect>;
|
|
6
|
+
type SequelizeTransactionLike = {
|
|
7
|
+
afterCommit?(callback: () => void): void;
|
|
8
|
+
};
|
|
9
|
+
type SequelizeLike = {
|
|
10
|
+
readonly options?: {
|
|
11
|
+
dialect?: string;
|
|
12
|
+
};
|
|
13
|
+
authenticate(): Promise<unknown>;
|
|
14
|
+
close(): Promise<unknown>;
|
|
15
|
+
query(...args: any[]): Promise<unknown>;
|
|
16
|
+
transaction<TResult>(run: (transaction: SequelizeTransactionLike) => Promise<TResult>): Promise<TResult>;
|
|
17
|
+
};
|
|
18
|
+
type SequelizeDriverConfig<TSchema extends SchemaDefinition<any>> = {
|
|
19
|
+
sequelize: SequelizeLike;
|
|
20
|
+
dialect?: SequelizeDriverDialect;
|
|
21
|
+
capabilities?: OrmDriverCapabilityInput;
|
|
22
|
+
handle?: SequelizeDriverHandle<SequelizeLike>;
|
|
23
|
+
};
|
|
24
|
+
declare function normalizeSequelizeDialect(value: unknown): SequelizeDriverDialect | undefined;
|
|
25
|
+
declare function resolveSequelizeDialect(sequelize: SequelizeLike, override?: SequelizeDriverDialect): SequelizeDriverDialect;
|
|
26
|
+
declare function createSequelizeDriver<TSchema extends SchemaDefinition<any>>(config: SequelizeDriverConfig<TSchema>): OrmDriver<TSchema, SequelizeDriverHandle<SequelizeLike>>;
|
|
27
|
+
|
|
28
|
+
export { type SequelizeDriverConfig, type SequelizeDriverDialect, type SequelizeDriverHandle, type SequelizeLike, type SequelizeTransactionLike, createSequelizeDriver, normalizeSequelizeDialect, resolveSequelizeDialect };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { SchemaDefinition, OrmDriverCapabilityInput, OrmDriverHandle, OrmDriver } from '@farming-labs/orm';
|
|
2
|
+
|
|
3
|
+
type SqlDialect = "mysql" | "postgres";
|
|
4
|
+
type SequelizeDriverDialect = SqlDialect;
|
|
5
|
+
type SequelizeDriverHandle<TClient = unknown, TDialect extends SequelizeDriverDialect = SequelizeDriverDialect> = OrmDriverHandle<"sequelize", TClient, TDialect>;
|
|
6
|
+
type SequelizeTransactionLike = {
|
|
7
|
+
afterCommit?(callback: () => void): void;
|
|
8
|
+
};
|
|
9
|
+
type SequelizeLike = {
|
|
10
|
+
readonly options?: {
|
|
11
|
+
dialect?: string;
|
|
12
|
+
};
|
|
13
|
+
authenticate(): Promise<unknown>;
|
|
14
|
+
close(): Promise<unknown>;
|
|
15
|
+
query(...args: any[]): Promise<unknown>;
|
|
16
|
+
transaction<TResult>(run: (transaction: SequelizeTransactionLike) => Promise<TResult>): Promise<TResult>;
|
|
17
|
+
};
|
|
18
|
+
type SequelizeDriverConfig<TSchema extends SchemaDefinition<any>> = {
|
|
19
|
+
sequelize: SequelizeLike;
|
|
20
|
+
dialect?: SequelizeDriverDialect;
|
|
21
|
+
capabilities?: OrmDriverCapabilityInput;
|
|
22
|
+
handle?: SequelizeDriverHandle<SequelizeLike>;
|
|
23
|
+
};
|
|
24
|
+
declare function normalizeSequelizeDialect(value: unknown): SequelizeDriverDialect | undefined;
|
|
25
|
+
declare function resolveSequelizeDialect(sequelize: SequelizeLike, override?: SequelizeDriverDialect): SequelizeDriverDialect;
|
|
26
|
+
declare function createSequelizeDriver<TSchema extends SchemaDefinition<any>>(config: SequelizeDriverConfig<TSchema>): OrmDriver<TSchema, SequelizeDriverHandle<SequelizeLike>>;
|
|
27
|
+
|
|
28
|
+
export { type SequelizeDriverConfig, type SequelizeDriverDialect, type SequelizeDriverHandle, type SequelizeLike, type SequelizeTransactionLike, createSequelizeDriver, normalizeSequelizeDialect, resolveSequelizeDialect };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
// src/index.ts
|
|
2
|
+
import {
|
|
3
|
+
createDriverHandle
|
|
4
|
+
} from "@farming-labs/orm";
|
|
5
|
+
import { createSqlDriverFromAdapter } from "@farming-labs/orm-sql";
|
|
6
|
+
function isRecord(value) {
|
|
7
|
+
return !!value && typeof value === "object";
|
|
8
|
+
}
|
|
9
|
+
function toNumber(value) {
|
|
10
|
+
if (typeof value === "number" && Number.isFinite(value)) return value;
|
|
11
|
+
if (typeof value === "bigint") return Number(value);
|
|
12
|
+
return void 0;
|
|
13
|
+
}
|
|
14
|
+
function isSqlSelectLike(sql) {
|
|
15
|
+
return /^\s*(select|with|pragma|explain)\b/i.test(sql);
|
|
16
|
+
}
|
|
17
|
+
function formatMysqlDateForDecoder(value) {
|
|
18
|
+
return value.toISOString().replace("T", " ").replace("Z", "");
|
|
19
|
+
}
|
|
20
|
+
function normalizeMysqlRowValue(value) {
|
|
21
|
+
if (value instanceof Date) {
|
|
22
|
+
return formatMysqlDateForDecoder(value);
|
|
23
|
+
}
|
|
24
|
+
if (Array.isArray(value)) {
|
|
25
|
+
return value.map((entry) => normalizeMysqlRowValue(entry));
|
|
26
|
+
}
|
|
27
|
+
if (isRecord(value)) {
|
|
28
|
+
return Object.fromEntries(
|
|
29
|
+
Object.entries(value).map(([key, entry]) => [key, normalizeMysqlRowValue(entry)])
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
function normalizeRowsForDialect(rows, dialect) {
|
|
35
|
+
if (dialect !== "mysql") {
|
|
36
|
+
return rows;
|
|
37
|
+
}
|
|
38
|
+
return rows.map((row) => normalizeMysqlRowValue(row));
|
|
39
|
+
}
|
|
40
|
+
function normalizeSequelizeDialect(value) {
|
|
41
|
+
switch (value) {
|
|
42
|
+
case "postgres":
|
|
43
|
+
case "postgresql":
|
|
44
|
+
return "postgres";
|
|
45
|
+
case "mysql":
|
|
46
|
+
case "mariadb":
|
|
47
|
+
return "mysql";
|
|
48
|
+
default:
|
|
49
|
+
return void 0;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function resolveSequelizeDialect(sequelize, override) {
|
|
53
|
+
const dialect = override ?? normalizeSequelizeDialect(sequelize.options?.dialect);
|
|
54
|
+
if (!dialect) {
|
|
55
|
+
throw new Error(
|
|
56
|
+
'Could not determine the Sequelize dialect. Pass `dialect` explicitly or use a supported Sequelize dialect such as "postgres", "postgresql", "mysql", or "mariadb".'
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
return dialect;
|
|
60
|
+
}
|
|
61
|
+
function normalizeSequelizeResult(sql, result, dialect) {
|
|
62
|
+
if (!Array.isArray(result)) {
|
|
63
|
+
return {
|
|
64
|
+
rows: [],
|
|
65
|
+
affectedRows: 0
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const [rowsOrResult, metadata] = result;
|
|
69
|
+
const rows = Array.isArray(rowsOrResult) ? rowsOrResult : isRecord(rowsOrResult) ? [rowsOrResult] : [];
|
|
70
|
+
const metadataRecord = isRecord(metadata) ? metadata : void 0;
|
|
71
|
+
const rowsRecord = isRecord(rowsOrResult) ? rowsOrResult : void 0;
|
|
72
|
+
const affectedRows = toNumber(metadataRecord?.rowCount) ?? toNumber(metadataRecord?.affectedRows) ?? toNumber(rowsRecord?.rowCount) ?? toNumber(rowsRecord?.affectedRows) ?? (typeof metadata === "number" ? metadata : void 0) ?? (isSqlSelectLike(sql) ? rows.length : 0);
|
|
73
|
+
const insertId = metadataRecord?.insertId ?? rowsRecord?.insertId;
|
|
74
|
+
return {
|
|
75
|
+
rows: normalizeRowsForDialect(rows, dialect),
|
|
76
|
+
affectedRows,
|
|
77
|
+
insertId
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function sequelizeDriverCapabilities(dialect) {
|
|
81
|
+
return {
|
|
82
|
+
numericIds: "generated",
|
|
83
|
+
supportsJSON: true,
|
|
84
|
+
supportsDates: true,
|
|
85
|
+
supportsBooleans: true,
|
|
86
|
+
supportsTransactions: true,
|
|
87
|
+
supportsSchemaNamespaces: dialect === "postgres",
|
|
88
|
+
supportsTransactionalDDL: dialect !== "mysql",
|
|
89
|
+
nativeRelationLoading: "partial",
|
|
90
|
+
textComparison: "database-default",
|
|
91
|
+
textMatching: {
|
|
92
|
+
equality: "database-default",
|
|
93
|
+
contains: "database-default",
|
|
94
|
+
ordering: "database-default"
|
|
95
|
+
},
|
|
96
|
+
upsert: "native",
|
|
97
|
+
returning: {
|
|
98
|
+
create: true,
|
|
99
|
+
update: true,
|
|
100
|
+
delete: false
|
|
101
|
+
},
|
|
102
|
+
returningMode: {
|
|
103
|
+
create: "record",
|
|
104
|
+
update: "record",
|
|
105
|
+
delete: "none"
|
|
106
|
+
},
|
|
107
|
+
nativeRelations: {
|
|
108
|
+
singularChains: true,
|
|
109
|
+
hasMany: true,
|
|
110
|
+
manyToMany: true,
|
|
111
|
+
filtered: false,
|
|
112
|
+
ordered: false,
|
|
113
|
+
paginated: false
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function queryOptionsForDialect(dialect, params, transaction) {
|
|
118
|
+
return {
|
|
119
|
+
...dialect === "postgres" ? { bind: params } : { replacements: params },
|
|
120
|
+
...transaction ? { transaction } : {},
|
|
121
|
+
raw: true
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function createSequelizeAdapter(sequelize, dialect) {
|
|
125
|
+
return {
|
|
126
|
+
dialect,
|
|
127
|
+
async query(sql, params) {
|
|
128
|
+
await sequelize.authenticate();
|
|
129
|
+
return normalizeSequelizeResult(
|
|
130
|
+
sql,
|
|
131
|
+
await sequelize.query(sql, queryOptionsForDialect(dialect, params)),
|
|
132
|
+
dialect
|
|
133
|
+
);
|
|
134
|
+
},
|
|
135
|
+
async transaction(run) {
|
|
136
|
+
await sequelize.authenticate();
|
|
137
|
+
return sequelize.transaction(async (transaction) => {
|
|
138
|
+
const transactionAdapter = {
|
|
139
|
+
dialect,
|
|
140
|
+
async query(sql, params) {
|
|
141
|
+
return normalizeSequelizeResult(
|
|
142
|
+
sql,
|
|
143
|
+
await sequelize.query(sql, queryOptionsForDialect(dialect, params, transaction)),
|
|
144
|
+
dialect
|
|
145
|
+
);
|
|
146
|
+
},
|
|
147
|
+
async transaction(nestedRun) {
|
|
148
|
+
return nestedRun(transactionAdapter);
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
return run(transactionAdapter);
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function createSequelizeDriver(config) {
|
|
157
|
+
const dialect = resolveSequelizeDialect(config.sequelize, config.dialect);
|
|
158
|
+
const handle = config.handle ?? createDriverHandle({
|
|
159
|
+
kind: "sequelize",
|
|
160
|
+
client: config.sequelize,
|
|
161
|
+
dialect,
|
|
162
|
+
capabilities: {
|
|
163
|
+
...sequelizeDriverCapabilities(dialect),
|
|
164
|
+
...config.capabilities
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
return createSqlDriverFromAdapter(
|
|
168
|
+
createSequelizeAdapter(config.sequelize, dialect),
|
|
169
|
+
handle
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
export {
|
|
173
|
+
createSequelizeDriver,
|
|
174
|
+
normalizeSequelizeDialect,
|
|
175
|
+
resolveSequelizeDialect
|
|
176
|
+
};
|
|
177
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n createDriverHandle,\n type OrmDriver,\n type OrmDriverCapabilityInput,\n type OrmDriverHandle,\n type SchemaDefinition,\n} from \"@farming-labs/orm\";\nimport { createSqlDriverFromAdapter, type SqlAdapterLike } from \"@farming-labs/orm-sql\";\n\ntype SqlDialect = \"mysql\" | \"postgres\";\ntype SqlRow = Record<string, unknown>;\ntype SqlQueryResult = {\n rows: SqlRow[];\n affectedRows: number;\n insertId?: unknown;\n};\n\ntype SequelizeQueryOptionsLike = {\n bind?: readonly unknown[];\n replacements?: readonly unknown[];\n transaction?: SequelizeTransactionLike;\n raw?: boolean;\n};\n\ntype SequelizeQueryMetadataLike = {\n rowCount?: number;\n affectedRows?: number;\n insertId?: unknown;\n};\n\nexport type SequelizeDriverDialect = SqlDialect;\nexport type SequelizeDriverHandle<\n TClient = unknown,\n TDialect extends SequelizeDriverDialect = SequelizeDriverDialect,\n> = OrmDriverHandle<\"sequelize\", TClient, TDialect>;\n\nexport type SequelizeTransactionLike = {\n afterCommit?(callback: () => void): void;\n};\n\nexport type SequelizeLike = {\n readonly options?: {\n dialect?: string;\n };\n authenticate(): Promise<unknown>;\n close(): Promise<unknown>;\n query(...args: any[]): Promise<unknown>;\n transaction<TResult>(\n run: (transaction: SequelizeTransactionLike) => Promise<TResult>,\n ): Promise<TResult>;\n};\n\nexport type SequelizeDriverConfig<TSchema extends SchemaDefinition<any>> = {\n sequelize: SequelizeLike;\n dialect?: SequelizeDriverDialect;\n capabilities?: OrmDriverCapabilityInput;\n handle?: SequelizeDriverHandle<SequelizeLike>;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\";\n}\n\nfunction toNumber(value: unknown) {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"bigint\") return Number(value);\n return undefined;\n}\n\nfunction isSqlSelectLike(sql: string) {\n return /^\\s*(select|with|pragma|explain)\\b/i.test(sql);\n}\n\nfunction formatMysqlDateForDecoder(value: Date) {\n return value.toISOString().replace(\"T\", \" \").replace(\"Z\", \"\");\n}\n\nfunction normalizeMysqlRowValue(value: unknown): unknown {\n if (value instanceof Date) {\n return formatMysqlDateForDecoder(value);\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeMysqlRowValue(entry));\n }\n\n if (isRecord(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, normalizeMysqlRowValue(entry)]),\n );\n }\n\n return value;\n}\n\nfunction normalizeRowsForDialect(rows: SqlRow[], dialect: SequelizeDriverDialect) {\n if (dialect !== \"mysql\") {\n return rows;\n }\n\n return rows.map((row) => normalizeMysqlRowValue(row) as SqlRow);\n}\n\nexport function normalizeSequelizeDialect(value: unknown): SequelizeDriverDialect | undefined {\n switch (value) {\n case \"postgres\":\n case \"postgresql\":\n return \"postgres\";\n case \"mysql\":\n case \"mariadb\":\n return \"mysql\";\n default:\n return undefined;\n }\n}\n\nexport function resolveSequelizeDialect(\n sequelize: SequelizeLike,\n override?: SequelizeDriverDialect,\n): SequelizeDriverDialect {\n const dialect = override ?? normalizeSequelizeDialect(sequelize.options?.dialect);\n if (!dialect) {\n throw new Error(\n 'Could not determine the Sequelize dialect. Pass `dialect` explicitly or use a supported Sequelize dialect such as \"postgres\", \"postgresql\", \"mysql\", or \"mariadb\".',\n );\n }\n\n return dialect;\n}\n\nfunction normalizeSequelizeResult(\n sql: string,\n result: unknown,\n dialect: SequelizeDriverDialect,\n): SqlQueryResult {\n if (!Array.isArray(result)) {\n return {\n rows: [],\n affectedRows: 0,\n };\n }\n\n const [rowsOrResult, metadata] = result as [unknown, unknown];\n const rows = Array.isArray(rowsOrResult)\n ? (rowsOrResult as SqlRow[])\n : isRecord(rowsOrResult)\n ? [rowsOrResult as SqlRow]\n : [];\n\n const metadataRecord = isRecord(metadata) ? (metadata as SequelizeQueryMetadataLike) : undefined;\n const rowsRecord = isRecord(rowsOrResult)\n ? (rowsOrResult as SequelizeQueryMetadataLike)\n : undefined;\n\n const affectedRows =\n toNumber(metadataRecord?.rowCount) ??\n toNumber(metadataRecord?.affectedRows) ??\n toNumber(rowsRecord?.rowCount) ??\n toNumber(rowsRecord?.affectedRows) ??\n (typeof metadata === \"number\" ? metadata : undefined) ??\n (isSqlSelectLike(sql) ? rows.length : 0);\n\n const insertId = metadataRecord?.insertId ?? rowsRecord?.insertId;\n\n return {\n rows: normalizeRowsForDialect(rows, dialect),\n affectedRows,\n insertId,\n };\n}\n\nfunction sequelizeDriverCapabilities(dialect: SequelizeDriverDialect): OrmDriverCapabilityInput {\n return {\n numericIds: \"generated\",\n supportsJSON: true,\n supportsDates: true,\n supportsBooleans: true,\n supportsTransactions: true,\n supportsSchemaNamespaces: dialect === \"postgres\",\n supportsTransactionalDDL: dialect !== \"mysql\",\n nativeRelationLoading: \"partial\",\n textComparison: \"database-default\",\n textMatching: {\n equality: \"database-default\",\n contains: \"database-default\",\n ordering: \"database-default\",\n },\n upsert: \"native\",\n returning: {\n create: true,\n update: true,\n delete: false,\n },\n returningMode: {\n create: \"record\",\n update: \"record\",\n delete: \"none\",\n },\n nativeRelations: {\n singularChains: true,\n hasMany: true,\n manyToMany: true,\n filtered: false,\n ordered: false,\n paginated: false,\n },\n };\n}\n\nfunction queryOptionsForDialect(\n dialect: SequelizeDriverDialect,\n params: unknown[],\n transaction?: SequelizeTransactionLike,\n): SequelizeQueryOptionsLike {\n return {\n ...(dialect === \"postgres\" ? { bind: params } : { replacements: params }),\n ...(transaction ? { transaction } : {}),\n raw: true,\n };\n}\n\nfunction createSequelizeAdapter(\n sequelize: SequelizeLike,\n dialect: SequelizeDriverDialect,\n): SqlAdapterLike {\n return {\n dialect,\n async query(sql, params) {\n await sequelize.authenticate();\n return normalizeSequelizeResult(\n sql,\n await sequelize.query(sql, queryOptionsForDialect(dialect, params)),\n dialect,\n );\n },\n async transaction<TResult>(run: (adapter: SqlAdapterLike) => Promise<TResult>) {\n await sequelize.authenticate();\n\n return sequelize.transaction(async (transaction) => {\n const transactionAdapter: SqlAdapterLike = {\n dialect,\n async query(sql, params) {\n return normalizeSequelizeResult(\n sql,\n await sequelize.query(sql, queryOptionsForDialect(dialect, params, transaction)),\n dialect,\n );\n },\n async transaction<TResultInner>(\n nestedRun: (adapter: SqlAdapterLike) => Promise<TResultInner>,\n ) {\n return nestedRun(transactionAdapter);\n },\n };\n\n return run(transactionAdapter);\n });\n },\n };\n}\n\nexport function createSequelizeDriver<TSchema extends SchemaDefinition<any>>(\n config: SequelizeDriverConfig<TSchema>,\n): OrmDriver<TSchema, SequelizeDriverHandle<SequelizeLike>> {\n const dialect = resolveSequelizeDialect(config.sequelize, config.dialect);\n const handle =\n config.handle ??\n createDriverHandle({\n kind: \"sequelize\",\n client: config.sequelize,\n dialect,\n capabilities: {\n ...sequelizeDriverCapabilities(dialect),\n ...config.capabilities,\n },\n });\n\n return createSqlDriverFromAdapter<TSchema, SequelizeDriverHandle<SequelizeLike>>(\n createSequelizeAdapter(config.sequelize, dialect),\n handle,\n );\n}\n"],"mappings":"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","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@farming-labs/orm-sequelize",
|
|
3
|
+
"version": "0.0.34",
|
|
4
|
+
"files": [
|
|
5
|
+
"dist"
|
|
6
|
+
],
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "./dist/index.cjs",
|
|
9
|
+
"module": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.js",
|
|
15
|
+
"require": "./dist/index.cjs"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@farming-labs/orm": "0.0.34",
|
|
23
|
+
"@farming-labs/orm-sql": "0.0.34"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@types/pg": "^8.15.6",
|
|
27
|
+
"mysql2": "^3.15.2",
|
|
28
|
+
"pg": "^8.16.3",
|
|
29
|
+
"sequelize": "^6.37.8",
|
|
30
|
+
"tsup": "^8.4.0"
|
|
31
|
+
},
|
|
32
|
+
"peerDependencies": {
|
|
33
|
+
"sequelize": "^6.37.8"
|
|
34
|
+
},
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "tsx ./scripts/build.ts",
|
|
37
|
+
"test": "vitest run --config vitest.local.config.ts",
|
|
38
|
+
"typecheck": "tsc --noEmit"
|
|
39
|
+
}
|
|
40
|
+
}
|