@danceroutine/tango-orm 0.1.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/dist/PostgresAdapter-DCF8T4vh.js +3 -0
- package/dist/PostgresAdapter-_X36-mLL.js +73 -0
- package/dist/PostgresAdapter-_X36-mLL.js.map +1 -0
- package/dist/QuerySet-BzR5QzGi.js +411 -0
- package/dist/QuerySet-BzR5QzGi.js.map +1 -0
- package/dist/SqliteAdapter-CBnxCznk.js +3 -0
- package/dist/SqliteAdapter-J03fEjmr.js +70 -0
- package/dist/SqliteAdapter-J03fEjmr.js.map +1 -0
- package/dist/chunk-DLY2FNSh.js +12 -0
- package/dist/connection/adapters/Adapter.d.ts +20 -0
- package/dist/connection/adapters/AdapterRegistry.d.ts +17 -0
- package/dist/connection/adapters/dialects/PostgresAdapter.d.ts +22 -0
- package/dist/connection/adapters/dialects/SqliteAdapter.d.ts +14 -0
- package/dist/connection/adapters/dialects/index.d.ts +5 -0
- package/dist/connection/adapters/index.d.ts +8 -0
- package/dist/connection/clients/DBClient.d.ts +9 -0
- package/dist/connection/clients/DBClient.js +1 -0
- package/dist/connection/clients/dialects/PostgresClient.d.ts +17 -0
- package/dist/connection/clients/dialects/PostgresClient.js +32 -0
- package/dist/connection/clients/dialects/SqliteClient.d.ts +17 -0
- package/dist/connection/clients/dialects/SqliteClient.js +44 -0
- package/dist/connection/clients/dialects/index.d.ts +5 -0
- package/dist/connection/clients/index.d.ts +7 -0
- package/dist/connection/index.d.ts +11 -0
- package/dist/connection/index.js +5 -0
- package/dist/connection-DytAsjC9.js +102 -0
- package/dist/connection-DytAsjC9.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +9 -0
- package/dist/query/QBuilder.d.ts +11 -0
- package/dist/query/QuerySet.d.ts +64 -0
- package/dist/query/QuerySet.js +108 -0
- package/dist/query/compiler/QueryCompiler.d.ts +20 -0
- package/dist/query/compiler/QueryCompiler.js +183 -0
- package/dist/query/compiler/index.d.ts +4 -0
- package/dist/query/domain/CompiledQuery.d.ts +4 -0
- package/dist/query/domain/CompiledQuery.js +1 -0
- package/dist/query/domain/Dialect.d.ts +2 -0
- package/dist/query/domain/Direction.d.ts +2 -0
- package/dist/query/domain/FilterInput.d.ts +3 -0
- package/dist/query/domain/FilterKey.d.ts +2 -0
- package/dist/query/domain/FilterValue.d.ts +1 -0
- package/dist/query/domain/LookupType.d.ts +2 -0
- package/dist/query/domain/OrderSpec.d.ts +5 -0
- package/dist/query/domain/OrderToken.d.ts +1 -0
- package/dist/query/domain/QNode.d.ts +9 -0
- package/dist/query/domain/QueryResult.d.ts +4 -0
- package/dist/query/domain/QuerySetState.d.ts +13 -0
- package/dist/query/domain/RelationMeta.d.ts +10 -0
- package/dist/query/domain/RepositoryMeta.d.ts +7 -0
- package/dist/query/domain/WhereClause.d.ts +4 -0
- package/dist/query/domain/WhereClause.js +1 -0
- package/dist/query/domain/index.d.ts +18 -0
- package/dist/query/domain/internal/InternalDialect.d.ts +4 -0
- package/dist/query/domain/internal/InternalDirection.d.ts +4 -0
- package/dist/query/domain/internal/InternalLookupType.d.ts +15 -0
- package/dist/query/domain/internal/InternalQNodeType.d.ts +6 -0
- package/dist/query/domain/internal/InternalRelationKind.d.ts +5 -0
- package/dist/query/index.d.ts +12 -0
- package/dist/query/index.js +4 -0
- package/dist/query-CQbvLeuh.js +21 -0
- package/dist/query-CQbvLeuh.js.map +1 -0
- package/dist/repository/Repository.d.ts +40 -0
- package/dist/repository/Repository.js +100 -0
- package/dist/repository/index.d.ts +4 -0
- package/dist/repository/index.js +4 -0
- package/dist/repository-DaRvsfjs.js +78 -0
- package/dist/repository-DaRvsfjs.js.map +1 -0
- package/dist/transaction/UnitOfWork.d.ts +31 -0
- package/dist/transaction/index.d.ts +4 -0
- package/dist/transaction/index.js +3 -0
- package/dist/transaction-DIGJnp19.js +50 -0
- package/dist/transaction-DIGJnp19.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-DaRvsfjs.js","names":["value: unknown","client: DBClient","dialect: 'postgres' | 'sqlite'","id: T[keyof T]","input: Partial<T>","patch: Partial<T>","inputs: Partial<T>[]"],"sources":["../src/repository/Repository.ts","../src/repository/index.ts"],"sourcesContent":["import type { DBClient } from '../connection/clients/DBClient';\nimport { QuerySet } from '../query/QuerySet';\nimport type { RepositoryMeta } from '../query/domain/RepositoryMeta';\n\n/**\n * Base repository class providing CRUD operations and query building capabilities.\n * Extend this class to create model-specific repositories with custom business logic.\n *\n * @template T - The model type this repository manages\n *\n * @example\n * ```typescript\n * class UserRepository extends Repository<User> {\n * meta = {\n * table: 'users',\n * pk: 'id',\n * columns: { id: 'int', email: 'text', name: 'text' },\n * };\n *\n * async findByEmail(email: string): Promise<User | null> {\n * return this.query().filter({ email }).fetchOne();\n * }\n * }\n * ```\n */\nexport abstract class Repository<T extends Record<string, any>> {\n static readonly BRAND = 'tango.orm.repository' as const;\n readonly __tangoBrand: typeof Repository.BRAND = Repository.BRAND;\n abstract meta: RepositoryMeta;\n protected client: DBClient;\n protected dialect: 'postgres' | 'sqlite';\n\n static isRepository<T extends Record<string, any>>(value: unknown): value is Repository<T> {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { __tangoBrand?: unknown }).__tangoBrand === Repository.BRAND\n );\n }\n\n constructor(client: DBClient, dialect: 'postgres' | 'sqlite' = 'postgres') {\n this.client = client;\n this.dialect = dialect;\n }\n\n query(): QuerySet<T> {\n return new QuerySet<T>(\n {\n meta: this.meta,\n client: this.client,\n dialect: this.dialect,\n run: async (compiled) => {\n const result = await this.client.query<T>(compiled.sql, compiled.params);\n return result.rows;\n },\n },\n {}\n );\n }\n\n async findById(id: T[keyof T]): Promise<T | null> {\n const result = await this.query()\n .filter({ [this.meta.pk]: id } as any)\n .fetchOne();\n return result;\n }\n\n async getOrThrow(id: T[keyof T]): Promise<T> {\n const result = await this.findById(id);\n if (!result) {\n throw new Error(`${this.meta.table} with ${this.meta.pk}=${String(id)} not found`);\n }\n return result;\n }\n\n async create(input: Partial<T>): Promise<T> {\n const keys = Object.keys(input);\n const values = Object.values(input);\n\n const placeholder =\n this.dialect === 'postgres' ? keys.map((_, i) => `$${i + 1}`).join(', ') : keys.map(() => '?').join(', ');\n\n const sql = `INSERT INTO ${this.meta.table} (${keys.join(', ')}) VALUES (${placeholder}) RETURNING *`;\n\n const result = await this.client.query<T>(sql, values);\n return result.rows[0]!;\n }\n\n async update(id: T[keyof T], patch: Partial<T>): Promise<T> {\n const keys = Object.keys(patch);\n const values = Object.values(patch);\n\n const sets =\n this.dialect === 'postgres'\n ? keys.map((k, i) => `${k} = $${i + 1}`).join(', ')\n : keys.map((k) => `${k} = ?`).join(', ');\n\n const whereParam = this.dialect === 'postgres' ? `$${keys.length + 1}` : '?';\n\n const sql = `UPDATE ${this.meta.table} SET ${sets} WHERE ${this.meta.pk} = ${whereParam} RETURNING *`;\n\n const result = await this.client.query<T>(sql, [...values, id]);\n return result.rows[0]!;\n }\n\n async delete(id: T[keyof T]): Promise<void> {\n const placeholder = this.dialect === 'postgres' ? '$1' : '?';\n const sql = `DELETE FROM ${this.meta.table} WHERE ${this.meta.pk} = ${placeholder}`;\n await this.client.query(sql, [id]);\n }\n\n async bulkCreate(inputs: Partial<T>[]): Promise<T[]> {\n if (inputs.length === 0) return [];\n\n const keys = Object.keys(inputs[0]!);\n const valueRows = inputs.map((input) => Object.values(input));\n\n const placeholders =\n this.dialect === 'postgres'\n ? valueRows\n .map(\n (_, rowIdx) =>\n `(${keys.map((_, colIdx) => `$${rowIdx * keys.length + colIdx + 1}`).join(', ')})`\n )\n .join(', ')\n : valueRows.map(() => `(${keys.map(() => '?').join(', ')})`).join(', ');\n\n const sql = `INSERT INTO ${this.meta.table} (${keys.join(', ')}) VALUES ${placeholders} RETURNING *`;\n\n const allValues = valueRows.flat();\n const result = await this.client.query<T>(sql, allValues);\n return result.rows;\n }\n}\n","/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nexport { Repository } from './Repository';\n"],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { DBClient } from '../connection/clients/DBClient';
|
|
2
|
+
/**
|
|
3
|
+
* Unit of Work pattern implementation for managing database transactions.
|
|
4
|
+
* Ensures that a set of operations either all succeed or all fail together.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* const uow = await UnitOfWork.start(dbClient);
|
|
9
|
+
* try {
|
|
10
|
+
* await userRepo.create({ email: 'test@example.com' });
|
|
11
|
+
* await postRepo.create({ title: 'Hello' });
|
|
12
|
+
* await uow.commit();
|
|
13
|
+
* } catch (error) {
|
|
14
|
+
* await uow.rollback();
|
|
15
|
+
* throw error;
|
|
16
|
+
* }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare class UnitOfWork {
|
|
20
|
+
static readonly BRAND: "tango.orm.unit_of_work";
|
|
21
|
+
readonly __tangoBrand: typeof UnitOfWork.BRAND;
|
|
22
|
+
protected client: DBClient;
|
|
23
|
+
protected isActive: boolean;
|
|
24
|
+
static isUnitOfWork(value: unknown): value is UnitOfWork;
|
|
25
|
+
constructor(client: DBClient);
|
|
26
|
+
begin(): Promise<void>;
|
|
27
|
+
commit(): Promise<void>;
|
|
28
|
+
rollback(): Promise<void>;
|
|
29
|
+
getClient(): DBClient;
|
|
30
|
+
static start(client: DBClient): Promise<UnitOfWork>;
|
|
31
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { __export } from "./chunk-DLY2FNSh.js";
|
|
2
|
+
|
|
3
|
+
//#region src/transaction/UnitOfWork.ts
|
|
4
|
+
var UnitOfWork = class UnitOfWork {
|
|
5
|
+
static BRAND = "tango.orm.unit_of_work";
|
|
6
|
+
__tangoBrand = UnitOfWork.BRAND;
|
|
7
|
+
client;
|
|
8
|
+
isActive = false;
|
|
9
|
+
static isUnitOfWork(value) {
|
|
10
|
+
return typeof value === "object" && value !== null && value.__tangoBrand === UnitOfWork.BRAND;
|
|
11
|
+
}
|
|
12
|
+
constructor(client) {
|
|
13
|
+
this.client = client;
|
|
14
|
+
}
|
|
15
|
+
async begin() {
|
|
16
|
+
if (!this.isActive) {
|
|
17
|
+
await this.client.begin();
|
|
18
|
+
this.isActive = true;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async commit() {
|
|
22
|
+
if (this.isActive) {
|
|
23
|
+
await this.client.commit();
|
|
24
|
+
this.isActive = false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async rollback() {
|
|
28
|
+
if (this.isActive) {
|
|
29
|
+
await this.client.rollback();
|
|
30
|
+
this.isActive = false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
getClient() {
|
|
34
|
+
return this.client;
|
|
35
|
+
}
|
|
36
|
+
static async start(client) {
|
|
37
|
+
const uow = new UnitOfWork(client);
|
|
38
|
+
await uow.begin();
|
|
39
|
+
return uow;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
//#endregion
|
|
44
|
+
//#region src/transaction/index.ts
|
|
45
|
+
var transaction_exports = {};
|
|
46
|
+
__export(transaction_exports, { UnitOfWork: () => UnitOfWork });
|
|
47
|
+
|
|
48
|
+
//#endregion
|
|
49
|
+
export { UnitOfWork, transaction_exports };
|
|
50
|
+
//# sourceMappingURL=transaction-DIGJnp19.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-DIGJnp19.js","names":["value: unknown","client: DBClient"],"sources":["../src/transaction/UnitOfWork.ts","../src/transaction/index.ts"],"sourcesContent":["import type { DBClient } from '../connection/clients/DBClient';\n\n/**\n * Unit of Work pattern implementation for managing database transactions.\n * Ensures that a set of operations either all succeed or all fail together.\n *\n * @example\n * ```typescript\n * const uow = await UnitOfWork.start(dbClient);\n * try {\n * await userRepo.create({ email: 'test@example.com' });\n * await postRepo.create({ title: 'Hello' });\n * await uow.commit();\n * } catch (error) {\n * await uow.rollback();\n * throw error;\n * }\n * ```\n */\nexport class UnitOfWork {\n static readonly BRAND = 'tango.orm.unit_of_work' as const;\n readonly __tangoBrand: typeof UnitOfWork.BRAND = UnitOfWork.BRAND;\n protected client: DBClient;\n protected isActive = false;\n\n static isUnitOfWork(value: unknown): value is UnitOfWork {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { __tangoBrand?: unknown }).__tangoBrand === UnitOfWork.BRAND\n );\n }\n\n constructor(client: DBClient) {\n this.client = client;\n }\n\n async begin(): Promise<void> {\n if (!this.isActive) {\n await this.client.begin();\n this.isActive = true;\n }\n }\n\n async commit(): Promise<void> {\n if (this.isActive) {\n await this.client.commit();\n this.isActive = false;\n }\n }\n\n async rollback(): Promise<void> {\n if (this.isActive) {\n await this.client.rollback();\n this.isActive = false;\n }\n }\n\n getClient(): DBClient {\n return this.client;\n }\n\n static async start(client: DBClient): Promise<UnitOfWork> {\n const uow = new UnitOfWork(client);\n await uow.begin();\n return uow;\n }\n}\n","/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nexport { UnitOfWork } from './UnitOfWork';\n"],"mappings":";;;IAmBa,aAAN,MAAM,WAAW;CACpB,OAAgB,QAAQ;CACxB,eAAiD,WAAW;CAC5D;CACA,WAAqB;CAErB,OAAO,aAAaA,OAAqC;AACrD,gBACW,UAAU,YACjB,UAAU,QACT,MAAqC,iBAAiB,WAAW;CAEzE;CAED,YAAYC,QAAkB;AAC1B,OAAK,SAAS;CACjB;CAED,MAAM,QAAuB;AACzB,OAAK,KAAK,UAAU;AAChB,SAAM,KAAK,OAAO,OAAO;AACzB,QAAK,WAAW;EACnB;CACJ;CAED,MAAM,SAAwB;AAC1B,MAAI,KAAK,UAAU;AACf,SAAM,KAAK,OAAO,QAAQ;AAC1B,QAAK,WAAW;EACnB;CACJ;CAED,MAAM,WAA0B;AAC5B,MAAI,KAAK,UAAU;AACf,SAAM,KAAK,OAAO,UAAU;AAC5B,QAAK,WAAW;EACnB;CACJ;CAED,YAAsB;AAClB,SAAO,KAAK;CACf;CAED,aAAa,MAAMA,QAAuC;EACtD,MAAM,MAAM,IAAI,WAAW;AAC3B,QAAM,IAAI,OAAO;AACjB,SAAO;CACV;AACJ"}
|
package/package.json
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@danceroutine/tango-orm",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "QuerySet, Repository, UnitOfWork, and database adapters for Tango",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./query": {
|
|
14
|
+
"types": "./dist/query/index.d.ts",
|
|
15
|
+
"import": "./dist/query/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./connection": {
|
|
18
|
+
"types": "./dist/connection/index.d.ts",
|
|
19
|
+
"import": "./dist/connection/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./transaction": {
|
|
22
|
+
"types": "./dist/transaction/index.d.ts",
|
|
23
|
+
"import": "./dist/transaction/index.js"
|
|
24
|
+
},
|
|
25
|
+
"./repository": {
|
|
26
|
+
"types": "./dist/repository/index.d.ts",
|
|
27
|
+
"import": "./dist/repository/index.js"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"dist"
|
|
32
|
+
],
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build": "tsdown",
|
|
35
|
+
"test": "vitest run --coverage",
|
|
36
|
+
"test:integration": "vitest run src/tests/integration",
|
|
37
|
+
"test:watch": "vitest",
|
|
38
|
+
"typecheck": "tsc --noEmit"
|
|
39
|
+
},
|
|
40
|
+
"keywords": [
|
|
41
|
+
"tango",
|
|
42
|
+
"orm",
|
|
43
|
+
"queryset",
|
|
44
|
+
"repository",
|
|
45
|
+
"database"
|
|
46
|
+
],
|
|
47
|
+
"author": "Pedro Del Moral Lopez",
|
|
48
|
+
"license": "MIT",
|
|
49
|
+
"repository": {
|
|
50
|
+
"type": "git",
|
|
51
|
+
"url": "https://github.com/danceroutine/tango.git",
|
|
52
|
+
"directory": "packages/orm"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@danceroutine/tango-config": "workspace:*",
|
|
56
|
+
"@danceroutine/tango-core": "workspace:*"
|
|
57
|
+
},
|
|
58
|
+
"peerDependencies": {
|
|
59
|
+
"pg": "^8.13.1",
|
|
60
|
+
"better-sqlite3": "^11.7.0"
|
|
61
|
+
},
|
|
62
|
+
"peerDependenciesMeta": {
|
|
63
|
+
"pg": {
|
|
64
|
+
"optional": true
|
|
65
|
+
},
|
|
66
|
+
"better-sqlite3": {
|
|
67
|
+
"optional": true
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"devDependencies": {
|
|
71
|
+
"@danceroutine/tango-migrations": "workspace:*",
|
|
72
|
+
"@danceroutine/tango-testing": "workspace:*",
|
|
73
|
+
"@types/better-sqlite3": "^7.6.12",
|
|
74
|
+
"@types/node": "^22.9.0",
|
|
75
|
+
"@types/pg": "^8.11.10",
|
|
76
|
+
"better-sqlite3": "^11.7.0",
|
|
77
|
+
"pg": "^8.13.1",
|
|
78
|
+
"tsdown": "^0.4.0",
|
|
79
|
+
"typescript": "^5.6.3",
|
|
80
|
+
"vitest": "^4.0.6"
|
|
81
|
+
}
|
|
82
|
+
}
|