@solid-stack/agnos 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +153 -0
  3. package/dist/core/Program.d.ts +12 -0
  4. package/dist/core/Program.d.ts.map +1 -0
  5. package/dist/core/bootstrap/index.d.ts +3 -0
  6. package/dist/core/bootstrap/index.d.ts.map +1 -0
  7. package/dist/core/bootstrap/loadFeatures.d.ts +3 -0
  8. package/dist/core/bootstrap/loadFeatures.d.ts.map +1 -0
  9. package/dist/core/bootstrap/loadInfra.d.ts +3 -0
  10. package/dist/core/bootstrap/loadInfra.d.ts.map +1 -0
  11. package/dist/core/errors/AgnosError.d.ts +36 -0
  12. package/dist/core/errors/AgnosError.d.ts.map +1 -0
  13. package/dist/core/errors/AppError.d.ts +8 -0
  14. package/dist/core/errors/AppError.d.ts.map +1 -0
  15. package/dist/core/errors/BootstrapError.d.ts +8 -0
  16. package/dist/core/errors/BootstrapError.d.ts.map +1 -0
  17. package/dist/core/errors/FeatureLoadError.d.ts +18 -0
  18. package/dist/core/errors/FeatureLoadError.d.ts.map +1 -0
  19. package/dist/core/errors/InputParsingError.d.ts +24 -0
  20. package/dist/core/errors/InputParsingError.d.ts.map +1 -0
  21. package/dist/core/errors/InternalError.d.ts +9 -0
  22. package/dist/core/errors/InternalError.d.ts.map +1 -0
  23. package/dist/core/errors/InvalidDependencyError.d.ts +16 -0
  24. package/dist/core/errors/InvalidDependencyError.d.ts.map +1 -0
  25. package/dist/core/errors/MissingDependencyError.d.ts +16 -0
  26. package/dist/core/errors/MissingDependencyError.d.ts.map +1 -0
  27. package/dist/core/errors/NotFoundError.d.ts +18 -0
  28. package/dist/core/errors/NotFoundError.d.ts.map +1 -0
  29. package/dist/core/errors/PresentationError.d.ts +11 -0
  30. package/dist/core/errors/PresentationError.d.ts.map +1 -0
  31. package/dist/core/errors/ResourceConflictError.d.ts +18 -0
  32. package/dist/core/errors/ResourceConflictError.d.ts.map +1 -0
  33. package/dist/core/errors/index.d.ts +12 -0
  34. package/dist/core/errors/index.d.ts.map +1 -0
  35. package/dist/core/index.d.ts +4 -0
  36. package/dist/core/index.d.ts.map +1 -0
  37. package/dist/core/logging/Logger.d.ts +16 -0
  38. package/dist/core/logging/Logger.d.ts.map +1 -0
  39. package/dist/core/logging/SilentLogger.d.ts +13 -0
  40. package/dist/core/logging/SilentLogger.d.ts.map +1 -0
  41. package/dist/core/logging/index.d.ts +3 -0
  42. package/dist/core/logging/index.d.ts.map +1 -0
  43. package/dist/core/start.d.ts +15 -0
  44. package/dist/core/start.d.ts.map +1 -0
  45. package/dist/index.cjs +482 -0
  46. package/dist/index.cjs.map +1 -0
  47. package/dist/index.d.ts +8 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +459 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/types/index.d.ts +2 -0
  52. package/dist/types/index.d.ts.map +1 -0
  53. package/dist/types/public.d.ts +52 -0
  54. package/dist/types/public.d.ts.map +1 -0
  55. package/dist/utils/folderExists.d.ts +2 -0
  56. package/dist/utils/folderExists.d.ts.map +1 -0
  57. package/dist/utils/index.d.ts +2 -0
  58. package/dist/utils/index.d.ts.map +1 -0
  59. package/package.json +71 -0
package/dist/index.js ADDED
@@ -0,0 +1,459 @@
1
+ import { MultiToken, MakeInjectable } from '@solid-stack/di';
2
+ import fs, { stat } from 'fs/promises';
3
+ import path from 'path';
4
+ import { pathToFileURL } from 'url';
5
+
6
+ var __create = Object.create;
7
+ var __defProp = Object.defineProperty;
8
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
10
+ var __typeError = (msg) => {
11
+ throw TypeError(msg);
12
+ };
13
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
14
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
15
+ var __decoratorStart = (base) => [, , , __create(null)];
16
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
17
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
18
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
19
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
20
+ var __runInitializers = (array, flags, self, value) => {
21
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self) ;
22
+ return value;
23
+ };
24
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
25
+ var it, done, ctx, k = flags & 7, p = false;
26
+ var j = 0;
27
+ var extraInitializers = array[j] || (array[j] = []);
28
+ var desc = k && ((target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(target , name));
29
+ __name(target, name);
30
+ for (var i = decorators.length - 1; i >= 0; i--) {
31
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
32
+ it = (0, decorators[i])(target, ctx), done._ = 1;
33
+ __expectFn(it) && (target = it);
34
+ }
35
+ return __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
36
+ };
37
+ var ILoggerTransport = class {
38
+ };
39
+ var LoggerTransportsToken = class extends MultiToken {
40
+ };
41
+ var ILogger = class {
42
+ };
43
+ var IPresentation = class {
44
+ };
45
+ var UseCase = class {
46
+ };
47
+ var _Logger_decorators, _init;
48
+ _Logger_decorators = [MakeInjectable];
49
+ var Logger = class {
50
+ constructor(deps) {
51
+ this.deps = deps;
52
+ }
53
+ deps;
54
+ static deps = {
55
+ transports: LoggerTransportsToken
56
+ };
57
+ broadcast(level, args) {
58
+ for (const transport of this.deps.transports) {
59
+ try {
60
+ transport.push(args, level);
61
+ } catch (err) {
62
+ console.error(
63
+ "[Logger Transport Error]: Failed to dispatch log entry",
64
+ err
65
+ );
66
+ }
67
+ }
68
+ }
69
+ log(...args) {
70
+ this.broadcast("log", args);
71
+ }
72
+ info(...args) {
73
+ this.broadcast("info", args);
74
+ }
75
+ warn(...args) {
76
+ this.broadcast("warn", args);
77
+ }
78
+ error(...args) {
79
+ this.broadcast("error", args);
80
+ }
81
+ debug(...args) {
82
+ this.broadcast("debug", args);
83
+ }
84
+ };
85
+ _init = __decoratorStart();
86
+ Logger = __decorateElement(_init, 0, "Logger", _Logger_decorators, Logger);
87
+ __runInitializers(_init, 1, Logger);
88
+
89
+ // src/core/bootstrap/loadInfra.ts
90
+ var loadInfra = async (c) => {
91
+ c.provide(ILogger, Logger);
92
+ };
93
+
94
+ // src/core/errors/AgnosError.ts
95
+ var AgnosError = class _AgnosError extends Error {
96
+ details;
97
+ code;
98
+ statusCode;
99
+ context;
100
+ constructor(name = "AgnosError", details = "An Agnos framework error occurred.", options) {
101
+ const resolvedDetails = details || "An Agnos framework error occurred.";
102
+ super(resolvedDetails, { cause: options?.cause });
103
+ this.name = name;
104
+ this.details = resolvedDetails;
105
+ this.code = options?.code || "AGNOS_ERROR";
106
+ this.statusCode = options?.statusCode ?? 500;
107
+ this.context = options?.context;
108
+ Object.setPrototypeOf(this, new.target.prototype);
109
+ }
110
+ /**
111
+ * Formats the error into a human-readable diagnostic string with code, context, cause, and stack trace.
112
+ */
113
+ prettyDetails() {
114
+ const contextStr = this.context ? `
115
+ Context: ${JSON.stringify(this.context, null, 2)}` : "";
116
+ const causeStr = this.cause ? `
117
+ Caused by: ${this.cause instanceof Error ? this.cause.stack || this.cause.message : String(this.cause)}` : "";
118
+ return `[${this.code}] ${this.name} (${this.statusCode}): ${this.details}${contextStr}${causeStr}
119
+ Stack Trace: ${this.stack}`;
120
+ }
121
+ /**
122
+ * Serializes the error to a JSON-safe object.
123
+ */
124
+ toJSON() {
125
+ return {
126
+ name: this.name,
127
+ code: this.code,
128
+ statusCode: this.statusCode,
129
+ message: this.message,
130
+ details: this.details,
131
+ context: this.context
132
+ };
133
+ }
134
+ /**
135
+ * Type guard to verify if an unknown error is an instance of AgnosError.
136
+ */
137
+ static isAgnosError(error) {
138
+ return error instanceof _AgnosError;
139
+ }
140
+ };
141
+
142
+ // src/core/errors/AppError.ts
143
+ var AppError = class extends AgnosError {
144
+ constructor(name = "Internal Server Error", details = "An Internal Server Error occured.", options) {
145
+ super(name, details, {
146
+ code: options?.code || "AGNOS_APP_ERROR",
147
+ statusCode: options?.statusCode ?? 500,
148
+ ...options
149
+ });
150
+ }
151
+ };
152
+
153
+ // src/core/errors/BootstrapError.ts
154
+ var BootstrapError = class extends AgnosError {
155
+ constructor(details, options) {
156
+ super("BootstrapError", details, {
157
+ code: options?.code || "AGNOS_BOOTSTRAP_ERROR",
158
+ statusCode: options?.statusCode ?? 500,
159
+ ...options
160
+ });
161
+ }
162
+ };
163
+
164
+ // src/core/errors/FeatureLoadError.ts
165
+ var FeatureLoadError = class extends BootstrapError {
166
+ featureName;
167
+ providerPath;
168
+ constructor(featureName, providerPath, details, options) {
169
+ const resolvedDetails = details || `Failed to load feature "${featureName}" from provider path "${providerPath || "unknown"}".`;
170
+ const context = {
171
+ featureName,
172
+ ...providerPath ? { providerPath } : {},
173
+ ...options?.context
174
+ };
175
+ super(resolvedDetails, {
176
+ code: options?.code || "AGNOS_FEATURE_LOAD_ERROR",
177
+ statusCode: options?.statusCode ?? 500,
178
+ context,
179
+ cause: options?.cause
180
+ });
181
+ this.name = "FeatureLoadError";
182
+ this.featureName = featureName;
183
+ this.providerPath = providerPath;
184
+ }
185
+ };
186
+
187
+ // src/core/errors/PresentationError.ts
188
+ var PresentationError = class extends AgnosError {
189
+ phase;
190
+ constructor(details, options) {
191
+ const context = {
192
+ ...options?.phase ? { phase: options.phase } : {},
193
+ ...options?.context
194
+ };
195
+ super("PresentationError", details, {
196
+ code: options?.code || "AGNOS_PRESENTATION_ERROR",
197
+ statusCode: options?.statusCode ?? 500,
198
+ context: Object.keys(context).length > 0 ? context : void 0,
199
+ cause: options?.cause
200
+ });
201
+ this.phase = options?.phase;
202
+ }
203
+ };
204
+
205
+ // src/core/errors/InputParsingError.ts
206
+ var InputParsingError = class extends AppError {
207
+ issues;
208
+ constructor(details, options) {
209
+ const context = {
210
+ ...options?.issues ? { issues: options.issues } : {},
211
+ ...options?.context
212
+ };
213
+ super("InputParsingError", details, {
214
+ code: options?.code || "AGNOS_INPUT_PARSING_ERROR",
215
+ statusCode: options?.statusCode ?? 400,
216
+ context: Object.keys(context).length > 0 ? context : void 0,
217
+ cause: options?.cause
218
+ });
219
+ this.issues = options?.issues;
220
+ }
221
+ };
222
+
223
+ // src/core/errors/InternalError.ts
224
+ var InternalError = class extends AppError {
225
+ constructor(details = "An Internal Server Error occured.", options) {
226
+ super("InternalError", details, {
227
+ code: options?.code || "AGNOS_INTERNAL_ERROR",
228
+ statusCode: options?.statusCode ?? 500,
229
+ ...options
230
+ });
231
+ }
232
+ };
233
+
234
+ // src/core/errors/InvalidDependencyError.ts
235
+ var InvalidDependencyError = class extends AppError {
236
+ dependencyName;
237
+ constructor(details, optionsOrCause) {
238
+ const isOptionsObject = optionsOrCause !== null && typeof optionsOrCause === "object" && ("cause" in optionsOrCause || "code" in optionsOrCause || "context" in optionsOrCause || "dependencyName" in optionsOrCause);
239
+ const options = isOptionsObject ? optionsOrCause : { cause: optionsOrCause };
240
+ const context = {
241
+ ...options.dependencyName ? { dependencyName: options.dependencyName } : {},
242
+ ...options.context
243
+ };
244
+ super("InvalidDependencyError", details, {
245
+ code: options.code || "AGNOS_INVALID_DEPENDENCY_ERROR",
246
+ statusCode: options.statusCode ?? 500,
247
+ context: Object.keys(context).length > 0 ? context : void 0,
248
+ cause: options.cause
249
+ });
250
+ this.dependencyName = options.dependencyName;
251
+ }
252
+ };
253
+
254
+ // src/core/errors/MissingDependencyError.ts
255
+ var MissingDependencyError = class extends AppError {
256
+ dependencyName;
257
+ constructor(details, optionsOrCause) {
258
+ const isOptionsObject = optionsOrCause !== null && typeof optionsOrCause === "object" && ("cause" in optionsOrCause || "code" in optionsOrCause || "context" in optionsOrCause || "dependencyName" in optionsOrCause);
259
+ const options = isOptionsObject ? optionsOrCause : { cause: optionsOrCause };
260
+ const context = {
261
+ ...options.dependencyName ? { dependencyName: options.dependencyName } : {},
262
+ ...options.context
263
+ };
264
+ super("MissingDependencyError", details, {
265
+ code: options.code || "AGNOS_MISSING_DEPENDENCY_ERROR",
266
+ statusCode: options.statusCode ?? 500,
267
+ context: Object.keys(context).length > 0 ? context : void 0,
268
+ cause: options.cause
269
+ });
270
+ this.dependencyName = options.dependencyName;
271
+ }
272
+ };
273
+
274
+ // src/core/errors/NotFoundError.ts
275
+ var NotFoundError = class extends AppError {
276
+ resource;
277
+ resourceId;
278
+ constructor(details, options) {
279
+ const context = {
280
+ ...options?.resource ? { resource: options.resource } : {},
281
+ ...options?.resourceId !== void 0 ? { resourceId: options.resourceId } : {},
282
+ ...options?.context
283
+ };
284
+ super("NotFoundError", details, {
285
+ code: options?.code || "AGNOS_NOT_FOUND_ERROR",
286
+ statusCode: options?.statusCode ?? 404,
287
+ context: Object.keys(context).length > 0 ? context : void 0,
288
+ cause: options?.cause
289
+ });
290
+ this.resource = options?.resource;
291
+ this.resourceId = options?.resourceId;
292
+ }
293
+ };
294
+
295
+ // src/core/errors/ResourceConflictError.ts
296
+ var ResourceConflictError = class extends AppError {
297
+ conflictKey;
298
+ conflictingValue;
299
+ constructor(message, optionsOrCause) {
300
+ const isOptionsObject = optionsOrCause !== null && typeof optionsOrCause === "object" && ("cause" in optionsOrCause || "code" in optionsOrCause || "context" in optionsOrCause || "conflictKey" in optionsOrCause);
301
+ const options = isOptionsObject ? optionsOrCause : { cause: optionsOrCause };
302
+ const context = {
303
+ ...options.conflictKey ? { conflictKey: options.conflictKey } : {},
304
+ ...options.conflictingValue !== void 0 ? { conflictingValue: options.conflictingValue } : {},
305
+ ...options.context
306
+ };
307
+ super("ResourceConflictError", message, {
308
+ code: options.code || "AGNOS_RESOURCE_CONFLICT_ERROR",
309
+ statusCode: options.statusCode ?? 409,
310
+ context: Object.keys(context).length > 0 ? context : void 0,
311
+ cause: options.cause
312
+ });
313
+ this.conflictKey = options.conflictKey;
314
+ this.conflictingValue = options.conflictingValue;
315
+ }
316
+ };
317
+ async function folderExists(dir) {
318
+ try {
319
+ const stats = await stat(dir);
320
+ return stats.isDirectory();
321
+ } catch (error) {
322
+ if (error.code === "ENOENT") {
323
+ return false;
324
+ }
325
+ throw error;
326
+ }
327
+ }
328
+
329
+ // src/core/bootstrap/loadFeatures.ts
330
+ async function loadFeatures(c, featuresDir) {
331
+ if (!await folderExists(featuresDir)) {
332
+ return;
333
+ }
334
+ const entries = await fs.readdir(featuresDir, { withFileTypes: true });
335
+ for (const entry of entries) {
336
+ if (entry.isDirectory()) {
337
+ const featureName = entry.name;
338
+ const files = await fs.readdir(path.join(featuresDir, featureName));
339
+ const providerFile = files.find(
340
+ (f) => f === "DepsProvider.ts" || f === "DepsProvider.js"
341
+ );
342
+ if (providerFile) {
343
+ const modulePath = path.join(featuresDir, featureName, providerFile);
344
+ const imported = await import(pathToFileURL(modulePath).href);
345
+ const infraProvider = imported.default;
346
+ if (!infraProvider) {
347
+ throw new FeatureLoadError(
348
+ featureName,
349
+ modulePath,
350
+ `Feature "${featureName}" has a Dependency Provider file (${modulePath}) but doesn't have a default export of type (c: Container) => void`
351
+ );
352
+ }
353
+ if (infraProvider && typeof infraProvider === "function") {
354
+ c.load(infraProvider);
355
+ }
356
+ }
357
+ }
358
+ }
359
+ }
360
+ var _Program_decorators, _init2;
361
+ _Program_decorators = [MakeInjectable];
362
+ var Program = class {
363
+ constructor(deps) {
364
+ this.deps = deps;
365
+ }
366
+ deps;
367
+ static deps = {
368
+ presentation: IPresentation,
369
+ logger: ILogger
370
+ };
371
+ async start() {
372
+ try {
373
+ const presentation = this.deps.presentation;
374
+ const logger = this.deps.logger;
375
+ await presentation.init();
376
+ await presentation.run();
377
+ let isShuttingDown = false;
378
+ const handleOnStop = async (error) => {
379
+ if (isShuttingDown) return;
380
+ isShuttingDown = true;
381
+ if (error) {
382
+ logger.error(
383
+ "Fatal Error: Shutting down due to unhandled exception...",
384
+ error
385
+ );
386
+ } else {
387
+ logger.info("Terminating process gracefully...");
388
+ }
389
+ try {
390
+ await presentation.stop();
391
+ } catch (shutdownError) {
392
+ logger.error(
393
+ "Error occurred while stopping the presentation layer:",
394
+ shutdownError
395
+ );
396
+ } finally {
397
+ process.exit(error ? 1 : 0);
398
+ }
399
+ };
400
+ process.on("SIGTERM", () => handleOnStop());
401
+ process.on("SIGINT", () => handleOnStop());
402
+ process.on("uncaughtException", (error) => handleOnStop(error));
403
+ process.on("unhandledRejection", (reason) => handleOnStop(reason));
404
+ } catch (err) {
405
+ this.deps.logger.error(
406
+ "An Uncaught/Unknown error has been encountered while Starting/Running the Application",
407
+ err
408
+ );
409
+ }
410
+ }
411
+ };
412
+ _init2 = __decoratorStart();
413
+ Program = __decorateElement(_init2, 0, "Program", _Program_decorators, Program);
414
+ __runInitializers(_init2, 1, Program);
415
+
416
+ // src/core/start.ts
417
+ var start = async (container, options) => {
418
+ await loadInfra(container);
419
+ if (options?.featuresDir) {
420
+ await loadFeatures(container, options.featuresDir);
421
+ }
422
+ const program = container.resolve(Program);
423
+ const logger = container.resolve(ILogger);
424
+ try {
425
+ await program.start();
426
+ } catch (err) {
427
+ logger.error(
428
+ "An unhandled error occurred while starting the presentation layer:",
429
+ err
430
+ );
431
+ throw err;
432
+ }
433
+ };
434
+ var _SilentLogger_decorators, _init3;
435
+ _SilentLogger_decorators = [MakeInjectable];
436
+ var SilentLogger = class {
437
+ constructor(deps) {
438
+ this.deps = deps;
439
+ }
440
+ deps;
441
+ static deps = {};
442
+ log(..._args) {
443
+ }
444
+ info(..._args) {
445
+ }
446
+ warn(..._args) {
447
+ }
448
+ error(..._args) {
449
+ }
450
+ debug(..._args) {
451
+ }
452
+ };
453
+ _init3 = __decoratorStart();
454
+ SilentLogger = __decorateElement(_init3, 0, "SilentLogger", _SilentLogger_decorators, SilentLogger);
455
+ __runInitializers(_init3, 1, SilentLogger);
456
+
457
+ export { AgnosError, AppError, BootstrapError, FeatureLoadError, ILogger, ILoggerTransport, IPresentation, InputParsingError, InternalError, InvalidDependencyError, LoggerTransportsToken, MissingDependencyError, NotFoundError, PresentationError, ResourceConflictError, SilentLogger, UseCase, start };
458
+ //# sourceMappingURL=index.js.map
459
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types/public.ts","../src/core/logging/Logger.ts","../src/core/bootstrap/loadInfra.ts","../src/core/errors/AgnosError.ts","../src/core/errors/AppError.ts","../src/core/errors/BootstrapError.ts","../src/core/errors/FeatureLoadError.ts","../src/core/errors/PresentationError.ts","../src/core/errors/InputParsingError.ts","../src/core/errors/InternalError.ts","../src/core/errors/InvalidDependencyError.ts","../src/core/errors/MissingDependencyError.ts","../src/core/errors/NotFoundError.ts","../src/core/errors/ResourceConflictError.ts","../src/utils/folderExists.ts","../src/core/bootstrap/loadFeatures.ts","../src/core/Program.ts","../src/core/start.ts","../src/core/logging/SilentLogger.ts"],"names":["_init","MakeInjectable"],"mappings":"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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 { 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"]}
@@ -0,0 +1,2 @@
1
+ export * from "./public.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { MultiToken } from "@solid-stack/di";
2
+ /**
3
+ * Supported log levels for logger transports.
4
+ */
5
+ export type LogLevel = "debug" | "info" | "warn" | "error" | "log";
6
+ /**
7
+ * Abstract logger transport contract.
8
+ */
9
+ export declare abstract class ILoggerTransport {
10
+ abstract push: (message: any[], level: LogLevel) => void;
11
+ }
12
+ /**
13
+ * MultiToken for registering and resolving logger transports.
14
+ */
15
+ export declare class LoggerTransportsToken extends MultiToken<ILoggerTransport> {
16
+ }
17
+ /**
18
+ * Abstract logger interface for application logging.
19
+ */
20
+ export declare abstract class ILogger {
21
+ abstract log(...args: any[]): void;
22
+ abstract info(...args: any[]): void;
23
+ abstract warn(...args: any[]): void;
24
+ abstract error(...args: any[]): void;
25
+ abstract debug(...args: any[]): void;
26
+ }
27
+ /**
28
+ * Abstract presentation layer contract.
29
+ */
30
+ export declare abstract class IPresentation {
31
+ abstract init(): Promise<void>;
32
+ abstract run(): Promise<void>;
33
+ abstract stop(): Promise<void>;
34
+ }
35
+ /**
36
+ * Abstract use case contract for application business logic.
37
+ */
38
+ export declare abstract class UseCase<IRequest = any, IResponse = any> {
39
+ abstract execute(request: IRequest): Promise<IResponse>;
40
+ }
41
+ /**
42
+ * Options for bootstrapping and starting the application via start().
43
+ */
44
+ export interface StartOptions {
45
+ /** Optional directory path containing feature modules with DepsProvider files */
46
+ featuresDir?: string | undefined;
47
+ }
48
+ /**
49
+ * Backward-compatible alias for StartOptions.
50
+ */
51
+ export type StartDeps = StartOptions;
52
+ //# sourceMappingURL=public.d.ts.map
@@ -0,0 +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;CAClC;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function folderExists(dir: string): Promise<boolean>;
2
+ //# sourceMappingURL=folderExists.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folderExists.d.ts","sourceRoot":"","sources":["../../src/utils/folderExists.ts"],"names":[],"mappings":"AAEA,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAYhE"}
@@ -0,0 +1,2 @@
1
+ export { folderExists } from "./folderExists.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}