lakutata
Version:
An IoC-based universal application framework.
450 lines (312 loc) • 12.5 kB
JavaScript
"use strict";
Object.defineProperty(exports, Symbol.toStringTag, {
value: "Module"
});
const e = require("../../../vendor/Package.1.cjs");
const t = require("./Module.cjs");
const r = require("../../decorators/di/Lifetime.cjs");
const i = require("../../../vendor/Package.3.cjs");
const s = require("../base/internal/ApplicationConfigLoader.cjs");
const n = require("../../options/ApplicationOptions.cjs");
const c = require("./Alias.cjs");
const o = require("../base/internal/BasicInfo.cjs");
const a = require("../../components/entrypoint/Entrypoint.cjs");
const u = require("../../../vendor/Package.17.cjs");
const p = require("../../decorators/dto/Accept.cjs");
const l = require("../../../vendor/Package.2.cjs");
const j = require("fs");
const q = require("node:path");
const d = require("node:fs");
const h = require("../helpers/As.cjs");
const g = require("../base/EventEmitter.cjs");
require("./Component.cjs");
require("./Provider.cjs");
require("../base/async-constructor/AsyncConstructor.cjs");
require("../base/async-constructor/Append.cjs");
require("../helpers/IsPromiseLike.cjs");
require("../helpers/IsPromise.cjs");
require("util/types");
require("../../exceptions/MethodNotFoundException.cjs");
require("../base/abstracts/Exception.cjs");
require("../helpers/Templating.cjs");
require("../base/internal/CamelCase.cjs");
require("../helpers/NoCase.cjs");
require("../../../vendor/Package.6.cjs");
require("../../../vendor/Package.5.cjs");
require("../../../vendor/Package.7.cjs");
require("../base/internal/ThrowWarning.cjs");
require("../ioc/DependencyInjectionContainer.cjs");
require("util");
require("../ioc/Errors.cjs");
require("../../exceptions/di/DependencyInjectionException.cjs");
require("../base/internal/ConstructorSymbol.cjs");
require("../../constants/DIMetadataKey.cjs");
require("../../../vendor/Package.4.cjs");
require("node:crypto");
require("../base/internal/DataValidator.cjs");
require("node:util/types");
require("../validation/VLD.cjs");
require("../../../vendor/Package.11.cjs");
require("url");
require("../../../vendor/Package.10.cjs");
require("../../exceptions/dto/InvalidValueException.cjs");
require("../../../vendor/Package.9.cjs");
require("../helpers/IsHtml.cjs");
require("../helpers/IsXML.cjs");
require("../../constants/DTOMetadataKey.cjs");
require("../helpers/ObjectConstructor.cjs");
require("../helpers/ObjectParentConstructors.cjs");
require("../helpers/ObjectParentConstructor.cjs");
require("../helpers/ObjectPrototype.cjs");
require("../ioc/InjectionMode.cjs");
require("../ioc/Lifetime.cjs");
require("../ioc/ListModules.cjs");
require("../../../vendor/Package.8.cjs");
require("os");
require("path");
require("stream");
require("events");
require("../ioc/Utils.cjs");
require("../ioc/FunctionTokenizer.cjs");
require("../ioc/LoadModules.cjs");
require("../ioc/Resolvers.cjs");
require("../ioc/ParamParser.cjs");
require("../base/internal/ObjectLifetime.cjs");
require("../../exceptions/di/LifetimeLockedException.cjs");
require("../base/internal/ObjectWeakRefs.cjs");
require("../base/internal/ConfigurableRecordsInjection.cjs");
require("../base/internal/ObjectConfiguration.cjs");
require("../base/internal/ObjectInjection.cjs");
require("../base/internal/ObjectContainer.cjs");
require("../helpers/DevNull.cjs");
require("../../decorators/dto/Expect.cjs");
require("../../decorators/dto/IndexSignature.cjs");
require("../base/internal/MethodValidation.cjs");
require("../../exceptions/dto/InvalidMethodAcceptException.cjs");
require("../../exceptions/dto/InvalidMethodReturnException.cjs");
require("../helpers/IsEmptyObject.cjs");
require("../../options/ModuleOptions.cjs");
require("../../options/ModuleLoadObjectsOptions.cjs");
require("../../options/LoadNamedObjectOptions.cjs");
require("../../options/LoadAnonymousObjectOptions.cjs");
require("../../options/OverridableNamedObjectOptions.cjs");
require("../../options/OverridableObjectOptions.cjs");
require("../base/internal/ModuleConfigLoader.cjs");
require("../../exceptions/di/OverridableObjectTargetConfigNotFoundException.cjs");
require("../../exceptions/InvalidObjectTypeException.cjs");
require("../helpers/ArrayToSet.cjs");
require("../helpers/SetToArray.cjs");
require("../../decorators/di/Configurable.cjs");
require("../helpers/NonceStr.cjs");
require("../helpers/RandomString.cjs");
require("../../../vendor/Package.15.cjs");
require("crypto");
require("../../exceptions/alias/InvalidAliasNameException.cjs");
require("../../exceptions/alias/AliasExistsException.cjs");
require("../../exceptions/alias/AliasNotFoundException.cjs");
require("../base/internal/ControllerEntrypoint.cjs");
require("../helpers/ObjectHash.cjs");
require("../helpers/GetObjectNestingDepth.cjs");
require("../../exceptions/InvalidActionPatternDepthException.cjs");
require("../base/internal/PatternManager.cjs");
require("../../components/entrypoint/lib/Controller.cjs");
require("../context/CLIContext.cjs");
require("../base/Context.cjs");
require("../context/HTTPContext.cjs");
require("node:http");
require("../context/ServiceContext.cjs");
require("../../components/entrypoint/exceptions/ControllerActionNotFoundException.cjs");
require("../../exceptions/DestroyRuntimeContainerException.cjs");
require("../helpers/GetObjectPropertyPaths.cjs");
require("../helpers/UniqueArray.cjs");
require("worker_threads");
require("../../../vendor/Package.132.cjs");
require("../../../vendor/Package.14.cjs");
require("buffer");
require("module");
require("tty");
require("../../../vendor/Package.18.cjs");
require("assert");
require("string_decoder");
require("node:stream");
const x = e => e && e.__esModule ? e : {
default: e
};
const b = x(q);
var E;
exports.ApplicationState = void 0;
(function(e) {
e["Launched"] = "LAUNCHED";
e["Done"] = "DONE";
e["UncaughtException"] = "UNCAUGHT_EXCEPTION";
e["FatalException"] = "FATAL_EXCEPTION";
})(exports.ApplicationState || (exports.ApplicationState = {}));
exports.Application = class Application extends t.Module {
constructor() {
super(...arguments);
this.ConfigLoader = s.ApplicationConfigLoader;
this.options = {
components: {
log: {
class: u.Logger
},
entrypoint: {
class: a.Entrypoint
}
},
bootstrap: [ "log" ]
};
}
static {
E = this;
}
static {
this.eventEmitter = new g.EventEmitter;
}
static {
this.environmentVariableMap = new Map;
}
static {
this.aliasDeclarations = [];
}
static async getLogger() {
return this.appInstance ? await this.appInstance.getObject("log") : await (new i.Container).set(u.Logger);
}
static env(e) {
Object.keys(e).forEach((t => this.environmentVariableMap.set(t, e[t])));
return this.launch();
}
static alias(e, t = false) {
this.aliasDeclarations.push({
alias: e ? e : {},
createIfNotExist: t
});
return this.launch();
}
static onLaunched(e) {
this.eventEmitter.once(exports.ApplicationState.Launched, (async t => e(t, await t.getObject("log"))));
return this.launch();
}
static onDone(e) {
this.eventEmitter.once(exports.ApplicationState.Done, (async t => e(t, await t.getObject("log"))));
return this.launch();
}
static onUncaughtException(e) {
this.eventEmitter.on(exports.ApplicationState.UncaughtException, (async t => {
const r = await this.getLogger();
await e(t, r);
}));
return this.launch();
}
static onFatalException(e) {
this.eventEmitter.once(exports.ApplicationState.FatalException, (async t => {
const r = await this.getLogger();
let i = await e(t, r);
if (typeof i !== "number") i = 1;
return process.exit(i);
}));
return this.launch();
}
static run(e) {
Reflect.set(this, "launchOptions", e);
return this.launch();
}
static launch() {
if (this.launchTimeout) clearTimeout(this.launchTimeout);
this.launchTimeout = setTimeout((async () => {
process.on("uncaughtException", (async e => {
if (this.eventEmitter.listenerCount(exports.ApplicationState.UncaughtException)) return this.eventEmitter.emit(exports.ApplicationState.UncaughtException, e);
const t = await this.getLogger();
return t.warn(new Error("UncaughtException", {
cause: e
}));
}));
try {
Reflect.set(this, "appInstance", await this.launchApplication());
} catch (e) {
this.processFatalException(e);
}
}));
return this;
}
static processFatalException(e) {
if (!this.eventEmitter.listenerCount(exports.ApplicationState.FatalException)) {
return process.nextTick((async () => {
const t = await this.getLogger();
t.error(new Error("FatalException", {
cause: e
}));
}));
}
this.eventEmitter.emit(exports.ApplicationState.FatalException, e);
}
static async launchApplication() {
this.eventEmitter.once("exit", (async (e, t) => {
try {
await this.eventEmitter.emitRequest(exports.ApplicationState.Done, e);
await s.destroy();
process.exit(t ? t : 0);
} catch (e) {
process.exit(1);
}
}));
this.environmentVariableMap.forEach(((e, t) => process.env[t] = e));
const e = c.Alias.getAliasInstance();
e.set("@runtime", process.cwd());
this.aliasDeclarations.forEach((t => {
const r = t.alias;
const i = t.createIfNotExist;
Object.keys(r).forEach((t => {
e.set(t, r[t]);
if (i) {
const e = b.default.resolve(t);
if (!d.existsSync(e)) j.mkdirSync(b.default.resolve(t), {
recursive: true
});
}
}));
}));
const r = typeof this.launchOptions === "object" ? this.launchOptions : await this.launchOptions();
const s = new i.Container;
return new Promise(((e, i) => {
n.ApplicationOptions.validateAsync(r).then((r => {
r.bootstrap?.push((async e => {
const t = function() {
this.options.bootstrap?.pop();
h.As(Reflect.getOwnMetadata("#bootstrap", this))?.pop();
};
t.bind(h.As(e))();
this.eventEmitter.emit(exports.ApplicationState.Launched, h.As(e));
}));
s.set(E, {
options: r
}).then((r => r.once(t.MODULE_INITIALIZED, (() => e(r))).once(t.MODULE_INITIALIZE_ERROR, (e => this.processFatalException(e))))).catch(i);
})).catch(i);
}));
}
get alias() {
return c.Alias.getAliasInstance();
}
get appId() {
return o.GetBasicInfo().appId;
}
get appName() {
return o.GetBasicInfo().appName;
}
get timezone() {
return o.GetBasicInfo().timezone;
}
get uptime() {
return Math.floor(process.uptime());
}
exit(e) {
if (typeof e === "boolean" && e) {
return process.exit(2);
} else {
E.eventEmitter.emit("exit", this, e ? e : 0);
}
}
};
e.__decorate([ p.Accept(l.DTO.Object().pattern(l.DTO.String(), l.DTO.String()).required()), e.__metadata("design:type", Function), e.__metadata("design:paramtypes", [ Object ]), e.__metadata("design:returntype", Object) ], exports.Application, "env", null);
e.__decorate([ p.Accept(l.DTO.Object().pattern(l.DTO.String(), l.DTO.String()).required(), l.DTO.Boolean().optional().default(false)), e.__metadata("design:type", Function), e.__metadata("design:paramtypes", [ Object, Boolean ]), e.__metadata("design:returntype", Object) ], exports.Application, "alias", null);
exports.Application = E = e.__decorate([ r.Singleton(true) ], exports.Application);