@cinnabun/db 0.0.1
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 +166 -0
- package/dist/__tests__/integration/drizzle-sqlite.integration.test.d.ts +1 -0
- package/dist/__tests__/integration/drizzle-sqlite.integration.test.js +135 -0
- package/dist/__tests__/integration/drizzle-sqlite.integration.test.js.map +1 -0
- package/dist/__tests__/unit/database-module.test.d.ts +1 -0
- package/dist/__tests__/unit/database-module.test.js +43 -0
- package/dist/__tests__/unit/database-module.test.js.map +1 -0
- package/dist/__tests__/unit/drizzle-adapter.test.d.ts +1 -0
- package/dist/__tests__/unit/drizzle-adapter.test.js +61 -0
- package/dist/__tests__/unit/drizzle-adapter.test.js.map +1 -0
- package/dist/__tests__/unit/exceptions.test.d.ts +1 -0
- package/dist/__tests__/unit/exceptions.test.js +37 -0
- package/dist/__tests__/unit/exceptions.test.js.map +1 -0
- package/dist/__tests__/unit/metadata.test.d.ts +1 -0
- package/dist/__tests__/unit/metadata.test.js +58 -0
- package/dist/__tests__/unit/metadata.test.js.map +1 -0
- package/dist/__tests__/unit/transactional.test.d.ts +1 -0
- package/dist/__tests__/unit/transactional.test.js +55 -0
- package/dist/__tests__/unit/transactional.test.js.map +1 -0
- package/dist/adapters/base/base.adapter.d.ts +20 -0
- package/dist/adapters/base/base.adapter.js +30 -0
- package/dist/adapters/base/base.adapter.js.map +1 -0
- package/dist/adapters/drizzle/drizzle-repository.d.ts +16 -0
- package/dist/adapters/drizzle/drizzle-repository.js +81 -0
- package/dist/adapters/drizzle/drizzle-repository.js.map +1 -0
- package/dist/adapters/drizzle/drizzle.adapter.d.ts +17 -0
- package/dist/adapters/drizzle/drizzle.adapter.js +94 -0
- package/dist/adapters/drizzle/drizzle.adapter.js.map +1 -0
- package/dist/adapters/prisma/prisma-repository.d.ts +16 -0
- package/dist/adapters/prisma/prisma-repository.js +56 -0
- package/dist/adapters/prisma/prisma-repository.js.map +1 -0
- package/dist/adapters/prisma/prisma.adapter.d.ts +11 -0
- package/dist/adapters/prisma/prisma.adapter.js +86 -0
- package/dist/adapters/prisma/prisma.adapter.js.map +1 -0
- package/dist/cli/commands/db-generate.command.d.ts +2 -0
- package/dist/cli/commands/db-generate.command.js +33 -0
- package/dist/cli/commands/db-generate.command.js.map +1 -0
- package/dist/cli/commands/db-migrate.command.d.ts +2 -0
- package/dist/cli/commands/db-migrate.command.js +35 -0
- package/dist/cli/commands/db-migrate.command.js.map +1 -0
- package/dist/cli/register-db-commands.d.ts +2 -0
- package/dist/cli/register-db-commands.js +10 -0
- package/dist/cli/register-db-commands.js.map +1 -0
- package/dist/cli/utils/config-loader.d.ts +2 -0
- package/dist/cli/utils/config-loader.js +34 -0
- package/dist/cli/utils/config-loader.js.map +1 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.js +3 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/database.module.d.ts +12 -0
- package/dist/core/database.module.js +54 -0
- package/dist/core/database.module.js.map +1 -0
- package/dist/core/database.plugin.d.ts +6 -0
- package/dist/core/database.plugin.js +15 -0
- package/dist/core/database.plugin.js.map +1 -0
- package/dist/core/repository-factory.d.ts +6 -0
- package/dist/core/repository-factory.js +31 -0
- package/dist/core/repository-factory.js.map +1 -0
- package/dist/core/transaction-manager.d.ts +8 -0
- package/dist/core/transaction-manager.js +43 -0
- package/dist/core/transaction-manager.js.map +1 -0
- package/dist/decorators/inject-repository.decorator.d.ts +3 -0
- package/dist/decorators/inject-repository.decorator.js +35 -0
- package/dist/decorators/inject-repository.decorator.js.map +1 -0
- package/dist/decorators/transactional.decorator.d.ts +4 -0
- package/dist/decorators/transactional.decorator.js +22 -0
- package/dist/decorators/transactional.decorator.js.map +1 -0
- package/dist/exceptions/database.exception.d.ts +15 -0
- package/dist/exceptions/database.exception.js +31 -0
- package/dist/exceptions/database.exception.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/database-adapter.interface.d.ts +16 -0
- package/dist/interfaces/database-adapter.interface.js +2 -0
- package/dist/interfaces/database-adapter.interface.js.map +1 -0
- package/dist/interfaces/options.interface.d.ts +12 -0
- package/dist/interfaces/options.interface.js +2 -0
- package/dist/interfaces/options.interface.js.map +1 -0
- package/dist/interfaces/repository.interface.d.ts +16 -0
- package/dist/interfaces/repository.interface.js +2 -0
- package/dist/interfaces/repository.interface.js.map +1 -0
- package/dist/metadata/db-storage.d.ts +13 -0
- package/dist/metadata/db-storage.js +14 -0
- package/dist/metadata/db-storage.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { Module } from "@cinnabun/core";
|
|
8
|
+
import { DrizzleAdapter } from "../adapters/drizzle/drizzle.adapter.js";
|
|
9
|
+
import { PrismaAdapter } from "../adapters/prisma/prisma.adapter.js";
|
|
10
|
+
import { DatabasePlugin } from "./database.plugin.js";
|
|
11
|
+
let _adapterInstance = null;
|
|
12
|
+
let _moduleOptions = null;
|
|
13
|
+
export class DatabaseModule {
|
|
14
|
+
static forRoot(options) {
|
|
15
|
+
const adapter = DatabaseModule.createAdapter(options);
|
|
16
|
+
_adapterInstance = adapter;
|
|
17
|
+
_moduleOptions = options;
|
|
18
|
+
let DatabaseDynamicModule = class DatabaseDynamicModule {
|
|
19
|
+
};
|
|
20
|
+
DatabaseDynamicModule = __decorate([
|
|
21
|
+
Module({
|
|
22
|
+
providers: [],
|
|
23
|
+
exports: [],
|
|
24
|
+
})
|
|
25
|
+
], DatabaseDynamicModule);
|
|
26
|
+
return DatabaseDynamicModule;
|
|
27
|
+
}
|
|
28
|
+
static getAdapter() {
|
|
29
|
+
if (!_adapterInstance) {
|
|
30
|
+
throw new Error("DatabaseModule not initialized. Call DatabaseModule.forRoot() first.");
|
|
31
|
+
}
|
|
32
|
+
return _adapterInstance;
|
|
33
|
+
}
|
|
34
|
+
static getOptions() {
|
|
35
|
+
if (!_moduleOptions) {
|
|
36
|
+
throw new Error("DatabaseModule not initialized. Call DatabaseModule.forRoot() first.");
|
|
37
|
+
}
|
|
38
|
+
return _moduleOptions;
|
|
39
|
+
}
|
|
40
|
+
static createPlugin() {
|
|
41
|
+
return new DatabasePlugin();
|
|
42
|
+
}
|
|
43
|
+
static createAdapter(options) {
|
|
44
|
+
switch (options.adapter) {
|
|
45
|
+
case "drizzle":
|
|
46
|
+
return new DrizzleAdapter(options);
|
|
47
|
+
case "prisma":
|
|
48
|
+
return new PrismaAdapter(options);
|
|
49
|
+
default:
|
|
50
|
+
throw new Error(`Unknown database adapter: ${options.adapter}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=database.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.module.js","sourceRoot":"","sources":["../../src/core/database.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGxC,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,IAAI,gBAAgB,GAA2B,IAAI,CAAC;AACpD,IAAI,cAAc,GAAiC,IAAI,CAAC;AAExD,MAAM,OAAO,cAAc;IAClB,AAAP,MAAM,CAAC,OAAO,CAAC,OAA8B;QAC3C,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACtD,gBAAgB,GAAG,OAAO,CAAC;QAC3B,cAAc,GAAG,OAAO,CAAC;QAMzB,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;SAAG,CAAA;QAAxB,qBAAqB;YAJ1B,MAAM,CAAC;gBACN,SAAS,EAAE,EAAE;gBACb,OAAO,EAAE,EAAE;aACZ,CAAC;WACI,qBAAqB,CAAG;QAE9B,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,UAAU;QACf,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;QACJ,CAAC;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,UAAU;QACf,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;QACJ,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,YAAY;QACjB,OAAO,IAAI,cAAc,EAAE,CAAC;IAC9B,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,OAA8B;QACzD,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,KAAK,SAAS;gBACZ,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;YACrC,KAAK,QAAQ;gBACX,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;YACpC;gBACE,MAAM,IAAI,KAAK,CAAC,6BAA6B,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DatabaseModule } from "./database.module.js";
|
|
2
|
+
export class DatabasePlugin {
|
|
3
|
+
name = "DatabasePlugin";
|
|
4
|
+
async onInit(_context) {
|
|
5
|
+
const adapter = DatabaseModule.getAdapter();
|
|
6
|
+
await adapter.connect();
|
|
7
|
+
}
|
|
8
|
+
async onShutdown(_context) {
|
|
9
|
+
const adapter = DatabaseModule.getAdapter();
|
|
10
|
+
if (adapter.isConnected()) {
|
|
11
|
+
await adapter.disconnect();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=database.plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.plugin.js","sourceRoot":"","sources":["../../src/core/database.plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,OAAO,cAAc;IACzB,IAAI,GAAG,gBAAgB,CAAC;IAExB,KAAK,CAAC,MAAM,CAAC,QAAuB;QAClC,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAuB;QACtC,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,EAAE,CAAC;QAC5C,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAC1B,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { DrizzleAdapter } from "../adapters/drizzle/drizzle.adapter.js";
|
|
2
|
+
import { DrizzleRepository } from "../adapters/drizzle/drizzle-repository.js";
|
|
3
|
+
import { PrismaAdapter } from "../adapters/prisma/prisma.adapter.js";
|
|
4
|
+
import { PrismaRepository } from "../adapters/prisma/prisma-repository.js";
|
|
5
|
+
import { DatabaseModule } from "./database.module.js";
|
|
6
|
+
export class RepositoryFactory {
|
|
7
|
+
cache = new Map();
|
|
8
|
+
getRepository(entity) {
|
|
9
|
+
if (this.cache.has(entity)) {
|
|
10
|
+
return this.cache.get(entity);
|
|
11
|
+
}
|
|
12
|
+
const adapter = DatabaseModule.getAdapter();
|
|
13
|
+
const client = adapter.getClient();
|
|
14
|
+
let repository;
|
|
15
|
+
if (adapter instanceof DrizzleAdapter) {
|
|
16
|
+
repository = new DrizzleRepository(client, entity);
|
|
17
|
+
}
|
|
18
|
+
else if (adapter instanceof PrismaAdapter) {
|
|
19
|
+
repository = new PrismaRepository(client, entity);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
throw new Error(`Unsupported adapter type: ${adapter.constructor.name}`);
|
|
23
|
+
}
|
|
24
|
+
this.cache.set(entity, repository);
|
|
25
|
+
return repository;
|
|
26
|
+
}
|
|
27
|
+
clearCache() {
|
|
28
|
+
this.cache.clear();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=repository-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-factory.js","sourceRoot":"","sources":["../../src/core/repository-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,OAAO,iBAAiB;IACpB,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAEpD,aAAa,CAAI,MAAe;QAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAmB,CAAC;QAClD,CAAC;QAED,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QACnC,IAAI,UAAyB,CAAC;QAE9B,IAAI,OAAO,YAAY,cAAc,EAAE,CAAC;YACtC,UAAU,GAAG,IAAI,iBAAiB,CAAI,MAAM,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;aAAM,IAAI,OAAO,YAAY,aAAa,EAAE,CAAC;YAC5C,UAAU,GAAG,IAAI,gBAAgB,CAAI,MAAM,EAAE,MAAgB,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,6BAA6B,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACnC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,UAAU;QACR,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { TransactionContext } from "../interfaces/database-adapter.interface.js";
|
|
2
|
+
export declare class TransactionManager {
|
|
3
|
+
private currentTx;
|
|
4
|
+
runInTransaction<T>(fn: () => Promise<T>, options?: {
|
|
5
|
+
timeout?: number;
|
|
6
|
+
}): Promise<T>;
|
|
7
|
+
getCurrentTransaction(): TransactionContext | null;
|
|
8
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { DatabaseModule } from "./database.module.js";
|
|
2
|
+
import { TransactionException } from "../exceptions/database.exception.js";
|
|
3
|
+
export class TransactionManager {
|
|
4
|
+
currentTx = null;
|
|
5
|
+
async runInTransaction(fn, options = {}) {
|
|
6
|
+
const adapter = DatabaseModule.getAdapter();
|
|
7
|
+
if (this.currentTx?.isActive) {
|
|
8
|
+
return fn();
|
|
9
|
+
}
|
|
10
|
+
const tx = await adapter.beginTransaction();
|
|
11
|
+
this.currentTx = tx;
|
|
12
|
+
try {
|
|
13
|
+
let result;
|
|
14
|
+
if (options.timeout) {
|
|
15
|
+
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new TransactionException("Transaction timed out")), options.timeout));
|
|
16
|
+
result = await Promise.race([fn(), timeoutPromise]);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
result = await fn();
|
|
20
|
+
}
|
|
21
|
+
await adapter.commitTransaction(tx);
|
|
22
|
+
this.currentTx = null;
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
try {
|
|
27
|
+
await adapter.rollbackTransaction(tx);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Rollback failed, nothing we can do
|
|
31
|
+
}
|
|
32
|
+
this.currentTx = null;
|
|
33
|
+
if (error instanceof TransactionException) {
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
throw new TransactionException(`Transaction failed: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
getCurrentTransaction() {
|
|
40
|
+
return this.currentTx;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=transaction-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-manager.js","sourceRoot":"","sources":["../../src/core/transaction-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAG3E,MAAM,OAAO,kBAAkB;IACrB,SAAS,GAA8B,IAAI,CAAC;IAEpD,KAAK,CAAC,gBAAgB,CACpB,EAAoB,EACpB,UAAgC,EAAE;QAElC,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,EAAE,CAAC;QAE5C,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC;YAC7B,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAEpB,IAAI,CAAC;YACH,IAAI,MAAS,CAAC;YAEd,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CACtD,UAAU,CACR,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,oBAAoB,CAAC,uBAAuB,CAAC,CAAC,EAC/D,OAAO,CAAC,OAAO,CAChB,CACF,CAAC;gBACF,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;YACtB,CAAC;YAED,MAAM,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,qCAAqC;YACvC,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAEtB,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;gBAC1C,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,oBAAoB,CAC5B,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC/E,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,qBAAqB;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { dbMetadataStorage } from "../metadata/db-storage.js";
|
|
2
|
+
import { RepositoryFactory } from "../core/repository-factory.js";
|
|
3
|
+
const FACTORY_KEY = "__repositoryFactory__";
|
|
4
|
+
let _sharedFactory = null;
|
|
5
|
+
export function getSharedRepositoryFactory() {
|
|
6
|
+
if (!_sharedFactory) {
|
|
7
|
+
_sharedFactory = new RepositoryFactory();
|
|
8
|
+
}
|
|
9
|
+
return _sharedFactory;
|
|
10
|
+
}
|
|
11
|
+
export function InjectRepository(entity) {
|
|
12
|
+
return (target, propertyKey) => {
|
|
13
|
+
dbMetadataStorage.addRepositoryInjection({
|
|
14
|
+
target: target.constructor,
|
|
15
|
+
propertyKey: propertyKey,
|
|
16
|
+
entity,
|
|
17
|
+
});
|
|
18
|
+
const storageKey = Symbol(`__repo_${String(propertyKey)}`);
|
|
19
|
+
Object.defineProperty(target, propertyKey, {
|
|
20
|
+
get() {
|
|
21
|
+
if (!this[storageKey]) {
|
|
22
|
+
const factory = this[FACTORY_KEY] ?? getSharedRepositoryFactory();
|
|
23
|
+
this[storageKey] = factory.getRepository(entity);
|
|
24
|
+
}
|
|
25
|
+
return this[storageKey];
|
|
26
|
+
},
|
|
27
|
+
set(value) {
|
|
28
|
+
this[storageKey] = value;
|
|
29
|
+
},
|
|
30
|
+
enumerable: true,
|
|
31
|
+
configurable: true,
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=inject-repository.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-repository.decorator.js","sourceRoot":"","sources":["../../src/decorators/inject-repository.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAE5C,IAAI,cAAc,GAA6B,IAAI,CAAC;AAEpD,MAAM,UAAU,0BAA0B;IACxC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,cAAc,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAe;IAC9C,OAAO,CAAC,MAAc,EAAE,WAA4B,EAAE,EAAE;QACtD,iBAAiB,CAAC,sBAAsB,CAAC;YACvC,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,WAAW,EAAE,WAAqB;YAClC,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAE3D,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE;YACzC,GAAG;gBACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;oBACtB,MAAM,OAAO,GACX,IAAI,CAAC,WAAW,CAAC,IAAI,0BAA0B,EAAE,CAAC;oBACpD,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBACnD,CAAC;gBACD,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1B,CAAC;YACD,GAAG,CAAY,KAAU;gBACvB,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;YAC3B,CAAC;YACD,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { TransactionManager } from "../core/transaction-manager.js";
|
|
2
|
+
const TX_MANAGER_KEY = "__transactionManager__";
|
|
3
|
+
let _sharedTxManager = null;
|
|
4
|
+
function getSharedTransactionManager() {
|
|
5
|
+
if (!_sharedTxManager) {
|
|
6
|
+
_sharedTxManager = new TransactionManager();
|
|
7
|
+
}
|
|
8
|
+
return _sharedTxManager;
|
|
9
|
+
}
|
|
10
|
+
export function Transactional(options = {}) {
|
|
11
|
+
return (_target, _propertyKey, descriptor) => {
|
|
12
|
+
const originalMethod = descriptor.value;
|
|
13
|
+
descriptor.value = async function (...args) {
|
|
14
|
+
const txManager = this[TX_MANAGER_KEY] ?? getSharedTransactionManager();
|
|
15
|
+
return txManager.runInTransaction(async () => {
|
|
16
|
+
return originalMethod.apply(this, args);
|
|
17
|
+
}, options);
|
|
18
|
+
};
|
|
19
|
+
return descriptor;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=transactional.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactional.decorator.js","sourceRoot":"","sources":["../../src/decorators/transactional.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAMpE,MAAM,cAAc,GAAG,wBAAwB,CAAC;AAEhD,IAAI,gBAAgB,GAA8B,IAAI,CAAC;AAEvD,SAAS,2BAA2B;IAClC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,gBAAgB,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAgC,EAAE;IAC9D,OAAO,CAAC,OAAe,EAAE,YAA6B,EAAE,UAA8B,EAAE,EAAE;QACxF,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;QAExC,UAAU,CAAC,KAAK,GAAG,KAAK,WAAsB,GAAG,IAAW;YAC1D,MAAM,SAAS,GACb,IAAI,CAAC,cAAc,CAAC,IAAI,2BAA2B,EAAE,CAAC;YAExD,OAAO,SAAS,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;gBAC3C,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1C,CAAC,EAAE,OAAO,CAAC,CAAC;QACd,CAAC,CAAC;QAEF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare class DatabaseException extends Error {
|
|
2
|
+
constructor(message: string, options?: ErrorOptions);
|
|
3
|
+
}
|
|
4
|
+
export declare class ConnectionException extends DatabaseException {
|
|
5
|
+
constructor(message: string, options?: ErrorOptions);
|
|
6
|
+
}
|
|
7
|
+
export declare class MigrationException extends DatabaseException {
|
|
8
|
+
constructor(message: string, options?: ErrorOptions);
|
|
9
|
+
}
|
|
10
|
+
export declare class TransactionException extends DatabaseException {
|
|
11
|
+
constructor(message: string, options?: ErrorOptions);
|
|
12
|
+
}
|
|
13
|
+
export declare class RepositoryException extends DatabaseException {
|
|
14
|
+
constructor(message: string, options?: ErrorOptions);
|
|
15
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export class DatabaseException extends Error {
|
|
2
|
+
constructor(message, options) {
|
|
3
|
+
super(message, options);
|
|
4
|
+
this.name = "DatabaseException";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class ConnectionException extends DatabaseException {
|
|
8
|
+
constructor(message, options) {
|
|
9
|
+
super(message, options);
|
|
10
|
+
this.name = "ConnectionException";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class MigrationException extends DatabaseException {
|
|
14
|
+
constructor(message, options) {
|
|
15
|
+
super(message, options);
|
|
16
|
+
this.name = "MigrationException";
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class TransactionException extends DatabaseException {
|
|
20
|
+
constructor(message, options) {
|
|
21
|
+
super(message, options);
|
|
22
|
+
this.name = "TransactionException";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class RepositoryException extends DatabaseException {
|
|
26
|
+
constructor(message, options) {
|
|
27
|
+
super(message, options);
|
|
28
|
+
this.name = "RepositoryException";
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=database.exception.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.exception.js","sourceRoot":"","sources":["../../src/exceptions/database.exception.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,iBAAiB;IACxD,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,iBAAiB;IACvD,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,iBAAiB;IACzD,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,iBAAiB;IACxD,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export { DatabaseModule } from "./core/database.module.js";
|
|
2
|
+
export { DatabasePlugin } from "./core/database.plugin.js";
|
|
3
|
+
export { RepositoryFactory } from "./core/repository-factory.js";
|
|
4
|
+
export { TransactionManager } from "./core/transaction-manager.js";
|
|
5
|
+
export type { DatabaseAdapter, TransactionContext } from "./interfaces/database-adapter.interface.js";
|
|
6
|
+
export type { Repository, QueryOptions } from "./interfaces/repository.interface.js";
|
|
7
|
+
export type { DatabaseModuleOptions } from "./interfaces/options.interface.js";
|
|
8
|
+
export { InjectRepository } from "./decorators/inject-repository.decorator.js";
|
|
9
|
+
export { Transactional } from "./decorators/transactional.decorator.js";
|
|
10
|
+
export type { TransactionalOptions } from "./decorators/transactional.decorator.js";
|
|
11
|
+
export { DrizzleAdapter } from "./adapters/drizzle/drizzle.adapter.js";
|
|
12
|
+
export { DrizzleRepository } from "./adapters/drizzle/drizzle-repository.js";
|
|
13
|
+
export { PrismaAdapter } from "./adapters/prisma/prisma.adapter.js";
|
|
14
|
+
export { PrismaRepository } from "./adapters/prisma/prisma-repository.js";
|
|
15
|
+
export { DatabaseException, ConnectionException, MigrationException, TransactionException, RepositoryException, } from "./exceptions/database.exception.js";
|
|
16
|
+
export { DATABASE_ADAPTER_TOKEN, DATABASE_OPTIONS_TOKEN } from "./constants.js";
|
|
17
|
+
export { dbMetadataStorage } from "./metadata/db-storage.js";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Core module and plugin
|
|
2
|
+
export { DatabaseModule } from "./core/database.module.js";
|
|
3
|
+
export { DatabasePlugin } from "./core/database.plugin.js";
|
|
4
|
+
export { RepositoryFactory } from "./core/repository-factory.js";
|
|
5
|
+
export { TransactionManager } from "./core/transaction-manager.js";
|
|
6
|
+
// Decorators
|
|
7
|
+
export { InjectRepository } from "./decorators/inject-repository.decorator.js";
|
|
8
|
+
export { Transactional } from "./decorators/transactional.decorator.js";
|
|
9
|
+
// Adapters
|
|
10
|
+
export { DrizzleAdapter } from "./adapters/drizzle/drizzle.adapter.js";
|
|
11
|
+
export { DrizzleRepository } from "./adapters/drizzle/drizzle-repository.js";
|
|
12
|
+
export { PrismaAdapter } from "./adapters/prisma/prisma.adapter.js";
|
|
13
|
+
export { PrismaRepository } from "./adapters/prisma/prisma-repository.js";
|
|
14
|
+
// Exceptions
|
|
15
|
+
export { DatabaseException, ConnectionException, MigrationException, TransactionException, RepositoryException, } from "./exceptions/database.exception.js";
|
|
16
|
+
// Constants
|
|
17
|
+
export { DATABASE_ADAPTER_TOKEN, DATABASE_OPTIONS_TOKEN } from "./constants.js";
|
|
18
|
+
// Metadata
|
|
19
|
+
export { dbMetadataStorage } from "./metadata/db-storage.js";
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAOnE,aAAa;AACb,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAGxE,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE1E,aAAa;AACb,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAE5C,YAAY;AACZ,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAEhF,WAAW;AACX,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface TransactionContext {
|
|
2
|
+
id: string;
|
|
3
|
+
client: unknown;
|
|
4
|
+
isActive: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface DatabaseAdapter<TClient = unknown> {
|
|
7
|
+
connect(): Promise<void>;
|
|
8
|
+
disconnect(): Promise<void>;
|
|
9
|
+
getClient(): TClient;
|
|
10
|
+
isConnected(): boolean;
|
|
11
|
+
runMigrations(): Promise<void>;
|
|
12
|
+
generateMigration(name: string): Promise<string>;
|
|
13
|
+
beginTransaction(): Promise<TransactionContext>;
|
|
14
|
+
commitTransaction(tx: TransactionContext): Promise<void>;
|
|
15
|
+
rollbackTransaction(tx: TransactionContext): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-adapter.interface.js","sourceRoot":"","sources":["../../src/interfaces/database-adapter.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface DatabaseModuleOptions {
|
|
2
|
+
adapter: "drizzle" | "prisma";
|
|
3
|
+
url: string;
|
|
4
|
+
schema?: string;
|
|
5
|
+
migrationsDir?: string;
|
|
6
|
+
autoMigrate?: boolean;
|
|
7
|
+
logging?: boolean | {
|
|
8
|
+
queries?: boolean;
|
|
9
|
+
errors?: boolean;
|
|
10
|
+
migrations?: boolean;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.interface.js","sourceRoot":"","sources":["../../src/interfaces/options.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface QueryOptions {
|
|
2
|
+
limit?: number;
|
|
3
|
+
offset?: number;
|
|
4
|
+
orderBy?: Record<string, "asc" | "desc">;
|
|
5
|
+
}
|
|
6
|
+
export interface Repository<T> {
|
|
7
|
+
findAll(options?: QueryOptions): Promise<T[]>;
|
|
8
|
+
findById(id: string | number): Promise<T | null>;
|
|
9
|
+
findOne(where: Partial<T>): Promise<T | null>;
|
|
10
|
+
findMany(where: Partial<T>, options?: QueryOptions): Promise<T[]>;
|
|
11
|
+
create(data: Partial<T>): Promise<T>;
|
|
12
|
+
update(id: string | number, data: Partial<T>): Promise<T>;
|
|
13
|
+
delete(id: string | number): Promise<void>;
|
|
14
|
+
count(where?: Partial<T>): Promise<number>;
|
|
15
|
+
exists(where: Partial<T>): Promise<boolean>;
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.interface.js","sourceRoot":"","sources":["../../src/interfaces/repository.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface RepositoryInjectionMetadata {
|
|
2
|
+
target: Function;
|
|
3
|
+
propertyKey: string;
|
|
4
|
+
entity: unknown;
|
|
5
|
+
}
|
|
6
|
+
declare class DbMetadataStorage {
|
|
7
|
+
private repositoryInjections;
|
|
8
|
+
addRepositoryInjection(injection: RepositoryInjectionMetadata): void;
|
|
9
|
+
getRepositoryInjectionsFor(target: Function): RepositoryInjectionMetadata[];
|
|
10
|
+
reset(): void;
|
|
11
|
+
}
|
|
12
|
+
export declare const dbMetadataStorage: DbMetadataStorage;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class DbMetadataStorage {
|
|
2
|
+
repositoryInjections = [];
|
|
3
|
+
addRepositoryInjection(injection) {
|
|
4
|
+
this.repositoryInjections.push(injection);
|
|
5
|
+
}
|
|
6
|
+
getRepositoryInjectionsFor(target) {
|
|
7
|
+
return this.repositoryInjections.filter((i) => i.target === target);
|
|
8
|
+
}
|
|
9
|
+
reset() {
|
|
10
|
+
this.repositoryInjections = [];
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export const dbMetadataStorage = new DbMetadataStorage();
|
|
14
|
+
//# sourceMappingURL=db-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-storage.js","sourceRoot":"","sources":["../../src/metadata/db-storage.ts"],"names":[],"mappings":"AAMA,MAAM,iBAAiB;IACb,oBAAoB,GAAkC,EAAE,CAAC;IAEjE,sBAAsB,CAAC,SAAsC;QAC3D,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED,0BAA0B,CAAC,MAAgB;QACzC,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IACtE,CAAC;IAED,KAAK;QACH,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;IACjC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cinnabun/db",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Database module for Cinnabun with Drizzle and Prisma adapters",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"exports": {
|
|
12
|
+
".": "./dist/index.js",
|
|
13
|
+
"./cli": "./dist/cli/register-db-commands.js"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"test": "bun test",
|
|
17
|
+
"build": "tsc",
|
|
18
|
+
"prepublishOnly": "bun run build"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"cinnabun",
|
|
22
|
+
"database",
|
|
23
|
+
"orm",
|
|
24
|
+
"drizzle",
|
|
25
|
+
"prisma",
|
|
26
|
+
"repository",
|
|
27
|
+
"typescript"
|
|
28
|
+
],
|
|
29
|
+
"author": "",
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"homepage": "https://github.com/cinnabunjs/cinnabun#readme",
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "https://github.com/cinnabunjs/cinnabun.git"
|
|
35
|
+
},
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/cinnabunjs/cinnabun/issues"
|
|
38
|
+
},
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"@cinnabun/core": "^0.0.3",
|
|
41
|
+
"drizzle-orm": ">=0.30.0",
|
|
42
|
+
"@prisma/client": ">=5.0.0"
|
|
43
|
+
},
|
|
44
|
+
"peerDependenciesMeta": {
|
|
45
|
+
"drizzle-orm": {
|
|
46
|
+
"optional": true
|
|
47
|
+
},
|
|
48
|
+
"@prisma/client": {
|
|
49
|
+
"optional": true
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/bun": "latest",
|
|
54
|
+
"typescript": "^5.9.3",
|
|
55
|
+
"drizzle-orm": "^0.30.0",
|
|
56
|
+
"drizzle-kit": "^0.20.0",
|
|
57
|
+
"@prisma/client": "^5.0.0",
|
|
58
|
+
"prisma": "^5.0.0"
|
|
59
|
+
},
|
|
60
|
+
"dependencies": {
|
|
61
|
+
"commander": "^13.0.0"
|
|
62
|
+
}
|
|
63
|
+
}
|