@open-core/framework 0.1.0-alpha.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/LICENSE +373 -0
- package/README.md +360 -0
- package/dist/client/client-bootstrap.d.ts +1 -0
- package/dist/client/client-bootstrap.js +50 -0
- package/dist/client/client-container.d.ts +2 -0
- package/dist/client/client-container.js +6 -0
- package/dist/client/client-core.d.ts +1 -0
- package/dist/client/client-core.js +7 -0
- package/dist/client/controllers/spawner.controller.d.ts +12 -0
- package/dist/client/controllers/spawner.controller.js +51 -0
- package/dist/client/decorators/controller.d.ts +3 -0
- package/dist/client/decorators/controller.js +14 -0
- package/dist/client/decorators/export.d.ts +7 -0
- package/dist/client/decorators/export.js +15 -0
- package/dist/client/decorators/gameEvent.d.ts +47 -0
- package/dist/client/decorators/gameEvent.js +54 -0
- package/dist/client/decorators/index.d.ts +10 -0
- package/dist/client/decorators/index.js +26 -0
- package/dist/client/decorators/interval.d.ts +7 -0
- package/dist/client/decorators/interval.js +15 -0
- package/dist/client/decorators/key.d.ts +2 -0
- package/dist/client/decorators/key.js +10 -0
- package/dist/client/decorators/localEvent.d.ts +7 -0
- package/dist/client/decorators/localEvent.js +15 -0
- package/dist/client/decorators/nui.d.ts +1 -0
- package/dist/client/decorators/nui.js +9 -0
- package/dist/client/decorators/onNet.d.ts +1 -0
- package/dist/client/decorators/onNet.js +9 -0
- package/dist/client/decorators/resourceLifecycle.d.ts +11 -0
- package/dist/client/decorators/resourceLifecycle.js +24 -0
- package/dist/client/decorators/tick.d.ts +1 -0
- package/dist/client/decorators/tick.js +9 -0
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.js +23 -0
- package/dist/client/interfaces/appearance.interface.d.ts +19 -0
- package/dist/client/interfaces/appearance.interface.js +2 -0
- package/dist/client/player/player.d.ts +262 -0
- package/dist/client/player/player.js +480 -0
- package/dist/client/player/player.loader.d.ts +1 -0
- package/dist/client/player/player.loader.js +22 -0
- package/dist/client/services/appearance.service.d.ts +6 -0
- package/dist/client/services/appearance.service.js +89 -0
- package/dist/client/services/blip.service.d.ts +112 -0
- package/dist/client/services/blip.service.js +215 -0
- package/dist/client/services/index.d.ts +9 -0
- package/dist/client/services/index.js +25 -0
- package/dist/client/services/marker.service.d.ts +94 -0
- package/dist/client/services/marker.service.js +153 -0
- package/dist/client/services/notification.service.d.ts +76 -0
- package/dist/client/services/notification.service.js +111 -0
- package/dist/client/services/ped.service.d.ts +182 -0
- package/dist/client/services/ped.service.js +302 -0
- package/dist/client/services/progress.service.d.ts +82 -0
- package/dist/client/services/progress.service.js +210 -0
- package/dist/client/services/spawn.service.d.ts +73 -0
- package/dist/client/services/spawn.service.js +261 -0
- package/dist/client/services/streaming.service.d.ts +165 -0
- package/dist/client/services/streaming.service.js +341 -0
- package/dist/client/services/textui.service.d.ts +82 -0
- package/dist/client/services/textui.service.js +156 -0
- package/dist/client/services/vehicle.service.d.ts +168 -0
- package/dist/client/services/vehicle.service.js +296 -0
- package/dist/client/system/metadata-client.keys.d.ts +13 -0
- package/dist/client/system/metadata-client.keys.js +16 -0
- package/dist/client/system/processors/export.processor.d.ts +7 -0
- package/dist/client/system/processors/export.processor.js +39 -0
- package/dist/client/system/processors/gameEvent.processor.d.ts +10 -0
- package/dist/client/system/processors/gameEvent.processor.js +58 -0
- package/dist/client/system/processors/interval.processor.d.ts +7 -0
- package/dist/client/system/processors/interval.processor.js +43 -0
- package/dist/client/system/processors/key.processor.d.ts +8 -0
- package/dist/client/system/processors/key.processor.js +27 -0
- package/dist/client/system/processors/localEvent.processor.d.ts +7 -0
- package/dist/client/system/processors/localEvent.processor.js +38 -0
- package/dist/client/system/processors/netEvent.processor.d.ts +7 -0
- package/dist/client/system/processors/netEvent.processor.js +38 -0
- package/dist/client/system/processors/nui.processor.d.ts +7 -0
- package/dist/client/system/processors/nui.processor.js +40 -0
- package/dist/client/system/processors/resourceLifecycle.processor.d.ts +9 -0
- package/dist/client/system/processors/resourceLifecycle.processor.js +69 -0
- package/dist/client/system/processors/tick.processor.d.ts +5 -0
- package/dist/client/system/processors/tick.processor.js +37 -0
- package/dist/client/system/processors.register.d.ts +1 -0
- package/dist/client/system/processors.register.js +27 -0
- package/dist/client/types/game-events.d.ts +126 -0
- package/dist/client/types/game-events.js +83 -0
- package/dist/client/types/index.d.ts +1 -0
- package/dist/client/types/index.js +17 -0
- package/dist/client/ui-bridge.d.ts +116 -0
- package/dist/client/ui-bridge.js +201 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +41 -0
- package/dist/server/bootstrap.d.ts +16 -0
- package/dist/server/bootstrap.js +57 -0
- package/dist/server/bus/core-event-bus.d.ts +6 -0
- package/dist/server/bus/core-event-bus.js +31 -0
- package/dist/server/configs/api.config.d.ts +71 -0
- package/dist/server/configs/api.config.js +81 -0
- package/dist/server/configs/config.base.d.ts +63 -0
- package/dist/server/configs/config.base.js +64 -0
- package/dist/server/configs/index.d.ts +2 -0
- package/dist/server/configs/index.js +18 -0
- package/dist/server/container.d.ts +2 -0
- package/dist/server/container.js +6 -0
- package/dist/server/controllers/chat.controller.d.ts +10 -0
- package/dist/server/controllers/chat.controller.js +50 -0
- package/dist/server/controllers/command.controller.d.ts +7 -0
- package/dist/server/controllers/command.controller.js +47 -0
- package/dist/server/controllers/session.controller.d.ts +9 -0
- package/dist/server/controllers/session.controller.js +70 -0
- package/dist/server/core.d.ts +1 -0
- package/dist/server/core.js +7 -0
- package/dist/server/database/adapters/oxmysql.adapter.d.ts +89 -0
- package/dist/server/database/adapters/oxmysql.adapter.js +149 -0
- package/dist/server/database/database.contract.d.ts +128 -0
- package/dist/server/database/database.contract.js +29 -0
- package/dist/server/database/database.service.d.ts +216 -0
- package/dist/server/database/database.service.js +301 -0
- package/dist/server/database/index.d.ts +53 -0
- package/dist/server/database/index.js +70 -0
- package/dist/server/database/types.d.ts +67 -0
- package/dist/server/database/types.js +7 -0
- package/dist/server/database.d.ts +7 -0
- package/dist/server/database.js +23 -0
- package/dist/server/decorators/bind.d.ts +2 -0
- package/dist/server/decorators/bind.js +15 -0
- package/dist/server/decorators/command.d.ts +49 -0
- package/dist/server/decorators/command.js +23 -0
- package/dist/server/decorators/controller.d.ts +25 -0
- package/dist/server/decorators/controller.js +36 -0
- package/dist/server/decorators/export.d.ts +39 -0
- package/dist/server/decorators/export.js +47 -0
- package/dist/server/decorators/guard.d.ts +56 -0
- package/dist/server/decorators/guard.js +82 -0
- package/dist/server/decorators/index.d.ts +10 -0
- package/dist/server/decorators/index.js +29 -0
- package/dist/server/decorators/onFiveMEvent.d.ts +6 -0
- package/dist/server/decorators/onFiveMEvent.js +14 -0
- package/dist/server/decorators/onFrameworkEvent.d.ts +22 -0
- package/dist/server/decorators/onFrameworkEvent.js +29 -0
- package/dist/server/decorators/onNet.d.ts +58 -0
- package/dist/server/decorators/onNet.js +57 -0
- package/dist/server/decorators/onTick.d.ts +32 -0
- package/dist/server/decorators/onTick.js +40 -0
- package/dist/server/decorators/public.d.ts +27 -0
- package/dist/server/decorators/public.js +36 -0
- package/dist/server/decorators/requiresState.d.ts +56 -0
- package/dist/server/decorators/requiresState.js +63 -0
- package/dist/server/decorators/throttle.d.ts +48 -0
- package/dist/server/decorators/throttle.js +63 -0
- package/dist/server/decorators/utils.d.ts +57 -0
- package/dist/server/decorators/utils.js +63 -0
- package/dist/server/entities/index.d.ts +1 -0
- package/dist/server/entities/index.js +17 -0
- package/dist/server/entities/player.d.ts +157 -0
- package/dist/server/entities/player.js +217 -0
- package/dist/server/error-handler.d.ts +2 -0
- package/dist/server/error-handler.js +43 -0
- package/dist/server/helpers/resolve-method.d.ts +5 -0
- package/dist/server/helpers/resolve-method.js +18 -0
- package/dist/server/index.d.ts +10 -0
- package/dist/server/index.js +31 -0
- package/dist/server/loaders/exports.loader.d.ts +0 -0
- package/dist/server/loaders/exports.loader.js +23 -0
- package/dist/server/loaders/playerSession.loader.d.ts +1 -0
- package/dist/server/loaders/playerSession.loader.js +51 -0
- package/dist/server/services/access-control.service.d.ts +56 -0
- package/dist/server/services/access-control.service.js +99 -0
- package/dist/server/services/chat.service.d.ts +7 -0
- package/dist/server/services/chat.service.js +31 -0
- package/dist/server/services/command.service.d.ts +15 -0
- package/dist/server/services/command.service.js +77 -0
- package/dist/server/services/config.service.d.ts +75 -0
- package/dist/server/services/config.service.js +116 -0
- package/dist/server/services/default/default-security.handler.d.ts +6 -0
- package/dist/server/services/default/default-security.handler.js +26 -0
- package/dist/server/services/http/http.service.d.ts +50 -0
- package/dist/server/services/http/http.service.js +126 -0
- package/dist/server/services/index.d.ts +10 -0
- package/dist/server/services/index.js +26 -0
- package/dist/server/services/parallel/index.d.ts +49 -0
- package/dist/server/services/parallel/index.js +67 -0
- package/dist/server/services/parallel/parallel-compute.service.d.ts +132 -0
- package/dist/server/services/parallel/parallel-compute.service.js +449 -0
- package/dist/server/services/parallel/types.d.ts +188 -0
- package/dist/server/services/parallel/types.js +7 -0
- package/dist/server/services/parallel/worker-pool.d.ts +83 -0
- package/dist/server/services/parallel/worker-pool.js +350 -0
- package/dist/server/services/parallel/worker.d.ts +19 -0
- package/dist/server/services/parallel/worker.js +49 -0
- package/dist/server/services/persistence.service.d.ts +59 -0
- package/dist/server/services/persistence.service.js +166 -0
- package/dist/server/services/player.service.d.ts +96 -0
- package/dist/server/services/player.service.js +132 -0
- package/dist/server/services/rate-limiter.service.d.ts +5 -0
- package/dist/server/services/rate-limiter.service.js +39 -0
- package/dist/server/services/registers.d.ts +1 -0
- package/dist/server/services/registers.js +18 -0
- package/dist/server/setup.d.ts +9 -0
- package/dist/server/setup.js +28 -0
- package/dist/server/system/metadata-server.keys.d.ts +10 -0
- package/dist/server/system/metadata-server.keys.js +13 -0
- package/dist/server/system/processors/command.processor.d.ts +9 -0
- package/dist/server/system/processors/command.processor.js +30 -0
- package/dist/server/system/processors/coreEvent.processor.d.ts +7 -0
- package/dist/server/system/processors/coreEvent.processor.js +41 -0
- package/dist/server/system/processors/export.processor.d.ts +7 -0
- package/dist/server/system/processors/export.processor.js +30 -0
- package/dist/server/system/processors/fivemEvent.processor.d.ts +7 -0
- package/dist/server/system/processors/fivemEvent.processor.js +40 -0
- package/dist/server/system/processors/netEvent.processor.d.ts +11 -0
- package/dist/server/system/processors/netEvent.processor.js +103 -0
- package/dist/server/system/processors/tick.processor.d.ts +5 -0
- package/dist/server/system/processors/tick.processor.js +36 -0
- package/dist/server/system/processors.register.d.ts +1 -0
- package/dist/server/system/processors.register.js +23 -0
- package/dist/server/system/schema-generator.d.ts +2 -0
- package/dist/server/system/schema-generator.js +34 -0
- package/dist/server/templates/admin/admin.controller-template.d.ts +12 -0
- package/dist/server/templates/admin/admin.controller-template.js +2 -0
- package/dist/server/templates/auth/auth-provider.contract.d.ts +58 -0
- package/dist/server/templates/auth/auth-provider.contract.js +23 -0
- package/dist/server/templates/index.d.ts +8 -0
- package/dist/server/templates/index.js +21 -0
- package/dist/server/templates/persistence/index.d.ts +30 -0
- package/dist/server/templates/persistence/index.js +34 -0
- package/dist/server/templates/persistence/player-persistence.contract.d.ts +86 -0
- package/dist/server/templates/persistence/player-persistence.contract.js +52 -0
- package/dist/server/templates/repository/index.d.ts +57 -0
- package/dist/server/templates/repository/index.js +61 -0
- package/dist/server/templates/repository/repository.contract.d.ts +224 -0
- package/dist/server/templates/repository/repository.contract.js +342 -0
- package/dist/server/templates/repository/repository.types.d.ts +51 -0
- package/dist/server/templates/repository/repository.types.js +7 -0
- package/dist/server/templates/security/permission.types.d.ts +32 -0
- package/dist/server/templates/security/permission.types.js +2 -0
- package/dist/server/templates/security/principal-provider.contract.d.ts +43 -0
- package/dist/server/templates/security/principal-provider.contract.js +19 -0
- package/dist/server/templates/security/security-handler.contract.d.ts +5 -0
- package/dist/server/templates/security/security-handler.contract.js +6 -0
- package/dist/server/types/core-events.d.ts +22 -0
- package/dist/server/types/core-events.js +2 -0
- package/dist/server/types/security.types.d.ts +7 -0
- package/dist/server/types/security.types.js +2 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +17 -0
- package/dist/shared/logger/core-logger.d.ts +35 -0
- package/dist/shared/logger/core-logger.js +52 -0
- package/dist/shared/logger/index.d.ts +11 -0
- package/dist/shared/logger/index.js +26 -0
- package/dist/shared/logger/logger.config.d.ts +47 -0
- package/dist/shared/logger/logger.config.js +33 -0
- package/dist/shared/logger/logger.service.d.ts +161 -0
- package/dist/shared/logger/logger.service.js +279 -0
- package/dist/shared/logger/logger.types.d.ts +85 -0
- package/dist/shared/logger/logger.types.js +74 -0
- package/dist/shared/logger/transports/buffered.transport.d.ts +88 -0
- package/dist/shared/logger/transports/buffered.transport.js +174 -0
- package/dist/shared/logger/transports/console.transport.d.ts +37 -0
- package/dist/shared/logger/transports/console.transport.js +134 -0
- package/dist/shared/logger/transports/index.d.ts +3 -0
- package/dist/shared/logger/transports/index.js +19 -0
- package/dist/shared/logger/transports/transport.interface.d.ts +40 -0
- package/dist/shared/logger/transports/transport.interface.js +2 -0
- package/dist/system/class-constructor.d.ts +1 -0
- package/dist/system/class-constructor.js +2 -0
- package/dist/system/decorator-processor.d.ts +4 -0
- package/dist/system/decorator-processor.js +2 -0
- package/dist/system/metadata.scanner.d.ts +7 -0
- package/dist/system/metadata.scanner.js +45 -0
- package/dist/utils/errors.d.ts +14 -0
- package/dist/utils/errors.js +25 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +20 -0
- package/dist/utils/result.d.ts +12 -0
- package/dist/utils/result.js +10 -0
- package/dist/utils/rgb.d.ts +5 -0
- package/dist/utils/rgb.js +2 -0
- package/dist/utils/vector3.d.ts +13 -0
- package/dist/utils/vector3.js +27 -0
- package/package.json +98 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { LogLevel, type LogEntry } from '../logger.types';
|
|
2
|
+
import type { LogTransport } from './transport.interface';
|
|
3
|
+
export interface ConsoleTransportOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Minimum log level to output. Defaults to DEBUG.
|
|
6
|
+
*/
|
|
7
|
+
minLevel?: LogLevel;
|
|
8
|
+
/**
|
|
9
|
+
* Whether to use colors in output. Defaults to true.
|
|
10
|
+
*/
|
|
11
|
+
colors?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Whether to include timestamp in output. Defaults to true.
|
|
14
|
+
*/
|
|
15
|
+
timestamps?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Default transport that outputs logs to the console.
|
|
19
|
+
* Supports colored output and configurable formatting.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const transport = new ConsoleTransport({
|
|
24
|
+
* minLevel: LogLevel.DEBUG,
|
|
25
|
+
* colors: true,
|
|
26
|
+
* timestamps: true
|
|
27
|
+
* })
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare class ConsoleTransport implements LogTransport {
|
|
31
|
+
readonly name = "console";
|
|
32
|
+
minLevel: LogLevel;
|
|
33
|
+
private colors;
|
|
34
|
+
private timestamps;
|
|
35
|
+
constructor(options?: ConsoleTransportOptions);
|
|
36
|
+
write(entry: LogEntry): void;
|
|
37
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.ConsoleTransport = void 0;
|
|
15
|
+
const logger_types_1 = require("../logger.types");
|
|
16
|
+
/**
|
|
17
|
+
* Color codes for console output.
|
|
18
|
+
* Uses ANSI escape codes compatible with most terminals.
|
|
19
|
+
*/
|
|
20
|
+
const COLORS = {
|
|
21
|
+
reset: '\x1b[0m',
|
|
22
|
+
dim: '\x1b[2m',
|
|
23
|
+
bold: '\x1b[1m',
|
|
24
|
+
cyan: '\x1b[36m',
|
|
25
|
+
green: '\x1b[32m',
|
|
26
|
+
yellow: '\x1b[33m',
|
|
27
|
+
red: '\x1b[31m',
|
|
28
|
+
magenta: '\x1b[35m',
|
|
29
|
+
white: '\x1b[37m',
|
|
30
|
+
blue: '\x1b[34m',
|
|
31
|
+
bgRed: '\x1b[41m',
|
|
32
|
+
bgYellow: '\x1b[43m',
|
|
33
|
+
bgBlue: '\x1b[44m',
|
|
34
|
+
bgMagenta: '\x1b[45m',
|
|
35
|
+
};
|
|
36
|
+
const LEVEL_COLORS = {
|
|
37
|
+
[logger_types_1.LogLevel.TRACE]: COLORS.dim,
|
|
38
|
+
[logger_types_1.LogLevel.DEBUG]: COLORS.cyan,
|
|
39
|
+
[logger_types_1.LogLevel.INFO]: COLORS.green,
|
|
40
|
+
[logger_types_1.LogLevel.WARN]: COLORS.yellow,
|
|
41
|
+
[logger_types_1.LogLevel.ERROR]: COLORS.red,
|
|
42
|
+
[logger_types_1.LogLevel.FATAL]: COLORS.magenta,
|
|
43
|
+
[logger_types_1.LogLevel.OFF]: COLORS.white,
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Domain colors - distinctive to quickly identify log origin.
|
|
47
|
+
*/
|
|
48
|
+
const DOMAIN_COLORS = {
|
|
49
|
+
[logger_types_1.LogDomain.FRAMEWORK]: COLORS.magenta,
|
|
50
|
+
[logger_types_1.LogDomain.SERVER]: COLORS.blue,
|
|
51
|
+
[logger_types_1.LogDomain.CLIENT]: COLORS.cyan,
|
|
52
|
+
[logger_types_1.LogDomain.EXTERNAL]: COLORS.yellow,
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Default transport that outputs logs to the console.
|
|
56
|
+
* Supports colored output and configurable formatting.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* const transport = new ConsoleTransport({
|
|
61
|
+
* minLevel: LogLevel.DEBUG,
|
|
62
|
+
* colors: true,
|
|
63
|
+
* timestamps: true
|
|
64
|
+
* })
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
class ConsoleTransport {
|
|
68
|
+
constructor(options = {}) {
|
|
69
|
+
var _a, _b, _c;
|
|
70
|
+
this.name = 'console';
|
|
71
|
+
this.minLevel = (_a = options.minLevel) !== null && _a !== void 0 ? _a : logger_types_1.LogLevel.DEBUG;
|
|
72
|
+
this.colors = (_b = options.colors) !== null && _b !== void 0 ? _b : true;
|
|
73
|
+
this.timestamps = (_c = options.timestamps) !== null && _c !== void 0 ? _c : true;
|
|
74
|
+
}
|
|
75
|
+
write(entry) {
|
|
76
|
+
var _a, _b;
|
|
77
|
+
const { level, domain, message, timestamp, context, error } = entry;
|
|
78
|
+
const levelLabel = logger_types_1.LogLevelLabels[level].padEnd(5);
|
|
79
|
+
const domainLabel = logger_types_1.LogDomainLabels[domain];
|
|
80
|
+
const levelColor = this.colors ? LEVEL_COLORS[level] : '';
|
|
81
|
+
const domainColor = this.colors ? DOMAIN_COLORS[domain] : '';
|
|
82
|
+
const reset = this.colors ? COLORS.reset : '';
|
|
83
|
+
const dim = this.colors ? COLORS.dim : '';
|
|
84
|
+
const bold = this.colors ? COLORS.bold : '';
|
|
85
|
+
// Build the log line
|
|
86
|
+
const parts = [];
|
|
87
|
+
if (this.timestamps) {
|
|
88
|
+
const time = (_b = (_a = timestamp.split('T')[1]) === null || _a === void 0 ? void 0 : _a.slice(0, 12)) !== null && _b !== void 0 ? _b : timestamp;
|
|
89
|
+
parts.push(`${dim}[${time}]${reset}`);
|
|
90
|
+
}
|
|
91
|
+
// Domain tag - always shown for context
|
|
92
|
+
parts.push(`${domainColor}${bold}[${domainLabel}]${reset}`);
|
|
93
|
+
// Level
|
|
94
|
+
parts.push(`${levelColor}${levelLabel}${reset}`);
|
|
95
|
+
// Source module/controller
|
|
96
|
+
if (context === null || context === void 0 ? void 0 : context.source) {
|
|
97
|
+
parts.push(`${dim}[${context.source}]${reset}`);
|
|
98
|
+
}
|
|
99
|
+
parts.push(message);
|
|
100
|
+
// Output the main log line
|
|
101
|
+
const logLine = parts.join(' ');
|
|
102
|
+
// Choose the appropriate console method
|
|
103
|
+
switch (level) {
|
|
104
|
+
case logger_types_1.LogLevel.TRACE:
|
|
105
|
+
case logger_types_1.LogLevel.DEBUG:
|
|
106
|
+
console.debug(logLine);
|
|
107
|
+
break;
|
|
108
|
+
case logger_types_1.LogLevel.INFO:
|
|
109
|
+
console.info(logLine);
|
|
110
|
+
break;
|
|
111
|
+
case logger_types_1.LogLevel.WARN:
|
|
112
|
+
console.warn(logLine);
|
|
113
|
+
break;
|
|
114
|
+
case logger_types_1.LogLevel.ERROR:
|
|
115
|
+
case logger_types_1.LogLevel.FATAL:
|
|
116
|
+
console.error(logLine);
|
|
117
|
+
break;
|
|
118
|
+
default:
|
|
119
|
+
console.log(logLine);
|
|
120
|
+
}
|
|
121
|
+
// Output context if present (excluding source and domain which are already shown)
|
|
122
|
+
if (context) {
|
|
123
|
+
const { source, domain: _ } = context, rest = __rest(context, ["source", "domain"]);
|
|
124
|
+
if (Object.keys(rest).length > 0) {
|
|
125
|
+
console.debug(`${dim} └─ context:${reset}`, rest);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Output error stack if present
|
|
129
|
+
if (error === null || error === void 0 ? void 0 : error.stack) {
|
|
130
|
+
console.error(`${dim} └─ stack:${reset}`, error.stack);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
exports.ConsoleTransport = ConsoleTransport;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./transport.interface"), exports);
|
|
18
|
+
__exportStar(require("./console.transport"), exports);
|
|
19
|
+
__exportStar(require("./buffered.transport"), exports);
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { LogEntry, LogLevel } from '../logger.types';
|
|
2
|
+
/**
|
|
3
|
+
* Contract that all log transports must implement.
|
|
4
|
+
*
|
|
5
|
+
* A transport is responsible for delivering log entries to a specific destination
|
|
6
|
+
* (console, file, database, external service, etc.).
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* class FileTransport implements LogTransport {
|
|
11
|
+
* name = 'file'
|
|
12
|
+
* minLevel = LogLevel.WARN
|
|
13
|
+
*
|
|
14
|
+
* write(entry: LogEntry): void {
|
|
15
|
+
* fs.appendFileSync('app.log', JSON.stringify(entry) + '\n')
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export interface LogTransport {
|
|
21
|
+
/**
|
|
22
|
+
* Unique identifier for this transport.
|
|
23
|
+
* Used for debugging and transport management.
|
|
24
|
+
*/
|
|
25
|
+
readonly name: string;
|
|
26
|
+
/**
|
|
27
|
+
* Minimum log level this transport will handle.
|
|
28
|
+
* Entries below this level will be ignored by this transport.
|
|
29
|
+
*/
|
|
30
|
+
minLevel: LogLevel;
|
|
31
|
+
/**
|
|
32
|
+
* Process and deliver a log entry to its destination.
|
|
33
|
+
* @param entry - The log entry to process
|
|
34
|
+
*/
|
|
35
|
+
write(entry: LogEntry): void;
|
|
36
|
+
/**
|
|
37
|
+
* Optional cleanup method called when the transport is removed or the logger is destroyed.
|
|
38
|
+
*/
|
|
39
|
+
destroy?(): void;
|
|
40
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type ClassConstructor<T = any> = new (...args: any[]) => T;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { DecoratorProcessor } from './decorator-processor';
|
|
2
|
+
import { ClassConstructor } from './class-constructor';
|
|
3
|
+
export declare class MetadataScanner {
|
|
4
|
+
private processors;
|
|
5
|
+
constructor(processors: DecoratorProcessor[]);
|
|
6
|
+
scan(registry: ClassConstructor[]): void;
|
|
7
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.MetadataScanner = void 0;
|
|
16
|
+
const tsyringe_1 = require("tsyringe");
|
|
17
|
+
const logger_1 = require("../shared/logger");
|
|
18
|
+
let MetadataScanner = class MetadataScanner {
|
|
19
|
+
constructor(processors) {
|
|
20
|
+
this.processors = processors;
|
|
21
|
+
}
|
|
22
|
+
scan(registry) {
|
|
23
|
+
logger_1.loggers.scanner.info(`Scanning ${registry.length} controllers with ${this.processors.length} processors`);
|
|
24
|
+
for (const ControllerClass of registry) {
|
|
25
|
+
const instance = tsyringe_1.container.resolve(ControllerClass);
|
|
26
|
+
const prototype = Object.getPrototypeOf(instance);
|
|
27
|
+
const methods = Object.getOwnPropertyNames(prototype).filter((m) => m !== 'constructor' && typeof instance[m] === 'function');
|
|
28
|
+
for (const methodName of methods) {
|
|
29
|
+
for (const processor of this.processors) {
|
|
30
|
+
const metadata = Reflect.getMetadata(processor.metadataKey, prototype, methodName);
|
|
31
|
+
if (metadata) {
|
|
32
|
+
processor.process(instance, methodName, metadata);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
logger_1.loggers.scanner.debug(`Metadata scan complete`);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
exports.MetadataScanner = MetadataScanner;
|
|
41
|
+
exports.MetadataScanner = MetadataScanner = __decorate([
|
|
42
|
+
(0, tsyringe_1.injectable)(),
|
|
43
|
+
__param(0, (0, tsyringe_1.injectAll)('DecoratorProcessor')),
|
|
44
|
+
__metadata("design:paramtypes", [Array])
|
|
45
|
+
], MetadataScanner);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SecurityAction } from '../server/types/security.types';
|
|
2
|
+
export type FrameworkErroCode = 'PLAYER_NOT_FOUND' | 'INSUFFICIENT_FUNDS' | 'VALIDATION_ERROR' | 'API_ERROR' | 'NETWORK_ERROR' | 'UNAUTHORIZED' | 'PERMISSION_DENIED' | 'NOT_IMPLEMENTED' | 'NO_RANK_IN_PRINCIPAL' | 'UNKNOWN' | 'GAME_STATE_ERROR';
|
|
3
|
+
export type ErrorOrigin = 'client' | 'server' | 'core' | 'external';
|
|
4
|
+
export declare class AppError extends Error {
|
|
5
|
+
readonly code: FrameworkErroCode;
|
|
6
|
+
readonly details?: unknown;
|
|
7
|
+
readonly origin: ErrorOrigin;
|
|
8
|
+
constructor(code: FrameworkErroCode, message: string, origin: ErrorOrigin, details?: unknown);
|
|
9
|
+
}
|
|
10
|
+
export declare function isAppError(error: unknown): error is AppError;
|
|
11
|
+
export declare class SecurityError extends AppError {
|
|
12
|
+
readonly action: SecurityAction;
|
|
13
|
+
constructor(action: SecurityAction, message: string, details?: unknown);
|
|
14
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SecurityError = exports.AppError = void 0;
|
|
4
|
+
exports.isAppError = isAppError;
|
|
5
|
+
class AppError extends Error {
|
|
6
|
+
constructor(code, message, origin, details) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.details = details;
|
|
10
|
+
this.origin = origin;
|
|
11
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.AppError = AppError;
|
|
15
|
+
function isAppError(error) {
|
|
16
|
+
return error instanceof AppError;
|
|
17
|
+
}
|
|
18
|
+
class SecurityError extends AppError {
|
|
19
|
+
constructor(action, message, details) {
|
|
20
|
+
super('NETWORK_ERROR', message, 'core', details);
|
|
21
|
+
this.action = action;
|
|
22
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.SecurityError = SecurityError;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./errors"), exports);
|
|
18
|
+
__exportStar(require("./result"), exports);
|
|
19
|
+
__exportStar(require("./vector3"), exports);
|
|
20
|
+
__exportStar(require("./rgb"), exports);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AppError } from './errors';
|
|
2
|
+
export interface Ok<T> {
|
|
3
|
+
ok: true;
|
|
4
|
+
value: T;
|
|
5
|
+
}
|
|
6
|
+
export interface Err<E = AppError> {
|
|
7
|
+
ok: false;
|
|
8
|
+
error: E;
|
|
9
|
+
}
|
|
10
|
+
export type Result<T, E = AppError> = Ok<T> | Err<E>;
|
|
11
|
+
export declare function ok<T>(value: T): Ok<T>;
|
|
12
|
+
export declare function err<E>(error: E): Err<E>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type Vector3 = {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
z: number;
|
|
5
|
+
};
|
|
6
|
+
export declare class Vec3 {
|
|
7
|
+
static create(x: number, y: number, z: number): Vector3;
|
|
8
|
+
static clone(v: Vector3): Vector3;
|
|
9
|
+
static add(a: Vector3, b: Vector3): Vector3;
|
|
10
|
+
static sub(a: Vector3, b: Vector3): Vector3;
|
|
11
|
+
static distance(a: Vector3, b: Vector3): number;
|
|
12
|
+
static equals(a: Vector3, b: Vector3): boolean;
|
|
13
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Vec3 = void 0;
|
|
4
|
+
class Vec3 {
|
|
5
|
+
static create(x, y, z) {
|
|
6
|
+
return { x, y, z };
|
|
7
|
+
}
|
|
8
|
+
static clone(v) {
|
|
9
|
+
return { x: v.x, y: v.y, z: v.z };
|
|
10
|
+
}
|
|
11
|
+
static add(a, b) {
|
|
12
|
+
return { x: a.x + b.x, y: a.y + b.y, z: a.z + b.z };
|
|
13
|
+
}
|
|
14
|
+
static sub(a, b) {
|
|
15
|
+
return { x: a.x - b.x, y: a.y - b.y, z: a.z - b.z };
|
|
16
|
+
}
|
|
17
|
+
static distance(a, b) {
|
|
18
|
+
const dx = a.x - b.x;
|
|
19
|
+
const dy = a.y - b.y;
|
|
20
|
+
const dz = a.z - b.z;
|
|
21
|
+
return Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
22
|
+
}
|
|
23
|
+
static equals(a, b) {
|
|
24
|
+
return a.x === b.x && a.y === b.y && a.z === b.z;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.Vec3 = Vec3;
|
package/package.json
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@open-core/framework",
|
|
3
|
+
"version": "0.1.0-alpha.1",
|
|
4
|
+
"description": "Secure, Event-Driven, OOP Engine for FiveM. Stop scripting, start engineering.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"type": "commonjs",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/newcore-network/opencore.git"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/newcore-network/opencore",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/newcore-network/opencore/issues"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"README.md",
|
|
19
|
+
"LICENSE"
|
|
20
|
+
],
|
|
21
|
+
"exports": {
|
|
22
|
+
".": {
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"import": "./dist/index.js",
|
|
25
|
+
"require": "./dist/index.js"
|
|
26
|
+
},
|
|
27
|
+
"./server": {
|
|
28
|
+
"types": "./dist/server/index.d.ts",
|
|
29
|
+
"import": "./dist/server/index.js",
|
|
30
|
+
"require": "./dist/server/index.js"
|
|
31
|
+
},
|
|
32
|
+
"./client": {
|
|
33
|
+
"types": "./dist/client/index.d.ts",
|
|
34
|
+
"import": "./dist/client/index.js",
|
|
35
|
+
"require": "./dist/client/index.js"
|
|
36
|
+
},
|
|
37
|
+
"./shared": {
|
|
38
|
+
"types": "./dist/shared/index.d.ts",
|
|
39
|
+
"import": "./dist/shared/index.js",
|
|
40
|
+
"require": "./dist/shared/index.js"
|
|
41
|
+
},
|
|
42
|
+
"./utils": {
|
|
43
|
+
"types": "./dist/utils/index.d.ts",
|
|
44
|
+
"import": "./dist/utils/index.js",
|
|
45
|
+
"require": "./dist/utils/index.js"
|
|
46
|
+
},
|
|
47
|
+
"./package.json": "./package.json"
|
|
48
|
+
},
|
|
49
|
+
"scripts": {
|
|
50
|
+
"build": "tsc -p tsconfig.build.json",
|
|
51
|
+
"watch": "tsc -p tsconfig.build.json --watch",
|
|
52
|
+
"lint": "eslint . --ext .ts",
|
|
53
|
+
"lint:fix": "eslint . --ext .ts --fix",
|
|
54
|
+
"format": "prettier --write .",
|
|
55
|
+
"test": "vitest run",
|
|
56
|
+
"test:watch": "vitest",
|
|
57
|
+
"test:unit": "vitest run --project unit",
|
|
58
|
+
"test:integration": "vitest run --project integration",
|
|
59
|
+
"test:coverage": "vitest run --coverage",
|
|
60
|
+
"bench": "tsx benchmark/index.ts",
|
|
61
|
+
"bench:core": "tsx benchmark/index.ts --core",
|
|
62
|
+
"bench:load": "vitest run --project benchmark",
|
|
63
|
+
"bench:all": "tsx benchmark/index.ts --all"
|
|
64
|
+
},
|
|
65
|
+
"keywords": [
|
|
66
|
+
"framework",
|
|
67
|
+
"opencore",
|
|
68
|
+
"fivem",
|
|
69
|
+
"typescript",
|
|
70
|
+
"roleplay"
|
|
71
|
+
],
|
|
72
|
+
"author": "OpenCore Team",
|
|
73
|
+
"license": "MPL-2.0",
|
|
74
|
+
"packageManager": "pnpm@10.13.1",
|
|
75
|
+
"dependencies": {
|
|
76
|
+
"reflect-metadata": "^0.2.2",
|
|
77
|
+
"tsyringe": "^4.10.0",
|
|
78
|
+
"uuid": "^13.0.0",
|
|
79
|
+
"zod": "^4.1.13"
|
|
80
|
+
},
|
|
81
|
+
"devDependencies": {
|
|
82
|
+
"@citizenfx/client": "2.0.22443-1",
|
|
83
|
+
"@citizenfx/server": "2.0.22443-1",
|
|
84
|
+
"@types/node": "^24.10.1",
|
|
85
|
+
"@typescript-eslint/eslint-plugin": "^8.48.1",
|
|
86
|
+
"@typescript-eslint/parser": "^8.48.1",
|
|
87
|
+
"@vitest/coverage-v8": "^4.0.15",
|
|
88
|
+
"eslint": "^9.39.1",
|
|
89
|
+
"eslint-config-prettier": "^10.1.8",
|
|
90
|
+
"eslint-plugin-import": "^2.32.0",
|
|
91
|
+
"eslint-plugin-prettier": "^5.5.4",
|
|
92
|
+
"prettier": "3.7.1",
|
|
93
|
+
"tinybench": "^2.7.0",
|
|
94
|
+
"tsx": "^4.19.2",
|
|
95
|
+
"typescript": "^5.9.3",
|
|
96
|
+
"vitest": "^4.0.15"
|
|
97
|
+
}
|
|
98
|
+
}
|