@solid-stack/agnos 1.0.5 → 1.0.6
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/dist/core/bootstrap/loadShared.d.ts +3 -0
- package/dist/core/bootstrap/loadShared.d.ts.map +1 -0
- package/dist/core/loadOnly.d.ts.map +1 -1
- package/dist/index.cjs +33 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -1
- package/dist/types/public.d.ts +1 -0
- package/dist/types/public.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadShared.d.ts","sourceRoot":"","sources":["../../../src/core/bootstrap/loadShared.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD,wBAAsB,UAAU,CAC9B,CAAC,EAAE,SAAS,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAoCf"}
|
|
@@ -1 +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;
|
|
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;AAGtD;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ,cACR,SAAS,YACV,YAAY,KACrB,OAAO,CAAC,IAAI,CAad,CAAC"}
|
package/dist/index.cjs
CHANGED
|
@@ -438,10 +438,43 @@ var start = async (container, options) => {
|
|
|
438
438
|
throw err;
|
|
439
439
|
}
|
|
440
440
|
};
|
|
441
|
+
async function loadShared(c, sharedDir) {
|
|
442
|
+
if (!await folderExists(sharedDir)) {
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
const entries = await fs__default.default.readdir(sharedDir, { withFileTypes: true });
|
|
446
|
+
for (const entry of entries) {
|
|
447
|
+
if (entry.isDirectory()) {
|
|
448
|
+
const featureName = entry.name;
|
|
449
|
+
const files = await fs__default.default.readdir(path__default.default.join(sharedDir, featureName));
|
|
450
|
+
const providerFile = files.find(
|
|
451
|
+
(f) => f === "diProvider.ts" || f === "diProvider.js"
|
|
452
|
+
);
|
|
453
|
+
if (providerFile) {
|
|
454
|
+
const modulePath = path__default.default.join(sharedDir, featureName, providerFile);
|
|
455
|
+
const imported = await import(url.pathToFileURL(modulePath).href);
|
|
456
|
+
const infraProvider = imported.default;
|
|
457
|
+
if (!infraProvider) {
|
|
458
|
+
throw new FeatureLoadError(
|
|
459
|
+
featureName,
|
|
460
|
+
modulePath,
|
|
461
|
+
`Feature "${featureName}" has a Dependency Provider file (${modulePath}) but doesn't have a default export of type (c: Container) => void`
|
|
462
|
+
);
|
|
463
|
+
}
|
|
464
|
+
if (infraProvider && typeof infraProvider === "function") {
|
|
465
|
+
c.load(infraProvider);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
441
471
|
|
|
442
472
|
// src/core/loadOnly.ts
|
|
443
473
|
var loadOnly = async (container, options) => {
|
|
444
474
|
await loadInfra(container);
|
|
475
|
+
if (options?.sharedDir) {
|
|
476
|
+
await loadShared(container, options.sharedDir);
|
|
477
|
+
}
|
|
445
478
|
if (options?.featuresDir) {
|
|
446
479
|
await loadFeatures(container, options.featuresDir);
|
|
447
480
|
}
|
package/dist/index.cjs.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/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"]}
|
|
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/bootstrap/loadShared.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 sharedDir?: string | undefined;\n}\n\n/**\n * Backward-compatible alias for StartOptions.\n */\nexport type StartDeps = StartOptions;\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 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 loadShared(\n c: Container,\n sharedDir: string,\n): Promise<void> {\n if (!(await folderExists(sharedDir))) {\n return;\n }\n\n const entries = await fs.readdir(sharedDir, { 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(sharedDir, featureName));\n const providerFile = files.find(\n (f) => f === \"diProvider.ts\" || f === \"diProvider.js\",\n );\n\n if (providerFile) {\n const modulePath = path.join(sharedDir, 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 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\";\nimport { loadShared } from \"./bootstrap/loadShared.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 // 1.1 Load shared modules\n if (options?.sharedDir) {\n await loadShared(container, options.sharedDir);\n }\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,10 +431,43 @@ var start = async (container, options) => {
|
|
|
431
431
|
throw err;
|
|
432
432
|
}
|
|
433
433
|
};
|
|
434
|
+
async function loadShared(c, sharedDir) {
|
|
435
|
+
if (!await folderExists(sharedDir)) {
|
|
436
|
+
return;
|
|
437
|
+
}
|
|
438
|
+
const entries = await fs.readdir(sharedDir, { withFileTypes: true });
|
|
439
|
+
for (const entry of entries) {
|
|
440
|
+
if (entry.isDirectory()) {
|
|
441
|
+
const featureName = entry.name;
|
|
442
|
+
const files = await fs.readdir(path.join(sharedDir, featureName));
|
|
443
|
+
const providerFile = files.find(
|
|
444
|
+
(f) => f === "diProvider.ts" || f === "diProvider.js"
|
|
445
|
+
);
|
|
446
|
+
if (providerFile) {
|
|
447
|
+
const modulePath = path.join(sharedDir, featureName, providerFile);
|
|
448
|
+
const imported = await import(pathToFileURL(modulePath).href);
|
|
449
|
+
const infraProvider = imported.default;
|
|
450
|
+
if (!infraProvider) {
|
|
451
|
+
throw new FeatureLoadError(
|
|
452
|
+
featureName,
|
|
453
|
+
modulePath,
|
|
454
|
+
`Feature "${featureName}" has a Dependency Provider file (${modulePath}) but doesn't have a default export of type (c: Container) => void`
|
|
455
|
+
);
|
|
456
|
+
}
|
|
457
|
+
if (infraProvider && typeof infraProvider === "function") {
|
|
458
|
+
c.load(infraProvider);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
434
464
|
|
|
435
465
|
// src/core/loadOnly.ts
|
|
436
466
|
var loadOnly = async (container, options) => {
|
|
437
467
|
await loadInfra(container);
|
|
468
|
+
if (options?.sharedDir) {
|
|
469
|
+
await loadShared(container, options.sharedDir);
|
|
470
|
+
}
|
|
438
471
|
if (options?.featuresDir) {
|
|
439
472
|
await loadFeatures(container, options.featuresDir);
|
|
440
473
|
}
|
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/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"]}
|
|
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/bootstrap/loadShared.ts","../src/core/loadOnly.ts","../src/core/startOnly.ts","../src/core/logging/SilentLogger.ts"],"names":["_init","MakeInjectable","fs","path","pathToFileURL"],"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 sharedDir?: string | undefined;\n}\n\n/**\n * Backward-compatible alias for StartOptions.\n */\nexport type StartDeps = StartOptions;\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 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 loadShared(\n c: Container,\n sharedDir: string,\n): Promise<void> {\n if (!(await folderExists(sharedDir))) {\n return;\n }\n\n const entries = await fs.readdir(sharedDir, { 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(sharedDir, featureName));\n const providerFile = files.find(\n (f) => f === \"diProvider.ts\" || f === \"diProvider.js\",\n );\n\n if (providerFile) {\n const modulePath = path.join(sharedDir, 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 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\";\nimport { loadShared } from \"./bootstrap/loadShared.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 // 1.1 Load shared modules\n if (options?.sharedDir) {\n await loadShared(container, options.sharedDir);\n }\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/types/public.d.ts
CHANGED
|
@@ -44,6 +44,7 @@ export declare abstract class UseCase<IRequest = any, IResponse = any> {
|
|
|
44
44
|
export interface StartOptions {
|
|
45
45
|
/** Optional directory path containing feature modules with DepsProvider files */
|
|
46
46
|
featuresDir?: string | undefined;
|
|
47
|
+
sharedDir?: string | undefined;
|
|
47
48
|
}
|
|
48
49
|
/**
|
|
49
50
|
* Backward-compatible alias for StartOptions.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/types/public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAEnE;;GAEG;AACH,8BAAsB,gBAAgB;IACpC,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;CAC1D;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,UAAU,CAAC,gBAAgB,CAAC;CAAG;AAE1E;;GAEG;AACH,8BAAsB,OAAO;IAC3B,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;CACtC;AAED;;GAEG;AACH,8BAAsB,aAAa;IACjC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,8BAAsB,OAAO,CAAC,QAAQ,GAAG,GAAG,EAAE,SAAS,GAAG,GAAG;IAC3D,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CACzD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/types/public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAEnE;;GAEG;AACH,8BAAsB,gBAAgB;IACpC,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;CAC1D;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,UAAU,CAAC,gBAAgB,CAAC;CAAG;AAE1E;;GAEG;AACH,8BAAsB,OAAO;IAC3B,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;CACtC;AAED;;GAEG;AACH,8BAAsB,aAAa;IACjC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,8BAAsB,OAAO,CAAC,QAAQ,GAAG,GAAG,EAAE,SAAS,GAAG,GAAG;IAC3D,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CACzD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,YAAY,CAAC"}
|
package/package.json
CHANGED