@nexo-alpha/core 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/dist/api.d.ts +26 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/application.d.ts +28 -14
- package/dist/application.d.ts.map +1 -1
- package/dist/application.js +167 -26
- package/dist/application.js.map +1 -1
- package/dist/config.d.ts +7 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +39 -0
- package/dist/config.js.map +1 -0
- package/dist/events.d.ts +35 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +12 -0
- package/dist/events.js.map +1 -1
- package/dist/history.d.ts +9 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +2 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/job.d.ts +2 -0
- package/dist/job.d.ts.map +1 -1
- package/dist/module.d.ts +1 -0
- package/dist/module.d.ts.map +1 -1
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -57,8 +57,10 @@ app.getDependents("orders"); // -> ["payments"]
|
|
|
57
57
|
- **Module model** — `purpose`, `status`, `dependencies`, `apis`, `services`, `events`, `jobs`
|
|
58
58
|
- **Dependency graph** — `getDependencies(name)` / `getDependents(name)`
|
|
59
59
|
- **Events** — a plain `NexoEventBus` (wraps `node:events`) via `app.events`
|
|
60
|
-
- **Configuration** — `getConfig(key)` / `getAllConfig()`
|
|
60
|
+
- **Configuration** — `getConfig(key)` / `getAllConfig()` / `updateConfig(patch)`
|
|
61
61
|
- **Knowledge records** — `addDecision`/`getDecisions`, `addConstraint`/`getConstraints`, `setDevelopmentState`/`getDevelopmentState`
|
|
62
|
+
- **Structural mutators** — `addApiToModule`/`updateApi`, `addServiceToModule`/`updateService`, `addModuleDependency` (raw, unguarded operations; permissions/validation/audit live in `@nexo-alpha/tools`'s write interface, not here)
|
|
63
|
+
- **Audit trail** — `addHistoryEntry`/`getHistory` — an append-only, timestamped log of operations (`success`/`denied`/`failed`)
|
|
62
64
|
|
|
63
65
|
## Related packages
|
|
64
66
|
|
|
@@ -67,7 +69,7 @@ app.getDependents("orders"); // -> ["payments"]
|
|
|
67
69
|
|
|
68
70
|
## Status
|
|
69
71
|
|
|
70
|
-
**v0.1-alpha.** No CLI, no HTTP adapter
|
|
72
|
+
**v0.1-alpha.** No CLI, no HTTP adapter yet. Write/mutation AI operations exist as raw core mutators (`addApiToModule`, `updateApi`, `addModuleDependency`, etc.) — the permission/validation/audit pipeline that makes them safe for an AI tool to call lives in `@nexo-alpha/tools`'s `createWriteInterface`.
|
|
71
73
|
|
|
72
74
|
## License
|
|
73
75
|
|
package/dist/api.d.ts
CHANGED
|
@@ -1,10 +1,36 @@
|
|
|
1
1
|
export type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS" | "HEAD";
|
|
2
|
+
export interface NexoRequestContext {
|
|
3
|
+
readonly params: Readonly<Record<string, string>>;
|
|
4
|
+
readonly query: Readonly<Record<string, unknown>>;
|
|
5
|
+
readonly payload: unknown;
|
|
6
|
+
readonly headers: Readonly<Record<string, string>>;
|
|
7
|
+
}
|
|
8
|
+
export type NexoApiHandler = (context: NexoRequestContext) => unknown | Promise<unknown>;
|
|
9
|
+
export interface NexoValidationOutcome {
|
|
10
|
+
readonly valid: boolean;
|
|
11
|
+
readonly errors?: readonly string[];
|
|
12
|
+
}
|
|
13
|
+
export type NexoRequestValidator = (context: NexoRequestContext) => NexoValidationOutcome | Promise<NexoValidationOutcome>;
|
|
14
|
+
export interface NexoApiAuth {
|
|
15
|
+
readonly required: boolean;
|
|
16
|
+
readonly scopes?: readonly string[];
|
|
17
|
+
}
|
|
18
|
+
export interface NexoAuthResult {
|
|
19
|
+
readonly authenticated: boolean;
|
|
20
|
+
readonly scopes?: readonly string[];
|
|
21
|
+
readonly identity?: unknown;
|
|
22
|
+
}
|
|
23
|
+
export type NexoAuthenticator = (context: NexoRequestContext) => NexoAuthResult | Promise<NexoAuthResult>;
|
|
2
24
|
export interface NexoApi {
|
|
3
25
|
readonly name: string;
|
|
4
26
|
readonly method: HttpMethod;
|
|
5
27
|
readonly path: string;
|
|
6
28
|
readonly description?: string;
|
|
7
29
|
readonly purpose?: string;
|
|
30
|
+
readonly service?: string;
|
|
8
31
|
readonly dependencies?: readonly string[];
|
|
32
|
+
readonly auth?: NexoApiAuth;
|
|
33
|
+
readonly validate?: NexoRequestValidator;
|
|
34
|
+
readonly handler?: NexoApiHandler;
|
|
9
35
|
}
|
|
10
36
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB,KAAK,GACL,MAAM,GACN,KAAK,GACL,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,CAAC;AAEX,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB,KAAK,GACL,MAAM,GACN,KAAK,GACL,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,CAAC;AAEX,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpD;AAED,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,kBAAkB,KACxB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhC,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,MAAM,oBAAoB,GAAG,CACjC,OAAO,EAAE,kBAAkB,KACxB,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,MAAM,iBAAiB,GAAG,CAC9B,OAAO,EAAE,kBAAkB,KACxB,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAE9C,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;CACnC"}
|
package/dist/application.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import type { NexoModule } from "./module.js";
|
|
2
2
|
import type { NexoApi } from "./api.js";
|
|
3
3
|
import type { NexoService } from "./service.js";
|
|
4
|
-
import type {
|
|
5
|
-
import type { NexoConstraint } from "./constraint.js";
|
|
6
|
-
import type { DevelopmentState } from "./development-state.js";
|
|
4
|
+
import type { NexoJob } from "./job.js";
|
|
7
5
|
import { NexoEventBus } from "./events.js";
|
|
8
6
|
export interface ApplicationOptions {
|
|
9
7
|
readonly name: string;
|
|
@@ -11,20 +9,18 @@ export interface ApplicationOptions {
|
|
|
11
9
|
readonly description?: string;
|
|
12
10
|
readonly config?: Record<string, unknown>;
|
|
13
11
|
}
|
|
14
|
-
export type ApplicationState = "created" | "initializing" | "running" | "stopping" | "stopped";
|
|
12
|
+
export type ApplicationState = "created" | "initializing" | "running" | "stopping" | "stopped" | "failed";
|
|
15
13
|
export declare class NexoApplication {
|
|
16
14
|
readonly name: string;
|
|
17
15
|
readonly version: string;
|
|
18
16
|
readonly description?: string | undefined;
|
|
19
17
|
readonly events: NexoEventBus;
|
|
20
18
|
private readonly modules;
|
|
21
|
-
private
|
|
22
|
-
private readonly decisions;
|
|
23
|
-
private readonly constraints;
|
|
24
|
-
private developmentState;
|
|
19
|
+
private config;
|
|
25
20
|
private _state;
|
|
26
21
|
constructor(options: ApplicationOptions);
|
|
27
22
|
get state(): ApplicationState;
|
|
23
|
+
private assertModifiable;
|
|
28
24
|
module(module: NexoModule): this;
|
|
29
25
|
getModule(name: string): NexoModule | undefined;
|
|
30
26
|
getModules(): readonly NexoModule[];
|
|
@@ -34,14 +30,32 @@ export declare class NexoApplication {
|
|
|
34
30
|
getDependents(moduleName: string): readonly string[];
|
|
35
31
|
getApis(): readonly NexoApi[];
|
|
36
32
|
getServices(): readonly NexoService[];
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
33
|
+
getJobs(): readonly NexoJob[];
|
|
34
|
+
private requireModule;
|
|
35
|
+
addApiToModule(moduleName: string, api: NexoApi): this;
|
|
36
|
+
updateApi(moduleName: string, apiName: string, patch: Partial<NexoApi>): NexoApi;
|
|
37
|
+
addServiceToModule(moduleName: string, service: NexoService): this;
|
|
38
|
+
updateService(moduleName: string, serviceName: string, patch: Partial<NexoService>): NexoService;
|
|
39
|
+
addJobToModule(moduleName: string, job: NexoJob): this;
|
|
40
|
+
updateJob(moduleName: string, jobName: string, patch: Partial<NexoJob>): NexoJob;
|
|
41
|
+
updateConfig(patch: Record<string, unknown>): Readonly<Record<string, unknown>>;
|
|
42
|
+
addModuleDependency(moduleName: string, dependencyName: string): readonly string[];
|
|
43
43
|
start(): Promise<void>;
|
|
44
44
|
stop(): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Recovers a "failed" application back to "stopped" so it can be
|
|
47
|
+
* started again. Only valid from the "failed" state.
|
|
48
|
+
*
|
|
49
|
+
* This is a best-effort cleanup, not a rollback: reset() does not know
|
|
50
|
+
* which modules successfully completed initialize()/start() before the
|
|
51
|
+
* failure, so it calls stop() on every registered module (in reverse
|
|
52
|
+
* registration order, same as a normal stop()) and tolerates each one
|
|
53
|
+
* failing or being a no-op for a module that never started. Errors are
|
|
54
|
+
* collected and returned rather than thrown, since a caller recovering
|
|
55
|
+
* from a failure needs to see every cleanup problem, not just the
|
|
56
|
+
* first one.
|
|
57
|
+
*/
|
|
58
|
+
reset(): Promise<readonly Error[]>;
|
|
45
59
|
}
|
|
46
60
|
export declare function createApplication(options: ApplicationOptions): NexoApplication;
|
|
47
61
|
//# sourceMappingURL=application.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"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"}
|
package/dist/application.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NexoConfigurationError, NexoLifecycleError } from "./errors.js";
|
|
2
|
-
import { NexoEventBus } from "./events.js";
|
|
2
|
+
import { NexoEvent, NexoEventBus } from "./events.js";
|
|
3
3
|
export class NexoApplication {
|
|
4
4
|
name;
|
|
5
5
|
version;
|
|
@@ -7,14 +7,6 @@ export class NexoApplication {
|
|
|
7
7
|
events = new NexoEventBus();
|
|
8
8
|
modules = new Map();
|
|
9
9
|
config;
|
|
10
|
-
decisions = [];
|
|
11
|
-
constraints = [];
|
|
12
|
-
developmentState = {
|
|
13
|
-
completed: [],
|
|
14
|
-
inProgress: [],
|
|
15
|
-
blocked: [],
|
|
16
|
-
knownIssues: []
|
|
17
|
-
};
|
|
18
10
|
_state = "created";
|
|
19
11
|
constructor(options) {
|
|
20
12
|
this.name = options.name;
|
|
@@ -25,7 +17,13 @@ export class NexoApplication {
|
|
|
25
17
|
get state() {
|
|
26
18
|
return this._state;
|
|
27
19
|
}
|
|
20
|
+
assertModifiable() {
|
|
21
|
+
if (this._state !== "created" && this._state !== "stopped") {
|
|
22
|
+
throw new NexoLifecycleError(`Cannot modify application structure or configuration while in state "${this._state}".`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
28
25
|
module(module) {
|
|
26
|
+
this.assertModifiable();
|
|
29
27
|
if (this.modules.has(module.name)) {
|
|
30
28
|
throw new NexoConfigurationError(`Nexo module "${module.name}" is already registered.`);
|
|
31
29
|
}
|
|
@@ -58,26 +56,114 @@ export class NexoApplication {
|
|
|
58
56
|
getServices() {
|
|
59
57
|
return [...this.modules.values()].flatMap((module) => module.services ?? []);
|
|
60
58
|
}
|
|
61
|
-
|
|
62
|
-
this.
|
|
59
|
+
getJobs() {
|
|
60
|
+
return [...this.modules.values()].flatMap((module) => module.jobs ?? []);
|
|
61
|
+
}
|
|
62
|
+
requireModule(moduleName) {
|
|
63
|
+
const module = this.modules.get(moduleName);
|
|
64
|
+
if (!module) {
|
|
65
|
+
throw new NexoConfigurationError(`Nexo module "${moduleName}" is not registered.`);
|
|
66
|
+
}
|
|
67
|
+
return module;
|
|
68
|
+
}
|
|
69
|
+
addApiToModule(moduleName, api) {
|
|
70
|
+
this.assertModifiable();
|
|
71
|
+
const module = this.requireModule(moduleName);
|
|
72
|
+
if (module.apis?.some((existing) => existing.name === api.name)) {
|
|
73
|
+
throw new NexoConfigurationError(`API "${api.name}" is already registered on module "${moduleName}".`);
|
|
74
|
+
}
|
|
75
|
+
this.modules.set(moduleName, {
|
|
76
|
+
...module,
|
|
77
|
+
apis: [...(module.apis ?? []), api]
|
|
78
|
+
});
|
|
63
79
|
return this;
|
|
64
80
|
}
|
|
65
|
-
|
|
66
|
-
|
|
81
|
+
updateApi(moduleName, apiName, patch) {
|
|
82
|
+
this.assertModifiable();
|
|
83
|
+
const module = this.requireModule(moduleName);
|
|
84
|
+
const existing = module.apis?.find((api) => api.name === apiName);
|
|
85
|
+
if (!existing) {
|
|
86
|
+
throw new NexoConfigurationError(`API "${apiName}" is not registered on module "${moduleName}".`);
|
|
87
|
+
}
|
|
88
|
+
const updated = { ...existing, ...patch };
|
|
89
|
+
this.modules.set(moduleName, {
|
|
90
|
+
...module,
|
|
91
|
+
apis: (module.apis ?? []).map((api) => api.name === apiName ? updated : api)
|
|
92
|
+
});
|
|
93
|
+
return updated;
|
|
67
94
|
}
|
|
68
|
-
|
|
69
|
-
this.
|
|
95
|
+
addServiceToModule(moduleName, service) {
|
|
96
|
+
this.assertModifiable();
|
|
97
|
+
const module = this.requireModule(moduleName);
|
|
98
|
+
if (module.services?.some((existing) => existing.name === service.name)) {
|
|
99
|
+
throw new NexoConfigurationError(`Service "${service.name}" is already registered on module "${moduleName}".`);
|
|
100
|
+
}
|
|
101
|
+
this.modules.set(moduleName, {
|
|
102
|
+
...module,
|
|
103
|
+
services: [...(module.services ?? []), service]
|
|
104
|
+
});
|
|
70
105
|
return this;
|
|
71
106
|
}
|
|
72
|
-
|
|
73
|
-
|
|
107
|
+
updateService(moduleName, serviceName, patch) {
|
|
108
|
+
this.assertModifiable();
|
|
109
|
+
const module = this.requireModule(moduleName);
|
|
110
|
+
const existing = module.services?.find((service) => service.name === serviceName);
|
|
111
|
+
if (!existing) {
|
|
112
|
+
throw new NexoConfigurationError(`Service "${serviceName}" is not registered on module "${moduleName}".`);
|
|
113
|
+
}
|
|
114
|
+
const updated = { ...existing, ...patch };
|
|
115
|
+
this.modules.set(moduleName, {
|
|
116
|
+
...module,
|
|
117
|
+
services: (module.services ?? []).map((service) => service.name === serviceName ? updated : service)
|
|
118
|
+
});
|
|
119
|
+
return updated;
|
|
74
120
|
}
|
|
75
|
-
|
|
76
|
-
this.
|
|
121
|
+
addJobToModule(moduleName, job) {
|
|
122
|
+
this.assertModifiable();
|
|
123
|
+
const module = this.requireModule(moduleName);
|
|
124
|
+
if (module.jobs?.some((existing) => existing.name === job.name)) {
|
|
125
|
+
throw new NexoConfigurationError(`Job "${job.name}" is already registered on module "${moduleName}".`);
|
|
126
|
+
}
|
|
127
|
+
this.modules.set(moduleName, {
|
|
128
|
+
...module,
|
|
129
|
+
jobs: [...(module.jobs ?? []), job]
|
|
130
|
+
});
|
|
77
131
|
return this;
|
|
78
132
|
}
|
|
79
|
-
|
|
80
|
-
|
|
133
|
+
updateJob(moduleName, jobName, patch) {
|
|
134
|
+
this.assertModifiable();
|
|
135
|
+
const module = this.requireModule(moduleName);
|
|
136
|
+
const existing = module.jobs?.find((job) => job.name === jobName);
|
|
137
|
+
if (!existing) {
|
|
138
|
+
throw new NexoConfigurationError(`Job "${jobName}" is not registered on module "${moduleName}".`);
|
|
139
|
+
}
|
|
140
|
+
const updated = { ...existing, ...patch };
|
|
141
|
+
this.modules.set(moduleName, {
|
|
142
|
+
...module,
|
|
143
|
+
jobs: (module.jobs ?? []).map((job) => (job.name === jobName ? updated : job))
|
|
144
|
+
});
|
|
145
|
+
return updated;
|
|
146
|
+
}
|
|
147
|
+
updateConfig(patch) {
|
|
148
|
+
this.assertModifiable();
|
|
149
|
+
this.config = { ...this.config, ...patch };
|
|
150
|
+
return this.config;
|
|
151
|
+
}
|
|
152
|
+
addModuleDependency(moduleName, dependencyName) {
|
|
153
|
+
this.assertModifiable();
|
|
154
|
+
const module = this.requireModule(moduleName);
|
|
155
|
+
if (dependencyName === moduleName) {
|
|
156
|
+
throw new NexoConfigurationError(`Module "${moduleName}" cannot depend on itself.`);
|
|
157
|
+
}
|
|
158
|
+
if (!this.modules.has(dependencyName)) {
|
|
159
|
+
throw new NexoConfigurationError(`Nexo module "${dependencyName}" is not registered.`);
|
|
160
|
+
}
|
|
161
|
+
if (module.dependencies?.includes(dependencyName)) {
|
|
162
|
+
throw new NexoConfigurationError(`Module "${moduleName}" already depends on "${dependencyName}".`);
|
|
163
|
+
}
|
|
164
|
+
const dependencies = [...(module.dependencies ?? []), dependencyName];
|
|
165
|
+
this.modules.set(moduleName, { ...module, dependencies });
|
|
166
|
+
return dependencies;
|
|
81
167
|
}
|
|
82
168
|
async start() {
|
|
83
169
|
if (this._state === "running") {
|
|
@@ -87,13 +173,25 @@ export class NexoApplication {
|
|
|
87
173
|
throw new NexoLifecycleError(`Cannot start application while in "${this._state}" state.`);
|
|
88
174
|
}
|
|
89
175
|
this._state = "initializing";
|
|
90
|
-
|
|
91
|
-
|
|
176
|
+
this.events.emit(NexoEvent.APPLICATION_INITIALIZING, { state: this._state });
|
|
177
|
+
try {
|
|
178
|
+
for (const module of this.modules.values()) {
|
|
179
|
+
await module.initialize?.();
|
|
180
|
+
}
|
|
181
|
+
for (const module of this.modules.values()) {
|
|
182
|
+
await module.start?.();
|
|
183
|
+
}
|
|
92
184
|
}
|
|
93
|
-
|
|
94
|
-
|
|
185
|
+
catch (error) {
|
|
186
|
+
this._state = "failed";
|
|
187
|
+
this.events.emit(NexoEvent.APPLICATION_FAILED, {
|
|
188
|
+
state: this._state,
|
|
189
|
+
error: error instanceof Error ? error.message : String(error)
|
|
190
|
+
});
|
|
191
|
+
throw error;
|
|
95
192
|
}
|
|
96
193
|
this._state = "running";
|
|
194
|
+
this.events.emit(NexoEvent.APPLICATION_STARTED, { state: this._state });
|
|
97
195
|
}
|
|
98
196
|
async stop() {
|
|
99
197
|
if (this._state === "stopped") {
|
|
@@ -103,11 +201,54 @@ export class NexoApplication {
|
|
|
103
201
|
throw new NexoLifecycleError(`Cannot stop application while in "${this._state}" state.`);
|
|
104
202
|
}
|
|
105
203
|
this._state = "stopping";
|
|
204
|
+
this.events.emit(NexoEvent.APPLICATION_STOPPING, { state: this._state });
|
|
205
|
+
const modules = [...this.modules.values()].reverse();
|
|
206
|
+
try {
|
|
207
|
+
for (const module of modules) {
|
|
208
|
+
await module.stop?.();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
this._state = "failed";
|
|
213
|
+
this.events.emit(NexoEvent.APPLICATION_FAILED, {
|
|
214
|
+
state: this._state,
|
|
215
|
+
error: error instanceof Error ? error.message : String(error)
|
|
216
|
+
});
|
|
217
|
+
throw error;
|
|
218
|
+
}
|
|
219
|
+
this._state = "stopped";
|
|
220
|
+
this.events.emit(NexoEvent.APPLICATION_STOPPED, { state: this._state });
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Recovers a "failed" application back to "stopped" so it can be
|
|
224
|
+
* started again. Only valid from the "failed" state.
|
|
225
|
+
*
|
|
226
|
+
* This is a best-effort cleanup, not a rollback: reset() does not know
|
|
227
|
+
* which modules successfully completed initialize()/start() before the
|
|
228
|
+
* failure, so it calls stop() on every registered module (in reverse
|
|
229
|
+
* registration order, same as a normal stop()) and tolerates each one
|
|
230
|
+
* failing or being a no-op for a module that never started. Errors are
|
|
231
|
+
* collected and returned rather than thrown, since a caller recovering
|
|
232
|
+
* from a failure needs to see every cleanup problem, not just the
|
|
233
|
+
* first one.
|
|
234
|
+
*/
|
|
235
|
+
async reset() {
|
|
236
|
+
if (this._state !== "failed") {
|
|
237
|
+
throw new NexoLifecycleError(`Cannot reset application while in "${this._state}" state.`);
|
|
238
|
+
}
|
|
106
239
|
const modules = [...this.modules.values()].reverse();
|
|
240
|
+
const errors = [];
|
|
107
241
|
for (const module of modules) {
|
|
108
|
-
|
|
242
|
+
try {
|
|
243
|
+
await module.stop?.();
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
errors.push(error instanceof Error ? error : new Error(String(error)));
|
|
247
|
+
}
|
|
109
248
|
}
|
|
110
249
|
this._state = "stopped";
|
|
250
|
+
this.events.emit(NexoEvent.APPLICATION_RESET, { state: this._state, errors });
|
|
251
|
+
return errors;
|
|
111
252
|
}
|
|
112
253
|
}
|
|
113
254
|
export function createApplication(options) {
|
package/dist/application.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.js","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"application.js","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface EnvConfigOptions {
|
|
2
|
+
readonly prefix?: string;
|
|
3
|
+
readonly env?: Record<string, string | undefined>;
|
|
4
|
+
}
|
|
5
|
+
export declare function loadEnvConfig(options?: EnvConfigOptions): Record<string, unknown>;
|
|
6
|
+
export declare function defineConfig<T extends Record<string, unknown>>(config: T): T;
|
|
7
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CACnD;AAED,wBAAgB,aAAa,CAC3B,OAAO,GAAE,gBAAqB,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmCzB;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAE5E"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export function loadEnvConfig(options = {}) {
|
|
2
|
+
const prefix = options.prefix ?? "NEXO_";
|
|
3
|
+
const source = options.env ?? process.env;
|
|
4
|
+
const result = {};
|
|
5
|
+
for (const [key, value] of Object.entries(source)) {
|
|
6
|
+
if (value === undefined || !key.startsWith(prefix)) {
|
|
7
|
+
continue;
|
|
8
|
+
}
|
|
9
|
+
const stripped = key.slice(prefix.length);
|
|
10
|
+
if (!stripped) {
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
const camelKey = stripped
|
|
14
|
+
.toLowerCase()
|
|
15
|
+
.replace(/_([a-z0-9])/g, (_, letter) => letter.toUpperCase());
|
|
16
|
+
if (value === "true") {
|
|
17
|
+
result[camelKey] = true;
|
|
18
|
+
}
|
|
19
|
+
else if (value === "false") {
|
|
20
|
+
result[camelKey] = false;
|
|
21
|
+
}
|
|
22
|
+
else if (/^-?\d+(\.\d+)?$/.test(value) && !isNaN(Number(value))) {
|
|
23
|
+
result[camelKey] = Number(value);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
try {
|
|
27
|
+
result[camelKey] = JSON.parse(value);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
result[camelKey] = value;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
export function defineConfig(config) {
|
|
37
|
+
return config;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,aAAa,CAC3B,UAA4B,EAAE;IAE9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IAC1C,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ;aACtB,WAAW,EAAE;aACb,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAEhE,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACrB,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QAC1B,CAAC;aAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC;aAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAClE,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,YAAY,CAAoC,MAAS;IACvE,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/events.d.ts
CHANGED
|
@@ -4,4 +4,39 @@ export declare class NexoEventBus {
|
|
|
4
4
|
off(event: string, listener: (...args: unknown[]) => void): this;
|
|
5
5
|
emit(event: string, ...args: unknown[]): boolean;
|
|
6
6
|
}
|
|
7
|
+
export declare const NexoEvent: {
|
|
8
|
+
readonly API_CALLED: "api.called";
|
|
9
|
+
readonly API_ERROR: "api.error";
|
|
10
|
+
readonly JOB_RAN: "job.ran";
|
|
11
|
+
readonly JOB_FAILED: "job.failed";
|
|
12
|
+
readonly APPLICATION_INITIALIZING: "application.initializing";
|
|
13
|
+
readonly APPLICATION_STARTED: "application.started";
|
|
14
|
+
readonly APPLICATION_STOPPING: "application.stopping";
|
|
15
|
+
readonly APPLICATION_STOPPED: "application.stopped";
|
|
16
|
+
readonly APPLICATION_FAILED: "application.failed";
|
|
17
|
+
readonly APPLICATION_RESET: "application.reset";
|
|
18
|
+
};
|
|
19
|
+
export interface ApiCalledEvent {
|
|
20
|
+
readonly api: string;
|
|
21
|
+
readonly method: string;
|
|
22
|
+
readonly path: string;
|
|
23
|
+
readonly statusCode: number;
|
|
24
|
+
readonly durationMs: number;
|
|
25
|
+
}
|
|
26
|
+
export interface ApiErrorEvent {
|
|
27
|
+
readonly api: string;
|
|
28
|
+
readonly method: string;
|
|
29
|
+
readonly path: string;
|
|
30
|
+
readonly durationMs: number;
|
|
31
|
+
readonly error: string;
|
|
32
|
+
}
|
|
33
|
+
export interface JobRanEvent {
|
|
34
|
+
readonly job: string;
|
|
35
|
+
readonly durationMs: number;
|
|
36
|
+
}
|
|
37
|
+
export interface JobFailedEvent {
|
|
38
|
+
readonly job: string;
|
|
39
|
+
readonly durationMs: number;
|
|
40
|
+
readonly error: string;
|
|
41
|
+
}
|
|
7
42
|
//# sourceMappingURL=events.d.ts.map
|
package/dist/events.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAEA,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAE9C,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAK/D,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAKhE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO;CAGjD"}
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAEA,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAE9C,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAK/D,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAKhE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO;CAGjD;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;CAWZ,CAAC;AAEX,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB"}
|
package/dist/events.js
CHANGED
|
@@ -13,4 +13,16 @@ export class NexoEventBus {
|
|
|
13
13
|
return this.emitter.emit(event, ...args);
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
+
export const NexoEvent = {
|
|
17
|
+
API_CALLED: "api.called",
|
|
18
|
+
API_ERROR: "api.error",
|
|
19
|
+
JOB_RAN: "job.ran",
|
|
20
|
+
JOB_FAILED: "job.failed",
|
|
21
|
+
APPLICATION_INITIALIZING: "application.initializing",
|
|
22
|
+
APPLICATION_STARTED: "application.started",
|
|
23
|
+
APPLICATION_STOPPING: "application.stopping",
|
|
24
|
+
APPLICATION_STOPPED: "application.stopped",
|
|
25
|
+
APPLICATION_FAILED: "application.failed",
|
|
26
|
+
APPLICATION_RESET: "application.reset"
|
|
27
|
+
};
|
|
16
28
|
//# sourceMappingURL=events.js.map
|
package/dist/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,OAAO,YAAY;IACN,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;IAE9C,EAAE,CAAC,KAAa,EAAE,QAAsC;QACtD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,QAAsC;QACvD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,GAAG,IAAe;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,OAAO,YAAY;IACN,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;IAE9C,EAAE,CAAC,KAAa,EAAE,QAAsC;QACtD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,QAAsC;QACvD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,GAAG,IAAe;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,wBAAwB,EAAE,0BAA0B;IACpD,mBAAmB,EAAE,qBAAqB;IAC1C,oBAAoB,EAAE,sBAAsB;IAC5C,mBAAmB,EAAE,qBAAqB;IAC1C,kBAAkB,EAAE,oBAAoB;IACxC,iBAAiB,EAAE,mBAAmB;CAC9B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface NexoHistoryEntry {
|
|
2
|
+
readonly timestamp: string;
|
|
3
|
+
readonly operation: string;
|
|
4
|
+
readonly target?: string;
|
|
5
|
+
readonly actor?: string;
|
|
6
|
+
readonly result: "success" | "denied" | "failed";
|
|
7
|
+
readonly detail?: string;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B"}
|
package/dist/history.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,11 +2,11 @@ export { createApplication, NexoApplication } from "./application.js";
|
|
|
2
2
|
export type { ApplicationOptions, ApplicationState } from "./application.js";
|
|
3
3
|
export type { NexoModule } from "./module.js";
|
|
4
4
|
export type { NexoService } from "./service.js";
|
|
5
|
-
export type { NexoApi, HttpMethod } from "./api.js";
|
|
6
|
-
export type { NexoJob } from "./job.js";
|
|
7
|
-
export
|
|
8
|
-
export type {
|
|
9
|
-
export type { DevelopmentState } from "./development-state.js";
|
|
10
|
-
export { NexoEventBus } from "./events.js";
|
|
5
|
+
export type { NexoApi, HttpMethod, NexoRequestContext, NexoApiHandler, NexoValidationOutcome, NexoRequestValidator, NexoApiAuth, NexoAuthResult, NexoAuthenticator } from "./api.js";
|
|
6
|
+
export type { NexoJob, NexoJobRunner } from "./job.js";
|
|
7
|
+
export { NexoEventBus, NexoEvent } from "./events.js";
|
|
8
|
+
export type { ApiCalledEvent, ApiErrorEvent, JobRanEvent, JobFailedEvent } from "./events.js";
|
|
11
9
|
export { NexoError, NexoConfigurationError, NexoLifecycleError } from "./errors.js";
|
|
10
|
+
export { loadEnvConfig, defineConfig } from "./config.js";
|
|
11
|
+
export type { EnvConfigOptions } from "./config.js";
|
|
12
12
|
//# 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":"AAAA,OAAO,EACL,iBAAiB,EACjB,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,UAAU,EACX,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,WAAW,EACZ,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,OAAO,EACP,UAAU,EACX,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,UAAU,EACX,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,WAAW,EACZ,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,OAAO,EACP,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACX,cAAc,EACd,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,OAAO,EACP,aAAa,EACd,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,YAAY,EACZ,SAAS,EACV,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,aAAa,EACb,YAAY,EACb,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,gBAAgB,EACjB,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { createApplication, NexoApplication } from "./application.js";
|
|
2
|
-
export { NexoEventBus } from "./events.js";
|
|
2
|
+
export { NexoEventBus, NexoEvent } from "./events.js";
|
|
3
3
|
export { NexoError, NexoConfigurationError, NexoLifecycleError } from "./errors.js";
|
|
4
|
+
export { loadEnvConfig, defineConfig } from "./config.js";
|
|
4
5
|
//# 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,OAAO,EACL,iBAAiB,EACjB,eAAe,EAChB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAgC1B,OAAO,EACL,YAAY,EACZ,SAAS,EACV,MAAM,aAAa,CAAC;AASrB,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,aAAa,EACb,YAAY,EACb,MAAM,aAAa,CAAC"}
|
package/dist/job.d.ts
CHANGED
package/dist/job.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../src/job.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../src/job.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7D,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC;CAC9B"}
|
package/dist/module.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export interface NexoModule {
|
|
|
7
7
|
readonly purpose?: string;
|
|
8
8
|
readonly status?: string;
|
|
9
9
|
readonly dependencies?: readonly string[];
|
|
10
|
+
readonly externalDependencies?: readonly string[];
|
|
10
11
|
readonly apis?: readonly NexoApi[];
|
|
11
12
|
readonly services?: readonly NexoService[];
|
|
12
13
|
readonly events?: readonly string[];
|
package/dist/module.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAEnC,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC/B"}
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAEnC,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC/B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nexo-alpha/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Core runtime for the Nexo application framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"nexo",
|
|
@@ -21,6 +21,9 @@
|
|
|
21
21
|
"import": "./dist/index.js"
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public"
|
|
26
|
+
},
|
|
24
27
|
"files": [
|
|
25
28
|
"dist"
|
|
26
29
|
],
|