@solid-stack/agnos 1.0.1 → 1.0.4

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 ADDED
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2026 Solid Stack Digital
2
+
3
+ All rights reserved.
4
+
5
+ This software and its associated documentation files (the "Software") are
6
+ proprietary to Solid Stack Digital.
7
+
8
+ Strictly confidential. No part of this Software may be used, copied,
9
+ modified, merged, published, distributed, sublicensed, or sold in any form
10
+ or by any means without the prior written permission of the copyright owner.
11
+
12
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
17
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
18
+ SOFTWARE.
@@ -1,4 +1,6 @@
1
1
  export { start } from "./start.js";
2
+ export { loadOnly } from "./loadOnly.js";
3
+ export { startOnly } from "./startOnly.js";
2
4
  export { SilentLogger } from "./logging/index.js";
3
5
  export { AgnosError, type AgnosErrorOptions, AppError, BootstrapError, FeatureLoadError, type FeatureLoadErrorOptions, PresentationError, InputParsingError, type InputParsingErrorOptions, InternalError, InvalidDependencyError, type InvalidDependencyErrorOptions, MissingDependencyError, type MissingDependencyErrorOptions, NotFoundError, type NotFoundErrorOptions, ResourceConflictError, type ResourceConflictErrorOptions, } from "./errors/index.js";
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EACL,UAAU,EACV,KAAK,iBAAiB,EACtB,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,aAAa,EACb,sBAAsB,EACtB,KAAK,6BAA6B,EAClC,sBAAsB,EACtB,KAAK,6BAA6B,EAClC,aAAa,EACb,KAAK,oBAAoB,EACzB,qBAAqB,EACrB,KAAK,4BAA4B,GAClC,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EACL,UAAU,EACV,KAAK,iBAAiB,EACtB,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,aAAa,EACb,sBAAsB,EACtB,KAAK,6BAA6B,EAClC,sBAAsB,EACtB,KAAK,6BAA6B,EAClC,aAAa,EACb,KAAK,oBAAoB,EACzB,qBAAqB,EACrB,KAAK,4BAA4B,GAClC,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Container } from "@solid-stack/di";
2
+ import { type StartOptions } from "../types/index.js";
3
+ /**
4
+ * Initializes the Agnos application.
5
+ *
6
+ * Automatically:
7
+ * 1. Initializes core infrastructure (ILogger, etc.).
8
+ * 2. Auto-discovers and loads feature modules if a features directory is specified.
9
+ *
10
+ * @param container - The @solid-stack/di Container instance.
11
+ * @param options - Optional configuration including feature directory path.
12
+ */
13
+ export declare const loadOnly: (container: Container, options?: StartOptions) => Promise<void>;
14
+ //# sourceMappingURL=loadOnly.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadOnly.d.ts","sourceRoot":"","sources":["../../src/core/loadOnly.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ,cACR,SAAS,YACV,YAAY,KACrB,OAAO,CAAC,IAAI,CAQd,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Container } from "@solid-stack/di";
2
+ /**
3
+ * Starts the Agnos application.
4
+ *
5
+ * Automatically:
6
+ * 1. Resolves the Program lifecycle coordinator and runs the presentation layer.
7
+ *
8
+ * @param container - The @solid-stack/di Container instance.
9
+ */
10
+ export declare const startOnly: (container: Container) => Promise<void>;
11
+ //# sourceMappingURL=startOnly.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startOnly.d.ts","sourceRoot":"","sources":["../../src/core/startOnly.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,cAAqB,SAAS,KAAG,OAAO,CAAC,IAAI,CAalE,CAAC"}
package/dist/index.cjs CHANGED
@@ -438,6 +438,29 @@ var start = async (container, options) => {
438
438
  throw err;
439
439
  }
440
440
  };
441
+
442
+ // src/core/loadOnly.ts
443
+ var loadOnly = async (container, options) => {
444
+ await loadInfra(container);
445
+ if (options?.featuresDir) {
446
+ await loadFeatures(container, options.featuresDir);
447
+ }
448
+ };
449
+
450
+ // src/core/startOnly.ts
451
+ var startOnly = async (container) => {
452
+ const program = container.resolve(Program);
453
+ const logger = container.resolve(ILogger);
454
+ try {
455
+ await program.start();
456
+ } catch (err) {
457
+ logger.error(
458
+ "An unhandled error occurred while starting the presentation layer:",
459
+ err
460
+ );
461
+ throw err;
462
+ }
463
+ };
441
464
  var _SilentLogger_decorators, _init3;
442
465
  _SilentLogger_decorators = [di.MakeInjectable];
443
466
  exports.SilentLogger = class SilentLogger {
@@ -477,6 +500,8 @@ exports.NotFoundError = NotFoundError;
477
500
  exports.PresentationError = PresentationError;
478
501
  exports.ResourceConflictError = ResourceConflictError;
479
502
  exports.UseCase = UseCase;
503
+ exports.loadOnly = loadOnly;
480
504
  exports.start = start;
505
+ exports.startOnly = startOnly;
481
506
  //# sourceMappingURL=index.cjs.map
482
507
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/public.ts","../src/core/logging/Logger.ts","../src/core/bootstrap/loadInfra.ts","../src/core/errors/AgnosError.ts","../src/core/errors/AppError.ts","../src/core/errors/BootstrapError.ts","../src/core/errors/FeatureLoadError.ts","../src/core/errors/PresentationError.ts","../src/core/errors/InputParsingError.ts","../src/core/errors/InternalError.ts","../src/core/errors/InvalidDependencyError.ts","../src/core/errors/MissingDependencyError.ts","../src/core/errors/NotFoundError.ts","../src/core/errors/ResourceConflictError.ts","../src/utils/folderExists.ts","../src/core/bootstrap/loadFeatures.ts","../src/core/Program.ts","../src/core/start.ts","../src/core/logging/SilentLogger.ts"],"names":["MultiToken","MakeInjectable","stat","fs","path","pathToFileURL","_init","SilentLogger"],"mappings":"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","file":"index.cjs","sourcesContent":["import { MultiToken } from \"@solid-stack/di\";\n\n/**\n * Supported log levels for logger transports.\n */\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"log\";\n\n/**\n * Abstract logger transport contract.\n */\nexport abstract class ILoggerTransport {\n abstract push: (message: any[], level: LogLevel) => void;\n}\n\n/**\n * MultiToken for registering and resolving logger transports.\n */\nexport class LoggerTransportsToken extends MultiToken<ILoggerTransport> {}\n\n/**\n * Abstract logger interface for application logging.\n */\nexport abstract class ILogger {\n abstract log(...args: any[]): void;\n abstract info(...args: any[]): void;\n abstract warn(...args: any[]): void;\n abstract error(...args: any[]): void;\n abstract debug(...args: any[]): void;\n}\n\n/**\n * Abstract presentation layer contract.\n */\nexport abstract class IPresentation {\n abstract init(): Promise<void>;\n abstract run(): Promise<void>;\n abstract stop(): Promise<void>;\n}\n\n/**\n * Abstract use case contract for application business logic.\n */\nexport abstract class UseCase<IRequest = any, IResponse = any> {\n abstract execute(request: IRequest): Promise<IResponse>;\n}\n\n/**\n * Options for bootstrapping and starting the application via start().\n */\nexport interface StartOptions {\n /** Optional directory path containing feature modules with DepsProvider files */\n featuresDir?: string | undefined;\n}\n\n/**\n * Backward-compatible alias for StartOptions.\n */\nexport type StartDeps = StartOptions;\n\n","import { MakeInjectable, type DepsType } from \"@solid-stack/di\";\nimport {\n ILogger,\n LoggerTransportsToken,\n type LogLevel,\n} from \"../../types/index.js\";\n\n@MakeInjectable\nexport class Logger implements ILogger {\n public static deps = {\n transports: LoggerTransportsToken,\n };\n\n constructor(public deps: DepsType<typeof Logger.deps>) {}\n\n private broadcast(level: LogLevel, args: any[]): void {\n for (const transport of this.deps.transports) {\n try {\n transport.push(args, level);\n } catch (err) {\n // Prevent a failing remote transport (e.g. Datadog network timeout) from crashing the application\n console.error(\n \"[Logger Transport Error]: Failed to dispatch log entry\",\n err,\n );\n }\n }\n }\n\n log(...args: any[]): void {\n this.broadcast(\"log\", args);\n }\n info(...args: any[]): void {\n this.broadcast(\"info\", args);\n }\n warn(...args: any[]): void {\n this.broadcast(\"warn\", args);\n }\n error(...args: any[]): void {\n this.broadcast(\"error\", args);\n }\n debug(...args: any[]): void {\n this.broadcast(\"debug\", args);\n }\n}\n","import type { Container } from \"@solid-stack/di\";\nimport { ILogger } from \"../../types/index.js\";\nimport { Logger } from \"../logging/Logger.js\";\n\nexport const loadInfra = async (c: Container) => {\n c.provide(ILogger, Logger);\n};\n","/**\n * Options for constructing Agnos framework errors.\n */\nexport interface AgnosErrorOptions {\n /** Underlying cause of the error */\n cause?: unknown;\n /** Machine-readable error code */\n code?: string | undefined;\n /** HTTP status code equivalent */\n statusCode?: number | undefined;\n /** Additional diagnostic metadata */\n context?: Record<string, unknown> | undefined;\n}\n\n/**\n * Base error class for all Agnos framework and application errors.\n */\nexport class AgnosError extends Error {\n public readonly details: string;\n public readonly code: string;\n public readonly statusCode: number;\n public readonly context?: Record<string, unknown> | undefined;\n\n constructor(\n name = \"AgnosError\",\n details = \"An Agnos framework error occurred.\",\n options?: AgnosErrorOptions,\n ) {\n const resolvedDetails = details || \"An Agnos framework error occurred.\";\n super(resolvedDetails, { cause: options?.cause });\n this.name = name;\n this.details = resolvedDetails;\n this.code = options?.code || \"AGNOS_ERROR\";\n this.statusCode = options?.statusCode ?? 500;\n this.context = options?.context;\n\n // Ensure proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /**\n * Formats the error into a human-readable diagnostic string with code, context, cause, and stack trace.\n */\n prettyDetails(): string {\n const contextStr = this.context\n ? `\\nContext: ${JSON.stringify(this.context, null, 2)}`\n : \"\";\n const causeStr = this.cause\n ? `\\nCaused by: ${\n this.cause instanceof Error\n ? this.cause.stack || this.cause.message\n : String(this.cause)\n }`\n : \"\";\n return `[${this.code}] ${this.name} (${this.statusCode}): ${this.details}${contextStr}${causeStr}\\nStack Trace: ${this.stack}`;\n }\n\n /**\n * Serializes the error to a JSON-safe object.\n */\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n statusCode: this.statusCode,\n message: this.message,\n details: this.details,\n context: this.context,\n };\n }\n\n /**\n * Type guard to verify if an unknown error is an instance of AgnosError.\n */\n static isAgnosError(error: unknown): error is AgnosError {\n return error instanceof AgnosError;\n }\n}\n","import { AgnosError, type AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Base application-level error class inheriting from AgnosError.\n */\nexport class AppError extends AgnosError {\n constructor(\n name = \"Internal Server Error\",\n details = \"An Internal Server Error occured.\",\n options?: AgnosErrorOptions,\n ) {\n super(name, details, {\n code: options?.code || \"AGNOS_APP_ERROR\",\n statusCode: options?.statusCode ?? 500,\n ...options,\n });\n }\n}\n","import { AgnosError, type AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Thrown when application bootstrap or infrastructure initialization fails.\n */\nexport class BootstrapError extends AgnosError {\n constructor(details: string, options?: AgnosErrorOptions) {\n super(\"BootstrapError\", details, {\n code: options?.code || \"AGNOS_BOOTSTRAP_ERROR\",\n statusCode: options?.statusCode ?? 500,\n ...options,\n });\n }\n}\n","import { BootstrapError } from \"./BootstrapError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for constructing a FeatureLoadError.\n */\nexport interface FeatureLoadErrorOptions extends AgnosErrorOptions {\n featureName?: string | undefined;\n providerPath?: string | undefined;\n}\n\n/**\n * Thrown when auto-loading a feature module or its DepsProvider fails.\n */\nexport class FeatureLoadError extends BootstrapError {\n public readonly featureName?: string | undefined;\n public readonly providerPath?: string | undefined;\n\n constructor(\n featureName: string,\n providerPath?: string | undefined,\n details?: string | undefined,\n options?: FeatureLoadErrorOptions,\n ) {\n const resolvedDetails =\n details ||\n `Failed to load feature \"${featureName}\" from provider path \"${providerPath || \"unknown\"}\".`;\n\n const context: Record<string, unknown> = {\n featureName,\n ...(providerPath ? { providerPath } : {}),\n ...options?.context,\n };\n\n super(resolvedDetails, {\n code: options?.code || \"AGNOS_FEATURE_LOAD_ERROR\",\n statusCode: options?.statusCode ?? 500,\n context,\n cause: options?.cause,\n });\n\n this.name = \"FeatureLoadError\";\n this.featureName = featureName;\n this.providerPath = providerPath;\n }\n}\n","import { AgnosError, type AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Thrown when the presentation layer fails during init, run, or stop lifecycle hooks.\n */\nexport class PresentationError extends AgnosError {\n public readonly phase?: (\"init\" | \"run\" | \"stop\") | undefined;\n\n constructor(\n details: string,\n options?: AgnosErrorOptions & { phase?: (\"init\" | \"run\" | \"stop\") | undefined },\n ) {\n const context: Record<string, unknown> = {\n ...(options?.phase ? { phase: options.phase } : {}),\n ...options?.context,\n };\n\n super(\"PresentationError\", details, {\n code: options?.code || \"AGNOS_PRESENTATION_ERROR\",\n statusCode: options?.statusCode ?? 500,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options?.cause,\n });\n\n this.phase = options?.phase;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for InputParsingError, including field-level validation errors.\n */\nexport interface InputParsingErrorOptions extends AgnosErrorOptions {\n issues?: Array<{ field?: string | undefined; message: string; code?: string | undefined }> | undefined;\n}\n\n/**\n * Thrown when request payload or user input validation fails.\n */\nexport class InputParsingError extends AppError {\n public readonly issues?: Array<{ field?: string | undefined; message: string; code?: string | undefined }> | undefined;\n\n constructor(details: string, options?: InputParsingErrorOptions) {\n const context: Record<string, unknown> = {\n ...(options?.issues ? { issues: options.issues } : {}),\n ...options?.context,\n };\n\n super(\"InputParsingError\", details, {\n code: options?.code || \"AGNOS_INPUT_PARSING_ERROR\",\n statusCode: options?.statusCode ?? 400,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options?.cause,\n });\n\n this.issues = options?.issues;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Thrown when an unexpected internal framework or application error occurs.\n */\nexport class InternalError extends AppError {\n constructor(\n details = \"An Internal Server Error occured.\",\n options?: AgnosErrorOptions,\n ) {\n super(\"InternalError\", details, {\n code: options?.code || \"AGNOS_INTERNAL_ERROR\",\n statusCode: options?.statusCode ?? 500,\n ...options,\n });\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for InvalidDependencyError.\n */\nexport interface InvalidDependencyErrorOptions extends AgnosErrorOptions {\n dependencyName?: string | undefined;\n}\n\n/**\n * Thrown when an invalid or improperly configured dependency is encountered.\n */\nexport class InvalidDependencyError extends AppError {\n public readonly dependencyName?: string | undefined;\n\n constructor(\n details: string,\n optionsOrCause?: InvalidDependencyErrorOptions | unknown,\n ) {\n const isOptionsObject =\n optionsOrCause !== null &&\n typeof optionsOrCause === \"object\" &&\n (\"cause\" in optionsOrCause ||\n \"code\" in optionsOrCause ||\n \"context\" in optionsOrCause ||\n \"dependencyName\" in optionsOrCause);\n\n const options: InvalidDependencyErrorOptions = isOptionsObject\n ? (optionsOrCause as InvalidDependencyErrorOptions)\n : { cause: optionsOrCause };\n\n const context: Record<string, unknown> = {\n ...(options.dependencyName ? { dependencyName: options.dependencyName } : {}),\n ...options.context,\n };\n\n super(\"InvalidDependencyError\", details, {\n code: options.code || \"AGNOS_INVALID_DEPENDENCY_ERROR\",\n statusCode: options.statusCode ?? 500,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options.cause,\n });\n\n this.dependencyName = options.dependencyName;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for MissingDependencyError.\n */\nexport interface MissingDependencyErrorOptions extends AgnosErrorOptions {\n dependencyName?: string | undefined;\n}\n\n/**\n * Thrown when a required dependency or token cannot be resolved.\n */\nexport class MissingDependencyError extends AppError {\n public readonly dependencyName?: string | undefined;\n\n constructor(\n details: string,\n optionsOrCause?: MissingDependencyErrorOptions | unknown,\n ) {\n const isOptionsObject =\n optionsOrCause !== null &&\n typeof optionsOrCause === \"object\" &&\n (\"cause\" in optionsOrCause ||\n \"code\" in optionsOrCause ||\n \"context\" in optionsOrCause ||\n \"dependencyName\" in optionsOrCause);\n\n const options: MissingDependencyErrorOptions = isOptionsObject\n ? (optionsOrCause as MissingDependencyErrorOptions)\n : { cause: optionsOrCause };\n\n const context: Record<string, unknown> = {\n ...(options.dependencyName ? { dependencyName: options.dependencyName } : {}),\n ...options.context,\n };\n\n super(\"MissingDependencyError\", details, {\n code: options.code || \"AGNOS_MISSING_DEPENDENCY_ERROR\",\n statusCode: options.statusCode ?? 500,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options.cause,\n });\n\n this.dependencyName = options.dependencyName;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for NotFoundError including resource identifier metadata.\n */\nexport interface NotFoundErrorOptions extends AgnosErrorOptions {\n resource?: string | undefined;\n resourceId?: string | number | undefined;\n}\n\n/**\n * Thrown when a requested resource or entity cannot be found.\n */\nexport class NotFoundError extends AppError {\n public readonly resource?: string | undefined;\n public readonly resourceId?: string | number | undefined;\n\n constructor(details: string, options?: NotFoundErrorOptions) {\n const context: Record<string, unknown> = {\n ...(options?.resource ? { resource: options.resource } : {}),\n ...(options?.resourceId !== undefined ? { resourceId: options.resourceId } : {}),\n ...options?.context,\n };\n\n super(\"NotFoundError\", details, {\n code: options?.code || \"AGNOS_NOT_FOUND_ERROR\",\n statusCode: options?.statusCode ?? 404,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options?.cause,\n });\n\n this.resource = options?.resource;\n this.resourceId = options?.resourceId;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for ResourceConflictError.\n */\nexport interface ResourceConflictErrorOptions extends AgnosErrorOptions {\n conflictKey?: string | undefined;\n conflictingValue?: unknown;\n}\n\n/**\n * Thrown when an operation conflicts with existing state (e.g. duplicate key or concurrency collision).\n */\nexport class ResourceConflictError extends AppError {\n public readonly conflictKey?: string | undefined;\n public readonly conflictingValue?: unknown;\n\n constructor(\n message: string,\n optionsOrCause?: ResourceConflictErrorOptions | unknown,\n ) {\n const isOptionsObject =\n optionsOrCause !== null &&\n typeof optionsOrCause === \"object\" &&\n (\"cause\" in optionsOrCause ||\n \"code\" in optionsOrCause ||\n \"context\" in optionsOrCause ||\n \"conflictKey\" in optionsOrCause);\n\n const options: ResourceConflictErrorOptions = isOptionsObject\n ? (optionsOrCause as ResourceConflictErrorOptions)\n : { cause: optionsOrCause };\n\n const context: Record<string, unknown> = {\n ...(options.conflictKey ? { conflictKey: options.conflictKey } : {}),\n ...(options.conflictingValue !== undefined\n ? { conflictingValue: options.conflictingValue }\n : {}),\n ...options.context,\n };\n\n super(\"ResourceConflictError\", message, {\n code: options.code || \"AGNOS_RESOURCE_CONFLICT_ERROR\",\n statusCode: options.statusCode ?? 409,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options.cause,\n });\n\n this.conflictKey = options.conflictKey;\n this.conflictingValue = options.conflictingValue;\n }\n}\n","import { stat } from \"node:fs/promises\";\n\nexport async function folderExists(dir: string): Promise<boolean> {\n try {\n const stats = await stat(dir);\n return stats.isDirectory();\n } catch (error: any) {\n // 'ENOENT' means the directory or file does not exist\n if (error.code === \"ENOENT\") {\n return false;\n }\n // Re-throw if it is a different error (like permission issues)\n throw error;\n }\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { Container } from \"@solid-stack/di\";\nimport { FeatureLoadError } from \"../errors/index.js\";\nimport { folderExists } from \"../../utils/index.js\";\n\nexport async function loadFeatures(\n c: Container,\n featuresDir: string,\n): Promise<void> {\n if (!(await folderExists(featuresDir))) {\n return;\n }\n\n const entries = await fs.readdir(featuresDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const featureName = entry.name;\n\n const files = await fs.readdir(path.join(featuresDir, featureName));\n const providerFile = files.find(\n (f) => f === \"DepsProvider.ts\" || f === \"DepsProvider.js\",\n );\n\n if (providerFile) {\n const modulePath = path.join(featuresDir, featureName, providerFile);\n const imported = await import(pathToFileURL(modulePath).href);\n\n const infraProvider = imported.default;\n\n if (!infraProvider) {\n throw new FeatureLoadError(\n featureName,\n modulePath,\n `Feature \"${featureName}\" has a Dependency Provider file (${modulePath}) but doesn't have a default export of type (c: Container) => void`,\n );\n }\n\n if (infraProvider && typeof infraProvider === \"function\") {\n c.load(infraProvider);\n }\n }\n }\n }\n}\n","import { MakeInjectable, type DepsType } from \"@solid-stack/di\";\nimport { IPresentation, ILogger } from \"../types/index.js\";\n\n@MakeInjectable\nexport class Program {\n public static deps = {\n presentation: IPresentation,\n logger: ILogger,\n };\n\n constructor(public deps: DepsType<typeof Program.deps>) {}\n\n async start() {\n try {\n const presentation: IPresentation = this.deps.presentation;\n const logger: ILogger = this.deps.logger;\n await presentation.init();\n await presentation.run();\n\n let isShuttingDown = false;\n\n const handleOnStop = async (error?: Error | unknown) => {\n // Prevent multiple shutdown signals from overlapping\n if (isShuttingDown) return;\n isShuttingDown = true;\n\n if (error) {\n logger.error(\n \"Fatal Error: Shutting down due to unhandled exception...\",\n error,\n );\n } else {\n logger.info(\"Terminating process gracefully...\");\n }\n\n try {\n await presentation.stop();\n } catch (shutdownError) {\n logger.error(\n \"Error occurred while stopping the presentation layer:\",\n shutdownError,\n );\n } finally {\n // Exit with 1 if there was an error, otherwise 0\n process.exit(error ? 1 : 0);\n }\n };\n\n // OS Termination Signals\n process.on(\"SIGTERM\", () => handleOnStop());\n process.on(\"SIGINT\", () => handleOnStop()); // Fixed duplicate SIGTERM\n\n // Unhandled Errors\n process.on(\"uncaughtException\", (error) => handleOnStop(error));\n process.on(\"unhandledRejection\", (reason) => handleOnStop(reason));\n } catch (err) {\n this.deps.logger.error(\n \"An Uncaught/Unknown error has been encountered while Starting/Running the Application\",\n err,\n );\n }\n }\n}\n","import type { Container } from \"@solid-stack/di\";\nimport { loadInfra } from \"./bootstrap/loadInfra.js\";\nimport { loadFeatures } from \"./bootstrap/loadFeatures.js\";\nimport { Program } from \"./Program.js\";\nimport { ILogger, type StartOptions } from \"../types/index.js\";\n\n/**\n * Boots up and executes the Agnos application lifecycle.\n *\n * Automatically:\n * 1. Initializes core infrastructure (ILogger, etc.).\n * 2. Auto-discovers and loads feature modules if a features directory is specified.\n * 3. Resolves the Program lifecycle coordinator and runs the presentation layer.\n *\n * @param container - The @solid-stack/di Container instance.\n * @param options - Optional configuration including feature directory path.\n */\nexport const start = async (\n container: Container,\n options?: StartOptions,\n): Promise<void> => {\n // 1. Initialize core framework infrastructure\n await loadInfra(container);\n\n // 2. Discover and load feature providers if directory configured\n if (options?.featuresDir) {\n await loadFeatures(container, options.featuresDir);\n }\n\n // 3. Resolve Program and run presentation lifecycle\n const program = container.resolve(Program);\n const logger = container.resolve(ILogger);\n\n try {\n await program.start();\n } catch (err: unknown) {\n logger.error(\n \"An unhandled error occurred while starting the presentation layer:\",\n err,\n );\n throw err;\n }\n};\n","import { MakeInjectable, type DepsType } from \"@solid-stack/di\";\nimport type { ILogger } from \"../../types/index.js\";\n\n@MakeInjectable\nexport class SilentLogger implements ILogger {\n public static deps = {};\n constructor(public deps: DepsType<typeof SilentLogger.deps>) {}\n log(..._args: any[]): void {}\n info(..._args: any[]): void {}\n warn(..._args: any[]): void {}\n error(..._args: any[]): void {}\n debug(..._args: any[]): void {}\n}\n"]}
1
+ {"version":3,"sources":["../src/types/public.ts","../src/core/logging/Logger.ts","../src/core/bootstrap/loadInfra.ts","../src/core/errors/AgnosError.ts","../src/core/errors/AppError.ts","../src/core/errors/BootstrapError.ts","../src/core/errors/FeatureLoadError.ts","../src/core/errors/PresentationError.ts","../src/core/errors/InputParsingError.ts","../src/core/errors/InternalError.ts","../src/core/errors/InvalidDependencyError.ts","../src/core/errors/MissingDependencyError.ts","../src/core/errors/NotFoundError.ts","../src/core/errors/ResourceConflictError.ts","../src/utils/folderExists.ts","../src/core/bootstrap/loadFeatures.ts","../src/core/Program.ts","../src/core/start.ts","../src/core/loadOnly.ts","../src/core/startOnly.ts","../src/core/logging/SilentLogger.ts"],"names":["MultiToken","MakeInjectable","stat","fs","path","pathToFileURL","_init","SilentLogger"],"mappings":"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","file":"index.cjs","sourcesContent":["import { MultiToken } from \"@solid-stack/di\";\n\n/**\n * Supported log levels for logger transports.\n */\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"log\";\n\n/**\n * Abstract logger transport contract.\n */\nexport abstract class ILoggerTransport {\n abstract push: (message: any[], level: LogLevel) => void;\n}\n\n/**\n * MultiToken for registering and resolving logger transports.\n */\nexport class LoggerTransportsToken extends MultiToken<ILoggerTransport> {}\n\n/**\n * Abstract logger interface for application logging.\n */\nexport abstract class ILogger {\n abstract log(...args: any[]): void;\n abstract info(...args: any[]): void;\n abstract warn(...args: any[]): void;\n abstract error(...args: any[]): void;\n abstract debug(...args: any[]): void;\n}\n\n/**\n * Abstract presentation layer contract.\n */\nexport abstract class IPresentation {\n abstract init(): Promise<void>;\n abstract run(): Promise<void>;\n abstract stop(): Promise<void>;\n}\n\n/**\n * Abstract use case contract for application business logic.\n */\nexport abstract class UseCase<IRequest = any, IResponse = any> {\n abstract execute(request: IRequest): Promise<IResponse>;\n}\n\n/**\n * Options for bootstrapping and starting the application via start().\n */\nexport interface StartOptions {\n /** Optional directory path containing feature modules with DepsProvider files */\n featuresDir?: string | undefined;\n}\n\n/**\n * Backward-compatible alias for StartOptions.\n */\nexport type StartDeps = StartOptions;\n\n","import { MakeInjectable, type DepsType } from \"@solid-stack/di\";\nimport {\n ILogger,\n LoggerTransportsToken,\n type LogLevel,\n} from \"../../types/index.js\";\n\n@MakeInjectable\nexport class Logger implements ILogger {\n public static deps = {\n transports: LoggerTransportsToken,\n };\n\n constructor(public deps: DepsType<typeof Logger.deps>) {}\n\n private broadcast(level: LogLevel, args: any[]): void {\n for (const transport of this.deps.transports) {\n try {\n transport.push(args, level);\n } catch (err) {\n // Prevent a failing remote transport (e.g. Datadog network timeout) from crashing the application\n console.error(\n \"[Logger Transport Error]: Failed to dispatch log entry\",\n err,\n );\n }\n }\n }\n\n log(...args: any[]): void {\n this.broadcast(\"log\", args);\n }\n info(...args: any[]): void {\n this.broadcast(\"info\", args);\n }\n warn(...args: any[]): void {\n this.broadcast(\"warn\", args);\n }\n error(...args: any[]): void {\n this.broadcast(\"error\", args);\n }\n debug(...args: any[]): void {\n this.broadcast(\"debug\", args);\n }\n}\n","import type { Container } from \"@solid-stack/di\";\nimport { ILogger } from \"../../types/index.js\";\nimport { Logger } from \"../logging/Logger.js\";\n\nexport const loadInfra = async (c: Container) => {\n c.provide(ILogger, Logger);\n};\n","/**\n * Options for constructing Agnos framework errors.\n */\nexport interface AgnosErrorOptions {\n /** Underlying cause of the error */\n cause?: unknown;\n /** Machine-readable error code */\n code?: string | undefined;\n /** HTTP status code equivalent */\n statusCode?: number | undefined;\n /** Additional diagnostic metadata */\n context?: Record<string, unknown> | undefined;\n}\n\n/**\n * Base error class for all Agnos framework and application errors.\n */\nexport class AgnosError extends Error {\n public readonly details: string;\n public readonly code: string;\n public readonly statusCode: number;\n public readonly context?: Record<string, unknown> | undefined;\n\n constructor(\n name = \"AgnosError\",\n details = \"An Agnos framework error occurred.\",\n options?: AgnosErrorOptions,\n ) {\n const resolvedDetails = details || \"An Agnos framework error occurred.\";\n super(resolvedDetails, { cause: options?.cause });\n this.name = name;\n this.details = resolvedDetails;\n this.code = options?.code || \"AGNOS_ERROR\";\n this.statusCode = options?.statusCode ?? 500;\n this.context = options?.context;\n\n // Ensure proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /**\n * Formats the error into a human-readable diagnostic string with code, context, cause, and stack trace.\n */\n prettyDetails(): string {\n const contextStr = this.context\n ? `\\nContext: ${JSON.stringify(this.context, null, 2)}`\n : \"\";\n const causeStr = this.cause\n ? `\\nCaused by: ${\n this.cause instanceof Error\n ? this.cause.stack || this.cause.message\n : String(this.cause)\n }`\n : \"\";\n return `[${this.code}] ${this.name} (${this.statusCode}): ${this.details}${contextStr}${causeStr}\\nStack Trace: ${this.stack}`;\n }\n\n /**\n * Serializes the error to a JSON-safe object.\n */\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n statusCode: this.statusCode,\n message: this.message,\n details: this.details,\n context: this.context,\n };\n }\n\n /**\n * Type guard to verify if an unknown error is an instance of AgnosError.\n */\n static isAgnosError(error: unknown): error is AgnosError {\n return error instanceof AgnosError;\n }\n}\n","import { AgnosError, type AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Base application-level error class inheriting from AgnosError.\n */\nexport class AppError extends AgnosError {\n constructor(\n name = \"Internal Server Error\",\n details = \"An Internal Server Error occured.\",\n options?: AgnosErrorOptions,\n ) {\n super(name, details, {\n code: options?.code || \"AGNOS_APP_ERROR\",\n statusCode: options?.statusCode ?? 500,\n ...options,\n });\n }\n}\n","import { AgnosError, type AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Thrown when application bootstrap or infrastructure initialization fails.\n */\nexport class BootstrapError extends AgnosError {\n constructor(details: string, options?: AgnosErrorOptions) {\n super(\"BootstrapError\", details, {\n code: options?.code || \"AGNOS_BOOTSTRAP_ERROR\",\n statusCode: options?.statusCode ?? 500,\n ...options,\n });\n }\n}\n","import { BootstrapError } from \"./BootstrapError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for constructing a FeatureLoadError.\n */\nexport interface FeatureLoadErrorOptions extends AgnosErrorOptions {\n featureName?: string | undefined;\n providerPath?: string | undefined;\n}\n\n/**\n * Thrown when auto-loading a feature module or its DepsProvider fails.\n */\nexport class FeatureLoadError extends BootstrapError {\n public readonly featureName?: string | undefined;\n public readonly providerPath?: string | undefined;\n\n constructor(\n featureName: string,\n providerPath?: string | undefined,\n details?: string | undefined,\n options?: FeatureLoadErrorOptions,\n ) {\n const resolvedDetails =\n details ||\n `Failed to load feature \"${featureName}\" from provider path \"${providerPath || \"unknown\"}\".`;\n\n const context: Record<string, unknown> = {\n featureName,\n ...(providerPath ? { providerPath } : {}),\n ...options?.context,\n };\n\n super(resolvedDetails, {\n code: options?.code || \"AGNOS_FEATURE_LOAD_ERROR\",\n statusCode: options?.statusCode ?? 500,\n context,\n cause: options?.cause,\n });\n\n this.name = \"FeatureLoadError\";\n this.featureName = featureName;\n this.providerPath = providerPath;\n }\n}\n","import { AgnosError, type AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Thrown when the presentation layer fails during init, run, or stop lifecycle hooks.\n */\nexport class PresentationError extends AgnosError {\n public readonly phase?: (\"init\" | \"run\" | \"stop\") | undefined;\n\n constructor(\n details: string,\n options?: AgnosErrorOptions & { phase?: (\"init\" | \"run\" | \"stop\") | undefined },\n ) {\n const context: Record<string, unknown> = {\n ...(options?.phase ? { phase: options.phase } : {}),\n ...options?.context,\n };\n\n super(\"PresentationError\", details, {\n code: options?.code || \"AGNOS_PRESENTATION_ERROR\",\n statusCode: options?.statusCode ?? 500,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options?.cause,\n });\n\n this.phase = options?.phase;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for InputParsingError, including field-level validation errors.\n */\nexport interface InputParsingErrorOptions extends AgnosErrorOptions {\n issues?: Array<{ field?: string | undefined; message: string; code?: string | undefined }> | undefined;\n}\n\n/**\n * Thrown when request payload or user input validation fails.\n */\nexport class InputParsingError extends AppError {\n public readonly issues?: Array<{ field?: string | undefined; message: string; code?: string | undefined }> | undefined;\n\n constructor(details: string, options?: InputParsingErrorOptions) {\n const context: Record<string, unknown> = {\n ...(options?.issues ? { issues: options.issues } : {}),\n ...options?.context,\n };\n\n super(\"InputParsingError\", details, {\n code: options?.code || \"AGNOS_INPUT_PARSING_ERROR\",\n statusCode: options?.statusCode ?? 400,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options?.cause,\n });\n\n this.issues = options?.issues;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Thrown when an unexpected internal framework or application error occurs.\n */\nexport class InternalError extends AppError {\n constructor(\n details = \"An Internal Server Error occured.\",\n options?: AgnosErrorOptions,\n ) {\n super(\"InternalError\", details, {\n code: options?.code || \"AGNOS_INTERNAL_ERROR\",\n statusCode: options?.statusCode ?? 500,\n ...options,\n });\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for InvalidDependencyError.\n */\nexport interface InvalidDependencyErrorOptions extends AgnosErrorOptions {\n dependencyName?: string | undefined;\n}\n\n/**\n * Thrown when an invalid or improperly configured dependency is encountered.\n */\nexport class InvalidDependencyError extends AppError {\n public readonly dependencyName?: string | undefined;\n\n constructor(\n details: string,\n optionsOrCause?: InvalidDependencyErrorOptions | unknown,\n ) {\n const isOptionsObject =\n optionsOrCause !== null &&\n typeof optionsOrCause === \"object\" &&\n (\"cause\" in optionsOrCause ||\n \"code\" in optionsOrCause ||\n \"context\" in optionsOrCause ||\n \"dependencyName\" in optionsOrCause);\n\n const options: InvalidDependencyErrorOptions = isOptionsObject\n ? (optionsOrCause as InvalidDependencyErrorOptions)\n : { cause: optionsOrCause };\n\n const context: Record<string, unknown> = {\n ...(options.dependencyName ? { dependencyName: options.dependencyName } : {}),\n ...options.context,\n };\n\n super(\"InvalidDependencyError\", details, {\n code: options.code || \"AGNOS_INVALID_DEPENDENCY_ERROR\",\n statusCode: options.statusCode ?? 500,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options.cause,\n });\n\n this.dependencyName = options.dependencyName;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for MissingDependencyError.\n */\nexport interface MissingDependencyErrorOptions extends AgnosErrorOptions {\n dependencyName?: string | undefined;\n}\n\n/**\n * Thrown when a required dependency or token cannot be resolved.\n */\nexport class MissingDependencyError extends AppError {\n public readonly dependencyName?: string | undefined;\n\n constructor(\n details: string,\n optionsOrCause?: MissingDependencyErrorOptions | unknown,\n ) {\n const isOptionsObject =\n optionsOrCause !== null &&\n typeof optionsOrCause === \"object\" &&\n (\"cause\" in optionsOrCause ||\n \"code\" in optionsOrCause ||\n \"context\" in optionsOrCause ||\n \"dependencyName\" in optionsOrCause);\n\n const options: MissingDependencyErrorOptions = isOptionsObject\n ? (optionsOrCause as MissingDependencyErrorOptions)\n : { cause: optionsOrCause };\n\n const context: Record<string, unknown> = {\n ...(options.dependencyName ? { dependencyName: options.dependencyName } : {}),\n ...options.context,\n };\n\n super(\"MissingDependencyError\", details, {\n code: options.code || \"AGNOS_MISSING_DEPENDENCY_ERROR\",\n statusCode: options.statusCode ?? 500,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options.cause,\n });\n\n this.dependencyName = options.dependencyName;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for NotFoundError including resource identifier metadata.\n */\nexport interface NotFoundErrorOptions extends AgnosErrorOptions {\n resource?: string | undefined;\n resourceId?: string | number | undefined;\n}\n\n/**\n * Thrown when a requested resource or entity cannot be found.\n */\nexport class NotFoundError extends AppError {\n public readonly resource?: string | undefined;\n public readonly resourceId?: string | number | undefined;\n\n constructor(details: string, options?: NotFoundErrorOptions) {\n const context: Record<string, unknown> = {\n ...(options?.resource ? { resource: options.resource } : {}),\n ...(options?.resourceId !== undefined ? { resourceId: options.resourceId } : {}),\n ...options?.context,\n };\n\n super(\"NotFoundError\", details, {\n code: options?.code || \"AGNOS_NOT_FOUND_ERROR\",\n statusCode: options?.statusCode ?? 404,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options?.cause,\n });\n\n this.resource = options?.resource;\n this.resourceId = options?.resourceId;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for ResourceConflictError.\n */\nexport interface ResourceConflictErrorOptions extends AgnosErrorOptions {\n conflictKey?: string | undefined;\n conflictingValue?: unknown;\n}\n\n/**\n * Thrown when an operation conflicts with existing state (e.g. duplicate key or concurrency collision).\n */\nexport class ResourceConflictError extends AppError {\n public readonly conflictKey?: string | undefined;\n public readonly conflictingValue?: unknown;\n\n constructor(\n message: string,\n optionsOrCause?: ResourceConflictErrorOptions | unknown,\n ) {\n const isOptionsObject =\n optionsOrCause !== null &&\n typeof optionsOrCause === \"object\" &&\n (\"cause\" in optionsOrCause ||\n \"code\" in optionsOrCause ||\n \"context\" in optionsOrCause ||\n \"conflictKey\" in optionsOrCause);\n\n const options: ResourceConflictErrorOptions = isOptionsObject\n ? (optionsOrCause as ResourceConflictErrorOptions)\n : { cause: optionsOrCause };\n\n const context: Record<string, unknown> = {\n ...(options.conflictKey ? { conflictKey: options.conflictKey } : {}),\n ...(options.conflictingValue !== undefined\n ? { conflictingValue: options.conflictingValue }\n : {}),\n ...options.context,\n };\n\n super(\"ResourceConflictError\", message, {\n code: options.code || \"AGNOS_RESOURCE_CONFLICT_ERROR\",\n statusCode: options.statusCode ?? 409,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options.cause,\n });\n\n this.conflictKey = options.conflictKey;\n this.conflictingValue = options.conflictingValue;\n }\n}\n","import { stat } from \"node:fs/promises\";\n\nexport async function folderExists(dir: string): Promise<boolean> {\n try {\n const stats = await stat(dir);\n return stats.isDirectory();\n } catch (error: any) {\n // 'ENOENT' means the directory or file does not exist\n if (error.code === \"ENOENT\") {\n return false;\n }\n // Re-throw if it is a different error (like permission issues)\n throw error;\n }\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { Container } from \"@solid-stack/di\";\nimport { FeatureLoadError } from \"../errors/index.js\";\nimport { folderExists } from \"../../utils/index.js\";\n\nexport async function loadFeatures(\n c: Container,\n featuresDir: string,\n): Promise<void> {\n if (!(await folderExists(featuresDir))) {\n return;\n }\n\n const entries = await fs.readdir(featuresDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const featureName = entry.name;\n\n const files = await fs.readdir(path.join(featuresDir, featureName));\n const providerFile = files.find(\n (f) => f === \"DepsProvider.ts\" || f === \"DepsProvider.js\",\n );\n\n if (providerFile) {\n const modulePath = path.join(featuresDir, featureName, providerFile);\n const imported = await import(pathToFileURL(modulePath).href);\n\n const infraProvider = imported.default;\n\n if (!infraProvider) {\n throw new FeatureLoadError(\n featureName,\n modulePath,\n `Feature \"${featureName}\" has a Dependency Provider file (${modulePath}) but doesn't have a default export of type (c: Container) => void`,\n );\n }\n\n if (infraProvider && typeof infraProvider === \"function\") {\n c.load(infraProvider);\n }\n }\n }\n }\n}\n","import { MakeInjectable, type DepsType } from \"@solid-stack/di\";\nimport { IPresentation, ILogger } from \"../types/index.js\";\n\n@MakeInjectable\nexport class Program {\n public static deps = {\n presentation: IPresentation,\n logger: ILogger,\n };\n\n constructor(public deps: DepsType<typeof Program.deps>) {}\n\n async start() {\n try {\n const presentation: IPresentation = this.deps.presentation;\n const logger: ILogger = this.deps.logger;\n await presentation.init();\n await presentation.run();\n\n let isShuttingDown = false;\n\n const handleOnStop = async (error?: Error | unknown) => {\n // Prevent multiple shutdown signals from overlapping\n if (isShuttingDown) return;\n isShuttingDown = true;\n\n if (error) {\n logger.error(\n \"Fatal Error: Shutting down due to unhandled exception...\",\n error,\n );\n } else {\n logger.info(\"Terminating process gracefully...\");\n }\n\n try {\n await presentation.stop();\n } catch (shutdownError) {\n logger.error(\n \"Error occurred while stopping the presentation layer:\",\n shutdownError,\n );\n } finally {\n // Exit with 1 if there was an error, otherwise 0\n process.exit(error ? 1 : 0);\n }\n };\n\n // OS Termination Signals\n process.on(\"SIGTERM\", () => handleOnStop());\n process.on(\"SIGINT\", () => handleOnStop()); // Fixed duplicate SIGTERM\n\n // Unhandled Errors\n process.on(\"uncaughtException\", (error) => handleOnStop(error));\n process.on(\"unhandledRejection\", (reason) => handleOnStop(reason));\n } catch (err) {\n this.deps.logger.error(\n \"An Uncaught/Unknown error has been encountered while Starting/Running the Application\",\n err,\n );\n }\n }\n}\n","import type { Container } from \"@solid-stack/di\";\nimport { loadInfra } from \"./bootstrap/loadInfra.js\";\nimport { loadFeatures } from \"./bootstrap/loadFeatures.js\";\nimport { Program } from \"./Program.js\";\nimport { ILogger, type StartOptions } from \"../types/index.js\";\n\n/**\n * Boots up and executes the Agnos application lifecycle.\n *\n * Automatically:\n * 1. Initializes core infrastructure (ILogger, etc.).\n * 2. Auto-discovers and loads feature modules if a features directory is specified.\n * 3. Resolves the Program lifecycle coordinator and runs the presentation layer.\n *\n * @param container - The @solid-stack/di Container instance.\n * @param options - Optional configuration including feature directory path.\n */\nexport const start = async (\n container: Container,\n options?: StartOptions,\n): Promise<void> => {\n // 1. Initialize core framework infrastructure\n await loadInfra(container);\n\n // 2. Discover and load feature providers if directory configured\n if (options?.featuresDir) {\n await loadFeatures(container, options.featuresDir);\n }\n\n // 3. Resolve Program and run presentation lifecycle\n const program = container.resolve(Program);\n const logger = container.resolve(ILogger);\n\n try {\n await program.start();\n } catch (err: unknown) {\n logger.error(\n \"An unhandled error occurred while starting the presentation layer:\",\n err,\n );\n throw err;\n }\n};\n","import type { Container } from \"@solid-stack/di\";\nimport { loadInfra } from \"./bootstrap/loadInfra.js\";\nimport { loadFeatures } from \"./bootstrap/loadFeatures.js\";\nimport { type StartOptions } from \"../types/index.js\";\n\n/**\n * Initializes the Agnos application.\n *\n * Automatically:\n * 1. Initializes core infrastructure (ILogger, etc.).\n * 2. Auto-discovers and loads feature modules if a features directory is specified.\n *\n * @param container - The @solid-stack/di Container instance.\n * @param options - Optional configuration including feature directory path.\n */\nexport const loadOnly = async (\n container: Container,\n options?: StartOptions,\n): Promise<void> => {\n // 1. Initialize core framework infrastructure\n await loadInfra(container);\n\n // 2. Discover and load feature providers if directory configured\n if (options?.featuresDir) {\n await loadFeatures(container, options.featuresDir);\n }\n};\n","import type { Container } from \"@solid-stack/di\";\nimport { ILogger, type StartOptions } from \"../types/index.js\";\nimport { Program } from \"./Program.js\";\n\n/**\n * Starts the Agnos application.\n *\n * Automatically:\n * 1. Resolves the Program lifecycle coordinator and runs the presentation layer.\n *\n * @param container - The @solid-stack/di Container instance.\n */\nexport const startOnly = async (container: Container): Promise<void> => {\n const program = container.resolve(Program);\n const logger = container.resolve(ILogger);\n\n try {\n await program.start();\n } catch (err: unknown) {\n logger.error(\n \"An unhandled error occurred while starting the presentation layer:\",\n err,\n );\n throw err;\n }\n};\n","import { MakeInjectable, type DepsType } from \"@solid-stack/di\";\nimport type { ILogger } from \"../../types/index.js\";\n\n@MakeInjectable\nexport class SilentLogger implements ILogger {\n public static deps = {};\n constructor(public deps: DepsType<typeof SilentLogger.deps>) {}\n log(..._args: any[]): void {}\n info(..._args: any[]): void {}\n warn(..._args: any[]): void {}\n error(..._args: any[]): void {}\n debug(..._args: any[]): void {}\n}\n"]}
package/dist/index.js CHANGED
@@ -431,6 +431,29 @@ var start = async (container, options) => {
431
431
  throw err;
432
432
  }
433
433
  };
434
+
435
+ // src/core/loadOnly.ts
436
+ var loadOnly = async (container, options) => {
437
+ await loadInfra(container);
438
+ if (options?.featuresDir) {
439
+ await loadFeatures(container, options.featuresDir);
440
+ }
441
+ };
442
+
443
+ // src/core/startOnly.ts
444
+ var startOnly = async (container) => {
445
+ const program = container.resolve(Program);
446
+ const logger = container.resolve(ILogger);
447
+ try {
448
+ await program.start();
449
+ } catch (err) {
450
+ logger.error(
451
+ "An unhandled error occurred while starting the presentation layer:",
452
+ err
453
+ );
454
+ throw err;
455
+ }
456
+ };
434
457
  var _SilentLogger_decorators, _init3;
435
458
  _SilentLogger_decorators = [MakeInjectable];
436
459
  var SilentLogger = class {
@@ -454,6 +477,6 @@ _init3 = __decoratorStart();
454
477
  SilentLogger = __decorateElement(_init3, 0, "SilentLogger", _SilentLogger_decorators, SilentLogger);
455
478
  __runInitializers(_init3, 1, SilentLogger);
456
479
 
457
- export { AgnosError, AppError, BootstrapError, FeatureLoadError, ILogger, ILoggerTransport, IPresentation, InputParsingError, InternalError, InvalidDependencyError, LoggerTransportsToken, MissingDependencyError, NotFoundError, PresentationError, ResourceConflictError, SilentLogger, UseCase, start };
480
+ export { AgnosError, AppError, BootstrapError, FeatureLoadError, ILogger, ILoggerTransport, IPresentation, InputParsingError, InternalError, InvalidDependencyError, LoggerTransportsToken, MissingDependencyError, NotFoundError, PresentationError, ResourceConflictError, SilentLogger, UseCase, loadOnly, start, startOnly };
458
481
  //# sourceMappingURL=index.js.map
459
482
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/public.ts","../src/core/logging/Logger.ts","../src/core/bootstrap/loadInfra.ts","../src/core/errors/AgnosError.ts","../src/core/errors/AppError.ts","../src/core/errors/BootstrapError.ts","../src/core/errors/FeatureLoadError.ts","../src/core/errors/PresentationError.ts","../src/core/errors/InputParsingError.ts","../src/core/errors/InternalError.ts","../src/core/errors/InvalidDependencyError.ts","../src/core/errors/MissingDependencyError.ts","../src/core/errors/NotFoundError.ts","../src/core/errors/ResourceConflictError.ts","../src/utils/folderExists.ts","../src/core/bootstrap/loadFeatures.ts","../src/core/Program.ts","../src/core/start.ts","../src/core/logging/SilentLogger.ts"],"names":["_init","MakeInjectable"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUO,IAAe,mBAAf,MAAgC;AAEvC;AAKO,IAAM,qBAAA,GAAN,cAAoC,UAAA,CAA6B;AAAC;AAKlE,IAAe,UAAf,MAAuB;AAM9B;AAKO,IAAe,gBAAf,MAA6B;AAIpC;AAKO,IAAe,UAAf,MAAwD;AAE/D;AC5CA,IAAA,kBAAA,EAAA,KAAA;AAOA,kBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,SAAN,MAAgC;AAAA,EAKrC,YAAmB,IAAA,EAAoC;AAApC,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAqC;AAAA,EAArC,IAAA;AAAA,EAJnB,OAAc,IAAA,GAAO;AAAA,IACnB,UAAA,EAAY;AAAA,GACd;AAAA,EAIQ,SAAA,CAAU,OAAiB,IAAA,EAAmB;AACpD,IAAA,KAAA,MAAW,SAAA,IAAa,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY;AAC5C,MAAA,IAAI;AACF,QAAA,SAAA,CAAU,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,MAC5B,SAAS,GAAA,EAAK;AAEZ,QAAA,OAAA,CAAQ,KAAA;AAAA,UACN,wDAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,IAAA,EAAmB;AACxB,IAAA,IAAA,CAAK,SAAA,CAAU,OAAO,IAAI,CAAA;AAAA,EAC5B;AAAA,EACA,QAAQ,IAAA,EAAmB;AACzB,IAAA,IAAA,CAAK,SAAA,CAAU,QAAQ,IAAI,CAAA;AAAA,EAC7B;AAAA,EACA,QAAQ,IAAA,EAAmB;AACzB,IAAA,IAAA,CAAK,SAAA,CAAU,QAAQ,IAAI,CAAA;AAAA,EAC7B;AAAA,EACA,SAAS,IAAA,EAAmB;AAC1B,IAAA,IAAA,CAAK,SAAA,CAAU,SAAS,IAAI,CAAA;AAAA,EAC9B;AAAA,EACA,SAAS,IAAA,EAAmB;AAC1B,IAAA,IAAA,CAAK,SAAA,CAAU,SAAS,IAAI,CAAA;AAAA,EAC9B;AACF,CAAA;AApCO,KAAA,GAAA,gBAAA,CAAA,CAAA;AAAM,MAAA,GAAN,sCADP,kBAAA,EACa,MAAA,CAAA;AAAN,iBAAA,CAAA,KAAA,EAAA,CAAA,EAAM,MAAA,CAAA;;;ACJN,IAAM,SAAA,GAAY,OAAO,CAAA,KAAiB;AAC/C,EAAA,CAAA,CAAE,OAAA,CAAQ,SAAS,MAAM,CAAA;AAC3B,CAAA;;;ACWO,IAAM,UAAA,GAAN,MAAM,WAAA,SAAmB,KAAA,CAAM;AAAA,EACpB,OAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EAEhB,WAAA,CACE,IAAA,GAAO,YAAA,EACP,OAAA,GAAU,sCACV,OAAA,EACA;AACA,IAAA,MAAM,kBAAkB,OAAA,IAAW,oCAAA;AACnC,IAAA,KAAA,CAAM,eAAA,EAAiB,EAAE,KAAA,EAAO,OAAA,EAAS,OAAO,CAAA;AAChD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,eAAA;AACf,IAAA,IAAA,CAAK,IAAA,GAAO,SAAS,IAAA,IAAQ,aAAA;AAC7B,IAAA,IAAA,CAAK,UAAA,GAAa,SAAS,UAAA,IAAc,GAAA;AACzC,IAAA,IAAA,CAAK,UAAU,OAAA,EAAS,OAAA;AAGxB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAAwB;AACtB,IAAA,MAAM,UAAA,GAAa,KAAK,OAAA,GACpB;AAAA,SAAA,EAAc,KAAK,SAAA,CAAU,IAAA,CAAK,SAAS,IAAA,EAAM,CAAC,CAAC,CAAA,CAAA,GACnD,EAAA;AACJ,IAAA,MAAM,QAAA,GAAW,KAAK,KAAA,GAClB;AAAA,WAAA,EACE,IAAA,CAAK,KAAA,YAAiB,KAAA,GAClB,IAAA,CAAK,KAAA,CAAM,KAAA,IAAS,IAAA,CAAK,KAAA,CAAM,OAAA,GAC/B,MAAA,CAAO,IAAA,CAAK,KAAK,CACvB,CAAA,CAAA,GACA,EAAA;AACJ,IAAA,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,KAAK,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,UAAU,MAAM,IAAA,CAAK,OAAO,CAAA,EAAG,UAAU,GAAG,QAAQ;AAAA,aAAA,EAAkB,KAAK,KAAK,CAAA,CAAA;AAAA,EAC9H;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,GAAkC;AAChC,IAAA,OAAO;AAAA,MACL,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,SAAS,IAAA,CAAK;AAAA,KAChB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,aAAa,KAAA,EAAqC;AACvD,IAAA,OAAO,KAAA,YAAiB,WAAA;AAAA,EAC1B;AACF;;;ACxEO,IAAM,QAAA,GAAN,cAAuB,UAAA,CAAW;AAAA,EACvC,WAAA,CACE,IAAA,GAAO,uBAAA,EACP,OAAA,GAAU,qCACV,OAAA,EACA;AACA,IAAA,KAAA,CAAM,MAAM,OAAA,EAAS;AAAA,MACnB,IAAA,EAAM,SAAS,IAAA,IAAQ,iBAAA;AAAA,MACvB,UAAA,EAAY,SAAS,UAAA,IAAc,GAAA;AAAA,MACnC,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AACF;;;ACZO,IAAM,cAAA,GAAN,cAA6B,UAAA,CAAW;AAAA,EAC7C,WAAA,CAAY,SAAiB,OAAA,EAA6B;AACxD,IAAA,KAAA,CAAM,kBAAkB,OAAA,EAAS;AAAA,MAC/B,IAAA,EAAM,SAAS,IAAA,IAAQ,uBAAA;AAAA,MACvB,UAAA,EAAY,SAAS,UAAA,IAAc,GAAA;AAAA,MACnC,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AACF;;;ACCO,IAAM,gBAAA,GAAN,cAA+B,cAAA,CAAe;AAAA,EACnC,WAAA;AAAA,EACA,YAAA;AAAA,EAEhB,WAAA,CACE,WAAA,EACA,YAAA,EACA,OAAA,EACA,OAAA,EACA;AACA,IAAA,MAAM,kBACJ,OAAA,IACA,CAAA,wBAAA,EAA2B,WAAW,CAAA,sBAAA,EAAyB,gBAAgB,SAAS,CAAA,EAAA,CAAA;AAE1F,IAAA,MAAM,OAAA,GAAmC;AAAA,MACvC,WAAA;AAAA,MACA,GAAI,YAAA,GAAe,EAAE,YAAA,KAAiB,EAAC;AAAA,MACvC,GAAG,OAAA,EAAS;AAAA,KACd;AAEA,IAAA,KAAA,CAAM,eAAA,EAAiB;AAAA,MACrB,IAAA,EAAM,SAAS,IAAA,IAAQ,0BAAA;AAAA,MACvB,UAAA,EAAY,SAAS,UAAA,IAAc,GAAA;AAAA,MACnC,OAAA;AAAA,MACA,OAAO,OAAA,EAAS;AAAA,KACjB,CAAA;AAED,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AACZ,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AAAA,EACtB;AACF;;;ACxCO,IAAM,iBAAA,GAAN,cAAgC,UAAA,CAAW;AAAA,EAChC,KAAA;AAAA,EAEhB,WAAA,CACE,SACA,OAAA,EACA;AACA,IAAA,MAAM,OAAA,GAAmC;AAAA,MACvC,GAAI,SAAS,KAAA,GAAQ,EAAE,OAAO,OAAA,CAAQ,KAAA,KAAU,EAAC;AAAA,MACjD,GAAG,OAAA,EAAS;AAAA,KACd;AAEA,IAAA,KAAA,CAAM,qBAAqB,OAAA,EAAS;AAAA,MAClC,IAAA,EAAM,SAAS,IAAA,IAAQ,0BAAA;AAAA,MACvB,UAAA,EAAY,SAAS,UAAA,IAAc,GAAA;AAAA,MACnC,SAAS,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,IAAI,OAAA,GAAU,MAAA;AAAA,MACrD,OAAO,OAAA,EAAS;AAAA,KACjB,CAAA;AAED,IAAA,IAAA,CAAK,QAAQ,OAAA,EAAS,KAAA;AAAA,EACxB;AACF;;;ACbO,IAAM,iBAAA,GAAN,cAAgC,QAAA,CAAS;AAAA,EAC9B,MAAA;AAAA,EAEhB,WAAA,CAAY,SAAiB,OAAA,EAAoC;AAC/D,IAAA,MAAM,OAAA,GAAmC;AAAA,MACvC,GAAI,SAAS,MAAA,GAAS,EAAE,QAAQ,OAAA,CAAQ,MAAA,KAAW,EAAC;AAAA,MACpD,GAAG,OAAA,EAAS;AAAA,KACd;AAEA,IAAA,KAAA,CAAM,qBAAqB,OAAA,EAAS;AAAA,MAClC,IAAA,EAAM,SAAS,IAAA,IAAQ,2BAAA;AAAA,MACvB,UAAA,EAAY,SAAS,UAAA,IAAc,GAAA;AAAA,MACnC,SAAS,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,IAAI,OAAA,GAAU,MAAA;AAAA,MACrD,OAAO,OAAA,EAAS;AAAA,KACjB,CAAA;AAED,IAAA,IAAA,CAAK,SAAS,OAAA,EAAS,MAAA;AAAA,EACzB;AACF;;;ACzBO,IAAM,aAAA,GAAN,cAA4B,QAAA,CAAS;AAAA,EAC1C,WAAA,CACE,OAAA,GAAU,mCAAA,EACV,OAAA,EACA;AACA,IAAA,KAAA,CAAM,iBAAiB,OAAA,EAAS;AAAA,MAC9B,IAAA,EAAM,SAAS,IAAA,IAAQ,sBAAA;AAAA,MACvB,UAAA,EAAY,SAAS,UAAA,IAAc,GAAA;AAAA,MACnC,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AACF;;;ACJO,IAAM,sBAAA,GAAN,cAAqC,QAAA,CAAS;AAAA,EACnC,cAAA;AAAA,EAEhB,WAAA,CACE,SACA,cAAA,EACA;AACA,IAAA,MAAM,eAAA,GACJ,cAAA,KAAmB,IAAA,IACnB,OAAO,cAAA,KAAmB,QAAA,KACzB,OAAA,IAAW,cAAA,IACV,MAAA,IAAU,cAAA,IACV,SAAA,IAAa,cAAA,IACb,gBAAA,IAAoB,cAAA,CAAA;AAExB,IAAA,MAAM,OAAA,GAAyC,eAAA,GAC1C,cAAA,GACD,EAAE,OAAO,cAAA,EAAe;AAE5B,IAAA,MAAM,OAAA,GAAmC;AAAA,MACvC,GAAI,QAAQ,cAAA,GAAiB,EAAE,gBAAgB,OAAA,CAAQ,cAAA,KAAmB,EAAC;AAAA,MAC3E,GAAG,OAAA,CAAQ;AAAA,KACb;AAEA,IAAA,KAAA,CAAM,0BAA0B,OAAA,EAAS;AAAA,MACvC,IAAA,EAAM,QAAQ,IAAA,IAAQ,gCAAA;AAAA,MACtB,UAAA,EAAY,QAAQ,UAAA,IAAc,GAAA;AAAA,MAClC,SAAS,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,IAAI,OAAA,GAAU,MAAA;AAAA,MACrD,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AAED,IAAA,IAAA,CAAK,iBAAiB,OAAA,CAAQ,cAAA;AAAA,EAChC;AACF;;;ACjCO,IAAM,sBAAA,GAAN,cAAqC,QAAA,CAAS;AAAA,EACnC,cAAA;AAAA,EAEhB,WAAA,CACE,SACA,cAAA,EACA;AACA,IAAA,MAAM,eAAA,GACJ,cAAA,KAAmB,IAAA,IACnB,OAAO,cAAA,KAAmB,QAAA,KACzB,OAAA,IAAW,cAAA,IACV,MAAA,IAAU,cAAA,IACV,SAAA,IAAa,cAAA,IACb,gBAAA,IAAoB,cAAA,CAAA;AAExB,IAAA,MAAM,OAAA,GAAyC,eAAA,GAC1C,cAAA,GACD,EAAE,OAAO,cAAA,EAAe;AAE5B,IAAA,MAAM,OAAA,GAAmC;AAAA,MACvC,GAAI,QAAQ,cAAA,GAAiB,EAAE,gBAAgB,OAAA,CAAQ,cAAA,KAAmB,EAAC;AAAA,MAC3E,GAAG,OAAA,CAAQ;AAAA,KACb;AAEA,IAAA,KAAA,CAAM,0BAA0B,OAAA,EAAS;AAAA,MACvC,IAAA,EAAM,QAAQ,IAAA,IAAQ,gCAAA;AAAA,MACtB,UAAA,EAAY,QAAQ,UAAA,IAAc,GAAA;AAAA,MAClC,SAAS,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,IAAI,OAAA,GAAU,MAAA;AAAA,MACrD,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AAED,IAAA,IAAA,CAAK,iBAAiB,OAAA,CAAQ,cAAA;AAAA,EAChC;AACF;;;AChCO,IAAM,aAAA,GAAN,cAA4B,QAAA,CAAS;AAAA,EAC1B,QAAA;AAAA,EACA,UAAA;AAAA,EAEhB,WAAA,CAAY,SAAiB,OAAA,EAAgC;AAC3D,IAAA,MAAM,OAAA,GAAmC;AAAA,MACvC,GAAI,SAAS,QAAA,GAAW,EAAE,UAAU,OAAA,CAAQ,QAAA,KAAa,EAAC;AAAA,MAC1D,GAAI,SAAS,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,EAAY,OAAA,CAAQ,UAAA,EAAW,GAAI,EAAC;AAAA,MAC9E,GAAG,OAAA,EAAS;AAAA,KACd;AAEA,IAAA,KAAA,CAAM,iBAAiB,OAAA,EAAS;AAAA,MAC9B,IAAA,EAAM,SAAS,IAAA,IAAQ,uBAAA;AAAA,MACvB,UAAA,EAAY,SAAS,UAAA,IAAc,GAAA;AAAA,MACnC,SAAS,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,IAAI,OAAA,GAAU,MAAA;AAAA,MACrD,OAAO,OAAA,EAAS;AAAA,KACjB,CAAA;AAED,IAAA,IAAA,CAAK,WAAW,OAAA,EAAS,QAAA;AACzB,IAAA,IAAA,CAAK,aAAa,OAAA,EAAS,UAAA;AAAA,EAC7B;AACF;;;ACrBO,IAAM,qBAAA,GAAN,cAAoC,QAAA,CAAS;AAAA,EAClC,WAAA;AAAA,EACA,gBAAA;AAAA,EAEhB,WAAA,CACE,SACA,cAAA,EACA;AACA,IAAA,MAAM,eAAA,GACJ,cAAA,KAAmB,IAAA,IACnB,OAAO,cAAA,KAAmB,QAAA,KACzB,OAAA,IAAW,cAAA,IACV,MAAA,IAAU,cAAA,IACV,SAAA,IAAa,cAAA,IACb,aAAA,IAAiB,cAAA,CAAA;AAErB,IAAA,MAAM,OAAA,GAAwC,eAAA,GACzC,cAAA,GACD,EAAE,OAAO,cAAA,EAAe;AAE5B,IAAA,MAAM,OAAA,GAAmC;AAAA,MACvC,GAAI,QAAQ,WAAA,GAAc,EAAE,aAAa,OAAA,CAAQ,WAAA,KAAgB,EAAC;AAAA,MAClE,GAAI,QAAQ,gBAAA,KAAqB,MAAA,GAC7B,EAAE,gBAAA,EAAkB,OAAA,CAAQ,gBAAA,EAAiB,GAC7C,EAAC;AAAA,MACL,GAAG,OAAA,CAAQ;AAAA,KACb;AAEA,IAAA,KAAA,CAAM,yBAAyB,OAAA,EAAS;AAAA,MACtC,IAAA,EAAM,QAAQ,IAAA,IAAQ,+BAAA;AAAA,MACtB,UAAA,EAAY,QAAQ,UAAA,IAAc,GAAA;AAAA,MAClC,SAAS,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,IAAI,OAAA,GAAU,MAAA;AAAA,MACrD,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AAED,IAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAC3B,IAAA,IAAA,CAAK,mBAAmB,OAAA,CAAQ,gBAAA;AAAA,EAClC;AACF;AClDA,eAAsB,aAAa,GAAA,EAA+B;AAChE,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAG,CAAA;AAC5B,IAAA,OAAO,MAAM,WAAA,EAAY;AAAA,EAC3B,SAAS,KAAA,EAAY;AAEnB,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;;;ACPA,eAAsB,YAAA,CACpB,GACA,WAAA,EACe;AACf,EAAA,IAAI,CAAE,MAAM,YAAA,CAAa,WAAW,CAAA,EAAI;AACtC,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,EAAA,CAAG,OAAA,CAAQ,aAAa,EAAE,aAAA,EAAe,MAAM,CAAA;AAErE,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,MAAA,MAAM,cAAc,KAAA,CAAM,IAAA;AAE1B,MAAA,MAAM,KAAA,GAAQ,MAAM,EAAA,CAAG,OAAA,CAAQ,KAAK,IAAA,CAAK,WAAA,EAAa,WAAW,CAAC,CAAA;AAClE,MAAA,MAAM,eAAe,KAAA,CAAM,IAAA;AAAA,QACzB,CAAC,CAAA,KAAM,CAAA,KAAM,iBAAA,IAAqB,CAAA,KAAM;AAAA,OAC1C;AAEA,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,IAAA,CAAK,WAAA,EAAa,aAAa,YAAY,CAAA;AACnE,QAAA,MAAM,QAAA,GAAW,MAAM,OAAO,aAAA,CAAc,UAAU,CAAA,CAAE,IAAA,CAAA;AAExD,QAAA,MAAM,gBAAgB,QAAA,CAAS,OAAA;AAE/B,QAAA,IAAI,CAAC,aAAA,EAAe;AAClB,UAAA,MAAM,IAAI,gBAAA;AAAA,YACR,WAAA;AAAA,YACA,UAAA;AAAA,YACA,CAAA,SAAA,EAAY,WAAW,CAAA,kCAAA,EAAqC,UAAU,CAAA,kEAAA;AAAA,WACxE;AAAA,QACF;AAEA,QAAA,IAAI,aAAA,IAAiB,OAAO,aAAA,KAAkB,UAAA,EAAY;AACxD,UAAA,CAAA,CAAE,KAAK,aAAa,CAAA;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AC9CA,IAAA,mBAAA,EAAAA,MAAAA;AAGA,mBAAA,GAAA,CAACC,cAAAA,CAAAA;AACM,IAAM,UAAN,MAAc;AAAA,EAMnB,YAAmB,IAAA,EAAqC;AAArC,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsC;AAAA,EAAtC,IAAA;AAAA,EALnB,OAAc,IAAA,GAAO;AAAA,IACnB,YAAA,EAAc,aAAA;AAAA,IACd,MAAA,EAAQ;AAAA,GACV;AAAA,EAIA,MAAM,KAAA,GAAQ;AACZ,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,GAA8B,KAAK,IAAA,CAAK,YAAA;AAC9C,MAAA,MAAM,MAAA,GAAkB,KAAK,IAAA,CAAK,MAAA;AAClC,MAAA,MAAM,aAAa,IAAA,EAAK;AACxB,MAAA,MAAM,aAAa,GAAA,EAAI;AAEvB,MAAA,IAAI,cAAA,GAAiB,KAAA;AAErB,MAAA,MAAM,YAAA,GAAe,OAAO,KAAA,KAA4B;AAEtD,QAAA,IAAI,cAAA,EAAgB;AACpB,QAAA,cAAA,GAAiB,IAAA;AAEjB,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAA,CAAO,KAAA;AAAA,YACL,0DAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,KAAK,mCAAmC,CAAA;AAAA,QACjD;AAEA,QAAA,IAAI;AACF,UAAA,MAAM,aAAa,IAAA,EAAK;AAAA,QAC1B,SAAS,aAAA,EAAe;AACtB,UAAA,MAAA,CAAO,KAAA;AAAA,YACL,uDAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,SAAE;AAEA,UAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,GAAQ,CAAA,GAAI,CAAC,CAAA;AAAA,QAC5B;AAAA,MACF,CAAA;AAGA,MAAA,OAAA,CAAQ,EAAA,CAAG,SAAA,EAAW,MAAM,YAAA,EAAc,CAAA;AAC1C,MAAA,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,MAAM,YAAA,EAAc,CAAA;AAGzC,MAAA,OAAA,CAAQ,GAAG,mBAAA,EAAqB,CAAC,KAAA,KAAU,YAAA,CAAa,KAAK,CAAC,CAAA;AAC9D,MAAA,OAAA,CAAQ,GAAG,oBAAA,EAAsB,CAAC,MAAA,KAAW,YAAA,CAAa,MAAM,CAAC,CAAA;AAAA,IACnE,SAAS,GAAA,EAAK;AACZ,MAAA,IAAA,CAAK,KAAK,MAAA,CAAO,KAAA;AAAA,QACf,uFAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACF,CAAA;AA1DOD,MAAAA,GAAA,gBAAA,CAAA,CAAA;AAAM,OAAA,GAAN,iBAAA,CAAAA,MAAAA,EAAA,CAAA,EAAA,SAAA,EADP,mBAAA,EACa,OAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,OAAA,CAAA;;;ACaN,IAAM,KAAA,GAAQ,OACnB,SAAA,EACA,OAAA,KACkB;AAElB,EAAA,MAAM,UAAU,SAAS,CAAA;AAGzB,EAAA,IAAI,SAAS,WAAA,EAAa;AACxB,IAAA,MAAM,YAAA,CAAa,SAAA,EAAW,OAAA,CAAQ,WAAW,CAAA;AAAA,EACnD;AAGA,EAAA,MAAM,OAAA,GAAU,SAAA,CAAU,OAAA,CAAQ,OAAO,CAAA;AACzC,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,OAAA,CAAQ,OAAO,CAAA;AAExC,EAAA,IAAI;AACF,IAAA,MAAM,QAAQ,KAAA,EAAM;AAAA,EACtB,SAAS,GAAA,EAAc;AACrB,IAAA,MAAA,CAAO,KAAA;AAAA,MACL,oEAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AC1CA,IAAA,wBAAA,EAAAA,MAAAA;AAGA,wBAAA,GAAA,CAACC,cAAAA,CAAAA;AACM,IAAM,eAAN,MAAsC;AAAA,EAE3C,YAAmB,IAAA,EAA0C;AAA1C,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAA2C;AAAA,EAA3C,IAAA;AAAA,EADnB,OAAc,OAAO,EAAC;AAAA,EAEtB,OAAO,KAAA,EAAoB;AAAA,EAAC;AAAA,EAC5B,QAAQ,KAAA,EAAoB;AAAA,EAAC;AAAA,EAC7B,QAAQ,KAAA,EAAoB;AAAA,EAAC;AAAA,EAC7B,SAAS,KAAA,EAAoB;AAAA,EAAC;AAAA,EAC9B,SAAS,KAAA,EAAoB;AAAA,EAAC;AAChC;AAROD,MAAAA,GAAA,gBAAA,CAAA,CAAA;AAAM,YAAA,GAAN,iBAAA,CAAAA,MAAAA,EAAA,CAAA,EAAA,cAAA,EADP,wBAAA,EACa,YAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,YAAA,CAAA","file":"index.js","sourcesContent":["import { MultiToken } from \"@solid-stack/di\";\n\n/**\n * Supported log levels for logger transports.\n */\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"log\";\n\n/**\n * Abstract logger transport contract.\n */\nexport abstract class ILoggerTransport {\n abstract push: (message: any[], level: LogLevel) => void;\n}\n\n/**\n * MultiToken for registering and resolving logger transports.\n */\nexport class LoggerTransportsToken extends MultiToken<ILoggerTransport> {}\n\n/**\n * Abstract logger interface for application logging.\n */\nexport abstract class ILogger {\n abstract log(...args: any[]): void;\n abstract info(...args: any[]): void;\n abstract warn(...args: any[]): void;\n abstract error(...args: any[]): void;\n abstract debug(...args: any[]): void;\n}\n\n/**\n * Abstract presentation layer contract.\n */\nexport abstract class IPresentation {\n abstract init(): Promise<void>;\n abstract run(): Promise<void>;\n abstract stop(): Promise<void>;\n}\n\n/**\n * Abstract use case contract for application business logic.\n */\nexport abstract class UseCase<IRequest = any, IResponse = any> {\n abstract execute(request: IRequest): Promise<IResponse>;\n}\n\n/**\n * Options for bootstrapping and starting the application via start().\n */\nexport interface StartOptions {\n /** Optional directory path containing feature modules with DepsProvider files */\n featuresDir?: string | undefined;\n}\n\n/**\n * Backward-compatible alias for StartOptions.\n */\nexport type StartDeps = StartOptions;\n\n","import { MakeInjectable, type DepsType } from \"@solid-stack/di\";\nimport {\n ILogger,\n LoggerTransportsToken,\n type LogLevel,\n} from \"../../types/index.js\";\n\n@MakeInjectable\nexport class Logger implements ILogger {\n public static deps = {\n transports: LoggerTransportsToken,\n };\n\n constructor(public deps: DepsType<typeof Logger.deps>) {}\n\n private broadcast(level: LogLevel, args: any[]): void {\n for (const transport of this.deps.transports) {\n try {\n transport.push(args, level);\n } catch (err) {\n // Prevent a failing remote transport (e.g. Datadog network timeout) from crashing the application\n console.error(\n \"[Logger Transport Error]: Failed to dispatch log entry\",\n err,\n );\n }\n }\n }\n\n log(...args: any[]): void {\n this.broadcast(\"log\", args);\n }\n info(...args: any[]): void {\n this.broadcast(\"info\", args);\n }\n warn(...args: any[]): void {\n this.broadcast(\"warn\", args);\n }\n error(...args: any[]): void {\n this.broadcast(\"error\", args);\n }\n debug(...args: any[]): void {\n this.broadcast(\"debug\", args);\n }\n}\n","import type { Container } from \"@solid-stack/di\";\nimport { ILogger } from \"../../types/index.js\";\nimport { Logger } from \"../logging/Logger.js\";\n\nexport const loadInfra = async (c: Container) => {\n c.provide(ILogger, Logger);\n};\n","/**\n * Options for constructing Agnos framework errors.\n */\nexport interface AgnosErrorOptions {\n /** Underlying cause of the error */\n cause?: unknown;\n /** Machine-readable error code */\n code?: string | undefined;\n /** HTTP status code equivalent */\n statusCode?: number | undefined;\n /** Additional diagnostic metadata */\n context?: Record<string, unknown> | undefined;\n}\n\n/**\n * Base error class for all Agnos framework and application errors.\n */\nexport class AgnosError extends Error {\n public readonly details: string;\n public readonly code: string;\n public readonly statusCode: number;\n public readonly context?: Record<string, unknown> | undefined;\n\n constructor(\n name = \"AgnosError\",\n details = \"An Agnos framework error occurred.\",\n options?: AgnosErrorOptions,\n ) {\n const resolvedDetails = details || \"An Agnos framework error occurred.\";\n super(resolvedDetails, { cause: options?.cause });\n this.name = name;\n this.details = resolvedDetails;\n this.code = options?.code || \"AGNOS_ERROR\";\n this.statusCode = options?.statusCode ?? 500;\n this.context = options?.context;\n\n // Ensure proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /**\n * Formats the error into a human-readable diagnostic string with code, context, cause, and stack trace.\n */\n prettyDetails(): string {\n const contextStr = this.context\n ? `\\nContext: ${JSON.stringify(this.context, null, 2)}`\n : \"\";\n const causeStr = this.cause\n ? `\\nCaused by: ${\n this.cause instanceof Error\n ? this.cause.stack || this.cause.message\n : String(this.cause)\n }`\n : \"\";\n return `[${this.code}] ${this.name} (${this.statusCode}): ${this.details}${contextStr}${causeStr}\\nStack Trace: ${this.stack}`;\n }\n\n /**\n * Serializes the error to a JSON-safe object.\n */\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n statusCode: this.statusCode,\n message: this.message,\n details: this.details,\n context: this.context,\n };\n }\n\n /**\n * Type guard to verify if an unknown error is an instance of AgnosError.\n */\n static isAgnosError(error: unknown): error is AgnosError {\n return error instanceof AgnosError;\n }\n}\n","import { AgnosError, type AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Base application-level error class inheriting from AgnosError.\n */\nexport class AppError extends AgnosError {\n constructor(\n name = \"Internal Server Error\",\n details = \"An Internal Server Error occured.\",\n options?: AgnosErrorOptions,\n ) {\n super(name, details, {\n code: options?.code || \"AGNOS_APP_ERROR\",\n statusCode: options?.statusCode ?? 500,\n ...options,\n });\n }\n}\n","import { AgnosError, type AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Thrown when application bootstrap or infrastructure initialization fails.\n */\nexport class BootstrapError extends AgnosError {\n constructor(details: string, options?: AgnosErrorOptions) {\n super(\"BootstrapError\", details, {\n code: options?.code || \"AGNOS_BOOTSTRAP_ERROR\",\n statusCode: options?.statusCode ?? 500,\n ...options,\n });\n }\n}\n","import { BootstrapError } from \"./BootstrapError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for constructing a FeatureLoadError.\n */\nexport interface FeatureLoadErrorOptions extends AgnosErrorOptions {\n featureName?: string | undefined;\n providerPath?: string | undefined;\n}\n\n/**\n * Thrown when auto-loading a feature module or its DepsProvider fails.\n */\nexport class FeatureLoadError extends BootstrapError {\n public readonly featureName?: string | undefined;\n public readonly providerPath?: string | undefined;\n\n constructor(\n featureName: string,\n providerPath?: string | undefined,\n details?: string | undefined,\n options?: FeatureLoadErrorOptions,\n ) {\n const resolvedDetails =\n details ||\n `Failed to load feature \"${featureName}\" from provider path \"${providerPath || \"unknown\"}\".`;\n\n const context: Record<string, unknown> = {\n featureName,\n ...(providerPath ? { providerPath } : {}),\n ...options?.context,\n };\n\n super(resolvedDetails, {\n code: options?.code || \"AGNOS_FEATURE_LOAD_ERROR\",\n statusCode: options?.statusCode ?? 500,\n context,\n cause: options?.cause,\n });\n\n this.name = \"FeatureLoadError\";\n this.featureName = featureName;\n this.providerPath = providerPath;\n }\n}\n","import { AgnosError, type AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Thrown when the presentation layer fails during init, run, or stop lifecycle hooks.\n */\nexport class PresentationError extends AgnosError {\n public readonly phase?: (\"init\" | \"run\" | \"stop\") | undefined;\n\n constructor(\n details: string,\n options?: AgnosErrorOptions & { phase?: (\"init\" | \"run\" | \"stop\") | undefined },\n ) {\n const context: Record<string, unknown> = {\n ...(options?.phase ? { phase: options.phase } : {}),\n ...options?.context,\n };\n\n super(\"PresentationError\", details, {\n code: options?.code || \"AGNOS_PRESENTATION_ERROR\",\n statusCode: options?.statusCode ?? 500,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options?.cause,\n });\n\n this.phase = options?.phase;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for InputParsingError, including field-level validation errors.\n */\nexport interface InputParsingErrorOptions extends AgnosErrorOptions {\n issues?: Array<{ field?: string | undefined; message: string; code?: string | undefined }> | undefined;\n}\n\n/**\n * Thrown when request payload or user input validation fails.\n */\nexport class InputParsingError extends AppError {\n public readonly issues?: Array<{ field?: string | undefined; message: string; code?: string | undefined }> | undefined;\n\n constructor(details: string, options?: InputParsingErrorOptions) {\n const context: Record<string, unknown> = {\n ...(options?.issues ? { issues: options.issues } : {}),\n ...options?.context,\n };\n\n super(\"InputParsingError\", details, {\n code: options?.code || \"AGNOS_INPUT_PARSING_ERROR\",\n statusCode: options?.statusCode ?? 400,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options?.cause,\n });\n\n this.issues = options?.issues;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Thrown when an unexpected internal framework or application error occurs.\n */\nexport class InternalError extends AppError {\n constructor(\n details = \"An Internal Server Error occured.\",\n options?: AgnosErrorOptions,\n ) {\n super(\"InternalError\", details, {\n code: options?.code || \"AGNOS_INTERNAL_ERROR\",\n statusCode: options?.statusCode ?? 500,\n ...options,\n });\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for InvalidDependencyError.\n */\nexport interface InvalidDependencyErrorOptions extends AgnosErrorOptions {\n dependencyName?: string | undefined;\n}\n\n/**\n * Thrown when an invalid or improperly configured dependency is encountered.\n */\nexport class InvalidDependencyError extends AppError {\n public readonly dependencyName?: string | undefined;\n\n constructor(\n details: string,\n optionsOrCause?: InvalidDependencyErrorOptions | unknown,\n ) {\n const isOptionsObject =\n optionsOrCause !== null &&\n typeof optionsOrCause === \"object\" &&\n (\"cause\" in optionsOrCause ||\n \"code\" in optionsOrCause ||\n \"context\" in optionsOrCause ||\n \"dependencyName\" in optionsOrCause);\n\n const options: InvalidDependencyErrorOptions = isOptionsObject\n ? (optionsOrCause as InvalidDependencyErrorOptions)\n : { cause: optionsOrCause };\n\n const context: Record<string, unknown> = {\n ...(options.dependencyName ? { dependencyName: options.dependencyName } : {}),\n ...options.context,\n };\n\n super(\"InvalidDependencyError\", details, {\n code: options.code || \"AGNOS_INVALID_DEPENDENCY_ERROR\",\n statusCode: options.statusCode ?? 500,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options.cause,\n });\n\n this.dependencyName = options.dependencyName;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for MissingDependencyError.\n */\nexport interface MissingDependencyErrorOptions extends AgnosErrorOptions {\n dependencyName?: string | undefined;\n}\n\n/**\n * Thrown when a required dependency or token cannot be resolved.\n */\nexport class MissingDependencyError extends AppError {\n public readonly dependencyName?: string | undefined;\n\n constructor(\n details: string,\n optionsOrCause?: MissingDependencyErrorOptions | unknown,\n ) {\n const isOptionsObject =\n optionsOrCause !== null &&\n typeof optionsOrCause === \"object\" &&\n (\"cause\" in optionsOrCause ||\n \"code\" in optionsOrCause ||\n \"context\" in optionsOrCause ||\n \"dependencyName\" in optionsOrCause);\n\n const options: MissingDependencyErrorOptions = isOptionsObject\n ? (optionsOrCause as MissingDependencyErrorOptions)\n : { cause: optionsOrCause };\n\n const context: Record<string, unknown> = {\n ...(options.dependencyName ? { dependencyName: options.dependencyName } : {}),\n ...options.context,\n };\n\n super(\"MissingDependencyError\", details, {\n code: options.code || \"AGNOS_MISSING_DEPENDENCY_ERROR\",\n statusCode: options.statusCode ?? 500,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options.cause,\n });\n\n this.dependencyName = options.dependencyName;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for NotFoundError including resource identifier metadata.\n */\nexport interface NotFoundErrorOptions extends AgnosErrorOptions {\n resource?: string | undefined;\n resourceId?: string | number | undefined;\n}\n\n/**\n * Thrown when a requested resource or entity cannot be found.\n */\nexport class NotFoundError extends AppError {\n public readonly resource?: string | undefined;\n public readonly resourceId?: string | number | undefined;\n\n constructor(details: string, options?: NotFoundErrorOptions) {\n const context: Record<string, unknown> = {\n ...(options?.resource ? { resource: options.resource } : {}),\n ...(options?.resourceId !== undefined ? { resourceId: options.resourceId } : {}),\n ...options?.context,\n };\n\n super(\"NotFoundError\", details, {\n code: options?.code || \"AGNOS_NOT_FOUND_ERROR\",\n statusCode: options?.statusCode ?? 404,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options?.cause,\n });\n\n this.resource = options?.resource;\n this.resourceId = options?.resourceId;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for ResourceConflictError.\n */\nexport interface ResourceConflictErrorOptions extends AgnosErrorOptions {\n conflictKey?: string | undefined;\n conflictingValue?: unknown;\n}\n\n/**\n * Thrown when an operation conflicts with existing state (e.g. duplicate key or concurrency collision).\n */\nexport class ResourceConflictError extends AppError {\n public readonly conflictKey?: string | undefined;\n public readonly conflictingValue?: unknown;\n\n constructor(\n message: string,\n optionsOrCause?: ResourceConflictErrorOptions | unknown,\n ) {\n const isOptionsObject =\n optionsOrCause !== null &&\n typeof optionsOrCause === \"object\" &&\n (\"cause\" in optionsOrCause ||\n \"code\" in optionsOrCause ||\n \"context\" in optionsOrCause ||\n \"conflictKey\" in optionsOrCause);\n\n const options: ResourceConflictErrorOptions = isOptionsObject\n ? (optionsOrCause as ResourceConflictErrorOptions)\n : { cause: optionsOrCause };\n\n const context: Record<string, unknown> = {\n ...(options.conflictKey ? { conflictKey: options.conflictKey } : {}),\n ...(options.conflictingValue !== undefined\n ? { conflictingValue: options.conflictingValue }\n : {}),\n ...options.context,\n };\n\n super(\"ResourceConflictError\", message, {\n code: options.code || \"AGNOS_RESOURCE_CONFLICT_ERROR\",\n statusCode: options.statusCode ?? 409,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options.cause,\n });\n\n this.conflictKey = options.conflictKey;\n this.conflictingValue = options.conflictingValue;\n }\n}\n","import { stat } from \"node:fs/promises\";\n\nexport async function folderExists(dir: string): Promise<boolean> {\n try {\n const stats = await stat(dir);\n return stats.isDirectory();\n } catch (error: any) {\n // 'ENOENT' means the directory or file does not exist\n if (error.code === \"ENOENT\") {\n return false;\n }\n // Re-throw if it is a different error (like permission issues)\n throw error;\n }\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { Container } from \"@solid-stack/di\";\nimport { FeatureLoadError } from \"../errors/index.js\";\nimport { folderExists } from \"../../utils/index.js\";\n\nexport async function loadFeatures(\n c: Container,\n featuresDir: string,\n): Promise<void> {\n if (!(await folderExists(featuresDir))) {\n return;\n }\n\n const entries = await fs.readdir(featuresDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const featureName = entry.name;\n\n const files = await fs.readdir(path.join(featuresDir, featureName));\n const providerFile = files.find(\n (f) => f === \"DepsProvider.ts\" || f === \"DepsProvider.js\",\n );\n\n if (providerFile) {\n const modulePath = path.join(featuresDir, featureName, providerFile);\n const imported = await import(pathToFileURL(modulePath).href);\n\n const infraProvider = imported.default;\n\n if (!infraProvider) {\n throw new FeatureLoadError(\n featureName,\n modulePath,\n `Feature \"${featureName}\" has a Dependency Provider file (${modulePath}) but doesn't have a default export of type (c: Container) => void`,\n );\n }\n\n if (infraProvider && typeof infraProvider === \"function\") {\n c.load(infraProvider);\n }\n }\n }\n }\n}\n","import { MakeInjectable, type DepsType } from \"@solid-stack/di\";\nimport { IPresentation, ILogger } from \"../types/index.js\";\n\n@MakeInjectable\nexport class Program {\n public static deps = {\n presentation: IPresentation,\n logger: ILogger,\n };\n\n constructor(public deps: DepsType<typeof Program.deps>) {}\n\n async start() {\n try {\n const presentation: IPresentation = this.deps.presentation;\n const logger: ILogger = this.deps.logger;\n await presentation.init();\n await presentation.run();\n\n let isShuttingDown = false;\n\n const handleOnStop = async (error?: Error | unknown) => {\n // Prevent multiple shutdown signals from overlapping\n if (isShuttingDown) return;\n isShuttingDown = true;\n\n if (error) {\n logger.error(\n \"Fatal Error: Shutting down due to unhandled exception...\",\n error,\n );\n } else {\n logger.info(\"Terminating process gracefully...\");\n }\n\n try {\n await presentation.stop();\n } catch (shutdownError) {\n logger.error(\n \"Error occurred while stopping the presentation layer:\",\n shutdownError,\n );\n } finally {\n // Exit with 1 if there was an error, otherwise 0\n process.exit(error ? 1 : 0);\n }\n };\n\n // OS Termination Signals\n process.on(\"SIGTERM\", () => handleOnStop());\n process.on(\"SIGINT\", () => handleOnStop()); // Fixed duplicate SIGTERM\n\n // Unhandled Errors\n process.on(\"uncaughtException\", (error) => handleOnStop(error));\n process.on(\"unhandledRejection\", (reason) => handleOnStop(reason));\n } catch (err) {\n this.deps.logger.error(\n \"An Uncaught/Unknown error has been encountered while Starting/Running the Application\",\n err,\n );\n }\n }\n}\n","import type { Container } from \"@solid-stack/di\";\nimport { loadInfra } from \"./bootstrap/loadInfra.js\";\nimport { loadFeatures } from \"./bootstrap/loadFeatures.js\";\nimport { Program } from \"./Program.js\";\nimport { ILogger, type StartOptions } from \"../types/index.js\";\n\n/**\n * Boots up and executes the Agnos application lifecycle.\n *\n * Automatically:\n * 1. Initializes core infrastructure (ILogger, etc.).\n * 2. Auto-discovers and loads feature modules if a features directory is specified.\n * 3. Resolves the Program lifecycle coordinator and runs the presentation layer.\n *\n * @param container - The @solid-stack/di Container instance.\n * @param options - Optional configuration including feature directory path.\n */\nexport const start = async (\n container: Container,\n options?: StartOptions,\n): Promise<void> => {\n // 1. Initialize core framework infrastructure\n await loadInfra(container);\n\n // 2. Discover and load feature providers if directory configured\n if (options?.featuresDir) {\n await loadFeatures(container, options.featuresDir);\n }\n\n // 3. Resolve Program and run presentation lifecycle\n const program = container.resolve(Program);\n const logger = container.resolve(ILogger);\n\n try {\n await program.start();\n } catch (err: unknown) {\n logger.error(\n \"An unhandled error occurred while starting the presentation layer:\",\n err,\n );\n throw err;\n }\n};\n","import { MakeInjectable, type DepsType } from \"@solid-stack/di\";\nimport type { ILogger } from \"../../types/index.js\";\n\n@MakeInjectable\nexport class SilentLogger implements ILogger {\n public static deps = {};\n constructor(public deps: DepsType<typeof SilentLogger.deps>) {}\n log(..._args: any[]): void {}\n info(..._args: any[]): void {}\n warn(..._args: any[]): void {}\n error(..._args: any[]): void {}\n debug(..._args: any[]): void {}\n}\n"]}
1
+ {"version":3,"sources":["../src/types/public.ts","../src/core/logging/Logger.ts","../src/core/bootstrap/loadInfra.ts","../src/core/errors/AgnosError.ts","../src/core/errors/AppError.ts","../src/core/errors/BootstrapError.ts","../src/core/errors/FeatureLoadError.ts","../src/core/errors/PresentationError.ts","../src/core/errors/InputParsingError.ts","../src/core/errors/InternalError.ts","../src/core/errors/InvalidDependencyError.ts","../src/core/errors/MissingDependencyError.ts","../src/core/errors/NotFoundError.ts","../src/core/errors/ResourceConflictError.ts","../src/utils/folderExists.ts","../src/core/bootstrap/loadFeatures.ts","../src/core/Program.ts","../src/core/start.ts","../src/core/loadOnly.ts","../src/core/startOnly.ts","../src/core/logging/SilentLogger.ts"],"names":["_init","MakeInjectable"],"mappings":"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","file":"index.js","sourcesContent":["import { MultiToken } from \"@solid-stack/di\";\n\n/**\n * Supported log levels for logger transports.\n */\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"log\";\n\n/**\n * Abstract logger transport contract.\n */\nexport abstract class ILoggerTransport {\n abstract push: (message: any[], level: LogLevel) => void;\n}\n\n/**\n * MultiToken for registering and resolving logger transports.\n */\nexport class LoggerTransportsToken extends MultiToken<ILoggerTransport> {}\n\n/**\n * Abstract logger interface for application logging.\n */\nexport abstract class ILogger {\n abstract log(...args: any[]): void;\n abstract info(...args: any[]): void;\n abstract warn(...args: any[]): void;\n abstract error(...args: any[]): void;\n abstract debug(...args: any[]): void;\n}\n\n/**\n * Abstract presentation layer contract.\n */\nexport abstract class IPresentation {\n abstract init(): Promise<void>;\n abstract run(): Promise<void>;\n abstract stop(): Promise<void>;\n}\n\n/**\n * Abstract use case contract for application business logic.\n */\nexport abstract class UseCase<IRequest = any, IResponse = any> {\n abstract execute(request: IRequest): Promise<IResponse>;\n}\n\n/**\n * Options for bootstrapping and starting the application via start().\n */\nexport interface StartOptions {\n /** Optional directory path containing feature modules with DepsProvider files */\n featuresDir?: string | undefined;\n}\n\n/**\n * Backward-compatible alias for StartOptions.\n */\nexport type StartDeps = StartOptions;\n\n","import { MakeInjectable, type DepsType } from \"@solid-stack/di\";\nimport {\n ILogger,\n LoggerTransportsToken,\n type LogLevel,\n} from \"../../types/index.js\";\n\n@MakeInjectable\nexport class Logger implements ILogger {\n public static deps = {\n transports: LoggerTransportsToken,\n };\n\n constructor(public deps: DepsType<typeof Logger.deps>) {}\n\n private broadcast(level: LogLevel, args: any[]): void {\n for (const transport of this.deps.transports) {\n try {\n transport.push(args, level);\n } catch (err) {\n // Prevent a failing remote transport (e.g. Datadog network timeout) from crashing the application\n console.error(\n \"[Logger Transport Error]: Failed to dispatch log entry\",\n err,\n );\n }\n }\n }\n\n log(...args: any[]): void {\n this.broadcast(\"log\", args);\n }\n info(...args: any[]): void {\n this.broadcast(\"info\", args);\n }\n warn(...args: any[]): void {\n this.broadcast(\"warn\", args);\n }\n error(...args: any[]): void {\n this.broadcast(\"error\", args);\n }\n debug(...args: any[]): void {\n this.broadcast(\"debug\", args);\n }\n}\n","import type { Container } from \"@solid-stack/di\";\nimport { ILogger } from \"../../types/index.js\";\nimport { Logger } from \"../logging/Logger.js\";\n\nexport const loadInfra = async (c: Container) => {\n c.provide(ILogger, Logger);\n};\n","/**\n * Options for constructing Agnos framework errors.\n */\nexport interface AgnosErrorOptions {\n /** Underlying cause of the error */\n cause?: unknown;\n /** Machine-readable error code */\n code?: string | undefined;\n /** HTTP status code equivalent */\n statusCode?: number | undefined;\n /** Additional diagnostic metadata */\n context?: Record<string, unknown> | undefined;\n}\n\n/**\n * Base error class for all Agnos framework and application errors.\n */\nexport class AgnosError extends Error {\n public readonly details: string;\n public readonly code: string;\n public readonly statusCode: number;\n public readonly context?: Record<string, unknown> | undefined;\n\n constructor(\n name = \"AgnosError\",\n details = \"An Agnos framework error occurred.\",\n options?: AgnosErrorOptions,\n ) {\n const resolvedDetails = details || \"An Agnos framework error occurred.\";\n super(resolvedDetails, { cause: options?.cause });\n this.name = name;\n this.details = resolvedDetails;\n this.code = options?.code || \"AGNOS_ERROR\";\n this.statusCode = options?.statusCode ?? 500;\n this.context = options?.context;\n\n // Ensure proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /**\n * Formats the error into a human-readable diagnostic string with code, context, cause, and stack trace.\n */\n prettyDetails(): string {\n const contextStr = this.context\n ? `\\nContext: ${JSON.stringify(this.context, null, 2)}`\n : \"\";\n const causeStr = this.cause\n ? `\\nCaused by: ${\n this.cause instanceof Error\n ? this.cause.stack || this.cause.message\n : String(this.cause)\n }`\n : \"\";\n return `[${this.code}] ${this.name} (${this.statusCode}): ${this.details}${contextStr}${causeStr}\\nStack Trace: ${this.stack}`;\n }\n\n /**\n * Serializes the error to a JSON-safe object.\n */\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n statusCode: this.statusCode,\n message: this.message,\n details: this.details,\n context: this.context,\n };\n }\n\n /**\n * Type guard to verify if an unknown error is an instance of AgnosError.\n */\n static isAgnosError(error: unknown): error is AgnosError {\n return error instanceof AgnosError;\n }\n}\n","import { AgnosError, type AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Base application-level error class inheriting from AgnosError.\n */\nexport class AppError extends AgnosError {\n constructor(\n name = \"Internal Server Error\",\n details = \"An Internal Server Error occured.\",\n options?: AgnosErrorOptions,\n ) {\n super(name, details, {\n code: options?.code || \"AGNOS_APP_ERROR\",\n statusCode: options?.statusCode ?? 500,\n ...options,\n });\n }\n}\n","import { AgnosError, type AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Thrown when application bootstrap or infrastructure initialization fails.\n */\nexport class BootstrapError extends AgnosError {\n constructor(details: string, options?: AgnosErrorOptions) {\n super(\"BootstrapError\", details, {\n code: options?.code || \"AGNOS_BOOTSTRAP_ERROR\",\n statusCode: options?.statusCode ?? 500,\n ...options,\n });\n }\n}\n","import { BootstrapError } from \"./BootstrapError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for constructing a FeatureLoadError.\n */\nexport interface FeatureLoadErrorOptions extends AgnosErrorOptions {\n featureName?: string | undefined;\n providerPath?: string | undefined;\n}\n\n/**\n * Thrown when auto-loading a feature module or its DepsProvider fails.\n */\nexport class FeatureLoadError extends BootstrapError {\n public readonly featureName?: string | undefined;\n public readonly providerPath?: string | undefined;\n\n constructor(\n featureName: string,\n providerPath?: string | undefined,\n details?: string | undefined,\n options?: FeatureLoadErrorOptions,\n ) {\n const resolvedDetails =\n details ||\n `Failed to load feature \"${featureName}\" from provider path \"${providerPath || \"unknown\"}\".`;\n\n const context: Record<string, unknown> = {\n featureName,\n ...(providerPath ? { providerPath } : {}),\n ...options?.context,\n };\n\n super(resolvedDetails, {\n code: options?.code || \"AGNOS_FEATURE_LOAD_ERROR\",\n statusCode: options?.statusCode ?? 500,\n context,\n cause: options?.cause,\n });\n\n this.name = \"FeatureLoadError\";\n this.featureName = featureName;\n this.providerPath = providerPath;\n }\n}\n","import { AgnosError, type AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Thrown when the presentation layer fails during init, run, or stop lifecycle hooks.\n */\nexport class PresentationError extends AgnosError {\n public readonly phase?: (\"init\" | \"run\" | \"stop\") | undefined;\n\n constructor(\n details: string,\n options?: AgnosErrorOptions & { phase?: (\"init\" | \"run\" | \"stop\") | undefined },\n ) {\n const context: Record<string, unknown> = {\n ...(options?.phase ? { phase: options.phase } : {}),\n ...options?.context,\n };\n\n super(\"PresentationError\", details, {\n code: options?.code || \"AGNOS_PRESENTATION_ERROR\",\n statusCode: options?.statusCode ?? 500,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options?.cause,\n });\n\n this.phase = options?.phase;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for InputParsingError, including field-level validation errors.\n */\nexport interface InputParsingErrorOptions extends AgnosErrorOptions {\n issues?: Array<{ field?: string | undefined; message: string; code?: string | undefined }> | undefined;\n}\n\n/**\n * Thrown when request payload or user input validation fails.\n */\nexport class InputParsingError extends AppError {\n public readonly issues?: Array<{ field?: string | undefined; message: string; code?: string | undefined }> | undefined;\n\n constructor(details: string, options?: InputParsingErrorOptions) {\n const context: Record<string, unknown> = {\n ...(options?.issues ? { issues: options.issues } : {}),\n ...options?.context,\n };\n\n super(\"InputParsingError\", details, {\n code: options?.code || \"AGNOS_INPUT_PARSING_ERROR\",\n statusCode: options?.statusCode ?? 400,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options?.cause,\n });\n\n this.issues = options?.issues;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Thrown when an unexpected internal framework or application error occurs.\n */\nexport class InternalError extends AppError {\n constructor(\n details = \"An Internal Server Error occured.\",\n options?: AgnosErrorOptions,\n ) {\n super(\"InternalError\", details, {\n code: options?.code || \"AGNOS_INTERNAL_ERROR\",\n statusCode: options?.statusCode ?? 500,\n ...options,\n });\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for InvalidDependencyError.\n */\nexport interface InvalidDependencyErrorOptions extends AgnosErrorOptions {\n dependencyName?: string | undefined;\n}\n\n/**\n * Thrown when an invalid or improperly configured dependency is encountered.\n */\nexport class InvalidDependencyError extends AppError {\n public readonly dependencyName?: string | undefined;\n\n constructor(\n details: string,\n optionsOrCause?: InvalidDependencyErrorOptions | unknown,\n ) {\n const isOptionsObject =\n optionsOrCause !== null &&\n typeof optionsOrCause === \"object\" &&\n (\"cause\" in optionsOrCause ||\n \"code\" in optionsOrCause ||\n \"context\" in optionsOrCause ||\n \"dependencyName\" in optionsOrCause);\n\n const options: InvalidDependencyErrorOptions = isOptionsObject\n ? (optionsOrCause as InvalidDependencyErrorOptions)\n : { cause: optionsOrCause };\n\n const context: Record<string, unknown> = {\n ...(options.dependencyName ? { dependencyName: options.dependencyName } : {}),\n ...options.context,\n };\n\n super(\"InvalidDependencyError\", details, {\n code: options.code || \"AGNOS_INVALID_DEPENDENCY_ERROR\",\n statusCode: options.statusCode ?? 500,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options.cause,\n });\n\n this.dependencyName = options.dependencyName;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for MissingDependencyError.\n */\nexport interface MissingDependencyErrorOptions extends AgnosErrorOptions {\n dependencyName?: string | undefined;\n}\n\n/**\n * Thrown when a required dependency or token cannot be resolved.\n */\nexport class MissingDependencyError extends AppError {\n public readonly dependencyName?: string | undefined;\n\n constructor(\n details: string,\n optionsOrCause?: MissingDependencyErrorOptions | unknown,\n ) {\n const isOptionsObject =\n optionsOrCause !== null &&\n typeof optionsOrCause === \"object\" &&\n (\"cause\" in optionsOrCause ||\n \"code\" in optionsOrCause ||\n \"context\" in optionsOrCause ||\n \"dependencyName\" in optionsOrCause);\n\n const options: MissingDependencyErrorOptions = isOptionsObject\n ? (optionsOrCause as MissingDependencyErrorOptions)\n : { cause: optionsOrCause };\n\n const context: Record<string, unknown> = {\n ...(options.dependencyName ? { dependencyName: options.dependencyName } : {}),\n ...options.context,\n };\n\n super(\"MissingDependencyError\", details, {\n code: options.code || \"AGNOS_MISSING_DEPENDENCY_ERROR\",\n statusCode: options.statusCode ?? 500,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options.cause,\n });\n\n this.dependencyName = options.dependencyName;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for NotFoundError including resource identifier metadata.\n */\nexport interface NotFoundErrorOptions extends AgnosErrorOptions {\n resource?: string | undefined;\n resourceId?: string | number | undefined;\n}\n\n/**\n * Thrown when a requested resource or entity cannot be found.\n */\nexport class NotFoundError extends AppError {\n public readonly resource?: string | undefined;\n public readonly resourceId?: string | number | undefined;\n\n constructor(details: string, options?: NotFoundErrorOptions) {\n const context: Record<string, unknown> = {\n ...(options?.resource ? { resource: options.resource } : {}),\n ...(options?.resourceId !== undefined ? { resourceId: options.resourceId } : {}),\n ...options?.context,\n };\n\n super(\"NotFoundError\", details, {\n code: options?.code || \"AGNOS_NOT_FOUND_ERROR\",\n statusCode: options?.statusCode ?? 404,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options?.cause,\n });\n\n this.resource = options?.resource;\n this.resourceId = options?.resourceId;\n }\n}\n","import { AppError } from \"./AppError.js\";\nimport type { AgnosErrorOptions } from \"./AgnosError.js\";\n\n/**\n * Options for ResourceConflictError.\n */\nexport interface ResourceConflictErrorOptions extends AgnosErrorOptions {\n conflictKey?: string | undefined;\n conflictingValue?: unknown;\n}\n\n/**\n * Thrown when an operation conflicts with existing state (e.g. duplicate key or concurrency collision).\n */\nexport class ResourceConflictError extends AppError {\n public readonly conflictKey?: string | undefined;\n public readonly conflictingValue?: unknown;\n\n constructor(\n message: string,\n optionsOrCause?: ResourceConflictErrorOptions | unknown,\n ) {\n const isOptionsObject =\n optionsOrCause !== null &&\n typeof optionsOrCause === \"object\" &&\n (\"cause\" in optionsOrCause ||\n \"code\" in optionsOrCause ||\n \"context\" in optionsOrCause ||\n \"conflictKey\" in optionsOrCause);\n\n const options: ResourceConflictErrorOptions = isOptionsObject\n ? (optionsOrCause as ResourceConflictErrorOptions)\n : { cause: optionsOrCause };\n\n const context: Record<string, unknown> = {\n ...(options.conflictKey ? { conflictKey: options.conflictKey } : {}),\n ...(options.conflictingValue !== undefined\n ? { conflictingValue: options.conflictingValue }\n : {}),\n ...options.context,\n };\n\n super(\"ResourceConflictError\", message, {\n code: options.code || \"AGNOS_RESOURCE_CONFLICT_ERROR\",\n statusCode: options.statusCode ?? 409,\n context: Object.keys(context).length > 0 ? context : undefined,\n cause: options.cause,\n });\n\n this.conflictKey = options.conflictKey;\n this.conflictingValue = options.conflictingValue;\n }\n}\n","import { stat } from \"node:fs/promises\";\n\nexport async function folderExists(dir: string): Promise<boolean> {\n try {\n const stats = await stat(dir);\n return stats.isDirectory();\n } catch (error: any) {\n // 'ENOENT' means the directory or file does not exist\n if (error.code === \"ENOENT\") {\n return false;\n }\n // Re-throw if it is a different error (like permission issues)\n throw error;\n }\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { Container } from \"@solid-stack/di\";\nimport { FeatureLoadError } from \"../errors/index.js\";\nimport { folderExists } from \"../../utils/index.js\";\n\nexport async function loadFeatures(\n c: Container,\n featuresDir: string,\n): Promise<void> {\n if (!(await folderExists(featuresDir))) {\n return;\n }\n\n const entries = await fs.readdir(featuresDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const featureName = entry.name;\n\n const files = await fs.readdir(path.join(featuresDir, featureName));\n const providerFile = files.find(\n (f) => f === \"DepsProvider.ts\" || f === \"DepsProvider.js\",\n );\n\n if (providerFile) {\n const modulePath = path.join(featuresDir, featureName, providerFile);\n const imported = await import(pathToFileURL(modulePath).href);\n\n const infraProvider = imported.default;\n\n if (!infraProvider) {\n throw new FeatureLoadError(\n featureName,\n modulePath,\n `Feature \"${featureName}\" has a Dependency Provider file (${modulePath}) but doesn't have a default export of type (c: Container) => void`,\n );\n }\n\n if (infraProvider && typeof infraProvider === \"function\") {\n c.load(infraProvider);\n }\n }\n }\n }\n}\n","import { MakeInjectable, type DepsType } from \"@solid-stack/di\";\nimport { IPresentation, ILogger } from \"../types/index.js\";\n\n@MakeInjectable\nexport class Program {\n public static deps = {\n presentation: IPresentation,\n logger: ILogger,\n };\n\n constructor(public deps: DepsType<typeof Program.deps>) {}\n\n async start() {\n try {\n const presentation: IPresentation = this.deps.presentation;\n const logger: ILogger = this.deps.logger;\n await presentation.init();\n await presentation.run();\n\n let isShuttingDown = false;\n\n const handleOnStop = async (error?: Error | unknown) => {\n // Prevent multiple shutdown signals from overlapping\n if (isShuttingDown) return;\n isShuttingDown = true;\n\n if (error) {\n logger.error(\n \"Fatal Error: Shutting down due to unhandled exception...\",\n error,\n );\n } else {\n logger.info(\"Terminating process gracefully...\");\n }\n\n try {\n await presentation.stop();\n } catch (shutdownError) {\n logger.error(\n \"Error occurred while stopping the presentation layer:\",\n shutdownError,\n );\n } finally {\n // Exit with 1 if there was an error, otherwise 0\n process.exit(error ? 1 : 0);\n }\n };\n\n // OS Termination Signals\n process.on(\"SIGTERM\", () => handleOnStop());\n process.on(\"SIGINT\", () => handleOnStop()); // Fixed duplicate SIGTERM\n\n // Unhandled Errors\n process.on(\"uncaughtException\", (error) => handleOnStop(error));\n process.on(\"unhandledRejection\", (reason) => handleOnStop(reason));\n } catch (err) {\n this.deps.logger.error(\n \"An Uncaught/Unknown error has been encountered while Starting/Running the Application\",\n err,\n );\n }\n }\n}\n","import type { Container } from \"@solid-stack/di\";\nimport { loadInfra } from \"./bootstrap/loadInfra.js\";\nimport { loadFeatures } from \"./bootstrap/loadFeatures.js\";\nimport { Program } from \"./Program.js\";\nimport { ILogger, type StartOptions } from \"../types/index.js\";\n\n/**\n * Boots up and executes the Agnos application lifecycle.\n *\n * Automatically:\n * 1. Initializes core infrastructure (ILogger, etc.).\n * 2. Auto-discovers and loads feature modules if a features directory is specified.\n * 3. Resolves the Program lifecycle coordinator and runs the presentation layer.\n *\n * @param container - The @solid-stack/di Container instance.\n * @param options - Optional configuration including feature directory path.\n */\nexport const start = async (\n container: Container,\n options?: StartOptions,\n): Promise<void> => {\n // 1. Initialize core framework infrastructure\n await loadInfra(container);\n\n // 2. Discover and load feature providers if directory configured\n if (options?.featuresDir) {\n await loadFeatures(container, options.featuresDir);\n }\n\n // 3. Resolve Program and run presentation lifecycle\n const program = container.resolve(Program);\n const logger = container.resolve(ILogger);\n\n try {\n await program.start();\n } catch (err: unknown) {\n logger.error(\n \"An unhandled error occurred while starting the presentation layer:\",\n err,\n );\n throw err;\n }\n};\n","import type { Container } from \"@solid-stack/di\";\nimport { loadInfra } from \"./bootstrap/loadInfra.js\";\nimport { loadFeatures } from \"./bootstrap/loadFeatures.js\";\nimport { type StartOptions } from \"../types/index.js\";\n\n/**\n * Initializes the Agnos application.\n *\n * Automatically:\n * 1. Initializes core infrastructure (ILogger, etc.).\n * 2. Auto-discovers and loads feature modules if a features directory is specified.\n *\n * @param container - The @solid-stack/di Container instance.\n * @param options - Optional configuration including feature directory path.\n */\nexport const loadOnly = async (\n container: Container,\n options?: StartOptions,\n): Promise<void> => {\n // 1. Initialize core framework infrastructure\n await loadInfra(container);\n\n // 2. Discover and load feature providers if directory configured\n if (options?.featuresDir) {\n await loadFeatures(container, options.featuresDir);\n }\n};\n","import type { Container } from \"@solid-stack/di\";\nimport { ILogger, type StartOptions } from \"../types/index.js\";\nimport { Program } from \"./Program.js\";\n\n/**\n * Starts the Agnos application.\n *\n * Automatically:\n * 1. Resolves the Program lifecycle coordinator and runs the presentation layer.\n *\n * @param container - The @solid-stack/di Container instance.\n */\nexport const startOnly = async (container: Container): Promise<void> => {\n const program = container.resolve(Program);\n const logger = container.resolve(ILogger);\n\n try {\n await program.start();\n } catch (err: unknown) {\n logger.error(\n \"An unhandled error occurred while starting the presentation layer:\",\n err,\n );\n throw err;\n }\n};\n","import { MakeInjectable, type DepsType } from \"@solid-stack/di\";\nimport type { ILogger } from \"../../types/index.js\";\n\n@MakeInjectable\nexport class SilentLogger implements ILogger {\n public static deps = {};\n constructor(public deps: DepsType<typeof SilentLogger.deps>) {}\n log(..._args: any[]): void {}\n info(..._args: any[]): void {}\n warn(..._args: any[]): void {}\n error(..._args: any[]): void {}\n debug(..._args: any[]): void {}\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solid-stack/agnos",
3
- "version": "1.0.1",
3
+ "version": "1.0.4",
4
4
  "description": "An agnostic, type-safe application architecture framework for TypeScript powered by @solid-stack/di.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",