UNPKG

lakutata

Version:

An IoC-based universal application framework.

450 lines (312 loc) 12.5 kB
"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);