@xacos/orm 1.0.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.
Files changed (114) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -0
  3. package/dist/XModel.d.ts +42 -0
  4. package/dist/XModel.d.ts.map +1 -0
  5. package/dist/XModel.js +240 -0
  6. package/dist/XModel.js.map +1 -0
  7. package/dist/XModel.test.d.ts +2 -0
  8. package/dist/XModel.test.d.ts.map +1 -0
  9. package/dist/XModel.test.js +119 -0
  10. package/dist/XModel.test.js.map +1 -0
  11. package/dist/XMongoModel.d.ts +25 -0
  12. package/dist/XMongoModel.d.ts.map +1 -0
  13. package/dist/XMongoModel.js +86 -0
  14. package/dist/XMongoModel.js.map +1 -0
  15. package/dist/XMongoModel.test.d.ts +2 -0
  16. package/dist/XMongoModel.test.d.ts.map +1 -0
  17. package/dist/XMongoModel.test.js +14 -0
  18. package/dist/XMongoModel.test.js.map +1 -0
  19. package/dist/__tests__/sqlite.integration.test.d.ts +2 -0
  20. package/dist/__tests__/sqlite.integration.test.d.ts.map +1 -0
  21. package/dist/__tests__/sqlite.integration.test.js +106 -0
  22. package/dist/__tests__/sqlite.integration.test.js.map +1 -0
  23. package/dist/connection/db.d.ts +25 -0
  24. package/dist/connection/db.d.ts.map +1 -0
  25. package/dist/connection/db.js +100 -0
  26. package/dist/connection/db.js.map +1 -0
  27. package/dist/connection/drivers.d.ts +3 -0
  28. package/dist/connection/drivers.d.ts.map +1 -0
  29. package/dist/connection/drivers.js +58 -0
  30. package/dist/connection/drivers.js.map +1 -0
  31. package/dist/connection/mongoUri.d.ts +6 -0
  32. package/dist/connection/mongoUri.d.ts.map +1 -0
  33. package/dist/connection/mongoUri.js +22 -0
  34. package/dist/connection/mongoUri.js.map +1 -0
  35. package/dist/decorators.d.ts +47 -0
  36. package/dist/decorators.d.ts.map +1 -0
  37. package/dist/decorators.js +149 -0
  38. package/dist/decorators.js.map +1 -0
  39. package/dist/factories/Factory.d.ts +34 -0
  40. package/dist/factories/Factory.d.ts.map +1 -0
  41. package/dist/factories/Factory.js +48 -0
  42. package/dist/factories/Factory.js.map +1 -0
  43. package/dist/factories/Factory.test.d.ts +2 -0
  44. package/dist/factories/Factory.test.d.ts.map +1 -0
  45. package/dist/factories/Factory.test.js +16 -0
  46. package/dist/factories/Factory.test.js.map +1 -0
  47. package/dist/index.d.ts +16 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +16 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/migrations/Migration.d.ts +6 -0
  52. package/dist/migrations/Migration.d.ts.map +1 -0
  53. package/dist/migrations/Migration.js +3 -0
  54. package/dist/migrations/Migration.js.map +1 -0
  55. package/dist/migrations/MigrationRunner.d.ts +14 -0
  56. package/dist/migrations/MigrationRunner.d.ts.map +1 -0
  57. package/dist/migrations/MigrationRunner.js +142 -0
  58. package/dist/migrations/MigrationRunner.js.map +1 -0
  59. package/dist/migrations/MigrationRunner.test.d.ts +2 -0
  60. package/dist/migrations/MigrationRunner.test.d.ts.map +1 -0
  61. package/dist/migrations/MigrationRunner.test.js +26 -0
  62. package/dist/migrations/MigrationRunner.test.js.map +1 -0
  63. package/dist/migrations/Schema.d.ts +7 -0
  64. package/dist/migrations/Schema.d.ts.map +1 -0
  65. package/dist/migrations/Schema.js +17 -0
  66. package/dist/migrations/Schema.js.map +1 -0
  67. package/dist/migrations/columnHelpers.d.ts +9 -0
  68. package/dist/migrations/columnHelpers.d.ts.map +1 -0
  69. package/dist/migrations/columnHelpers.js +15 -0
  70. package/dist/migrations/columnHelpers.js.map +1 -0
  71. package/dist/seeders/Seeder.d.ts +8 -0
  72. package/dist/seeders/Seeder.d.ts.map +1 -0
  73. package/dist/seeders/Seeder.js +3 -0
  74. package/dist/seeders/Seeder.js.map +1 -0
  75. package/dist/seeders/SeederRunner.d.ts +20 -0
  76. package/dist/seeders/SeederRunner.d.ts.map +1 -0
  77. package/dist/seeders/SeederRunner.js +68 -0
  78. package/dist/seeders/SeederRunner.js.map +1 -0
  79. package/dist/seeders/SeederRunner.test.d.ts +2 -0
  80. package/dist/seeders/SeederRunner.test.d.ts.map +1 -0
  81. package/dist/seeders/SeederRunner.test.js +44 -0
  82. package/dist/seeders/SeederRunner.test.js.map +1 -0
  83. package/dist/utils/paginate.d.ts +14 -0
  84. package/dist/utils/paginate.d.ts.map +1 -0
  85. package/dist/utils/paginate.js +28 -0
  86. package/dist/utils/paginate.js.map +1 -0
  87. package/dist/utils/paginate.test.d.ts +2 -0
  88. package/dist/utils/paginate.test.d.ts.map +1 -0
  89. package/dist/utils/paginate.test.js +23 -0
  90. package/dist/utils/paginate.test.js.map +1 -0
  91. package/package.json +75 -0
  92. package/src/XModel.test.ts +147 -0
  93. package/src/XModel.ts +301 -0
  94. package/src/XMongoModel.test.ts +16 -0
  95. package/src/XMongoModel.ts +119 -0
  96. package/src/__tests__/sqlite.integration.test.ts +116 -0
  97. package/src/connection/db.ts +127 -0
  98. package/src/connection/drivers.ts +65 -0
  99. package/src/connection/mongoUri.ts +25 -0
  100. package/src/decorators.ts +200 -0
  101. package/src/factories/Factory.test.ts +18 -0
  102. package/src/factories/Factory.ts +61 -0
  103. package/src/index.ts +18 -0
  104. package/src/migrations/Migration.ts +8 -0
  105. package/src/migrations/MigrationRunner.test.ts +33 -0
  106. package/src/migrations/MigrationRunner.ts +171 -0
  107. package/src/migrations/Schema.ts +20 -0
  108. package/src/migrations/columnHelpers.ts +28 -0
  109. package/src/seeders/Seeder.ts +8 -0
  110. package/src/seeders/SeederRunner.test.ts +62 -0
  111. package/src/seeders/SeederRunner.ts +76 -0
  112. package/src/types/bun-test.d.ts +8 -0
  113. package/src/utils/paginate.test.ts +24 -0
  114. package/src/utils/paginate.ts +37 -0
@@ -0,0 +1,106 @@
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 { describe, it, expect, beforeAll, afterAll, beforeEach } from 'bun:test';
8
+ import { initDb, getKnex, closeDb } from '../connection/db';
9
+ import { XModel } from '../XModel';
10
+ import { Column } from '../decorators';
11
+ import { unlinkSync, existsSync } from 'fs';
12
+ const DB_PATH = './tmp-test.sqlite';
13
+ process.env['DB_DRIVER'] = 'sqlite';
14
+ process.env['DB_PATH'] = DB_PATH;
15
+ class TestUser extends XModel {
16
+ static { this.table = 'test_users'; }
17
+ }
18
+ __decorate([
19
+ Column()
20
+ ], TestUser.prototype, "id", void 0);
21
+ __decorate([
22
+ Column()
23
+ ], TestUser.prototype, "name", void 0);
24
+ __decorate([
25
+ Column()
26
+ ], TestUser.prototype, "email", void 0);
27
+ __decorate([
28
+ Column()
29
+ ], TestUser.prototype, "created_at", void 0);
30
+ __decorate([
31
+ Column()
32
+ ], TestUser.prototype, "updated_at", void 0);
33
+ beforeAll(async () => {
34
+ initDb();
35
+ const knex = getKnex();
36
+ // Create the test table directly
37
+ await knex.schema.createTableIfNotExists('test_users', t => {
38
+ t.increments('id');
39
+ t.string('name').notNullable();
40
+ t.string('email').notNullable().unique();
41
+ t.timestamps(true, true);
42
+ });
43
+ });
44
+ afterAll(async () => {
45
+ await closeDb();
46
+ if (existsSync(DB_PATH))
47
+ unlinkSync(DB_PATH);
48
+ });
49
+ beforeEach(async () => {
50
+ await getKnex()('test_users').delete();
51
+ });
52
+ describe('SQLite Integration — XModel', () => {
53
+ it('creates a record', async () => {
54
+ const user = await TestUser.create({ name: 'Alice', email: 'alice@test.com' });
55
+ expect(user.id).toBeGreaterThan(0);
56
+ expect(user.name).toBe('Alice');
57
+ });
58
+ it('finds a record by id', async () => {
59
+ const created = await TestUser.create({ name: 'Bob', email: 'bob@test.com' });
60
+ const found = await TestUser.find(created.id);
61
+ expect(found).not.toBeNull();
62
+ expect(found.name).toBe('Bob');
63
+ });
64
+ it('returns null for missing id', async () => {
65
+ const found = await TestUser.find(9999);
66
+ expect(found).toBeNull();
67
+ });
68
+ it('findOrFail throws for missing id', async () => {
69
+ await expect(TestUser.findOrFail(9999)).rejects.toThrow();
70
+ });
71
+ it('queries with where()', async () => {
72
+ await TestUser.create({ name: 'Carol', email: 'carol@test.com' });
73
+ await TestUser.create({ name: 'Dave', email: 'dave@test.com' });
74
+ const results = await TestUser.where('name', 'Carol').select();
75
+ expect(results).toHaveLength(1);
76
+ expect(results[0].name).toBe('Carol');
77
+ });
78
+ it('returns all records', async () => {
79
+ await TestUser.create({ name: 'Eve', email: 'eve@test.com' });
80
+ await TestUser.create({ name: 'Frank', email: 'frank@test.com' });
81
+ const all = await TestUser.all();
82
+ expect(all.length).toBeGreaterThanOrEqual(2);
83
+ });
84
+ it('updates a record', async () => {
85
+ const user = await TestUser.create({ name: 'Grace', email: 'grace@test.com' });
86
+ await TestUser.update(user.id, { name: 'Grace Updated' });
87
+ const updated = await TestUser.find(user.id);
88
+ expect(updated.name).toBe('Grace Updated');
89
+ });
90
+ it('deletes a record', async () => {
91
+ const user = await TestUser.create({ name: 'Heidi', email: 'heidi@test.com' });
92
+ await TestUser.destroy(user.id);
93
+ const found = await TestUser.find(user.id);
94
+ expect(found).toBeNull();
95
+ });
96
+ it('paginates results', async () => {
97
+ for (let i = 0; i < 20; i++) {
98
+ await TestUser.create({ name: `User${i}`, email: `user${i}@test.com` });
99
+ }
100
+ const page = await TestUser.paginate(1, 5);
101
+ expect(page.data).toHaveLength(5);
102
+ expect(page.total).toBe(20);
103
+ expect(page.lastPage).toBe(4);
104
+ });
105
+ });
106
+ //# sourceMappingURL=sqlite.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.integration.test.js","sourceRoot":"","sources":["../../src/__tests__/sqlite.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { type Knex } from "knex";
2
+ import mongoose from "mongoose";
3
+ export type InitDbOptions = {
4
+ readonly __memorySqlite: true;
5
+ } | Knex.Config;
6
+ export declare function isKnexInitialized(): boolean;
7
+ export declare function isMongooseConnected(): boolean;
8
+ export declare function initDb(config?: InitDbOptions): Knex;
9
+ export declare function getKnex(): Knex;
10
+ export type InitMongoOptions = Readonly<{
11
+ uri?: string;
12
+ /** Passed to `mongoose.connect` (pool size, timeouts, TLS, etc.). */
13
+ connectOptions?: mongoose.ConnectOptions;
14
+ }>;
15
+ /**
16
+ * Connect Mongoose (MongoDB). Does not use Knex; do not run SQL migrations — define schemas on {@link XMongoModel} instead.
17
+ */
18
+ export declare function initMongo(options?: InitMongoOptions): Promise<typeof mongoose>;
19
+ /**
20
+ * Auto-select Knex vs Mongoose from `DB_DRIVER` (mongodb → Mongoose, otherwise → Knex).
21
+ */
22
+ export declare function initOrmFromEnv(): Promise<"knex" | "mongoose">;
23
+ export declare function getMongoose(): typeof mongoose;
24
+ export declare function closeDb(): Promise<void>;
25
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/connection/db.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAMhC,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAA;CAAE,GACjC,IAAI,CAAC,MAAM,CAAC;AAEhB,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED,wBAAgB,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,CAqCnD;AAED,wBAAgB,OAAO,IAAI,IAAI,CAU9B;AAED,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,cAAc,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC;CAC1C,CAAC,CAAC;AAEH;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,QAAQ,CAAC,CAgBpF;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,CAQnE;AAED,wBAAgB,WAAW,IAAI,OAAO,QAAQ,CAK7C;AAED,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ7C"}
@@ -0,0 +1,100 @@
1
+ import knex from "knex";
2
+ import mongoose from "mongoose";
3
+ import { buildKnexConfig } from "./drivers";
4
+ import { buildMongoUri } from "./mongoUri";
5
+ let knexInstance = null;
6
+ export function isKnexInitialized() {
7
+ return knexInstance !== null;
8
+ }
9
+ export function isMongooseConnected() {
10
+ return mongoose.connection.readyState === 1;
11
+ }
12
+ export function initDb(config) {
13
+ if (mongoose.connection.readyState === 1) {
14
+ throw new Error("[XAOCS ORM] Cannot initialize Knex while Mongoose is connected. Call closeDb() first.");
15
+ }
16
+ const driver = process.env["DB_DRIVER"] ?? "sqlite";
17
+ if (!config && driver === "mongodb") {
18
+ throw new Error("[XAOCS ORM] DB_DRIVER is mongodb: use await initMongo() for Mongoose. Knex SQL migrations are not used with MongoDB.");
19
+ }
20
+ if (knexInstance) {
21
+ return knexInstance;
22
+ }
23
+ let knexConfig;
24
+ if (config && typeof config === "object" && "__memorySqlite" in config && config.__memorySqlite) {
25
+ knexConfig = {
26
+ client: "sqlite3",
27
+ connection: {
28
+ filename: ":memory:",
29
+ },
30
+ useNullAsDefault: true,
31
+ pool: {
32
+ min: 1,
33
+ max: 1,
34
+ },
35
+ };
36
+ }
37
+ else if (config && typeof config === "object" && "client" in config) {
38
+ knexConfig = config;
39
+ }
40
+ else {
41
+ knexConfig = buildKnexConfig();
42
+ }
43
+ knexInstance = knex(knexConfig);
44
+ return knexInstance;
45
+ }
46
+ export function getKnex() {
47
+ if (knexInstance) {
48
+ return knexInstance;
49
+ }
50
+ if (mongoose.connection.readyState === 1) {
51
+ throw new Error("[XAOCS ORM] Knex is not initialized; Mongoose is active. SQL helpers and MigrationRunner require Knex — with MongoDB define schemas on XMongoModel subclasses instead of migrations.");
52
+ }
53
+ throw new Error("[XAOCS ORM] DB not initialized. Call initDb() or await initMongo() first.");
54
+ }
55
+ /**
56
+ * Connect Mongoose (MongoDB). Does not use Knex; do not run SQL migrations — define schemas on {@link XMongoModel} instead.
57
+ */
58
+ export async function initMongo(options) {
59
+ if (knexInstance) {
60
+ throw new Error("[XAOCS ORM] Cannot connect Mongoose while Knex is active. Call closeDb() first.");
61
+ }
62
+ if (mongoose.connection.readyState === 1) {
63
+ return mongoose;
64
+ }
65
+ const uri = options?.uri ?? buildMongoUri();
66
+ const defaults = {
67
+ serverSelectionTimeoutMS: 10_000,
68
+ maxPoolSize: 10,
69
+ };
70
+ await mongoose.connect(uri, { ...defaults, ...options?.connectOptions });
71
+ return mongoose;
72
+ }
73
+ /**
74
+ * Auto-select Knex vs Mongoose from `DB_DRIVER` (mongodb → Mongoose, otherwise → Knex).
75
+ */
76
+ export async function initOrmFromEnv() {
77
+ const driver = process.env["DB_DRIVER"] ?? "sqlite";
78
+ if (driver === "mongodb") {
79
+ await initMongo();
80
+ return "mongoose";
81
+ }
82
+ initDb();
83
+ return "knex";
84
+ }
85
+ export function getMongoose() {
86
+ if (mongoose.connection.readyState !== 1) {
87
+ throw new Error("[XAOCS ORM] Mongoose is not connected. Call await initMongo() first.");
88
+ }
89
+ return mongoose;
90
+ }
91
+ export async function closeDb() {
92
+ if (knexInstance) {
93
+ await knexInstance.destroy();
94
+ knexInstance = null;
95
+ }
96
+ if (mongoose.connection.readyState !== 0) {
97
+ await mongoose.disconnect();
98
+ }
99
+ }
100
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/connection/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Knex } from "knex";
2
+ export declare function buildKnexConfig(): Knex.Config;
3
+ //# sourceMappingURL=drivers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drivers.d.ts","sourceRoot":"","sources":["../../src/connection/drivers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAkCjC,wBAAgB,eAAe,IAAI,IAAI,CAAC,MAAM,CA6B7C"}
@@ -0,0 +1,58 @@
1
+ function mysqlConnection() {
2
+ const database = process.env["DB_DATABASE"];
3
+ const user = process.env["DB_USERNAME"];
4
+ const password = process.env["DB_PASSWORD"];
5
+ if (!database || !user) {
6
+ throw new Error("[XAOCS ORM] DB_DATABASE and DB_USERNAME are required for mysql driver");
7
+ }
8
+ return {
9
+ host: process.env["DB_HOST"] ?? "localhost",
10
+ port: Number(process.env["DB_PORT"] ?? 3306),
11
+ database,
12
+ user,
13
+ password: password ?? "",
14
+ };
15
+ }
16
+ function postgresConnection() {
17
+ const database = process.env["DB_DATABASE"];
18
+ const user = process.env["DB_USERNAME"];
19
+ const password = process.env["DB_PASSWORD"];
20
+ if (!database || !user) {
21
+ throw new Error("[XAOCS ORM] DB_DATABASE and DB_USERNAME are required for postgres driver");
22
+ }
23
+ return {
24
+ host: process.env["DB_HOST"] ?? "localhost",
25
+ port: Number(process.env["DB_PORT"] ?? 5432),
26
+ database,
27
+ user,
28
+ password: password ?? "",
29
+ };
30
+ }
31
+ export function buildKnexConfig() {
32
+ const driver = process.env["DB_DRIVER"] ?? "sqlite";
33
+ switch (driver) {
34
+ case "mysql":
35
+ return {
36
+ client: "mysql2",
37
+ connection: mysqlConnection(),
38
+ };
39
+ case "postgres":
40
+ return {
41
+ client: "pg",
42
+ connection: postgresConnection(),
43
+ };
44
+ case "sqlite":
45
+ return {
46
+ client: "sqlite3",
47
+ connection: {
48
+ filename: process.env["DB_PATH"] ?? "./database/db.sqlite",
49
+ },
50
+ useNullAsDefault: true,
51
+ };
52
+ case "mongodb":
53
+ throw new Error("[XAOCS ORM] MongoDB does not use Knex. Set DB_DRIVER=mongodb and call await initMongo() (or initOrmFromEnv()). Define Mongoose schemas on XMongoModel subclasses — SQL migrations do not apply.");
54
+ default:
55
+ throw new Error(`[XAOCS ORM] Unsupported driver: ${driver}`);
56
+ }
57
+ }
58
+ //# sourceMappingURL=drivers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drivers.js","sourceRoot":"","sources":["../../src/connection/drivers.ts"],"names":[],"mappings":"AAEA,SAAS,eAAe;IACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC5C,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,WAAW;QAC3C,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;QAC5C,QAAQ;QACR,IAAI;QACJ,QAAQ,EAAE,QAAQ,IAAI,EAAE;KACzB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC5C,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,WAAW;QAC3C,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;QAC5C,QAAQ;QACR,IAAI;QACJ,QAAQ,EAAE,QAAQ,IAAI,EAAE;KACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC;IAEpD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO;gBACL,MAAM,EAAE,QAAQ;gBAChB,UAAU,EAAE,eAAe,EAAE;aAC9B,CAAC;QACJ,KAAK,UAAU;YACb,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,kBAAkB,EAAE;aACjC,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE;oBACV,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,sBAAsB;iBAC3D;gBACD,gBAAgB,EAAE,IAAI;aACvB,CAAC;QACJ,KAAK,SAAS;YACZ,MAAM,IAAI,KAAK,CACb,iMAAiM,CAClM,CAAC;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Builds a Mongo connection URI from env.
3
+ * Prefer `MONGODB_URI` or `DATABASE_URL` when set.
4
+ */
5
+ export declare function buildMongoUri(): string;
6
+ //# sourceMappingURL=mongoUri.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoUri.d.ts","sourceRoot":"","sources":["../../src/connection/mongoUri.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAmBtC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Builds a Mongo connection URI from env.
3
+ * Prefer `MONGODB_URI` or `DATABASE_URL` when set.
4
+ */
5
+ export function buildMongoUri() {
6
+ const direct = process.env["MONGODB_URI"] ?? process.env["DATABASE_URL"];
7
+ if (direct) {
8
+ return direct;
9
+ }
10
+ const user = process.env["DB_USERNAME"] ?? "";
11
+ const password = process.env["DB_PASSWORD"] ?? "";
12
+ const host = process.env["DB_HOST"] ?? "localhost";
13
+ const port = process.env["DB_PORT"] ?? "27017";
14
+ const database = process.env["DB_DATABASE"] ?? "xacos";
15
+ if (user) {
16
+ const u = encodeURIComponent(user);
17
+ const p = encodeURIComponent(password);
18
+ return `mongodb://${u}:${p}@${host}:${port}/${database}`;
19
+ }
20
+ return `mongodb://${host}:${port}/${database}`;
21
+ }
22
+ //# sourceMappingURL=mongoUri.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoUri.js","sourceRoot":"","sources":["../../src/connection/mongoUri.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACzE,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC;IAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC;IAEvD,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACvC,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;IAC3D,CAAC;IAED,OAAO,aAAa,IAAI,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;AACjD,CAAC"}
@@ -0,0 +1,47 @@
1
+ export type ModelConstructor = {
2
+ new (...args: never[]): unknown;
3
+ readonly table: string;
4
+ };
5
+ export type RelationMeta = Readonly<{
6
+ kind: "hasMany";
7
+ related: () => ModelConstructor;
8
+ foreignKey: string;
9
+ propertyKey: string;
10
+ }> | Readonly<{
11
+ kind: "belongsTo";
12
+ related: () => ModelConstructor;
13
+ foreignKey: string;
14
+ propertyKey: string;
15
+ }> | Readonly<{
16
+ kind: "hasOne";
17
+ related: () => ModelConstructor;
18
+ foreignKey: string;
19
+ propertyKey: string;
20
+ }> | Readonly<{
21
+ kind: "belongsToMany";
22
+ related: () => ModelConstructor;
23
+ pivotTable: string;
24
+ propertyKey: string;
25
+ }>;
26
+ export type ColumnOptions = Readonly<{
27
+ hidden?: boolean;
28
+ default?: unknown;
29
+ }>;
30
+ type StandardDecoratorContext = {
31
+ kind: string;
32
+ name: string | symbol;
33
+ addInitializer?: (initializer: () => void) => void;
34
+ };
35
+ /** Register relation metadata when runtime decorators receive no prototype (e.g. some Bun/TS field transforms). */
36
+ export declare function registerRelation(constructor: object, meta: RelationMeta): void;
37
+ /** Register column metadata without a decorator. */
38
+ export declare function registerColumnMeta(constructor: object, propertyKey: string, options: ColumnOptions): void;
39
+ export declare function HasMany(related: () => ModelConstructor, foreignKey: string): (targetOrInitialValue: object | undefined, propertyKeyOrContext: string | symbol | StandardDecoratorContext) => void;
40
+ export declare function BelongsTo(related: () => ModelConstructor, foreignKey: string): (targetOrInitialValue: object | undefined, propertyKeyOrContext: string | symbol | StandardDecoratorContext) => void;
41
+ export declare function HasOne(related: () => ModelConstructor, foreignKey: string): (targetOrInitialValue: object | undefined, propertyKeyOrContext: string | symbol | StandardDecoratorContext) => void;
42
+ export declare function BelongsToMany(related: () => ModelConstructor, pivotTable: string): (targetOrInitialValue: object | undefined, propertyKeyOrContext: string | symbol | StandardDecoratorContext) => void;
43
+ export declare function Column(options?: ColumnOptions): (targetOrInitialValue: object | undefined, propertyKeyOrContext: string | symbol | StandardDecoratorContext) => void;
44
+ export declare function getColumnOptions(constructor: object, propertyKey: string): ColumnOptions | undefined;
45
+ export declare function getRelations(ctor: object): RelationMeta[];
46
+ export {};
47
+ //# sourceMappingURL=decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ function constructorFromTarget(target) {
2
+ if (!target || typeof target !== "object") {
3
+ throw new Error("[XAOCS ORM] Decorators must be applied to class members with a valid prototype target");
4
+ }
5
+ const ctor = target.constructor;
6
+ if (!ctor) {
7
+ throw new Error("[XAOCS ORM] Decorators require a constructor on the decorated target");
8
+ }
9
+ return ctor;
10
+ }
11
+ function isStandardDecoratorContext(value) {
12
+ return (typeof value === "object" &&
13
+ value !== null &&
14
+ "kind" in value &&
15
+ "name" in value);
16
+ }
17
+ function pushRelation(constructor, meta) {
18
+ const ctor = constructor;
19
+ if (!ctor.__xacosRelations)
20
+ ctor.__xacosRelations = [];
21
+ ctor.__xacosRelations.push(meta);
22
+ }
23
+ /** Register relation metadata when runtime decorators receive no prototype (e.g. some Bun/TS field transforms). */
24
+ export function registerRelation(constructor, meta) {
25
+ pushRelation(constructor, meta);
26
+ }
27
+ /** Register column metadata without a decorator. */
28
+ export function registerColumnMeta(constructor, propertyKey, options) {
29
+ ensureColumnMap(constructor).set(propertyKey, options);
30
+ }
31
+ function ensureColumnMap(constructor) {
32
+ const ctor = constructor;
33
+ if (!ctor.__xacosColumns)
34
+ ctor.__xacosColumns = new Map();
35
+ return ctor.__xacosColumns;
36
+ }
37
+ export function HasMany(related, foreignKey) {
38
+ return (targetOrInitialValue, propertyKeyOrContext) => {
39
+ if (isStandardDecoratorContext(propertyKeyOrContext)) {
40
+ const context = propertyKeyOrContext;
41
+ if (context.kind !== "field" && context.kind !== "accessor")
42
+ return;
43
+ const key = String(context.name);
44
+ context.addInitializer?.(function () {
45
+ const ctor = constructorFromTarget(this);
46
+ pushRelation(ctor, { kind: "hasMany", related, foreignKey, propertyKey: key });
47
+ });
48
+ return;
49
+ }
50
+ const key = String(propertyKeyOrContext);
51
+ const ctor = constructorFromTarget(targetOrInitialValue);
52
+ pushRelation(ctor, { kind: "hasMany", related, foreignKey, propertyKey: key });
53
+ };
54
+ }
55
+ export function BelongsTo(related, foreignKey) {
56
+ return (targetOrInitialValue, propertyKeyOrContext) => {
57
+ if (isStandardDecoratorContext(propertyKeyOrContext)) {
58
+ const context = propertyKeyOrContext;
59
+ if (context.kind !== "field" && context.kind !== "accessor")
60
+ return;
61
+ const key = String(context.name);
62
+ context.addInitializer?.(function () {
63
+ const ctor = constructorFromTarget(this);
64
+ pushRelation(ctor, { kind: "belongsTo", related, foreignKey, propertyKey: key });
65
+ });
66
+ return;
67
+ }
68
+ const key = String(propertyKeyOrContext);
69
+ const ctor = constructorFromTarget(targetOrInitialValue);
70
+ pushRelation(ctor, { kind: "belongsTo", related, foreignKey, propertyKey: key });
71
+ };
72
+ }
73
+ export function HasOne(related, foreignKey) {
74
+ return (targetOrInitialValue, propertyKeyOrContext) => {
75
+ if (isStandardDecoratorContext(propertyKeyOrContext)) {
76
+ const context = propertyKeyOrContext;
77
+ if (context.kind !== "field" && context.kind !== "accessor")
78
+ return;
79
+ const key = String(context.name);
80
+ context.addInitializer?.(function () {
81
+ const ctor = constructorFromTarget(this);
82
+ pushRelation(ctor, { kind: "hasOne", related, foreignKey, propertyKey: key });
83
+ });
84
+ return;
85
+ }
86
+ const key = String(propertyKeyOrContext);
87
+ const ctor = constructorFromTarget(targetOrInitialValue);
88
+ pushRelation(ctor, { kind: "hasOne", related, foreignKey, propertyKey: key });
89
+ };
90
+ }
91
+ export function BelongsToMany(related, pivotTable) {
92
+ return (targetOrInitialValue, propertyKeyOrContext) => {
93
+ if (isStandardDecoratorContext(propertyKeyOrContext)) {
94
+ const context = propertyKeyOrContext;
95
+ if (context.kind !== "field" && context.kind !== "accessor")
96
+ return;
97
+ const key = String(context.name);
98
+ context.addInitializer?.(function () {
99
+ const ctor = constructorFromTarget(this);
100
+ pushRelation(ctor, { kind: "belongsToMany", related, pivotTable, propertyKey: key });
101
+ });
102
+ return;
103
+ }
104
+ const key = String(propertyKeyOrContext);
105
+ const ctor = constructorFromTarget(targetOrInitialValue);
106
+ pushRelation(ctor, { kind: "belongsToMany", related, pivotTable, propertyKey: key });
107
+ };
108
+ }
109
+ export function Column(options = {}) {
110
+ return (targetOrInitialValue, propertyKeyOrContext) => {
111
+ if (isStandardDecoratorContext(propertyKeyOrContext)) {
112
+ const context = propertyKeyOrContext;
113
+ if (context.kind !== "field" && context.kind !== "accessor") {
114
+ return;
115
+ }
116
+ const key = String(context.name);
117
+ context.addInitializer?.(function () {
118
+ const ctor = constructorFromTarget(this);
119
+ ensureColumnMap(ctor).set(key, options);
120
+ });
121
+ return;
122
+ }
123
+ const key = String(propertyKeyOrContext);
124
+ const ctor = constructorFromTarget(targetOrInitialValue);
125
+ ensureColumnMap(ctor).set(key, options);
126
+ };
127
+ }
128
+ export function getColumnOptions(constructor, propertyKey) {
129
+ let current = constructor;
130
+ while (current) {
131
+ const map = current.__xacosColumns;
132
+ const hit = map?.get(propertyKey);
133
+ if (hit)
134
+ return hit;
135
+ current = Object.getPrototypeOf(current);
136
+ }
137
+ return undefined;
138
+ }
139
+ export function getRelations(ctor) {
140
+ const collected = [];
141
+ let current = ctor;
142
+ while (current) {
143
+ const own = current.__xacosRelations ?? [];
144
+ collected.push(...own);
145
+ current = Object.getPrototypeOf(current);
146
+ }
147
+ return collected;
148
+ }
149
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { XModel } from '../XModel';
2
+ type DefinitionFn<T> = () => Promise<Partial<T>> | Partial<T>;
3
+ declare class FactoryBuilder {
4
+ private count;
5
+ constructor(count: number);
6
+ /**
7
+ * Create `count` instances of a model using the provided definition function.
8
+ *
9
+ * @example
10
+ * await Factory.times(10).create(User, () => ({
11
+ * name: Factory.faker.person.fullName(),
12
+ * email: Factory.faker.internet.email(),
13
+ * }));
14
+ */
15
+ create<T extends XModel>(ModelClass: typeof XModel & {
16
+ create(data: Partial<T>): Promise<T>;
17
+ }, definition: DefinitionFn<T>): Promise<T[]>;
18
+ /**
19
+ * Build plain objects without persisting to DB.
20
+ * Useful for unit tests that don't need a DB.
21
+ */
22
+ build<T>(definition: DefinitionFn<T>): Promise<T[]>;
23
+ }
24
+ export declare class Factory {
25
+ /** Access Faker directly: Factory.faker.person.fullName() */
26
+ static faker: import("@faker-js/faker").Faker;
27
+ static times(count: number): FactoryBuilder;
28
+ /** Shorthand for Factory.times(1).create(...) */
29
+ static create<T extends XModel>(ModelClass: typeof XModel & {
30
+ create(data: Partial<T>): Promise<T>;
31
+ }, definition: DefinitionFn<T>): Promise<T>;
32
+ }
33
+ export {};
34
+ //# sourceMappingURL=Factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Factory.d.ts","sourceRoot":"","sources":["../../src/factories/Factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,KAAK,YAAY,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE9D,cAAM,cAAc;IACN,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,MAAM;IAEjC;;;;;;;;OAQG;IACG,MAAM,CAAC,CAAC,SAAS,MAAM,EAC3B,UAAU,EAAE,OAAO,MAAM,GAAG;QAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE,EACpE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,EAAE,CAAC;IAUf;;;OAGG;IACG,KAAK,CAAC,CAAC,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;CAO1D;AAED,qBAAa,OAAO;IAClB,6DAA6D;IAC7D,MAAM,CAAC,KAAK,kCAAS;IAErB,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc;IAI3C,iDAAiD;WACpC,MAAM,CAAC,CAAC,SAAS,MAAM,EAClC,UAAU,EAAE,OAAO,MAAM,GAAG;QAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE,EACpE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC;CAId"}