@devbro/pashmak 0.1.27 → 0.1.29

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 (30) hide show
  1. package/dist/app/console/generate/GenerateApiDocsCommand.d.mts +9 -0
  2. package/dist/app/console/generate/GenerateApiDocsCommand.mjs +117 -0
  3. package/dist/app/console/generate/GenerateApiDocsCommand.mjs.map +1 -0
  4. package/dist/app/console/generate/index.d.mts +1 -0
  5. package/dist/app/console/generate/index.mjs +1 -0
  6. package/dist/app/console/generate/index.mjs.map +1 -1
  7. package/dist/app/console/index.d.mts +1 -0
  8. package/dist/bin/app/console/DefaultCommand.cjs +11 -8
  9. package/dist/bin/app/console/KeyGenerateCommand.cjs +11 -8
  10. package/dist/bin/app/console/StartCommand.cjs +15 -12
  11. package/dist/bin/app/console/generate/GenerateApiDocsCommand.cjs +871 -0
  12. package/dist/bin/app/console/generate/GenerateControllerCommand.cjs +13 -10
  13. package/dist/bin/app/console/generate/index.cjs +141 -24
  14. package/dist/bin/app/console/index.cjs +186 -69
  15. package/dist/bin/app/console/migrate/GenerateMigrateCommand.cjs +14 -11
  16. package/dist/bin/app/console/migrate/MigrateCommand.cjs +14 -11
  17. package/dist/bin/app/console/migrate/MigrateRollbackCommand.cjs +13 -10
  18. package/dist/bin/app/console/migrate/index.cjs +19 -16
  19. package/dist/bin/app/console/queue/GenerateQueueMigrateCommand.cjs +14 -11
  20. package/dist/bin/cache.cjs +11 -8
  21. package/dist/bin/facades.cjs +11 -8
  22. package/dist/bin/factories.cjs +11 -8
  23. package/dist/bin/index.cjs +207 -85
  24. package/dist/bin/middlewares.cjs +11 -8
  25. package/dist/bin/queue.cjs +11 -8
  26. package/dist/bin/router.cjs +33 -0
  27. package/dist/router.d.mts +4 -2
  28. package/dist/router.mjs +32 -0
  29. package/dist/router.mjs.map +1 -1
  30. package/package.json +1 -1
@@ -0,0 +1,9 @@
1
+ import { Command } from 'clipanion';
2
+
3
+ declare class GenerateApiDocsCommand extends Command {
4
+ static paths: string[][];
5
+ execute(): Promise<void>;
6
+ private extractParameters;
7
+ }
8
+
9
+ export { GenerateApiDocsCommand };
@@ -0,0 +1,117 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { cli, router } from "../../../facades.mjs";
4
+ import { Command } from "clipanion";
5
+ import path from "path";
6
+ import * as fs from "fs/promises";
7
+ class GenerateApiDocsCommand extends Command {
8
+ static {
9
+ __name(this, "GenerateApiDocsCommand");
10
+ }
11
+ static paths = [
12
+ [`make`, `apidocs`],
13
+ [`generate`, `apidocs`]
14
+ ];
15
+ async execute() {
16
+ const rootDir = process.cwd();
17
+ this.context.stdout.write(`Generating OpenAPI documentation...
18
+ `);
19
+ const routes = router().routes;
20
+ const openApiSpec = {
21
+ openapi: "3.0.0",
22
+ info: {
23
+ title: "API Documentation",
24
+ version: "1.0.0",
25
+ description: "Auto-generated API documentation"
26
+ },
27
+ servers: [
28
+ {
29
+ url: "/",
30
+ description: "Local server"
31
+ }
32
+ ],
33
+ paths: {}
34
+ };
35
+ for (const route of routes) {
36
+ const routePath = route.path;
37
+ const openApiPath = routePath.replace(/:([a-zA-Z0-9_]+)/g, "{$1}");
38
+ if (!openApiSpec.paths[openApiPath]) {
39
+ openApiSpec.paths[openApiPath] = {};
40
+ }
41
+ for (const method of route.methods) {
42
+ const lowerMethod = method.toLowerCase();
43
+ if (lowerMethod === "head") {
44
+ continue;
45
+ }
46
+ openApiSpec.paths[openApiPath][lowerMethod] = {
47
+ summary: `${method} ${routePath}`,
48
+ description: `Endpoint for ${method} ${routePath}`,
49
+ parameters: this.extractParameters(routePath),
50
+ responses: {
51
+ "200": {
52
+ description: "Successful response",
53
+ content: {
54
+ "application/json": {
55
+ schema: {
56
+ type: "object"
57
+ }
58
+ }
59
+ }
60
+ },
61
+ "500": {
62
+ description: "Internal server error"
63
+ }
64
+ }
65
+ };
66
+ if (["post", "put", "patch"].includes(lowerMethod)) {
67
+ openApiSpec.paths[openApiPath][lowerMethod].requestBody = {
68
+ required: true,
69
+ content: {
70
+ "application/json": {
71
+ schema: {
72
+ type: "object"
73
+ }
74
+ }
75
+ }
76
+ };
77
+ }
78
+ }
79
+ }
80
+ const publicDir = path.join(rootDir, "public");
81
+ await fs.mkdir(publicDir, { recursive: true });
82
+ const outputPath = path.join(publicDir, "openapi.json");
83
+ await fs.writeFile(
84
+ outputPath,
85
+ JSON.stringify(openApiSpec, null, 2),
86
+ "utf-8"
87
+ );
88
+ this.context.stdout.write(
89
+ `OpenAPI documentation generated at: ${outputPath}
90
+ `
91
+ );
92
+ this.context.stdout.write(`Total routes documented: ${routes.length}
93
+ `);
94
+ }
95
+ extractParameters(routePath) {
96
+ const paramRegex = /:([a-zA-Z0-9_]+)/g;
97
+ const parameters = [];
98
+ let match;
99
+ while ((match = paramRegex.exec(routePath)) !== null) {
100
+ parameters.push({
101
+ name: match[1],
102
+ in: "path",
103
+ required: true,
104
+ schema: {
105
+ type: "string"
106
+ },
107
+ description: `Path parameter ${match[1]}`
108
+ });
109
+ }
110
+ return parameters;
111
+ }
112
+ }
113
+ cli().register(GenerateApiDocsCommand);
114
+ export {
115
+ GenerateApiDocsCommand
116
+ };
117
+ //# sourceMappingURL=GenerateApiDocsCommand.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/app/console/generate/GenerateApiDocsCommand.mts"],"sourcesContent":["import { cli, router } from \"../../../facades.mjs\";\nimport { Command } from \"clipanion\";\nimport path from \"path\";\nimport * as fs from \"fs/promises\";\n\nexport class GenerateApiDocsCommand extends Command {\n static paths = [\n [`make`, `apidocs`],\n [`generate`, `apidocs`],\n ];\n\n async execute() {\n const rootDir = process.cwd();\n\n this.context.stdout.write(`Generating OpenAPI documentation...\\n`);\n\n // Get all routes from the router\n const routes = router().routes;\n\n // Generate OpenAPI 3.0 specification\n const openApiSpec = {\n openapi: \"3.0.0\",\n info: {\n title: \"API Documentation\",\n version: \"1.0.0\",\n description: \"Auto-generated API documentation\",\n },\n servers: [\n {\n url: \"/\",\n description: \"Local server\",\n },\n ],\n paths: {} as Record<string, any>,\n };\n\n // Process each route\n for (const route of routes) {\n const routePath = route.path;\n // Convert route path to OpenAPI format (e.g., /api/:id -> /api/{id})\n const openApiPath = routePath.replace(/:([a-zA-Z0-9_]+)/g, \"{$1}\");\n\n if (!openApiSpec.paths[openApiPath]) {\n openApiSpec.paths[openApiPath] = {};\n }\n\n // Add each HTTP method for this route\n for (const method of route.methods) {\n const lowerMethod = method.toLowerCase();\n\n // Skip HEAD as it's usually auto-generated\n if (lowerMethod === \"head\") {\n continue;\n }\n\n openApiSpec.paths[openApiPath][lowerMethod] = {\n summary: `${method} ${routePath}`,\n description: `Endpoint for ${method} ${routePath}`,\n parameters: this.extractParameters(routePath),\n responses: {\n \"200\": {\n description: \"Successful response\",\n content: {\n \"application/json\": {\n schema: {\n type: \"object\",\n },\n },\n },\n },\n \"500\": {\n description: \"Internal server error\",\n },\n },\n };\n\n // Add request body for POST, PUT, PATCH\n if ([\"post\", \"put\", \"patch\"].includes(lowerMethod)) {\n openApiSpec.paths[openApiPath][lowerMethod].requestBody = {\n required: true,\n content: {\n \"application/json\": {\n schema: {\n type: \"object\",\n },\n },\n },\n };\n }\n }\n }\n\n // Ensure public directory exists\n const publicDir = path.join(rootDir, \"public\");\n await fs.mkdir(publicDir, { recursive: true });\n\n // Write the OpenAPI spec to public/openapi.json\n const outputPath = path.join(publicDir, \"openapi.json\");\n await fs.writeFile(\n outputPath,\n JSON.stringify(openApiSpec, null, 2),\n \"utf-8\",\n );\n\n this.context.stdout.write(\n `OpenAPI documentation generated at: ${outputPath}\\n`,\n );\n this.context.stdout.write(`Total routes documented: ${routes.length}\\n`);\n }\n\n private extractParameters(routePath: string): any[] {\n const paramRegex = /:([a-zA-Z0-9_]+)/g;\n const parameters: any[] = [];\n let match;\n\n while ((match = paramRegex.exec(routePath)) !== null) {\n parameters.push({\n name: match[1],\n in: \"path\",\n required: true,\n schema: {\n type: \"string\",\n },\n description: `Path parameter ${match[1]}`,\n });\n }\n\n return parameters;\n }\n}\n\ncli().register(GenerateApiDocsCommand);\n"],"mappings":"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","names":[]}
@@ -1,2 +1,3 @@
1
1
  export { GenerateControllerCommand } from './GenerateControllerCommand.mjs';
2
+ export { GenerateApiDocsCommand } from './GenerateApiDocsCommand.mjs';
2
3
  import 'clipanion';
@@ -1,2 +1,3 @@
1
1
  export * from "./GenerateControllerCommand.mjs";
2
+ export * from "./GenerateApiDocsCommand.mjs";
2
3
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/app/console/generate/index.mts"],"sourcesContent":["export * from \"./GenerateControllerCommand.mjs\";\n"],"mappings":"AAAA,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../../../src/app/console/generate/index.mts"],"sourcesContent":["export * from \"./GenerateControllerCommand.mjs\";\nexport * from \"./GenerateApiDocsCommand.mjs\";\n"],"mappings":"AAAA,cAAc;AACd,cAAc;","names":[]}
@@ -5,6 +5,7 @@ export { StartCommand } from './StartCommand.mjs';
5
5
  export { DefaultCommand } from './DefaultCommand.mjs';
6
6
  export { KeyGenerateCommand } from './KeyGenerateCommand.mjs';
7
7
  export { GenerateControllerCommand } from './generate/GenerateControllerCommand.mjs';
8
+ export { GenerateApiDocsCommand } from './generate/GenerateApiDocsCommand.mjs';
8
9
  export { CreateProjectCommand } from './project/CreateProjectCommand.mjs';
9
10
  export { GenerateQueueMigrateCommand } from './queue/GenerateQueueMigrateCommand.mjs';
10
11
  import 'clipanion';
@@ -456,13 +456,16 @@ var Router = class {
456
456
  }
457
457
  };
458
458
 
459
+ // src/router.mts
460
+ var import_neko_config = require("@devbro/neko-config");
461
+
459
462
  // src/facades.mts
460
463
  var import_neko_scheduler = require("@devbro/neko-scheduler");
461
464
  var import_neko_helper2 = require("@devbro/neko-helper");
462
465
  var import_neko_context3 = require("@devbro/neko-context");
463
466
  var import_neko_storage2 = require("@devbro/neko-storage");
464
467
  var import_neko_mailer2 = require("@devbro/neko-mailer");
465
- var import_neko_config = require("@devbro/neko-config");
468
+ var import_neko_config2 = require("@devbro/neko-config");
466
469
  var import_clipanion = require("clipanion");
467
470
 
468
471
  // src/http.mts
@@ -542,8 +545,8 @@ var DatabaseTransport = class {
542
545
  }
543
546
  });
544
547
  }, "processMessage");
545
- constructor(config2 = {}) {
546
- this.config = { ...this.config, ...config2 };
548
+ constructor(config3 = {}) {
549
+ this.config = { ...this.config, ...config3 };
547
550
  this.repeater = (0, import_neko_helper.createRepeater)(
548
551
  this.processMessage,
549
552
  this.config.listen_interval * 1e3
@@ -660,7 +663,7 @@ var scheduler = (0, import_neko_helper2.createSingleton)(() => {
660
663
  });
661
664
  var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context3.ctx)().getOrThrow(["database", label]), "db");
662
665
  var storage = (0, import_neko_helper2.createSingleton)((label = "default") => {
663
- let storage_config = import_neko_config.config.get(["storages", label].join("."));
666
+ let storage_config = import_neko_config2.config.get(["storages", label].join("."));
664
667
  const provider = import_neko_storage2.StorageProviderFactory.create(
665
668
  storage_config.provider,
666
669
  storage_config.config
@@ -711,7 +714,7 @@ var httpServer = (0, import_neko_helper2.createSingleton)(() => {
711
714
  return server;
712
715
  });
713
716
  var logger = (0, import_neko_helper2.createSingleton)((label) => {
714
- const logger_config = import_neko_config.config.get(["loggers", label].join("."));
717
+ const logger_config = import_neko_config2.config.get(["loggers", label].join("."));
715
718
  const rc = new import_neko_logger.Logger(logger_config);
716
719
  rc.setExtrasFunction((message) => {
717
720
  message.requestId = (0, import_neko_context3.ctxSafe)()?.get("requestId") || "N/A";
@@ -720,7 +723,7 @@ var logger = (0, import_neko_helper2.createSingleton)((label) => {
720
723
  return rc;
721
724
  });
722
725
  var mailer = (0, import_neko_helper2.createSingleton)((label) => {
723
- const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
726
+ const mailer_config = import_neko_config2.config.get(["mailer", label].join("."));
724
727
  const provider = import_neko_mailer2.MailerProviderFactory.create(
725
728
  mailer_config.provider,
726
729
  mailer_config.config
@@ -729,7 +732,7 @@ var mailer = (0, import_neko_helper2.createSingleton)((label) => {
729
732
  return rc;
730
733
  });
731
734
  var queue = (0, import_neko_helper2.createSingleton)((label) => {
732
- const queue_config = import_neko_config.config.get(["queues", label].join("."));
735
+ const queue_config = import_neko_config2.config.get(["queues", label].join("."));
733
736
  if (!queue_config) {
734
737
  throw new Error(`Queue configuration for '${label}' not found`);
735
738
  }
@@ -741,7 +744,7 @@ var queue = (0, import_neko_helper2.createSingleton)((label) => {
741
744
  return rc;
742
745
  });
743
746
  var cache = (0, import_neko_helper2.createSingleton)((label) => {
744
- const cache_config = import_neko_config.config.get(["caches", label].join("."));
747
+ const cache_config = import_neko_config2.config.get(["caches", label].join("."));
745
748
  if (!cache_config) {
746
749
  throw new Error(`Cache configuration for '${label}' not found`);
747
750
  }
@@ -459,13 +459,16 @@ var Router = class {
459
459
  }
460
460
  };
461
461
 
462
+ // src/router.mts
463
+ var import_neko_config = require("@devbro/neko-config");
464
+
462
465
  // src/facades.mts
463
466
  var import_neko_scheduler = require("@devbro/neko-scheduler");
464
467
  var import_neko_helper2 = require("@devbro/neko-helper");
465
468
  var import_neko_context3 = require("@devbro/neko-context");
466
469
  var import_neko_storage2 = require("@devbro/neko-storage");
467
470
  var import_neko_mailer2 = require("@devbro/neko-mailer");
468
- var import_neko_config = require("@devbro/neko-config");
471
+ var import_neko_config2 = require("@devbro/neko-config");
469
472
  var import_clipanion = require("clipanion");
470
473
 
471
474
  // src/http.mts
@@ -545,8 +548,8 @@ var DatabaseTransport = class {
545
548
  }
546
549
  });
547
550
  }, "processMessage");
548
- constructor(config2 = {}) {
549
- this.config = { ...this.config, ...config2 };
551
+ constructor(config3 = {}) {
552
+ this.config = { ...this.config, ...config3 };
550
553
  this.repeater = (0, import_neko_helper.createRepeater)(
551
554
  this.processMessage,
552
555
  this.config.listen_interval * 1e3
@@ -663,7 +666,7 @@ var scheduler = (0, import_neko_helper2.createSingleton)(() => {
663
666
  });
664
667
  var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context3.ctx)().getOrThrow(["database", label]), "db");
665
668
  var storage = (0, import_neko_helper2.createSingleton)((label = "default") => {
666
- let storage_config = import_neko_config.config.get(["storages", label].join("."));
669
+ let storage_config = import_neko_config2.config.get(["storages", label].join("."));
667
670
  const provider = import_neko_storage2.StorageProviderFactory.create(
668
671
  storage_config.provider,
669
672
  storage_config.config
@@ -714,7 +717,7 @@ var httpServer = (0, import_neko_helper2.createSingleton)(() => {
714
717
  return server;
715
718
  });
716
719
  var logger = (0, import_neko_helper2.createSingleton)((label) => {
717
- const logger_config = import_neko_config.config.get(["loggers", label].join("."));
720
+ const logger_config = import_neko_config2.config.get(["loggers", label].join("."));
718
721
  const rc = new import_neko_logger.Logger(logger_config);
719
722
  rc.setExtrasFunction((message) => {
720
723
  message.requestId = (0, import_neko_context3.ctxSafe)()?.get("requestId") || "N/A";
@@ -723,7 +726,7 @@ var logger = (0, import_neko_helper2.createSingleton)((label) => {
723
726
  return rc;
724
727
  });
725
728
  var mailer = (0, import_neko_helper2.createSingleton)((label) => {
726
- const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
729
+ const mailer_config = import_neko_config2.config.get(["mailer", label].join("."));
727
730
  const provider = import_neko_mailer2.MailerProviderFactory.create(
728
731
  mailer_config.provider,
729
732
  mailer_config.config
@@ -732,7 +735,7 @@ var mailer = (0, import_neko_helper2.createSingleton)((label) => {
732
735
  return rc;
733
736
  });
734
737
  var queue = (0, import_neko_helper2.createSingleton)((label) => {
735
- const queue_config = import_neko_config.config.get(["queues", label].join("."));
738
+ const queue_config = import_neko_config2.config.get(["queues", label].join("."));
736
739
  if (!queue_config) {
737
740
  throw new Error(`Queue configuration for '${label}' not found`);
738
741
  }
@@ -744,7 +747,7 @@ var queue = (0, import_neko_helper2.createSingleton)((label) => {
744
747
  return rc;
745
748
  });
746
749
  var cache = (0, import_neko_helper2.createSingleton)((label) => {
747
- const cache_config = import_neko_config.config.get(["caches", label].join("."));
750
+ const cache_config = import_neko_config2.config.get(["caches", label].join("."));
748
751
  if (!cache_config) {
749
752
  throw new Error(`Cache configuration for '${label}' not found`);
750
753
  }
@@ -36,7 +36,7 @@ __export(StartCommand_exports, {
36
36
  });
37
37
  module.exports = __toCommonJS(StartCommand_exports);
38
38
  var import_clipanion2 = require("clipanion");
39
- var import_neko_config2 = require("@devbro/neko-config");
39
+ var import_neko_config3 = require("@devbro/neko-config");
40
40
 
41
41
  // src/router.mts
42
42
  var import_neko_context = require("@devbro/neko-context");
@@ -457,13 +457,16 @@ var Router = class {
457
457
  }
458
458
  };
459
459
 
460
+ // src/router.mts
461
+ var import_neko_config = require("@devbro/neko-config");
462
+
460
463
  // src/facades.mts
461
464
  var import_neko_scheduler = require("@devbro/neko-scheduler");
462
465
  var import_neko_helper2 = require("@devbro/neko-helper");
463
466
  var import_neko_context3 = require("@devbro/neko-context");
464
467
  var import_neko_storage2 = require("@devbro/neko-storage");
465
468
  var import_neko_mailer2 = require("@devbro/neko-mailer");
466
- var import_neko_config = require("@devbro/neko-config");
469
+ var import_neko_config2 = require("@devbro/neko-config");
467
470
  var import_clipanion = require("clipanion");
468
471
 
469
472
  // src/http.mts
@@ -543,8 +546,8 @@ var DatabaseTransport = class {
543
546
  }
544
547
  });
545
548
  }, "processMessage");
546
- constructor(config3 = {}) {
547
- this.config = { ...this.config, ...config3 };
549
+ constructor(config4 = {}) {
550
+ this.config = { ...this.config, ...config4 };
548
551
  this.repeater = (0, import_neko_helper.createRepeater)(
549
552
  this.processMessage,
550
553
  this.config.listen_interval * 1e3
@@ -661,7 +664,7 @@ var scheduler = (0, import_neko_helper2.createSingleton)(() => {
661
664
  });
662
665
  var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context3.ctx)().getOrThrow(["database", label]), "db");
663
666
  var storage = (0, import_neko_helper2.createSingleton)((label = "default") => {
664
- let storage_config = import_neko_config.config.get(["storages", label].join("."));
667
+ let storage_config = import_neko_config2.config.get(["storages", label].join("."));
665
668
  const provider = import_neko_storage2.StorageProviderFactory.create(
666
669
  storage_config.provider,
667
670
  storage_config.config
@@ -712,7 +715,7 @@ var httpServer = (0, import_neko_helper2.createSingleton)(() => {
712
715
  return server;
713
716
  });
714
717
  var logger = (0, import_neko_helper2.createSingleton)((label) => {
715
- const logger_config = import_neko_config.config.get(["loggers", label].join("."));
718
+ const logger_config = import_neko_config2.config.get(["loggers", label].join("."));
716
719
  const rc = new import_neko_logger.Logger(logger_config);
717
720
  rc.setExtrasFunction((message) => {
718
721
  message.requestId = (0, import_neko_context3.ctxSafe)()?.get("requestId") || "N/A";
@@ -721,7 +724,7 @@ var logger = (0, import_neko_helper2.createSingleton)((label) => {
721
724
  return rc;
722
725
  });
723
726
  var mailer = (0, import_neko_helper2.createSingleton)((label) => {
724
- const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
727
+ const mailer_config = import_neko_config2.config.get(["mailer", label].join("."));
725
728
  const provider = import_neko_mailer2.MailerProviderFactory.create(
726
729
  mailer_config.provider,
727
730
  mailer_config.config
@@ -730,7 +733,7 @@ var mailer = (0, import_neko_helper2.createSingleton)((label) => {
730
733
  return rc;
731
734
  });
732
735
  var queue = (0, import_neko_helper2.createSingleton)((label) => {
733
- const queue_config = import_neko_config.config.get(["queues", label].join("."));
736
+ const queue_config = import_neko_config2.config.get(["queues", label].join("."));
734
737
  if (!queue_config) {
735
738
  throw new Error(`Queue configuration for '${label}' not found`);
736
739
  }
@@ -742,7 +745,7 @@ var queue = (0, import_neko_helper2.createSingleton)((label) => {
742
745
  return rc;
743
746
  });
744
747
  var cache = (0, import_neko_helper2.createSingleton)((label) => {
745
- const cache_config = import_neko_config.config.get(["caches", label].join("."));
748
+ const cache_config = import_neko_config2.config.get(["caches", label].join("."));
746
749
  if (!cache_config) {
747
750
  throw new Error(`Cache configuration for '${label}' not found`);
748
751
  }
@@ -781,16 +784,16 @@ var StartCommand = class extends import_clipanion2.Command {
781
784
  scheduler().start();
782
785
  }
783
786
  if (this.queue || this.all) {
784
- const config_queues = import_neko_config2.config.get("queues");
787
+ const config_queues = import_neko_config3.config.get("queues");
785
788
  for (const [name, conf] of Object.entries(config_queues)) {
786
789
  queue(name).start();
787
790
  }
788
791
  }
789
792
  if (this.http || this.all) {
790
793
  const server = httpServer();
791
- await server.listen(import_neko_config2.config.get("port"), () => {
794
+ await server.listen(import_neko_config3.config.get("port"), () => {
792
795
  logger().info(
793
- "Server is running on http://localhost:" + import_neko_config2.config.get("port")
796
+ "Server is running on http://localhost:" + import_neko_config3.config.get("port")
794
797
  );
795
798
  });
796
799
  }