@onroad/core 4.0.0-alpha.2 → 4.0.0-alpha.21
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 +409 -7
- package/dist/OnRoadExpress.d.ts.map +1 -1
- package/dist/OnRoadExpress.js +19 -6
- package/dist/OnRoadExpress.js.map +1 -1
- package/dist/container/Container.d.ts +1 -1
- package/dist/container/Container.d.ts.map +1 -1
- package/dist/container/Container.js +15 -6
- package/dist/container/Container.js.map +1 -1
- package/dist/core/AbstractController.d.ts +11 -0
- package/dist/core/AbstractController.d.ts.map +1 -1
- package/dist/core/AbstractController.js +65 -1
- package/dist/core/AbstractController.js.map +1 -1
- package/dist/core/AbstractService.d.ts +17 -0
- package/dist/core/AbstractService.d.ts.map +1 -1
- package/dist/core/AbstractService.js +50 -0
- package/dist/core/AbstractService.js.map +1 -1
- package/dist/core/SequelizeRepository.d.ts +4 -1
- package/dist/core/SequelizeRepository.d.ts.map +1 -1
- package/dist/core/SequelizeRepository.js +22 -1
- package/dist/core/SequelizeRepository.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/database/ConnectionManager.d.ts +2 -0
- package/dist/database/ConnectionManager.d.ts.map +1 -1
- package/dist/database/ConnectionManager.js +12 -1
- package/dist/database/ConnectionManager.js.map +1 -1
- package/dist/dev/DevServer.d.ts +67 -0
- package/dist/dev/DevServer.d.ts.map +1 -0
- package/dist/dev/DevServer.js +496 -0
- package/dist/dev/DevServer.js.map +1 -0
- package/dist/dev/MigrationCLI.d.ts +19 -0
- package/dist/dev/MigrationCLI.d.ts.map +1 -0
- package/dist/dev/MigrationCLI.js +140 -0
- package/dist/dev/MigrationCLI.js.map +1 -0
- package/dist/dev/index.d.ts +5 -0
- package/dist/dev/index.d.ts.map +1 -0
- package/dist/dev/index.js +3 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/entity/EntityRegistry.d.ts +26 -0
- package/dist/entity/EntityRegistry.d.ts.map +1 -1
- package/dist/entity/EntityRegistry.js +140 -4
- package/dist/entity/EntityRegistry.js.map +1 -1
- package/dist/entity/decorators.d.ts +1 -0
- package/dist/entity/decorators.d.ts.map +1 -1
- package/dist/entity/decorators.js.map +1 -1
- package/dist/filters/builtins/JwtFilter.d.ts +6 -3
- package/dist/filters/builtins/JwtFilter.d.ts.map +1 -1
- package/dist/filters/builtins/JwtFilter.js +29 -4
- package/dist/filters/builtins/JwtFilter.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { existsSync, writeFileSync, mkdirSync } from "fs";
|
|
2
|
+
import { resolve, join } from "path";
|
|
3
|
+
// --- CLI ---
|
|
4
|
+
export class MigrationCLI {
|
|
5
|
+
migrationsPath;
|
|
6
|
+
connection;
|
|
7
|
+
tenant;
|
|
8
|
+
constructor(config) {
|
|
9
|
+
this.migrationsPath = config.migrationsPath;
|
|
10
|
+
this.connection = config.connection;
|
|
11
|
+
this.tenant = config.tenant ?? "default";
|
|
12
|
+
}
|
|
13
|
+
async run(args = process.argv.slice(2)) {
|
|
14
|
+
const command = args[0];
|
|
15
|
+
const param = args[1];
|
|
16
|
+
switch (command) {
|
|
17
|
+
case "create":
|
|
18
|
+
if (!param) {
|
|
19
|
+
console.error("Usage: migration create <name>");
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
this.create(param);
|
|
23
|
+
break;
|
|
24
|
+
case "up":
|
|
25
|
+
await this.up(param ? parseInt(param, 10) : undefined);
|
|
26
|
+
break;
|
|
27
|
+
case "down":
|
|
28
|
+
await this.down(param ? parseInt(param, 10) : 1);
|
|
29
|
+
break;
|
|
30
|
+
case "status":
|
|
31
|
+
await this.status();
|
|
32
|
+
break;
|
|
33
|
+
default:
|
|
34
|
+
console.log("Usage: migration <create|up|down|status> [param]");
|
|
35
|
+
console.log("");
|
|
36
|
+
console.log("Commands:");
|
|
37
|
+
console.log(" create <name> Create a new migration file");
|
|
38
|
+
console.log(" up [steps] Run pending migrations (all or N steps)");
|
|
39
|
+
console.log(" down [steps] Revert last N migrations (default: 1)");
|
|
40
|
+
console.log(" status Show migration status");
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// --- Commands ---
|
|
45
|
+
create(name) {
|
|
46
|
+
const timestamp = new Date().toISOString().replace(/[-:T]/g, "").slice(0, 14);
|
|
47
|
+
const safeName = name.replace(/[^a-zA-Z0-9_-]/g, "-").toLowerCase();
|
|
48
|
+
const fileName = `${timestamp}-${safeName}.ts`;
|
|
49
|
+
const dirPath = resolve(this.migrationsPath);
|
|
50
|
+
if (!existsSync(dirPath)) {
|
|
51
|
+
mkdirSync(dirPath, { recursive: true });
|
|
52
|
+
}
|
|
53
|
+
const filePath = join(dirPath, fileName);
|
|
54
|
+
writeFileSync(filePath, MIGRATION_TEMPLATE(safeName), "utf-8");
|
|
55
|
+
console.log(`Migration created: ${filePath}`);
|
|
56
|
+
}
|
|
57
|
+
async up(steps) {
|
|
58
|
+
const runner = await this.getRunner();
|
|
59
|
+
const applied = await runner.up(steps);
|
|
60
|
+
if (applied.length === 0) {
|
|
61
|
+
console.log("No pending migrations.");
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
console.log(`Applied ${applied.length} migration(s):`);
|
|
65
|
+
for (const name of applied) {
|
|
66
|
+
console.log(` + ${name}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async down(steps = 1) {
|
|
71
|
+
const runner = await this.getRunner();
|
|
72
|
+
const reverted = await runner.down(steps);
|
|
73
|
+
if (reverted.length === 0) {
|
|
74
|
+
console.log("No migrations to revert.");
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.log(`Reverted ${reverted.length} migration(s):`);
|
|
78
|
+
for (const name of reverted) {
|
|
79
|
+
console.log(` - ${name}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async status() {
|
|
84
|
+
const runner = await this.getRunner();
|
|
85
|
+
const statuses = await runner.status();
|
|
86
|
+
if (statuses.length === 0) {
|
|
87
|
+
console.log("No migrations found.");
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
console.log("");
|
|
91
|
+
console.log("Migration Status:");
|
|
92
|
+
console.log("─".repeat(60));
|
|
93
|
+
for (const s of statuses) {
|
|
94
|
+
const icon = s.isApplied ? "✓" : "○";
|
|
95
|
+
const status = s.isApplied ? "applied" : "pending";
|
|
96
|
+
console.log(` ${icon} ${s.name} (${status})`);
|
|
97
|
+
}
|
|
98
|
+
console.log("─".repeat(60));
|
|
99
|
+
const applied = statuses.filter((s) => s.isApplied).length;
|
|
100
|
+
const pending = statuses.filter((s) => !s.isApplied).length;
|
|
101
|
+
console.log(` Total: ${statuses.length} | Applied: ${applied} | Pending: ${pending}`);
|
|
102
|
+
console.log("");
|
|
103
|
+
}
|
|
104
|
+
// --- Internal ---
|
|
105
|
+
async getRunner() {
|
|
106
|
+
return this.connection.getMigrationRunner(this.tenant);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// --- Template ---
|
|
110
|
+
function MIGRATION_TEMPLATE(name) {
|
|
111
|
+
return `import type { QueryInterface, Sequelize } from "sequelize"
|
|
112
|
+
|
|
113
|
+
export default {
|
|
114
|
+
async up(queryInterface: QueryInterface, sequelize: Sequelize): Promise<void> {
|
|
115
|
+
// TODO: implement migration "${name}"
|
|
116
|
+
// Example:
|
|
117
|
+
// await queryInterface.createTable("my_table", {
|
|
118
|
+
// id: {
|
|
119
|
+
// type: sequelize.constructor["DataTypes"].UUID,
|
|
120
|
+
// primaryKey: true,
|
|
121
|
+
// defaultValue: sequelize.constructor["DataTypes"].UUIDV4,
|
|
122
|
+
// },
|
|
123
|
+
// name: {
|
|
124
|
+
// type: sequelize.constructor["DataTypes"].STRING,
|
|
125
|
+
// allowNull: false,
|
|
126
|
+
// },
|
|
127
|
+
// createdAt: sequelize.constructor["DataTypes"].DATE,
|
|
128
|
+
// updatedAt: sequelize.constructor["DataTypes"].DATE,
|
|
129
|
+
// })
|
|
130
|
+
},
|
|
131
|
+
|
|
132
|
+
async down(queryInterface: QueryInterface, _sequelize: Sequelize): Promise<void> {
|
|
133
|
+
// TODO: implement rollback for "${name}"
|
|
134
|
+
// Example:
|
|
135
|
+
// await queryInterface.dropTable("my_table")
|
|
136
|
+
},
|
|
137
|
+
}
|
|
138
|
+
`;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=MigrationCLI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MigrationCLI.js","sourceRoot":"","sources":["../../src/dev/MigrationCLI.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { DevServer } from "./DevServer.js";
|
|
2
|
+
export type { DevServerConfig, DevDatabaseConfig, GcpRestoreConfig } from "./DevServer.js";
|
|
3
|
+
export { MigrationCLI } from "./MigrationCLI.js";
|
|
4
|
+
export type { MigrationCLIConfig } from "./MigrationCLI.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dev/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAE1F,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dev/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA"}
|
|
@@ -2,7 +2,33 @@ import type { Constructor } from "../container/Container.js";
|
|
|
2
2
|
export declare class EntityRegistry {
|
|
3
3
|
private static sequelizeModels;
|
|
4
4
|
private static mongooseModels;
|
|
5
|
+
private static entityClasses;
|
|
6
|
+
private static wiredConnections;
|
|
7
|
+
/** Register entity classes so associations can be wired later. */
|
|
8
|
+
static registerEntityClass(cls: Constructor): void;
|
|
9
|
+
/** Register multiple entity classes at once. */
|
|
10
|
+
static registerEntityClasses(classes: Constructor[]): void;
|
|
11
|
+
private static initializingConnections;
|
|
5
12
|
static getSequelizeModel(entityClass: Constructor, connection: unknown): Promise<unknown>;
|
|
13
|
+
/**
|
|
14
|
+
* Create a single Sequelize model (columns only, no associations).
|
|
15
|
+
*/
|
|
16
|
+
private static defineSequelizeModel;
|
|
17
|
+
/**
|
|
18
|
+
* Initialize ALL registered entity models on a given Sequelize connection.
|
|
19
|
+
* Must be called before wireSequelizeAssociations.
|
|
20
|
+
*/
|
|
21
|
+
private static initializeAllSequelizeModels;
|
|
22
|
+
/**
|
|
23
|
+
* Wire all Sequelize associations for a given connection based on
|
|
24
|
+
* @HasMany, @BelongsTo, @HasOne, @BelongsToMany decorator metadata.
|
|
25
|
+
* All models MUST already be defined before calling this method.
|
|
26
|
+
*/
|
|
27
|
+
private static wireSequelizeAssociations;
|
|
28
|
+
/**
|
|
29
|
+
* Find a cached model key by entity name (the name passed to @Entity decorator).
|
|
30
|
+
*/
|
|
31
|
+
private static findModelKeyByEntityName;
|
|
6
32
|
static getMongooseModel(entityClass: Constructor, connection: unknown): Promise<unknown>;
|
|
7
33
|
static clearCache(): void;
|
|
8
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityRegistry.d.ts","sourceRoot":"","sources":["../../src/entity/EntityRegistry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAE5D,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,eAAe,CAA6B;IAC3D,OAAO,CAAC,MAAM,CAAC,cAAc,CAA6B;
|
|
1
|
+
{"version":3,"file":"EntityRegistry.d.ts","sourceRoot":"","sources":["../../src/entity/EntityRegistry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAE5D,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,eAAe,CAA6B;IAC3D,OAAO,CAAC,MAAM,CAAC,cAAc,CAA6B;IAC1D,OAAO,CAAC,MAAM,CAAC,aAAa,CAAyB;IACrD,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAoB;IAEnD,kEAAkE;IAClE,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;IAIlD,gDAAgD;IAChD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI;IAI1D,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAAmC;WAE5D,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAmC/F;;OAEG;mBACkB,oBAAoB;IAiDzC;;;OAGG;mBACkB,4BAA4B;IAQjD;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAqDxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;WAgB1B,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAgD9F,MAAM,CAAC,UAAU,IAAI,IAAI;CAK1B"}
|
|
@@ -1,8 +1,53 @@
|
|
|
1
|
-
import { getEntityColumns, getEntityFields, getEntityOptions, DataType } from "./decorators.js";
|
|
1
|
+
import { getEntityColumns, getEntityFields, getEntityOptions, getEntityAssociations, DataType } from "./decorators.js";
|
|
2
2
|
export class EntityRegistry {
|
|
3
3
|
static sequelizeModels = new Map();
|
|
4
4
|
static mongooseModels = new Map();
|
|
5
|
+
static entityClasses = new Set();
|
|
6
|
+
static wiredConnections = new Set();
|
|
7
|
+
/** Register entity classes so associations can be wired later. */
|
|
8
|
+
static registerEntityClass(cls) {
|
|
9
|
+
this.entityClasses.add(cls);
|
|
10
|
+
}
|
|
11
|
+
/** Register multiple entity classes at once. */
|
|
12
|
+
static registerEntityClasses(classes) {
|
|
13
|
+
for (const cls of classes)
|
|
14
|
+
this.entityClasses.add(cls);
|
|
15
|
+
}
|
|
16
|
+
static initializingConnections = new Map();
|
|
5
17
|
static async getSequelizeModel(entityClass, connection) {
|
|
18
|
+
const options = getEntityOptions(entityClass);
|
|
19
|
+
if (!options) {
|
|
20
|
+
throw new Error(`[TypeRoad] Class "${entityClass.name}" is not decorated with @Entity`);
|
|
21
|
+
}
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
23
|
+
const seq = connection;
|
|
24
|
+
const connId = seq.config?.database ?? seq.options?.database ?? "default";
|
|
25
|
+
// On first access for this connection, initialize all models and wire associations.
|
|
26
|
+
// Uses a promise lock to prevent race conditions when concurrent requests
|
|
27
|
+
// trigger initialization simultaneously.
|
|
28
|
+
if (!this.wiredConnections.has(connId) && this.entityClasses.size > 0) {
|
|
29
|
+
if (!this.initializingConnections.has(connId)) {
|
|
30
|
+
const init = (async () => {
|
|
31
|
+
await this.initializeAllSequelizeModels(connection);
|
|
32
|
+
this.wireSequelizeAssociations(connection);
|
|
33
|
+
this.wiredConnections.add(connId);
|
|
34
|
+
})();
|
|
35
|
+
this.initializingConnections.set(connId, init);
|
|
36
|
+
}
|
|
37
|
+
await this.initializingConnections.get(connId);
|
|
38
|
+
this.initializingConnections.delete(connId);
|
|
39
|
+
}
|
|
40
|
+
const cacheKey = `${entityClass.name}:${connId}`;
|
|
41
|
+
if (this.sequelizeModels.has(cacheKey)) {
|
|
42
|
+
return this.sequelizeModels.get(cacheKey);
|
|
43
|
+
}
|
|
44
|
+
// Fallback for entities not pre-registered
|
|
45
|
+
return this.defineSequelizeModel(entityClass, connection);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Create a single Sequelize model (columns only, no associations).
|
|
49
|
+
*/
|
|
50
|
+
static async defineSequelizeModel(entityClass, connection) {
|
|
6
51
|
const options = getEntityOptions(entityClass);
|
|
7
52
|
if (!options) {
|
|
8
53
|
throw new Error(`[TypeRoad] Class "${entityClass.name}" is not decorated with @Entity`);
|
|
@@ -26,7 +71,7 @@ export class EntityRegistry {
|
|
|
26
71
|
const attributes = {};
|
|
27
72
|
for (const [name, col] of columns) {
|
|
28
73
|
attributes[name] = {
|
|
29
|
-
type: mapSequelizeDataType(col.type, DataTypes, col.values),
|
|
74
|
+
type: mapSequelizeDataType(col.type, DataTypes, col.values, col.arrayType),
|
|
30
75
|
primaryKey: col.primaryKey ?? false,
|
|
31
76
|
autoIncrement: col.autoIncrement ?? false,
|
|
32
77
|
allowNull: col.allowNull ?? true,
|
|
@@ -43,6 +88,93 @@ export class EntityRegistry {
|
|
|
43
88
|
this.sequelizeModels.set(cacheKey, model);
|
|
44
89
|
return model;
|
|
45
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Initialize ALL registered entity models on a given Sequelize connection.
|
|
93
|
+
* Must be called before wireSequelizeAssociations.
|
|
94
|
+
*/
|
|
95
|
+
static async initializeAllSequelizeModels(connection) {
|
|
96
|
+
for (const entityClass of this.entityClasses) {
|
|
97
|
+
const options = getEntityOptions(entityClass);
|
|
98
|
+
if (!options || options.engine !== "sequelize")
|
|
99
|
+
continue;
|
|
100
|
+
await this.defineSequelizeModel(entityClass, connection);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Wire all Sequelize associations for a given connection based on
|
|
105
|
+
* @HasMany, @BelongsTo, @HasOne, @BelongsToMany decorator metadata.
|
|
106
|
+
* All models MUST already be defined before calling this method.
|
|
107
|
+
*/
|
|
108
|
+
static wireSequelizeAssociations(connection) {
|
|
109
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
110
|
+
const seq = connection;
|
|
111
|
+
const connId = seq.config?.database ?? seq.options?.database ?? "default";
|
|
112
|
+
for (const entityClass of this.entityClasses) {
|
|
113
|
+
const options = getEntityOptions(entityClass);
|
|
114
|
+
if (!options || options.engine !== "sequelize")
|
|
115
|
+
continue;
|
|
116
|
+
const associations = getEntityAssociations(entityClass);
|
|
117
|
+
if (associations.size === 0)
|
|
118
|
+
continue;
|
|
119
|
+
const sourceKey = `${entityClass.name}:${connId}`;
|
|
120
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
121
|
+
const sourceModel = this.sequelizeModels.get(sourceKey);
|
|
122
|
+
if (!sourceModel)
|
|
123
|
+
continue;
|
|
124
|
+
for (const [propertyKey, assocMeta] of associations) {
|
|
125
|
+
const targetClass = assocMeta.target();
|
|
126
|
+
const targetKey = `${targetClass.name}:${connId}`;
|
|
127
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
128
|
+
const targetModel = this.sequelizeModels.get(targetKey);
|
|
129
|
+
if (!targetModel)
|
|
130
|
+
continue;
|
|
131
|
+
// Skip if this association was already wired (idempotent)
|
|
132
|
+
if (sourceModel.associations?.[propertyKey])
|
|
133
|
+
continue;
|
|
134
|
+
switch (assocMeta.type) {
|
|
135
|
+
case "hasMany":
|
|
136
|
+
sourceModel.hasMany(targetModel, { as: propertyKey, foreignKey: assocMeta.foreignKey });
|
|
137
|
+
break;
|
|
138
|
+
case "belongsTo":
|
|
139
|
+
sourceModel.belongsTo(targetModel, { as: propertyKey, foreignKey: assocMeta.foreignKey });
|
|
140
|
+
break;
|
|
141
|
+
case "hasOne":
|
|
142
|
+
sourceModel.hasOne(targetModel, { as: propertyKey, foreignKey: assocMeta.foreignKey });
|
|
143
|
+
break;
|
|
144
|
+
case "belongsToMany": {
|
|
145
|
+
// Resolve through model — use existing Sequelize model if available, otherwise string
|
|
146
|
+
const throughKey = this.findModelKeyByEntityName(assocMeta.through, connId);
|
|
147
|
+
const throughModel = throughKey ? this.sequelizeModels.get(throughKey) : assocMeta.through;
|
|
148
|
+
sourceModel.belongsToMany(targetModel, {
|
|
149
|
+
as: propertyKey,
|
|
150
|
+
foreignKey: assocMeta.foreignKey,
|
|
151
|
+
through: throughModel,
|
|
152
|
+
});
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Find a cached model key by entity name (the name passed to @Entity decorator).
|
|
161
|
+
*/
|
|
162
|
+
static findModelKeyByEntityName(entityName, connId) {
|
|
163
|
+
// First try direct class-name match
|
|
164
|
+
const directKey = `${entityName}:${connId}`;
|
|
165
|
+
if (this.sequelizeModels.has(directKey))
|
|
166
|
+
return directKey;
|
|
167
|
+
// Then search by @Entity name in registered classes
|
|
168
|
+
for (const cls of this.entityClasses) {
|
|
169
|
+
const opts = getEntityOptions(cls);
|
|
170
|
+
if (opts && opts.name === entityName) {
|
|
171
|
+
const key = `${cls.name}:${connId}`;
|
|
172
|
+
if (this.sequelizeModels.has(key))
|
|
173
|
+
return key;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
46
178
|
static async getMongooseModel(entityClass, connection) {
|
|
47
179
|
const options = getEntityOptions(entityClass);
|
|
48
180
|
if (!options) {
|
|
@@ -86,13 +218,18 @@ export class EntityRegistry {
|
|
|
86
218
|
static clearCache() {
|
|
87
219
|
this.sequelizeModels.clear();
|
|
88
220
|
this.mongooseModels.clear();
|
|
221
|
+
this.wiredConnections.clear();
|
|
89
222
|
}
|
|
90
223
|
}
|
|
91
224
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
92
|
-
function mapSequelizeDataType(dataType, DataTypes, enumValues) {
|
|
225
|
+
function mapSequelizeDataType(dataType, DataTypes, enumValues, arrayType) {
|
|
93
226
|
if (dataType === DataType.ENUM) {
|
|
94
227
|
return DataTypes.ENUM(...(enumValues ?? []));
|
|
95
228
|
}
|
|
229
|
+
if (dataType === DataType.ARRAY) {
|
|
230
|
+
const elementType = arrayType ? mapSequelizeDataType(arrayType, DataTypes) : DataTypes.STRING;
|
|
231
|
+
return DataTypes.ARRAY(elementType);
|
|
232
|
+
}
|
|
96
233
|
const map = {
|
|
97
234
|
[DataType.STRING]: DataTypes.STRING,
|
|
98
235
|
[DataType.TEXT]: DataTypes.TEXT,
|
|
@@ -107,7 +244,6 @@ function mapSequelizeDataType(dataType, DataTypes, enumValues) {
|
|
|
107
244
|
[DataType.UUID]: DataTypes.UUID,
|
|
108
245
|
[DataType.JSON]: DataTypes.JSON,
|
|
109
246
|
[DataType.JSONB]: DataTypes.JSONB,
|
|
110
|
-
[DataType.ARRAY]: DataTypes.ARRAY,
|
|
111
247
|
};
|
|
112
248
|
return map[dataType] ?? DataTypes.STRING;
|
|
113
249
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityRegistry.js","sourceRoot":"","sources":["../../src/entity/EntityRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"EntityRegistry.js","sourceRoot":"","sources":["../../src/entity/EntityRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/entity/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AAKzB,oBAAY,QAAQ;IAClB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAID,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAA;IACd,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/entity/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AAKzB,oBAAY,QAAQ;IAClB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAID,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAA;IACd,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,CAAC,EAAE,QAAQ,CAAA;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,GAAG,UAAU,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,eAAe,CAAA;IAC1D,MAAM,EAAE,MAAM,OAAO,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAUD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,cAAc,CAK3E;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,iBAAiB,CAOhE;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,iBAAiB,CAO9D;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAQpF;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAQtF;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAQnF;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,OAAO,EACrB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,iBAAiB,CASnB;AAiBD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAE3E;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAEzE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAEtF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,CAE/F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/entity/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,8CAA8C;AAE9C,MAAM,CAAN,IAAY,QAgBX;AAhBD,WAAY,QAAQ;IAClB,6BAAiB,CAAA;IACjB,yBAAa,CAAA;IACb,+BAAmB,CAAA;IACnB,6BAAiB,CAAA;IACjB,2BAAe,CAAA;IACf,6BAAiB,CAAA;IACjB,+BAAmB,CAAA;IACnB,+BAAmB,CAAA;IACnB,yBAAa,CAAA;IACb,iCAAqB,CAAA;IACrB,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,2BAAe,CAAA;IACf,2BAAe,CAAA;AACjB,CAAC,EAhBW,QAAQ,KAAR,QAAQ,QAgBnB;
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/entity/decorators.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,14 @@ export interface JwtFilterOptions {
|
|
|
6
6
|
/**
|
|
7
7
|
* Function that receives the raw token and returns the decoded payload.
|
|
8
8
|
* Throw any error to signal an invalid/expired token.
|
|
9
|
+
*
|
|
10
|
+
* Not needed when running behind teraprox-gateway — the gateway validates
|
|
11
|
+
* the JWT and forwards the decoded payload via `x-decoded-user` header.
|
|
9
12
|
*/
|
|
10
|
-
verify
|
|
13
|
+
verify?: (token: string) => Promise<unknown> | unknown;
|
|
11
14
|
/**
|
|
12
15
|
* Custom function to extract the token from the request.
|
|
13
|
-
* Default: reads "Authorization: Bearer <token>"
|
|
16
|
+
* Default: reads "x-app-token" header, then "Authorization: Bearer <token>"
|
|
14
17
|
*/
|
|
15
18
|
extractToken?: (req: Request) => string | undefined;
|
|
16
19
|
/**
|
|
@@ -21,7 +24,7 @@ export interface JwtFilterOptions {
|
|
|
21
24
|
}
|
|
22
25
|
export declare class JwtFilter extends OnRoadFilter {
|
|
23
26
|
private readonly options;
|
|
24
|
-
constructor(options
|
|
27
|
+
constructor(options?: JwtFilterOptions);
|
|
25
28
|
execute(req: Request, res: Response, chain: FilterChain): Promise<void>;
|
|
26
29
|
}
|
|
27
30
|
//# sourceMappingURL=JwtFilter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JwtFilter.d.ts","sourceRoot":"","sources":["../../../src/filters/builtins/JwtFilter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,gCAAgC,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,WAAW,gBAAgB;IAC/B
|
|
1
|
+
{"version":3,"file":"JwtFilter.d.ts","sourceRoot":"","sources":["../../../src/filters/builtins/JwtFilter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,gCAAgC,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;IACtD;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAA;IACnD;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;gBAE9B,OAAO,GAAE,gBAAqB;IAKpC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CA8B9E"}
|
|
@@ -2,11 +2,21 @@ import "../../types/express-augment.js";
|
|
|
2
2
|
import { OnRoadFilter } from "../FilterChain.js";
|
|
3
3
|
export class JwtFilter extends OnRoadFilter {
|
|
4
4
|
options;
|
|
5
|
-
constructor(options) {
|
|
5
|
+
constructor(options = {}) {
|
|
6
6
|
super();
|
|
7
7
|
this.options = options;
|
|
8
8
|
}
|
|
9
9
|
async execute(req, res, chain) {
|
|
10
|
+
// 1. Gateway already validated — use forwarded decoded payload directly
|
|
11
|
+
const decodedHeader = req.headers["x-decoded-user"];
|
|
12
|
+
if (typeof decodedHeader === "string" && decodedHeader) {
|
|
13
|
+
try {
|
|
14
|
+
req.decoded = JSON.parse(decodedHeader);
|
|
15
|
+
return await chain.next(req, res);
|
|
16
|
+
}
|
|
17
|
+
catch { /* malformed header — fall through to token extraction */ }
|
|
18
|
+
}
|
|
19
|
+
// 2. Standalone mode — extract and verify token
|
|
10
20
|
const extract = this.options.extractToken ?? extractBearerToken;
|
|
11
21
|
const token = extract(req);
|
|
12
22
|
if (!token) {
|
|
@@ -14,11 +24,11 @@ export class JwtFilter extends OnRoadFilter {
|
|
|
14
24
|
res.status(401).json({ error: "Unauthorized", message: "Missing authentication token" });
|
|
15
25
|
return;
|
|
16
26
|
}
|
|
17
|
-
// Anonymous allowed — skip decode, proceed
|
|
18
27
|
return await chain.next(req, res);
|
|
19
28
|
}
|
|
20
29
|
try {
|
|
21
|
-
|
|
30
|
+
const verifyFn = this.options.verify ?? decodeJwtPayload;
|
|
31
|
+
req.decoded = await verifyFn(token);
|
|
22
32
|
await chain.next(req, res);
|
|
23
33
|
}
|
|
24
34
|
catch {
|
|
@@ -27,9 +37,24 @@ export class JwtFilter extends OnRoadFilter {
|
|
|
27
37
|
}
|
|
28
38
|
}
|
|
29
39
|
function extractBearerToken(req) {
|
|
40
|
+
const xToken = req.headers["x-app-token"];
|
|
41
|
+
if (typeof xToken === "string")
|
|
42
|
+
return xToken;
|
|
30
43
|
const auth = req.headers["authorization"];
|
|
31
|
-
if (!auth
|
|
44
|
+
if (typeof auth !== "string" || !auth.startsWith("Bearer "))
|
|
32
45
|
return undefined;
|
|
33
46
|
return auth.slice(7);
|
|
34
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Decodes a JWT payload (base64url) without verifying the signature.
|
|
50
|
+
* Fallback for standalone mode when no verify function is provided.
|
|
51
|
+
*/
|
|
52
|
+
function decodeJwtPayload(token) {
|
|
53
|
+
const parts = token.split(".");
|
|
54
|
+
if (parts.length !== 3)
|
|
55
|
+
throw new Error("Invalid JWT structure");
|
|
56
|
+
const payload = parts[1];
|
|
57
|
+
const json = Buffer.from(payload, "base64url").toString("utf-8");
|
|
58
|
+
return JSON.parse(json);
|
|
59
|
+
}
|
|
35
60
|
//# sourceMappingURL=JwtFilter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JwtFilter.js","sourceRoot":"","sources":["../../../src/filters/builtins/JwtFilter.ts"],"names":[],"mappings":"AACA,OAAO,gCAAgC,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"JwtFilter.js","sourceRoot":"","sources":["../../../src/filters/builtins/JwtFilter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export type { OnRoadConfig, BuildServerConfig } from "./OnRoadExpress.js";
|
|
|
5
5
|
export { OnRoadContainer, Injectable, Controller, Service, Repository, Scope, METADATA_KEY, } from "./container/index.js";
|
|
6
6
|
export type { Constructor, ClassMetadata, RequestScope } from "./container/index.js";
|
|
7
7
|
export { AbstractController, AbstractService, AbstractRepository, SequelizeRepository, MongooseRepository, Sentinel, RequestEventBus, } from "./core/index.js";
|
|
8
|
-
export type { RouteConfig, ControllerConfig, ServiceConfig, AfterCommitPayload, AfterCommitHandler } from "./core/index.js";
|
|
8
|
+
export type { RouteConfig, ControllerConfig, ServiceConfig, ServiceResolver, AfterCommitPayload, AfterCommitHandler } from "./core/index.js";
|
|
9
9
|
export { Entity, Column, Field, HasMany, BelongsTo, HasOne, BelongsToMany, DataType, EntityRegistry, } from "./entity/index.js";
|
|
10
10
|
export type { ColumnOptions, FieldOptions, EntityOptions, AssociationMetadata } from "./entity/index.js";
|
|
11
11
|
export { OnRoadFilter, FilterChain, Filter, isFilterInstance, getFilterConstructor, CorsFilter, JwtFilter, TenantFilter, RoleFilter, RequestContextFilter, } from "./filters/index.js";
|
|
@@ -24,4 +24,6 @@ export { PinoLogger } from "./logging/index.js";
|
|
|
24
24
|
export type { OnRoadLogger, PinoLoggerConfig } from "./logging/index.js";
|
|
25
25
|
export type { OnRoadPlugin } from "./plugins/index.js";
|
|
26
26
|
export { StorageProvider } from "./storage/index.js";
|
|
27
|
+
export { DevServer, MigrationCLI } from "./dev/index.js";
|
|
28
|
+
export type { DevServerConfig, DevDatabaseConfig, MigrationCLIConfig } from "./dev/index.js";
|
|
27
29
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAA;AACzB,OAAO,4BAA4B,CAAA;AAGnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAGzE,OAAO,EACL,eAAe,EACf,UAAU,EACV,UAAU,EACV,OAAO,EACP,UAAU,EACV,KAAK,EACL,YAAY,GACb,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGpF,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,QAAQ,EACR,eAAe,GAChB,MAAM,iBAAiB,CAAA;AACxB,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAA;AACzB,OAAO,4BAA4B,CAAA;AAGnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAGzE,OAAO,EACL,eAAe,EACf,UAAU,EACV,UAAU,EACV,OAAO,EACP,UAAU,EACV,KAAK,EACL,YAAY,GACb,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGpF,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,QAAQ,EACR,eAAe,GAChB,MAAM,iBAAiB,CAAA;AACxB,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAG5I,OAAO,EACL,MAAM,EACN,MAAM,EACN,KAAK,EACL,OAAO,EACP,SAAS,EACT,MAAM,EACN,aAAa,EACb,QAAQ,EACR,cAAc,GACf,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAGxG,OAAO,EACL,YAAY,EACZ,WAAW,EACX,MAAM,EACN,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,oBAAoB,GACrB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAG7D,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAC3G,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAG1E,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGvD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/E,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAGtE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAGrD,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,GACf,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,sBAAsB,CAAA;AAG7B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGxE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGtD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGpD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACxD,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -28,4 +28,6 @@ export { MessagingProvider, RealtimeProvider, TaskSchedulerProvider, SocketProvi
|
|
|
28
28
|
export { PinoLogger } from "./logging/index.js";
|
|
29
29
|
// --- Storage ---
|
|
30
30
|
export { StorageProvider } from "./storage/index.js";
|
|
31
|
+
// --- Dev Tools ---
|
|
32
|
+
export { DevServer, MigrationCLI } from "./dev/index.js";
|
|
31
33
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,kBAAkB;AAElB,OAAO,kBAAkB,CAAA;AACzB,OAAO,4BAA4B,CAAA;AAEnC,eAAe;AACf,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGlD,iCAAiC;AACjC,OAAO,EACL,eAAe,EACf,UAAU,EACV,UAAU,EACV,OAAO,EACP,UAAU,EACV,KAAK,EACL,YAAY,GACb,MAAM,sBAAsB,CAAA;AAG7B,eAAe;AACf,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,QAAQ,EACR,eAAe,GAChB,MAAM,iBAAiB,CAAA;AAGxB,iBAAiB;AACjB,OAAO,EACL,MAAM,EACN,MAAM,EACN,KAAK,EACL,OAAO,EACP,SAAS,EACT,MAAM,EACN,aAAa,EACb,QAAQ,EACR,cAAc,GACf,MAAM,mBAAmB,CAAA;AAG1B,kBAAkB;AAClB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,MAAM,EACN,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,oBAAoB,GACrB,MAAM,oBAAoB,CAAA;AAW3B,mBAAmB;AACnB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE7D,mBAAmB;AACnB,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAG3G,oBAAoB;AACpB,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,sBAAsB,CAAA;AAG7B,0BAA0B;AAC1B,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAG/E,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,oBAAoB;AACpB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,GACf,MAAM,sBAAsB,CAAA;AAQ7B,kBAAkB;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAM/C,kBAAkB;AAClB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,kBAAkB;AAElB,OAAO,kBAAkB,CAAA;AACzB,OAAO,4BAA4B,CAAA;AAEnC,eAAe;AACf,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGlD,iCAAiC;AACjC,OAAO,EACL,eAAe,EACf,UAAU,EACV,UAAU,EACV,OAAO,EACP,UAAU,EACV,KAAK,EACL,YAAY,GACb,MAAM,sBAAsB,CAAA;AAG7B,eAAe;AACf,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,QAAQ,EACR,eAAe,GAChB,MAAM,iBAAiB,CAAA;AAGxB,iBAAiB;AACjB,OAAO,EACL,MAAM,EACN,MAAM,EACN,KAAK,EACL,OAAO,EACP,SAAS,EACT,MAAM,EACN,aAAa,EACb,QAAQ,EACR,cAAc,GACf,MAAM,mBAAmB,CAAA;AAG1B,kBAAkB;AAClB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,MAAM,EACN,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,oBAAoB,GACrB,MAAM,oBAAoB,CAAA;AAW3B,mBAAmB;AACnB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE7D,mBAAmB;AACnB,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAG3G,oBAAoB;AACpB,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,sBAAsB,CAAA;AAG7B,0BAA0B;AAC1B,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAG/E,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,oBAAoB;AACpB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,GACf,MAAM,sBAAsB,CAAA;AAQ7B,kBAAkB;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAM/C,kBAAkB;AAClB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,oBAAoB;AACpB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA"}
|