@devbro/pashmak 0.1.7 → 0.1.9

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 (128) hide show
  1. package/dist/{DatabaseServiceProvider.js → DatabaseServiceProvider.mjs} +5 -9
  2. package/dist/DatabaseServiceProvider.mjs.map +1 -0
  3. package/dist/app/console/{DefaultCommand.js → DefaultCommand.mjs} +2 -2
  4. package/dist/app/console/DefaultCommand.mjs.map +1 -0
  5. package/dist/app/console/{KeyGenerateCommand.js → KeyGenerateCommand.mjs} +6 -6
  6. package/dist/app/console/KeyGenerateCommand.mjs.map +1 -0
  7. package/dist/app/console/{StartCommand.js → StartCommand.mjs} +2 -2
  8. package/dist/app/console/StartCommand.mjs.map +1 -0
  9. package/dist/app/console/generate/{GenerateControllerCommand.js → GenerateControllerCommand.mjs} +3 -2
  10. package/dist/app/console/generate/GenerateControllerCommand.mjs.map +1 -0
  11. package/dist/app/console/generate/controller.tpl +14 -3
  12. package/dist/app/console/generate/{index.d.ts → index.d.mts} +1 -1
  13. package/dist/app/console/generate/{index.js → index.mjs} +1 -1
  14. package/dist/app/console/index.d.mts +9 -0
  15. package/dist/app/console/{index.js → index.mjs} +2 -2
  16. package/dist/app/console/index.mjs.map +1 -0
  17. package/dist/app/console/migrate/{MakeMigrateCommand.d.ts → GenerateMigrateCommand.d.mts} +2 -2
  18. package/dist/app/console/migrate/{MakeMigrateCommand.js → GenerateMigrateCommand.mjs} +8 -8
  19. package/dist/app/console/migrate/GenerateMigrateCommand.mjs.map +1 -0
  20. package/dist/app/console/migrate/{MigrateCommand.js → MigrateCommand.mjs} +2 -2
  21. package/dist/app/console/migrate/MigrateCommand.mjs.map +1 -0
  22. package/dist/app/console/migrate/{MigrateRollbackCommand.js → MigrateRollbackCommand.mjs} +2 -2
  23. package/dist/app/console/migrate/MigrateRollbackCommand.mjs.map +1 -0
  24. package/dist/app/console/migrate/index.d.mts +4 -0
  25. package/dist/app/console/migrate/{index.js → index.mjs} +2 -2
  26. package/dist/app/console/migrate/index.mjs.map +1 -0
  27. package/dist/app/console/project/{CreateProjectCommand.js → CreateProjectCommand.mjs} +2 -2
  28. package/dist/app/console/project/CreateProjectCommand.mjs.map +1 -0
  29. package/dist/app/console/project/base_project/package.json.tpl +1 -1
  30. package/dist/bin/DatabaseServiceProvider.cjs +88 -0
  31. package/dist/bin/app/console/DefaultCommand.cjs +506 -0
  32. package/dist/bin/app/console/KeyGenerateCommand.cjs +554 -0
  33. package/dist/bin/app/console/StartCommand.cjs +520 -0
  34. package/dist/bin/app/console/generate/GenerateControllerCommand.cjs +532 -0
  35. package/dist/bin/app/console/generate/index.cjs +532 -0
  36. package/dist/bin/app/console/index.cjs +2167 -0
  37. package/dist/bin/app/console/migrate/GenerateMigrateCommand.cjs +529 -0
  38. package/dist/bin/app/console/migrate/MigrateCommand.cjs +565 -0
  39. package/dist/bin/app/console/migrate/MigrateRollbackCommand.cjs +1684 -0
  40. package/dist/bin/app/console/migrate/index.cjs +1829 -0
  41. package/dist/bin/app/console/project/CreateProjectCommand.cjs +155 -0
  42. package/dist/bin/{pashmak_cli.cjs → bin/pashmak_cli.cjs} +4 -4
  43. package/dist/bin/config.cjs +24 -0
  44. package/dist/bin/context.cjs +24 -0
  45. package/dist/bin/facades.cjs +491 -0
  46. package/dist/bin/helper.cjs +24 -0
  47. package/dist/bin/http.cjs +24 -0
  48. package/dist/bin/index.cjs +2452 -0
  49. package/dist/bin/logger.cjs +24 -0
  50. package/dist/bin/mailer.cjs +24 -0
  51. package/dist/bin/middlewares.cjs +512 -0
  52. package/dist/bin/orm.cjs +24 -0
  53. package/dist/bin/{pashmak_cli.js → pashmak_cli.mjs} +1 -1
  54. package/dist/bin/router.cjs +547 -0
  55. package/dist/bin/sql.cjs +24 -0
  56. package/dist/{config.js → config.mjs} +1 -1
  57. package/dist/config.mjs.map +1 -0
  58. package/dist/{context.js → context.mjs} +1 -1
  59. package/dist/context.mjs.map +1 -0
  60. package/dist/{facades.js → facades.mjs} +30 -57
  61. package/dist/facades.mjs.map +1 -0
  62. package/dist/{helper.js → helper.mjs} +1 -1
  63. package/dist/helper.mjs.map +1 -0
  64. package/dist/{http.js → http.mjs} +1 -1
  65. package/dist/http.mjs.map +1 -0
  66. package/dist/{index.js → index.mjs} +2 -2
  67. package/dist/index.mjs.map +1 -0
  68. package/dist/{logger.js → logger.mjs} +1 -1
  69. package/dist/logger.mjs.map +1 -0
  70. package/dist/{mailer.js → mailer.mjs} +1 -1
  71. package/dist/mailer.mjs.map +1 -0
  72. package/dist/{middlewares.js → middlewares.mjs} +3 -5
  73. package/dist/middlewares.mjs.map +1 -0
  74. package/dist/{orm.js → orm.mjs} +1 -1
  75. package/dist/orm.mjs.map +1 -0
  76. package/dist/{router.d.ts → router.d.mts} +1 -1
  77. package/dist/{router.js → router.mjs} +2 -4
  78. package/dist/router.mjs.map +1 -0
  79. package/dist/{sql.js → sql.mjs} +1 -1
  80. package/dist/sql.mjs.map +1 -0
  81. package/package.json +14 -15
  82. package/dist/DatabaseServiceProvider.js.map +0 -1
  83. package/dist/app/console/DefaultCommand.js.map +0 -1
  84. package/dist/app/console/KeyGenerateCommand.js.map +0 -1
  85. package/dist/app/console/StartCommand.js.map +0 -1
  86. package/dist/app/console/generate/GenerateControllerCommand.js.map +0 -1
  87. package/dist/app/console/index.d.ts +0 -9
  88. package/dist/app/console/index.js.map +0 -1
  89. package/dist/app/console/migrate/MakeMigrateCommand.js.map +0 -1
  90. package/dist/app/console/migrate/MigrateCommand.js.map +0 -1
  91. package/dist/app/console/migrate/MigrateRollbackCommand.js.map +0 -1
  92. package/dist/app/console/migrate/index.d.ts +0 -4
  93. package/dist/app/console/migrate/index.js.map +0 -1
  94. package/dist/app/console/project/CreateProjectCommand.js.map +0 -1
  95. package/dist/config.js.map +0 -1
  96. package/dist/context.js.map +0 -1
  97. package/dist/facades.js.map +0 -1
  98. package/dist/helper.js.map +0 -1
  99. package/dist/http.js.map +0 -1
  100. package/dist/index.js.map +0 -1
  101. package/dist/logger.js.map +0 -1
  102. package/dist/mailer.js.map +0 -1
  103. package/dist/middlewares.js.map +0 -1
  104. package/dist/orm.js.map +0 -1
  105. package/dist/router.js.map +0 -1
  106. package/dist/sql.js.map +0 -1
  107. /package/dist/{DatabaseServiceProvider.d.ts → DatabaseServiceProvider.d.mts} +0 -0
  108. /package/dist/app/console/{DefaultCommand.d.ts → DefaultCommand.d.mts} +0 -0
  109. /package/dist/app/console/{KeyGenerateCommand.d.ts → KeyGenerateCommand.d.mts} +0 -0
  110. /package/dist/app/console/{StartCommand.d.ts → StartCommand.d.mts} +0 -0
  111. /package/dist/app/console/generate/{GenerateControllerCommand.d.ts → GenerateControllerCommand.d.mts} +0 -0
  112. /package/dist/app/console/generate/{index.js.map → index.mjs.map} +0 -0
  113. /package/dist/app/console/migrate/{MigrateCommand.d.ts → MigrateCommand.d.mts} +0 -0
  114. /package/dist/app/console/migrate/{MigrateRollbackCommand.d.ts → MigrateRollbackCommand.d.mts} +0 -0
  115. /package/dist/app/console/project/{CreateProjectCommand.d.ts → CreateProjectCommand.d.mts} +0 -0
  116. /package/dist/bin/{pashmak_cli.d.ts → pashmak_cli.d.mts} +0 -0
  117. /package/dist/bin/{pashmak_cli.js.map → pashmak_cli.mjs.map} +0 -0
  118. /package/dist/{config.d.ts → config.d.mts} +0 -0
  119. /package/dist/{context.d.ts → context.d.mts} +0 -0
  120. /package/dist/{facades.d.ts → facades.d.mts} +0 -0
  121. /package/dist/{helper.d.ts → helper.d.mts} +0 -0
  122. /package/dist/{http.d.ts → http.d.mts} +0 -0
  123. /package/dist/{index.d.ts → index.d.mts} +0 -0
  124. /package/dist/{logger.d.ts → logger.d.mts} +0 -0
  125. /package/dist/{mailer.d.ts → mailer.d.mts} +0 -0
  126. /package/dist/{middlewares.d.ts → middlewares.d.mts} +0 -0
  127. /package/dist/{orm.d.ts → orm.d.mts} +0 -0
  128. /package/dist/{sql.d.ts → sql.d.mts} +0 -0
@@ -1,15 +1,21 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import { Router } from "./router";
3
+ import { Router } from "./router.mjs";
4
4
  import { Scheduler } from "@devbro/neko-scheduler";
5
5
  import { createSingleton } from "@devbro/neko-helper";
6
6
  import { ctx, ctxSafe } from "@devbro/neko-context";
7
7
  import { StorageFactory } from "@devbro/neko-storage";
8
- import { Mailer, FunctionProvider, SESProvider, SMTPProvider, MemoryProvider } from "@devbro/neko-mailer";
8
+ import {
9
+ Mailer,
10
+ FunctionProvider,
11
+ SESProvider,
12
+ SMTPProvider,
13
+ MemoryProvider
14
+ } from "@devbro/neko-mailer";
9
15
  import { config } from "@devbro/neko-config";
10
16
  import { Cli } from "clipanion";
11
- import { HttpServer } from "./http";
12
- import { HttpError } from "./http";
17
+ import { HttpServer } from "./http.mjs";
18
+ import { HttpError } from "./http.mjs";
13
19
  import * as yup from "yup";
14
20
  import { Logger } from "@devbro/neko-logger";
15
21
  const router = createSingleton(() => new Router());
@@ -24,14 +30,10 @@ const scheduler = createSingleton(() => {
24
30
  });
25
31
  return rc;
26
32
  });
27
- const db = /* @__PURE__ */ __name((label = "default") => ctx().getOrThrow([
28
- "database",
29
- label
30
- ]), "db");
31
- const storage = createSingleton((label = "default") => StorageFactory.create(config.get([
32
- "storages",
33
- label
34
- ].join("."))));
33
+ const db = /* @__PURE__ */ __name((label = "default") => ctx().getOrThrow(["database", label]), "db");
34
+ const storage = createSingleton(
35
+ (label = "default") => StorageFactory.create(config.get(["storages", label].join(".")))
36
+ );
35
37
  const cli = createSingleton(() => {
36
38
  const [node, app, ...args] = process.argv;
37
39
  return new Cli({
@@ -44,27 +46,15 @@ const httpServer = createSingleton(() => {
44
46
  const server = new HttpServer();
45
47
  server.setErrorHandler(async (err, req, res) => {
46
48
  if (err instanceof HttpError) {
47
- res.writeHead(err.statusCode, {
48
- "Content-Type": "application/json"
49
- });
50
- res.end(JSON.stringify({
51
- message: err.message,
52
- error: err.code
53
- }));
54
- logger().warn({
55
- msg: "HttpError: " + err.message,
56
- err
57
- });
49
+ res.writeHead(err.statusCode, { "Content-Type": "application/json" });
50
+ res.end(JSON.stringify({ message: err.message, error: err.code }));
51
+ logger().warn({ msg: "HttpError: " + err.message, err });
58
52
  return;
59
53
  } else if (err instanceof yup.ValidationError) {
60
- res.writeHead(422, {
61
- "Content-Type": "application/json"
62
- });
54
+ res.writeHead(422, { "Content-Type": "application/json" });
63
55
  const errs = {};
64
56
  err.inner.forEach((e) => {
65
- const sanitizedParams = {
66
- ...e.params
67
- };
57
+ const sanitizedParams = { ...e.params };
68
58
  if (/passw/i.test(e.path)) {
69
59
  sanitizedParams.value = "******";
70
60
  sanitizedParams.originalValue = "******";
@@ -75,36 +65,20 @@ const httpServer = createSingleton(() => {
75
65
  params: sanitizedParams
76
66
  };
77
67
  });
78
- res.end(JSON.stringify({
79
- message: "validation error",
80
- errors: errs
81
- }));
82
- logger().warn({
83
- msg: "ValidationError: " + err.message,
84
- err
85
- });
68
+ res.end(JSON.stringify({ message: "validation error", errors: errs }));
69
+ logger().warn({ msg: "ValidationError: " + err.message, err });
86
70
  return;
87
71
  } else {
88
- logger().error({
89
- msg: "Error: " + err.message,
90
- err
91
- });
72
+ logger().error({ msg: "Error: " + err.message, err });
92
73
  }
93
- res.writeHead(500, {
94
- "Content-Type": ""
95
- });
96
- res.end(JSON.stringify({
97
- error: "Internal Server Error"
98
- }));
74
+ res.writeHead(500, { "Content-Type": "" });
75
+ res.end(JSON.stringify({ error: "Internal Server Error" }));
99
76
  });
100
77
  server.setRouter(router());
101
78
  return server;
102
79
  });
103
80
  const logger = createSingleton((label) => {
104
- const logger_config = config.get([
105
- "loggers",
106
- label
107
- ].join("."));
81
+ const logger_config = config.get(["loggers", label].join("."));
108
82
  const rc = new Logger(logger_config);
109
83
  rc.setExtrasFunction((message) => {
110
84
  message.requestId = ctxSafe()?.get("requestId") || "N/A";
@@ -113,10 +87,7 @@ const logger = createSingleton((label) => {
113
87
  return rc;
114
88
  });
115
89
  const mailer = createSingleton((label) => {
116
- const mailer_config = config.get([
117
- "mailer",
118
- label
119
- ].join("."));
90
+ const mailer_config = config.get(["mailer", label].join("."));
120
91
  let provider;
121
92
  if (mailer_config.provider === "logger") {
122
93
  provider = new FunctionProvider((mail) => {
@@ -133,7 +104,9 @@ const mailer = createSingleton((label) => {
133
104
  provider = new MemoryProvider();
134
105
  }
135
106
  if (!provider) {
136
- throw new Error(`cannot initiate mailer provider: ${mailer_config?.provider}`);
107
+ throw new Error(
108
+ `cannot initiate mailer provider: ${mailer_config?.provider}`
109
+ );
137
110
  }
138
111
  const rc = new Mailer(provider);
139
112
  return rc;
@@ -148,4 +121,4 @@ export {
148
121
  scheduler,
149
122
  storage
150
123
  };
151
- //# sourceMappingURL=facades.js.map
124
+ //# sourceMappingURL=facades.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/facades.mts"],"sourcesContent":["import { Router } from \"./router.mjs\";\nimport { Schedule, Scheduler } from \"@devbro/neko-scheduler\";\nimport { createSingleton } from \"@devbro/neko-helper\";\nimport { ctx, ctxSafe } from \"@devbro/neko-context\";\nimport { Connection } from \"@devbro/neko-sql\";\nimport { Storage, StorageFactory } from \"@devbro/neko-storage\";\nimport {\n Mailer,\n Mailable,\n MailerProvider,\n FunctionProvider,\n SESProvider,\n SMTPProvider,\n MemoryProvider,\n} from \"@devbro/neko-mailer\";\nimport { config } from \"@devbro/neko-config\";\nimport { Cli } from \"clipanion\";\nimport { HttpServer } from \"./http.mjs\";\nimport { HttpError } from \"./http.mjs\";\nimport * as yup from \"yup\";\nimport { Logger } from \"@devbro/neko-logger\";\n\nexport const router = createSingleton<Router>(() => new Router());\nexport const scheduler = createSingleton<Scheduler>(() => {\n const rc = new Scheduler();\n rc.setErrorHandler((err: any, job: Schedule) => {\n logger().error({\n msg: \"Scheduled job error\",\n err,\n job_name: job.getName(),\n });\n });\n return rc;\n});\nexport const db = (label = \"default\") =>\n ctx().getOrThrow<Connection>([\"database\", label]);\n\nexport const storage = createSingleton<Storage>((label: string = \"default\") =>\n StorageFactory.create(config.get([\"storages\", label].join(\".\"))),\n);\n\nexport const cli = createSingleton<Cli>(() => {\n const [node, app, ...args] = process.argv;\n return new Cli({\n binaryLabel: `My Application`,\n binaryName: `${node} ${app}`,\n binaryVersion: `1.0.0`,\n });\n});\n\nexport const httpServer = createSingleton<HttpServer>(() => {\n const server = new HttpServer();\n\n server.setErrorHandler(async (err: Error, req: any, res: any) => {\n if (err instanceof HttpError) {\n res.writeHead(err.statusCode, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ message: err.message, error: err.code }));\n logger().warn({ msg: \"HttpError: \" + err.message, err });\n return;\n } else if (err instanceof yup.ValidationError) {\n res.writeHead(422, { \"Content-Type\": \"application/json\" });\n const errs: any = {};\n err.inner.forEach((e: yup.ValidationError) => {\n // Sanitize sensitive fields\n const sanitizedParams = { ...e.params };\n if (/passw/i.test(e.path!)) {\n sanitizedParams.value = \"******\";\n sanitizedParams.originalValue = \"******\";\n }\n\n errs[e.path!] = {\n type: e.type,\n message: e.message,\n params: sanitizedParams,\n };\n });\n\n res.end(JSON.stringify({ message: \"validation error\", errors: errs }));\n logger().warn({ msg: \"ValidationError: \" + err.message, err });\n return;\n } else {\n logger().error({ msg: \"Error: \" + err.message, err });\n }\n res.writeHead(500, { \"Content-Type\": \"\" });\n res.end(JSON.stringify({ error: \"Internal Server Error\" }));\n });\n server.setRouter(router());\n\n return server;\n});\n\nexport const logger = createSingleton<Logger>((label) => {\n const logger_config: any = config.get([\"loggers\", label].join(\".\"));\n const rc = new Logger(logger_config);\n rc.setExtrasFunction((message: any) => {\n message.requestId = ctxSafe()?.get(\"requestId\") || \"N/A\";\n return message;\n });\n\n return rc;\n});\n\nexport const mailer = createSingleton((label) => {\n const mailer_config: any = config.get([\"mailer\", label].join(\".\"));\n let provider: MailerProvider | undefined;\n\n if (mailer_config.provider === \"logger\") {\n provider = new FunctionProvider((mail: Mailable) => {\n logger().info({\n msg: \"Sending email\",\n mail,\n });\n });\n } else if (mailer_config.provider === \"SES\") {\n provider = new SESProvider(mailer_config.config);\n } else if (mailer_config.provider === \"SMTP\") {\n provider = new SMTPProvider(mailer_config.config);\n } else if (mailer_config.provider === \"MEMORY\") {\n provider = new MemoryProvider();\n }\n\n if (!provider) {\n throw new Error(\n `cannot initiate mailer provider: ${mailer_config?.provider}`,\n );\n }\n\n const rc = new Mailer(provider);\n return rc;\n});\n"],"mappings":"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","names":[]}
@@ -1,2 +1,2 @@
1
1
  export * from "@devbro/neko-helper";
2
- //# sourceMappingURL=helper.js.map
2
+ //# sourceMappingURL=helper.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/helper.mts"],"sourcesContent":["export * from \"@devbro/neko-helper\";\n"],"mappings":"AAAA,cAAc;","names":[]}
@@ -1,2 +1,2 @@
1
1
  export * from "@devbro/neko-http";
2
- //# sourceMappingURL=http.js.map
2
+ //# sourceMappingURL=http.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/http.mts"],"sourcesContent":["export * from \"@devbro/neko-http\";\n"],"mappings":"AAAA,cAAc;","names":[]}
@@ -13,7 +13,7 @@ async function bootstrap(options) {
13
13
  console.log("Loading application modules...");
14
14
  await import("./app/console");
15
15
  console.log("Loading Database Provider ...");
16
- const { DatabaseServiceProvider } = await import("./DatabaseServiceProvider");
16
+ const { DatabaseServiceProvider } = await import("./DatabaseServiceProvider.mjs");
17
17
  console.log("Setting up pre-loader for context provider...");
18
18
  context_provider.setPreLoader(async (f) => {
19
19
  const middlewares = [];
@@ -33,4 +33,4 @@ export {
33
33
  bootstrap,
34
34
  config
35
35
  };
36
- //# sourceMappingURL=index.js.map
36
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import dotenv from \"dotenv\";\nimport { context_provider } from \"@devbro/neko-context\";\nimport { Middleware } from \"@devbro/neko-router\";\nimport { runNext } from \"@devbro/neko-router\";\nimport { Request, Response } from \"@devbro/neko-router\";\nimport { config } from \"@devbro/neko-config\";\n\nexport { config };\nexport async function bootstrap(options: { root_dir: string }): Promise<void> {\n // This function is used to bootstrap the application.\n // It can be used to initialize the application, load configuration, etc.\n // Currently, it does nothing but can be extended in the future.\n dotenv.config();\n\n console.log(\"Bootstrapping application...\");\n console.log(`Root directory: ${options.root_dir}`);\n let a = (await import(`${options.root_dir}/config/default`)).default;\n config.load(a);\n\n console.log(\"Loading application modules...\");\n await import(`./app/console`);\n console.log(\"Loading Database Provider ...\");\n const { DatabaseServiceProvider } = await import(\n \"./DatabaseServiceProvider.mjs\"\n );\n\n console.log(\"Setting up pre-loader for context provider...\");\n context_provider.setPreLoader(async (f: Function) => {\n const middlewares: Middleware[] = [];\n // do I need to use ServiceProvider like a middleware or can I get rid of this logic?\n middlewares.push(DatabaseServiceProvider.getInstance());\n\n return await runNext(\n middlewares,\n {} as Request,\n {} as Response,\n // @ts-ignore\n f,\n );\n });\n console.log(\"Application bootstrapped successfully.\");\n}\n"],"mappings":";;AAAA,OAAOA,YAAY;AACnB,SAASC,wBAAwB;AAEjC,SAASC,eAAe;AAExB,SAASC,cAAc;AAGvB,eAAsBC,UAAUC,SAA6B;AAI3DL,SAAOG,OAAM;AAEbG,UAAQC,IAAI,8BAAA;AACZD,UAAQC,IAAI,mBAAmBF,QAAQG,QAAQ,EAAE;AACjD,MAAIC,KAAK,MAAM,OAAO,GAAGJ,QAAQG,QAAQ,oBAAoBE;AAC7DP,SAAOQ,KAAKF,CAAAA;AAEZH,UAAQC,IAAI,gCAAA;AACZ,QAAM,OAAO,eAAe;AAC5BD,UAAQC,IAAI,+BAAA;AACZ,QAAM,EAAEK,wBAAuB,IAAK,MAAM,OACxC,+BAAA;AAGFN,UAAQC,IAAI,+CAAA;AACZN,mBAAiBY,aAAa,OAAOC,MAAAA;AACnC,UAAMC,cAA4B,CAAA;AAElCA,gBAAYC,KAAKJ,wBAAwBK,YAAW,CAAA;AAEpD,WAAO,MAAMf;MACXa;MACA,CAAC;MACD,CAAC;;MAEDD;IAAAA;EAEJ,CAAA;AACAR,UAAQC,IAAI,wCAAA;AACd;AAjCsBH;","names":["dotenv","context_provider","runNext","config","bootstrap","options","console","log","root_dir","a","default","load","DatabaseServiceProvider","setPreLoader","f","middlewares","push","getInstance"]}
@@ -1,2 +1,2 @@
1
1
  export * from "@devbro/neko-logger";
2
- //# sourceMappingURL=logger.js.map
2
+ //# sourceMappingURL=logger.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/logger.mts"],"sourcesContent":["export * from \"@devbro/neko-logger\";\n"],"mappings":"AAAA,cAAc;","names":[]}
@@ -1,2 +1,2 @@
1
1
  export * from "@devbro/neko-mailer";
2
- //# sourceMappingURL=mailer.js.map
2
+ //# sourceMappingURL=mailer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/mailer.mts"],"sourcesContent":["export * from \"@devbro/neko-mailer\";\n"],"mappings":"AAAA,cAAc;","names":[]}
@@ -1,11 +1,9 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import { db } from "./facades";
3
+ import { db } from "./facades.mjs";
4
4
  function cors(options = {}) {
5
5
  return async (req, res, next) => {
6
- const allowedOrigins = options.allowedOrigins || [
7
- "*"
8
- ];
6
+ const allowedOrigins = options.allowedOrigins || ["*"];
9
7
  const origin = req.headers.origin || "*";
10
8
  for (const allowedOrigin of allowedOrigins) {
11
9
  if (typeof allowedOrigin === "string" && allowedOrigin === origin) {
@@ -38,4 +36,4 @@ export {
38
36
  cors,
39
37
  dbTransaction
40
38
  };
41
- //# sourceMappingURL=middlewares.js.map
39
+ //# sourceMappingURL=middlewares.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/middlewares.mts"],"sourcesContent":["import { Request, Response } from \"@devbro/neko-router\";\nimport { logger, db } from \"./facades.mjs\";\n\nexport function cors(\n options: { allowedOrigins?: (string | RegExp)[] } = {},\n): (req: Request, res: Response, next: () => Promise<void>) => Promise<void> {\n return async (\n req: Request,\n res: Response,\n next: () => Promise<void>,\n ): Promise<void> => {\n const allowedOrigins = options.allowedOrigins || [\"*\"];\n const origin = req.headers.origin || \"*\";\n\n for (const allowedOrigin of allowedOrigins) {\n if (typeof allowedOrigin === \"string\" && allowedOrigin === origin) {\n res.setHeader(\"Access-Control-Allow-Origin\", allowedOrigin);\n break;\n } else if (\n allowedOrigin instanceof RegExp &&\n allowedOrigin.test(origin)\n ) {\n res.setHeader(\"Access-Control-Allow-Origin\", origin);\n break;\n } else if (allowedOrigin === \"*\") {\n res.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n break;\n }\n }\n\n res.setHeader(\"Access-Control-Allow-Headers\", \"*\");\n await next();\n };\n}\n\nexport async function dbTransaction(\n req: Request,\n res: Response,\n next: () => Promise<void>,\n): Promise<void> {\n try {\n await db().beginTransaction();\n await next();\n await db().commit();\n } finally {\n await db().rollback();\n }\n}\n"],"mappings":";;AACA,SAAiB,UAAU;AAEpB,SAAS,KACd,UAAoD,CAAC,GACsB;AAC3E,SAAO,OACL,KACA,KACA,SACkB;AAClB,UAAM,iBAAiB,QAAQ,kBAAkB,CAAC,GAAG;AACrD,UAAM,SAAS,IAAI,QAAQ,UAAU;AAErC,eAAW,iBAAiB,gBAAgB;AAC1C,UAAI,OAAO,kBAAkB,YAAY,kBAAkB,QAAQ;AACjE,YAAI,UAAU,+BAA+B,aAAa;AAC1D;AAAA,MACF,WACE,yBAAyB,UACzB,cAAc,KAAK,MAAM,GACzB;AACA,YAAI,UAAU,+BAA+B,MAAM;AACnD;AAAA,MACF,WAAW,kBAAkB,KAAK;AAChC,YAAI,UAAU,+BAA+B,GAAG;AAChD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,UAAU,gCAAgC,GAAG;AACjD,UAAM,KAAK;AAAA,EACb;AACF;AA9BgB;AAgChB,eAAsB,cACpB,KACA,KACA,MACe;AACf,MAAI;AACF,UAAM,GAAG,EAAE,iBAAiB;AAC5B,UAAM,KAAK;AACX,UAAM,GAAG,EAAE,OAAO;AAAA,EACpB,UAAE;AACA,UAAM,GAAG,EAAE,SAAS;AAAA,EACtB;AACF;AAZsB;","names":[]}
@@ -1,2 +1,2 @@
1
1
  export * from "@devbro/neko-orm";
2
- //# sourceMappingURL=orm.js.map
2
+ //# sourceMappingURL=orm.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/orm.mts"],"sourcesContent":["export * from \"@devbro/neko-orm\";\n"],"mappings":"AAAA,cAAc;","names":[]}
@@ -4,6 +4,6 @@ export * from '@devbro/neko-router';
4
4
 
5
5
  declare function Model(model: typeof BaseModel, paramName: string): ParameterDecorator;
6
6
  declare function Param(paramName: string): ParameterDecorator;
7
- declare function ValidatedRequest(validationRules: yup.ObjectSchema<any>): ParameterDecorator;
7
+ declare function ValidatedRequest(validationRules: yup.ObjectSchema<any> | (() => yup.ObjectSchema<any>)): ParameterDecorator;
8
8
 
9
9
  export { Model, Param, ValidatedRequest };
@@ -22,9 +22,7 @@ function Param(paramName) {
22
22
  __name(Param, "Param");
23
23
  function ValidatedRequest(validationRules) {
24
24
  return createParamDecorator(async () => {
25
- const rc = await validationRules.noUnknown().validate(ctx().get("request").body, {
26
- abortEarly: false
27
- });
25
+ const rc = await (typeof validationRules === "function" ? validationRules() : validationRules).noUnknown().validate(ctx().get("request").body, { abortEarly: false });
28
26
  return rc;
29
27
  });
30
28
  }
@@ -34,4 +32,4 @@ export {
34
32
  Param,
35
33
  ValidatedRequest
36
34
  };
37
- //# sourceMappingURL=router.js.map
35
+ //# sourceMappingURL=router.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/router.mts"],"sourcesContent":["import { ctx } from \"@devbro/neko-context\";\nimport { BaseModel } from \"@devbro/neko-orm\";\nimport { Request } from \"@devbro/neko-router\";\nimport { HttpNotFoundError } from \"@devbro/neko-http/errors\";\nimport { createParamDecorator } from \"@devbro/neko-router\";\nimport * as yup from \"yup\";\nexport * from \"@devbro/neko-router\";\n\nexport function Model(\n model: typeof BaseModel,\n paramName: string,\n): ParameterDecorator {\n return createParamDecorator(async () => {\n let rc = await model.find(ctx().get<Request>(\"request\").params[paramName]);\n if (!rc) {\n throw new HttpNotFoundError(\"Object not found\");\n }\n\n return rc;\n });\n}\n\nexport function Param(paramName: string): ParameterDecorator {\n return createParamDecorator(() => {\n return ctx().get<Request>(\"request\").params[paramName];\n });\n}\n\nexport function ValidatedRequest(\n validationRules: yup.ObjectSchema<any> | (() => yup.ObjectSchema<any>),\n): ParameterDecorator {\n return createParamDecorator(async () => {\n const rc = await (\n typeof validationRules === \"function\"\n ? validationRules()\n : validationRules\n )\n .noUnknown()\n .validate(ctx().get<Request>(\"request\").body, { abortEarly: false });\n\n return rc;\n });\n}\n"],"mappings":";;AAAA,SAAS,WAAW;AAGpB,SAAS,yBAAyB;AAClC,SAAS,4BAA4B;AAErC,cAAc;AAEP,SAAS,MACd,OACA,WACoB;AACpB,SAAO,qBAAqB,YAAY;AACtC,QAAI,KAAK,MAAM,MAAM,KAAK,IAAI,EAAE,IAAa,SAAS,EAAE,OAAO,SAAS,CAAC;AACzE,QAAI,CAAC,IAAI;AACP,YAAM,IAAI,kBAAkB,kBAAkB;AAAA,IAChD;AAEA,WAAO;AAAA,EACT,CAAC;AACH;AAZgB;AAcT,SAAS,MAAM,WAAuC;AAC3D,SAAO,qBAAqB,MAAM;AAChC,WAAO,IAAI,EAAE,IAAa,SAAS,EAAE,OAAO,SAAS;AAAA,EACvD,CAAC;AACH;AAJgB;AAMT,SAAS,iBACd,iBACoB;AACpB,SAAO,qBAAqB,YAAY;AACtC,UAAM,KAAK,OACT,OAAO,oBAAoB,aACvB,gBAAgB,IAChB,iBAEH,UAAU,EACV,SAAS,IAAI,EAAE,IAAa,SAAS,EAAE,MAAM,EAAE,YAAY,MAAM,CAAC;AAErE,WAAO;AAAA,EACT,CAAC;AACH;AAdgB;","names":[]}
@@ -1,2 +1,2 @@
1
1
  export * from "@devbro/neko-sql";
2
- //# sourceMappingURL=sql.js.map
2
+ //# sourceMappingURL=sql.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sql.mts"],"sourcesContent":["export * from \"@devbro/neko-sql\";\n"],"mappings":"AAAA,cAAc;","names":[]}
package/package.json CHANGED
@@ -1,11 +1,10 @@
1
1
  {
2
2
  "name": "@devbro/pashmak",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "description": "testing application for the entire repo",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
7
7
  "types": "./dist/index.d.ts",
8
- "type": "module",
9
8
  "bin": {
10
9
  "pashmak": "./dist/bin/pashmak_cli.cjs"
11
10
  },
@@ -15,67 +14,67 @@
15
14
  "exports": {
16
15
  ".": {
17
16
  "types": "./dist/index.d.ts",
18
- "import": "./dist/index.js",
17
+ "import": "./dist/index.mjs",
19
18
  "require": "./dist/index.js"
20
19
  },
21
20
  "./facades": {
22
21
  "types": "./dist/facades.d.ts",
23
- "import": "./dist/facades.js",
22
+ "import": "./dist/facades.mjs",
24
23
  "require": "./dist/facades.js"
25
24
  },
26
25
  "./router": {
27
26
  "types": "./dist/router.d.ts",
28
- "import": "./dist/router.js",
27
+ "import": "./dist/router.mjs",
29
28
  "require": "./dist/router.js"
30
29
  },
31
30
  "./initialize": {
32
31
  "types": "./dist/initialize.d.ts",
33
- "import": "./dist/initialize.js",
32
+ "import": "./dist/initialize.mjs",
34
33
  "require": "./dist/initialize.js"
35
34
  },
36
35
  "./http": {
37
36
  "types": "./dist/http.d.ts",
38
- "import": "./dist/http.js",
37
+ "import": "./dist/http.mjs",
39
38
  "require": "./dist/http.js"
40
39
  },
41
40
  "./config": {
42
41
  "types": "./dist/config.d.ts",
43
- "import": "./dist/config.js",
42
+ "import": "./dist/config.mjs",
44
43
  "require": "./dist/config.js"
45
44
  },
46
45
  "./sql": {
47
46
  "types": "./dist/sql.d.ts",
48
- "import": "./dist/sql.js",
47
+ "import": "./dist/sql.mjs",
49
48
  "require": "./dist/sql.js"
50
49
  },
51
50
  "./context": {
52
51
  "types": "./dist/context.d.ts",
53
- "import": "./dist/context.js",
52
+ "import": "./dist/context.mjs",
54
53
  "require": "./dist/context.js"
55
54
  },
56
55
  "./helper": {
57
56
  "types": "./dist/helper.d.ts",
58
- "import": "./dist/helper.js",
57
+ "import": "./dist/helper.mjs",
59
58
  "require": "./dist/helper.js"
60
59
  },
61
60
  "./logger": {
62
61
  "types": "./dist/logger.d.ts",
63
- "import": "./dist/logger.js",
62
+ "import": "./dist/logger.mjs",
64
63
  "require": "./dist/logger.js"
65
64
  },
66
65
  "./orm": {
67
66
  "types": "./dist/orm.d.ts",
68
- "import": "./dist/orm.js",
67
+ "import": "./dist/orm.mjs",
69
68
  "require": "./dist/orm.js"
70
69
  },
71
70
  "./mailer": {
72
71
  "types": "./dist/mailer.d.ts",
73
- "import": "./dist/mailer.js",
72
+ "import": "./dist/mailer.mjs",
74
73
  "require": "./dist/mailer.js"
75
74
  },
76
75
  "./middlewares": {
77
76
  "types": "./dist/middlewares.d.ts",
78
- "import": "./dist/middlewares.js",
77
+ "import": "./dist/middlewares.mjs",
79
78
  "require": "./dist/middlewares.js"
80
79
  },
81
80
  "./package.json": "./package.json"
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/DatabaseServiceProvider.ts"],"sourcesContent":["import { Middleware } from \"@devbro/neko-router\";\nimport { Request, Response } from \"@devbro/neko-router\";\nimport { PostgresqlConnection } from \"@devbro/neko-sql\";\nimport { PoolConfig } from \"pg\";\nimport { Connection } from \"@devbro/neko-sql\";\nimport { BaseModel } from \"@devbro/neko-orm\";\nimport { ctx } from \"@devbro/neko-context\";\nimport { config } from \"@devbro/neko-config\";\n\nexport class DatabaseServiceProvider extends Middleware {\n async call(\n req: Request,\n res: Response,\n next: () => Promise<void>,\n ): Promise<void> {\n const db_configs: Record<string, PoolConfig & { name: string }> =\n config.get(\"databases\");\n\n const conns = [];\n try {\n for (const [name, db_config] of Object.entries(db_configs)) {\n const conn = await this.getConnection(db_config);\n ctx().set([\"database\", name], conn);\n conns.push(conn);\n }\n BaseModel.setConnection(() =>\n ctx().getOrThrow<Connection>([\"database\", \"default\"]),\n );\n await next();\n } finally {\n for (const conn of conns) {\n await conn.disconnect();\n }\n }\n }\n\n private static instance: DatabaseServiceProvider;\n\n async register(): Promise<void> {}\n\n static getInstance(): DatabaseServiceProvider {\n if (!DatabaseServiceProvider.instance) {\n DatabaseServiceProvider.instance = new DatabaseServiceProvider();\n }\n return DatabaseServiceProvider.instance;\n }\n\n async getConnection(db_config: PoolConfig): Promise<PostgresqlConnection> {\n const conn = new PostgresqlConnection(db_config);\n if (!(await conn.connect())) {\n throw new Error(\"Failed to connect to the database\");\n }\n return conn;\n }\n}\n"],"mappings":";;AAAA,SAASA,kBAAkB;AAE3B,SAASC,4BAA4B;AAGrC,SAASC,iBAAiB;AAC1B,SAASC,WAAW;AACpB,SAASC,cAAc;AAEhB,MAAMC,gCAAgCL,WAAAA;EAT7C,OAS6CA;;;EAC3C,MAAMM,KACJC,KACAC,KACAC,MACe;AACf,UAAMC,aACJN,OAAOO,IAAI,WAAA;AAEb,UAAMC,QAAQ,CAAA;AACd,QAAI;AACF,iBAAW,CAACC,MAAMC,SAAAA,KAAcC,OAAOC,QAAQN,UAAAA,GAAa;AAC1D,cAAMO,OAAO,MAAM,KAAKC,cAAcJ,SAAAA;AACtCX,YAAAA,EAAMgB,IAAI;UAAC;UAAYN;WAAOI,IAAAA;AAC9BL,cAAMQ,KAAKH,IAAAA;MACb;AACAf,gBAAUmB,cAAc,MACtBlB,IAAAA,EAAMmB,WAAuB;QAAC;QAAY;OAAU,CAAA;AAEtD,YAAMb,KAAAA;IACR,UAAA;AACE,iBAAWQ,QAAQL,OAAO;AACxB,cAAMK,KAAKM,WAAU;MACvB;IACF;EACF;EAEA,OAAeC;EAEf,MAAMC,WAA0B;EAAC;EAEjC,OAAOC,cAAuC;AAC5C,QAAI,CAACrB,wBAAwBmB,UAAU;AACrCnB,8BAAwBmB,WAAW,IAAInB,wBAAAA;IACzC;AACA,WAAOA,wBAAwBmB;EACjC;EAEA,MAAMN,cAAcJ,WAAsD;AACxE,UAAMG,OAAO,IAAIhB,qBAAqBa,SAAAA;AACtC,QAAI,CAAE,MAAMG,KAAKU,QAAO,GAAK;AAC3B,YAAM,IAAIC,MAAM,mCAAA;IAClB;AACA,WAAOX;EACT;AACF;","names":["Middleware","PostgresqlConnection","BaseModel","ctx","config","DatabaseServiceProvider","call","req","res","next","db_configs","get","conns","name","db_config","Object","entries","conn","getConnection","set","push","setConnection","getOrThrow","disconnect","instance","register","getInstance","connect","Error"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/app/console/DefaultCommand.ts"],"sourcesContent":["import { Command, Option } from \"clipanion\";\nimport { cli } from \"../../facades\";\n\nexport class DefaultCommand extends Command {\n static usage = Command.Usage({\n category: `Main`,\n description: `server management command line.`,\n details: `\n The base command for running and managing your server.\n\n Make sure you understand how things work.\n `,\n examples: [],\n });\n\n async execute() {\n // @ts-ignore\n const commandList = cli().registrations; //.definitions().map((def:any) => def.paths.map((path:any) => path.join(' '))).flat();\n\n const paths: string[] = [];\n commandList.forEach((index, val) =>\n paths.push(index.builder.paths[0]?.join(\" \") || \"\"),\n );\n\n console.log(\"Available commands:\");\n for (const cmd of paths) {\n if(cmd) {\n console.log(cmd);\n }\n }\n }\n}\n\ncli().register(DefaultCommand);\n"],"mappings":";;AAAA,SAASA,eAAuB;AAChC,SAASC,WAAW;AAEb,MAAMC,uBAAuBF,QAAAA;EAHpC,OAGoCA;;;EAClC,OAAOG,QAAQH,QAAQI,MAAM;IAC3BC,UAAU;IACVC,aAAa;IACbC,SAAS;;;;;IAKTC,UAAU,CAAA;EACZ,CAAA;EAEA,MAAMC,UAAU;AAEd,UAAMC,cAAcT,IAAAA,EAAMU;AAE1B,UAAMC,QAAkB,CAAA;AACxBF,gBAAYG,QAAQ,CAACC,OAAOC,QAC1BH,MAAMI,KAAKF,MAAMG,QAAQL,MAAM,CAAA,GAAIM,KAAK,GAAA,KAAQ,EAAA,CAAA;AAGlDC,YAAQC,IAAI,qBAAA;AACZ,eAAWC,OAAOT,OAAO;AACvB,UAAGS,KAAK;AACNF,gBAAQC,IAAIC,GAAAA;MACd;IACF;EACF;AACF;AAEApB,IAAAA,EAAMqB,SAASpB,cAAAA;","names":["Command","cli","DefaultCommand","usage","Usage","category","description","details","examples","execute","commandList","registrations","paths","forEach","index","val","push","builder","join","console","log","cmd","register"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/app/console/KeyGenerateCommand.ts"],"sourcesContent":["import { Command, Option } from \"clipanion\";\nimport { generateKeyPairSync } from \"crypto\";\nimport fs from \"fs/promises\";\nimport path from \"path\";\nimport { logger, cli } from \"../../facades\";\n\nexport class KeyGenerateCommand extends Command {\n static paths = [[`key`, \"generate\"]];\n\n static usage = Command.Usage({\n category: `Main`,\n description: `generate keys`,\n details: `\n This command generates RSA key pair for JWT signing.\n Use --rotate flag to preserve old public key.\n `,\n examples: [\n [`Generate new keys`, `key generate`],\n [`Rotate existing keys`, `key generate --rotate`],\n ],\n });\n\n rotate = Option.Boolean(`--rotate`, false, {\n description: `Rotate existing keys (backup old keys before replacement)`,\n });\n\n async execute() {\n logger().info(\"generating keys for jwt token and adding to .env file\");\n const { publicKey, privateKey } = generateKeyPairSync(\"rsa\", {\n modulusLength: 2048, // 2048-bit key is standard for RS256\n publicKeyEncoding: {\n type: \"spki\",\n format: \"pem\",\n },\n privateKeyEncoding: {\n type: \"pkcs8\",\n format: \"pem\",\n },\n });\n\n let envfile = \"\";\n try {\n envfile = await fs.readFile(path.join(process.cwd(), \".env\"), \"utf-8\");\n } catch {}\n let old_public_key = envfile.match(/^jwt_secret_public=(.*)/m);\n\n envfile = this.addEnvParam(\n envfile,\n \"jwt_secret_public\",\n this.stripPemHeaders(publicKey),\n );\n envfile = this.addEnvParam(\n envfile,\n \"jwt_secret_private\",\n this.stripPemHeaders(privateKey),\n );\n\n if (this.rotate && old_public_key && old_public_key[1]) {\n envfile = this.addEnvParam(\n envfile,\n \"jwt_secret_public_retired\",\n old_public_key[1],\n );\n }\n\n await fs.writeFile(path.join(process.cwd(), \".env\"), envfile, \"utf-8\");\n }\n\n addEnvParam(file: string, key: string, value: string) {\n let regex = new RegExp(`^${key}=.*`, \"gm\");\n file = file.replace(regex, `${key}=${value}`);\n const match = file.match(regex);\n\n if (!match) {\n file = file + `\\n${key}=${value}`;\n }\n return file;\n }\n\n stripPemHeaders(pem: string) {\n return pem\n .replace(/-----BEGIN [\\w\\s]+-----/g, \"\")\n .replace(/-----END [\\w\\s]+-----/g, \"\")\n .replace(/\\r?\\n|\\r/g, \"\");\n }\n}\n\ncli().register(KeyGenerateCommand);\n"],"mappings":";;AAAA,SAASA,SAASC,cAAc;AAChC,SAASC,2BAA2B;AACpC,OAAOC,QAAQ;AACf,OAAOC,UAAU;AACjB,SAASC,QAAQC,WAAW;AAErB,MAAMC,2BAA2BP,QAAAA;EANxC,OAMwCA;;;EACtC,OAAOQ,QAAQ;IAAC;MAAC;MAAO;;;EAExB,OAAOC,QAAQT,QAAQU,MAAM;IAC3BC,UAAU;IACVC,aAAa;IACbC,SAAS;;;;IAITC,UAAU;MACR;QAAC;QAAqB;;MACtB;QAAC;QAAwB;;;EAE7B,CAAA;EAEAC,SAASd,OAAOe,QAAQ,YAAY,OAAO;IACzCJ,aAAa;EACf,CAAA;EAEA,MAAMK,UAAU;AACdZ,WAAAA,EAASa,KAAK,uDAAA;AACd,UAAM,EAAEC,WAAWC,WAAU,IAAKlB,oBAAoB,OAAO;MAC3DmB,eAAe;MACfC,mBAAmB;QACjBC,MAAM;QACNC,QAAQ;MACV;MACAC,oBAAoB;QAClBF,MAAM;QACNC,QAAQ;MACV;IACF,CAAA;AAEA,QAAIE,UAAU;AACd,QAAI;AACFA,gBAAU,MAAMvB,GAAGwB,SAASvB,KAAKwB,KAAKC,QAAQC,IAAG,GAAI,MAAA,GAAS,OAAA;IAChE,QAAQ;IAAC;AACT,QAAIC,iBAAiBL,QAAQM,MAAM,0BAAA;AAEnCN,cAAU,KAAKO,YACbP,SACA,qBACA,KAAKQ,gBAAgBf,SAAAA,CAAAA;AAEvBO,cAAU,KAAKO,YACbP,SACA,sBACA,KAAKQ,gBAAgBd,UAAAA,CAAAA;AAGvB,QAAI,KAAKL,UAAUgB,kBAAkBA,eAAe,CAAA,GAAI;AACtDL,gBAAU,KAAKO,YACbP,SACA,6BACAK,eAAe,CAAA,CAAE;IAErB;AAEA,UAAM5B,GAAGgC,UAAU/B,KAAKwB,KAAKC,QAAQC,IAAG,GAAI,MAAA,GAASJ,SAAS,OAAA;EAChE;EAEAO,YAAYG,MAAcC,KAAaC,OAAe;AACpD,QAAIC,QAAQ,IAAIC,OAAO,IAAIH,GAAAA,OAAU,IAAA;AACrCD,WAAOA,KAAKK,QAAQF,OAAO,GAAGF,GAAAA,IAAOC,KAAAA,EAAO;AAC5C,UAAMN,QAAQI,KAAKJ,MAAMO,KAAAA;AAEzB,QAAI,CAACP,OAAO;AACVI,aAAOA,OAAO;EAAKC,GAAAA,IAAOC,KAAAA;IAC5B;AACA,WAAOF;EACT;EAEAF,gBAAgBQ,KAAa;AAC3B,WAAOA,IACJD,QAAQ,4BAA4B,EAAA,EACpCA,QAAQ,0BAA0B,EAAA,EAClCA,QAAQ,aAAa,EAAA;EAC1B;AACF;AAEAnC,IAAAA,EAAMqC,SAASpC,kBAAAA;","names":["Command","Option","generateKeyPairSync","fs","path","logger","cli","KeyGenerateCommand","paths","usage","Usage","category","description","details","examples","rotate","Boolean","execute","info","publicKey","privateKey","modulusLength","publicKeyEncoding","type","format","privateKeyEncoding","envfile","readFile","join","process","cwd","old_public_key","match","addEnvParam","stripPemHeaders","writeFile","file","key","value","regex","RegExp","replace","pem","register"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/app/console/StartCommand.ts"],"sourcesContent":["import { Command, Option } from \"clipanion\";\nimport { config } from \"@devbro/neko-config\";\n\nimport { cli, httpServer, logger, scheduler } from \"../../facades\";\nimport { PostgresqlConnection } from \"@devbro/neko-sql\";\n\nexport class StartCommand extends Command {\n scheduler = Option.Boolean(`--scheduler`, false);\n http = Option.Boolean(`--http`, false);\n all = Option.Boolean(\"--all\", false);\n static paths = [[`start`]];\n\n async execute() {\n if ([this.all, this.http, this.scheduler].filter((x) => x).length == 0) {\n this.context.stdout.write(\n `No service was selected. please check -h for details\\n`,\n );\n return;\n }\n\n logger().info(`Starting Server\\n`);\n\n PostgresqlConnection.defaults.idleTimeoutMillis = 10000;\n\n if (this.scheduler || this.all) {\n logger().info(`starting scheduler\\n`);\n scheduler().start();\n }\n\n if (this.http || this.all) {\n const server = httpServer();\n await server.listen(config.get(\"port\"), () => {\n logger().info(\n \"Server is running on http://localhost:\" + config.get(\"port\"),\n );\n });\n }\n }\n}\n\ncli().register(StartCommand);\n"],"mappings":";;AAAA,SAASA,SAASC,cAAc;AAChC,SAASC,cAAc;AAEvB,SAASC,KAAKC,YAAYC,QAAQC,iBAAiB;AACnD,SAASC,4BAA4B;AAE9B,MAAMC,qBAAqBR,QAAAA;EANlC,OAMkCA;;;EAChCM,YAAYL,OAAOQ,QAAQ,eAAe,KAAA;EAC1CC,OAAOT,OAAOQ,QAAQ,UAAU,KAAA;EAChCE,MAAMV,OAAOQ,QAAQ,SAAS,KAAA;EAC9B,OAAOG,QAAQ;IAAC;MAAC;;;EAEjB,MAAMC,UAAU;AACd,QAAI;MAAC,KAAKF;MAAK,KAAKD;MAAM,KAAKJ;MAAWQ,OAAO,CAACC,MAAMA,CAAAA,EAAGC,UAAU,GAAG;AACtE,WAAKC,QAAQC,OAAOC,MAClB;CAAwD;AAE1D;IACF;AAEAd,WAAAA,EAASe,KAAK;CAAmB;AAEjCb,yBAAqBc,SAASC,oBAAoB;AAElD,QAAI,KAAKhB,aAAa,KAAKK,KAAK;AAC9BN,aAAAA,EAASe,KAAK;CAAsB;AACpCd,gBAAAA,EAAYiB,MAAK;IACnB;AAEA,QAAI,KAAKb,QAAQ,KAAKC,KAAK;AACzB,YAAMa,SAASpB,WAAAA;AACf,YAAMoB,OAAOC,OAAOvB,OAAOwB,IAAI,MAAA,GAAS,MAAA;AACtCrB,eAAAA,EAASe,KACP,2CAA2ClB,OAAOwB,IAAI,MAAA,CAAA;MAE1D,CAAA;IACF;EACF;AACF;AAEAvB,IAAAA,EAAMwB,SAASnB,YAAAA;","names":["Command","Option","config","cli","httpServer","logger","scheduler","PostgresqlConnection","StartCommand","Boolean","http","all","paths","execute","filter","x","length","context","stdout","write","info","defaults","idleTimeoutMillis","start","server","listen","get","register"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/app/console/generate/GenerateControllerCommand.ts"],"sourcesContent":["import { cli } from \"../../../facades\";\nimport { Command, Option } from \"clipanion\";\nimport { Case } from \"change-case-all\";\nimport path from \"path\";\nimport * as fs from \"fs/promises\";\nimport { config } from \"@devbro/neko-config\";\nimport handlebars from \"handlebars\";\nimport { fileURLToPath } from \"url\";\nimport pluralize from \"pluralize\";\n\nexport class GenerateControllerCommand extends Command {\n static paths = [\n [`make`, `controller`],\n [`generate`, `controller`],\n ];\n\n name = Option.String({ required: true });\n\n async execute() {\n const rootDir = process.cwd();\n\n const date = new Date();\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const secondsOfDay = String(\n date.getHours() * 3600 + date.getMinutes() * 60 + date.getSeconds(),\n ).padStart(5, \"0\");\n\n const fixed_name = Case.snake(this.name);\n const filename = `${Case.capital(this.name)}Controller.ts`;\n this.context.stdout.write(`creating migration file ${filename}\\n`);\n\n await fs.mkdir(config.get(\"migration.path\"), { recursive: true });\n\n let dirname = typeof __dirname === \"string\" ? __dirname : undefined;\n if (!dirname) {\n dirname = path.dirname(fileURLToPath(import.meta.url));\n }\n\n const compiledTemplate = handlebars.compile(\n (await fs.readFile(path.join(dirname, \"./controller.tpl\"))).toString(),\n );\n const template = await compiledTemplate({\n className: Case.pascal(this.name),\n routeName: Case.kebab(pluralize(this.name)),\n });\n\n await fs.writeFile(\n path.join(rootDir, \"src/app/controllers\", filename),\n template,\n );\n }\n}\n\ncli().register(GenerateControllerCommand);\n"],"mappings":";;AAAA,SAASA,WAAW;AACpB,SAASC,SAASC,cAAc;AAChC,SAASC,YAAY;AACrB,OAAOC,UAAU;AACjB,YAAYC,QAAQ;AACpB,SAASC,cAAc;AACvB,OAAOC,gBAAgB;AACvB,SAASC,qBAAqB;AAC9B,OAAOC,eAAe;AAEf,MAAMC,kCAAkCT,QAAAA;EAV/C,OAU+CA;;;EAC7C,OAAOU,QAAQ;IACb;MAAC;MAAQ;;IACT;MAAC;MAAY;;;EAGfC,OAAOV,OAAOW,OAAO;IAAEC,UAAU;EAAK,CAAA;EAEtC,MAAMC,UAAU;AACd,UAAMC,UAAUC,QAAQC,IAAG;AAE3B,UAAMC,OAAO,oBAAIC,KAAAA;AACjB,UAAMC,OAAOF,KAAKG,YAAW;AAC7B,UAAMC,QAAQV,OAAOM,KAAKK,SAAQ,IAAK,CAAA,EAAGC,SAAS,GAAG,GAAA;AACtD,UAAMC,MAAMb,OAAOM,KAAKQ,QAAO,CAAA,EAAIF,SAAS,GAAG,GAAA;AAC/C,UAAMG,eAAef,OACnBM,KAAKU,SAAQ,IAAK,OAAOV,KAAKW,WAAU,IAAK,KAAKX,KAAKY,WAAU,CAAA,EACjEN,SAAS,GAAG,GAAA;AAEd,UAAMO,aAAa7B,KAAK8B,MAAM,KAAKrB,IAAI;AACvC,UAAMsB,WAAW,GAAG/B,KAAKgC,QAAQ,KAAKvB,IAAI,CAAA;AAC1C,SAAKwB,QAAQC,OAAOC,MAAM,2BAA2BJ,QAAAA;CAAY;AAEjE,UAAM7B,GAAGkC,MAAMjC,OAAOkC,IAAI,gBAAA,GAAmB;MAAEC,WAAW;IAAK,CAAA;AAE/D,QAAIC,UAAU,OAAOC,cAAc,WAAWA,YAAYC;AAC1D,QAAI,CAACF,SAAS;AACZA,gBAAUtC,KAAKsC,QAAQlC,cAAc,YAAYqC,GAAG,CAAA;IACtD;AAEA,UAAMC,mBAAmBvC,WAAWwC,SACjC,MAAM1C,GAAG2C,SAAS5C,KAAK6C,KAAKP,SAAS,kBAAA,CAAA,GAAsBQ,SAAQ,CAAA;AAEtE,UAAMC,WAAW,MAAML,iBAAiB;MACtCM,WAAWjD,KAAKkD,OAAO,KAAKzC,IAAI;MAChC0C,WAAWnD,KAAKoD,MAAM9C,UAAU,KAAKG,IAAI,CAAA;IAC3C,CAAA;AAEA,UAAMP,GAAGmD,UACPpD,KAAK6C,KAAKjC,SAAS,uBAAuBkB,QAAAA,GAC1CiB,QAAAA;EAEJ;AACF;AAEAnD,IAAAA,EAAMyD,SAAS/C,yBAAAA;","names":["cli","Command","Option","Case","path","fs","config","handlebars","fileURLToPath","pluralize","GenerateControllerCommand","paths","name","String","required","execute","rootDir","process","cwd","date","Date","year","getFullYear","month","getMonth","padStart","day","getDate","secondsOfDay","getHours","getMinutes","getSeconds","fixed_name","snake","filename","capital","context","stdout","write","mkdir","get","recursive","dirname","__dirname","undefined","url","compiledTemplate","compile","readFile","join","toString","template","className","pascal","routeName","kebab","writeFile","register"]}
@@ -1,9 +0,0 @@
1
- export { MigrateCommand } from './migrate/MigrateCommand.js';
2
- export { MakeMigrateCommand } from './migrate/MakeMigrateCommand.js';
3
- export { MigrateRollbackCommand } from './migrate/MigrateRollbackCommand.js';
4
- export { StartCommand } from './StartCommand.js';
5
- export { DefaultCommand } from './DefaultCommand.js';
6
- export { KeyGenerateCommand } from './KeyGenerateCommand.js';
7
- export { GenerateControllerCommand } from './generate/GenerateControllerCommand.js';
8
- export { CreateProjectCommand } from './project/CreateProjectCommand.js';
9
- import 'clipanion';
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/app/console/index.ts"],"sourcesContent":["export * from \"./migrate\";\nexport * from \"./StartCommand\";\nexport * from \"./DefaultCommand\";\nexport * from \"./KeyGenerateCommand\";\nexport * from \"./generate\";\nexport * from \"./project/CreateProjectCommand\";\n\nimport { cli } from \"../../facades\";\nimport { CreateProjectCommand } from \"./project/CreateProjectCommand\";\n\ncli().register(CreateProjectCommand);\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAEd,SAASA,WAAW;AACpB,SAASC,4BAA4B;AAErCD,IAAAA,EAAME,SAASD,oBAAAA;","names":["cli","CreateProjectCommand","register"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/app/console/migrate/MakeMigrateCommand.ts"],"sourcesContent":["import { cli } from \"../../../facades\";\nimport { Command, Option } from \"clipanion\";\nimport { Case } from \"change-case-all\";\nimport path from \"path\";\nimport * as fs from \"fs/promises\";\nimport { config } from \"@devbro/neko-config\";\nimport handlebars from \"handlebars\";\nimport { fileURLToPath } from \"url\";\nimport { table } from \"console\";\n\nexport class MakeMigrateCommand extends Command {\n static paths = [\n [`make`, `migrate`],\n [\"make\", \"migration\"],\n ];\n\n name = Option.String({ required: true });\n\n async execute() {\n const date = new Date();\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const secondsOfDay = String(\n date.getHours() * 3600 + date.getMinutes() * 60 + date.getSeconds(),\n ).padStart(5, \"0\");\n\n const fixed_name = Case.snake(this.name);\n const filename = `${year}_${month}_${day}_${secondsOfDay}_${fixed_name}.ts`;\n this.context.stdout.write(`creating migration file ${filename}\\n`);\n\n await fs.mkdir(config.get(\"migration.path\"), { recursive: true });\n\n let dirname = typeof __dirname === \"string\" ? __dirname : undefined;\n if (!dirname) {\n dirname = path.dirname(fileURLToPath(import.meta.url));\n }\n\n const compiledTemplate = handlebars.compile(\n (\n await fs.readFile(path.join(dirname, \"./make_migration.tpl\"))\n ).toString(),\n );\n const template = await compiledTemplate({\n className: Case.pascal(this.name) + \"Migration\",\n tableName: Case.snake(this.name),\n });\n\n await fs.writeFile(\n path.join(config.get(\"migration.path\"), filename),\n template,\n );\n }\n}\n\ncli().register(MakeMigrateCommand);\n"],"mappings":";;AAAA,SAASA,WAAW;AACpB,SAASC,SAASC,cAAc;AAChC,SAASC,YAAY;AACrB,OAAOC,UAAU;AACjB,YAAYC,QAAQ;AACpB,SAASC,cAAc;AACvB,OAAOC,gBAAgB;AACvB,SAASC,qBAAqB;AAGvB,MAAMC,2BAA2BR,QAAAA;EAVxC,OAUwCA;;;EACtC,OAAOS,QAAQ;IACb;MAAC;MAAQ;;IACT;MAAC;MAAQ;;;EAGXC,OAAOT,OAAOU,OAAO;IAAEC,UAAU;EAAK,CAAA;EAEtC,MAAMC,UAAU;AACd,UAAMC,OAAO,oBAAIC,KAAAA;AACjB,UAAMC,OAAOF,KAAKG,YAAW;AAC7B,UAAMC,QAAQP,OAAOG,KAAKK,SAAQ,IAAK,CAAA,EAAGC,SAAS,GAAG,GAAA;AACtD,UAAMC,MAAMV,OAAOG,KAAKQ,QAAO,CAAA,EAAIF,SAAS,GAAG,GAAA;AAC/C,UAAMG,eAAeZ,OACnBG,KAAKU,SAAQ,IAAK,OAAOV,KAAKW,WAAU,IAAK,KAAKX,KAAKY,WAAU,CAAA,EACjEN,SAAS,GAAG,GAAA;AAEd,UAAMO,aAAazB,KAAK0B,MAAM,KAAKlB,IAAI;AACvC,UAAMmB,WAAW,GAAGb,IAAAA,IAAQE,KAAAA,IAASG,GAAAA,IAAOE,YAAAA,IAAgBI,UAAAA;AAC5D,SAAKG,QAAQC,OAAOC,MAAM,2BAA2BH,QAAAA;CAAY;AAEjE,UAAMzB,GAAG6B,MAAM5B,OAAO6B,IAAI,gBAAA,GAAmB;MAAEC,WAAW;IAAK,CAAA;AAE/D,QAAIC,UAAU,OAAOC,cAAc,WAAWA,YAAYC;AAC1D,QAAI,CAACF,SAAS;AACZA,gBAAUjC,KAAKiC,QAAQ7B,cAAc,YAAYgC,GAAG,CAAA;IACtD;AAEA,UAAMC,mBAAmBlC,WAAWmC,SAEhC,MAAMrC,GAAGsC,SAASvC,KAAKwC,KAAKP,SAAS,sBAAA,CAAA,GACrCQ,SAAQ,CAAA;AAEZ,UAAMC,WAAW,MAAML,iBAAiB;MACtCM,WAAW5C,KAAK6C,OAAO,KAAKrC,IAAI,IAAI;MACpCsC,WAAW9C,KAAK0B,MAAM,KAAKlB,IAAI;IACjC,CAAA;AAEA,UAAMN,GAAG6C,UACP9C,KAAKwC,KAAKtC,OAAO6B,IAAI,gBAAA,GAAmBL,QAAAA,GACxCgB,QAAAA;EAEJ;AACF;AAEA9C,IAAAA,EAAMmD,SAAS1C,kBAAAA;","names":["cli","Command","Option","Case","path","fs","config","handlebars","fileURLToPath","MakeMigrateCommand","paths","name","String","required","execute","date","Date","year","getFullYear","month","getMonth","padStart","day","getDate","secondsOfDay","getHours","getMinutes","getSeconds","fixed_name","snake","filename","context","stdout","write","mkdir","get","recursive","dirname","__dirname","undefined","url","compiledTemplate","compile","readFile","join","toString","template","className","pascal","tableName","writeFile","register"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/app/console/migrate/MigrateCommand.ts"],"sourcesContent":["import { cli, db as database, logger } from \"../../../facades\";\nimport { Command, Option } from \"clipanion\";\nimport { Blueprint } from \"@devbro/neko-sql\";\nimport { context_provider } from \"@devbro/neko-context\";\nimport path from \"path\";\nimport fs from \"fs/promises\";\nimport { config } from \"@devbro/neko-config\";\nimport { Migration } from \"@devbro/neko-sql\";\n\nexport class MigrateCommand extends Command {\n static paths = [[`migrate`]];\n\n fresh = Option.Boolean(\"--fresh\", false);\n\n async execute() {\n await context_provider.run(async () => {\n // this.context.stdout.write(`Hello Migrate Command!\\n`);\n const db = database();\n const schema = db.getSchema();\n\n if (this.fresh) {\n logger().info(\"dropping all tables!!\");\n let retry = true;\n let retry_count = 0;\n while (retry && retry_count < 10) {\n retry = false;\n retry_count++;\n const tables = await schema.tables();\n for (const table of tables) {\n logger().info(`dropping table ${table.name}`);\n try {\n await schema.dropTable(table.name);\n } catch {\n logger().info(`failed to drop ${table.name}`);\n retry = true;\n }\n }\n }\n }\n\n //create migration table if not exists\n if (!(await schema.tableExists(\"migrations\"))) {\n await schema.createTable(\"migrations\", (blueprint: Blueprint) => {\n blueprint.id();\n blueprint.timestamps();\n blueprint.string(\"filename\");\n blueprint.integer(\"batch\");\n });\n }\n\n const migrationsDir = config.get(\"migration.path\");\n let files: string[] = [];\n\n const dirEntries = await fs.readdir(migrationsDir);\n files = dirEntries\n .filter((entry) => entry.endsWith(\".ts\") || entry.endsWith(\".js\"))\n .sort();\n let batch_number = await db.runQuery({\n sql: \"select max(batch) as next_batch from migrations\",\n bindings: [],\n });\n batch_number = batch_number[0].next_batch || 0;\n batch_number++;\n\n const migrations = await db.runQuery({\n sql: \"select * from migrations order by created_at ASC\",\n bindings: [],\n });\n\n const completed_migrations = migrations.map((r: any) => r.filename);\n const pending_migrations = files.filter(\n (file) => !completed_migrations.includes(file),\n );\n\n let migrated_count = 0;\n for (const class_to_migrate of pending_migrations) {\n logger().info(`migrating up ${class_to_migrate}`);\n const ClassToMigrate = (\n await import(path.join(migrationsDir, class_to_migrate))\n ).default;\n const c: Migration = new ClassToMigrate();\n await c.up(db.getSchema());\n await db.runQuery({\n sql: \"insert into migrations (filename, batch) values ($1,$2)\",\n bindings: [class_to_migrate, batch_number],\n });\n migrated_count++;\n }\n\n if (migrated_count === 0) {\n logger().warn(\"no migrations to run!\");\n return;\n }\n\n logger().info(`migrated ${migrated_count} migrations successfully!`);\n });\n }\n}\n\ncli().register(MigrateCommand);\n"],"mappings":";;AAAA,SAASA,KAAKC,MAAMC,UAAUC,cAAc;AAC5C,SAASC,SAASC,cAAc;AAEhC,SAASC,wBAAwB;AACjC,OAAOC,UAAU;AACjB,OAAOC,QAAQ;AACf,SAASC,cAAc;AAGhB,MAAMC,uBAAuBN,QAAAA;EATpC,OASoCA;;;EAClC,OAAOO,QAAQ;IAAC;MAAC;;;EAEjBC,QAAQP,OAAOQ,QAAQ,WAAW,KAAA;EAElC,MAAMC,UAAU;AACd,UAAMR,iBAAiBS,IAAI,YAAA;AAEzB,YAAMd,KAAKC,SAAAA;AACX,YAAMc,SAASf,GAAGgB,UAAS;AAE3B,UAAI,KAAKL,OAAO;AACdT,eAAAA,EAASe,KAAK,uBAAA;AACd,YAAIC,QAAQ;AACZ,YAAIC,cAAc;AAClB,eAAOD,SAASC,cAAc,IAAI;AAChCD,kBAAQ;AACRC;AACA,gBAAMC,SAAS,MAAML,OAAOK,OAAM;AAClC,qBAAWC,SAASD,QAAQ;AAC1BlB,mBAAAA,EAASe,KAAK,kBAAkBI,MAAMC,IAAI,EAAE;AAC5C,gBAAI;AACF,oBAAMP,OAAOQ,UAAUF,MAAMC,IAAI;YACnC,QAAQ;AACNpB,qBAAAA,EAASe,KAAK,kBAAkBI,MAAMC,IAAI,EAAE;AAC5CJ,sBAAQ;YACV;UACF;QACF;MACF;AAGA,UAAI,CAAE,MAAMH,OAAOS,YAAY,YAAA,GAAgB;AAC7C,cAAMT,OAAOU,YAAY,cAAc,CAACC,cAAAA;AACtCA,oBAAUC,GAAE;AACZD,oBAAUE,WAAU;AACpBF,oBAAUG,OAAO,UAAA;AACjBH,oBAAUI,QAAQ,OAAA;QACpB,CAAA;MACF;AAEA,YAAMC,gBAAgBvB,OAAOwB,IAAI,gBAAA;AACjC,UAAIC,QAAkB,CAAA;AAEtB,YAAMC,aAAa,MAAM3B,GAAG4B,QAAQJ,aAAAA;AACpCE,cAAQC,WACLE,OAAO,CAACC,UAAUA,MAAMC,SAAS,KAAA,KAAUD,MAAMC,SAAS,KAAA,CAAA,EAC1DC,KAAI;AACP,UAAIC,eAAe,MAAMxC,GAAGyC,SAAS;QACnCC,KAAK;QACLC,UAAU,CAAA;MACZ,CAAA;AACAH,qBAAeA,aAAa,CAAA,EAAGI,cAAc;AAC7CJ;AAEA,YAAMK,aAAa,MAAM7C,GAAGyC,SAAS;QACnCC,KAAK;QACLC,UAAU,CAAA;MACZ,CAAA;AAEA,YAAMG,uBAAuBD,WAAWE,IAAI,CAACC,MAAWA,EAAEC,QAAQ;AAClE,YAAMC,qBAAqBjB,MAAMG,OAC/B,CAACe,SAAS,CAACL,qBAAqBM,SAASD,IAAAA,CAAAA;AAG3C,UAAIE,iBAAiB;AACrB,iBAAWC,oBAAoBJ,oBAAoB;AACjDhD,eAAAA,EAASe,KAAK,gBAAgBqC,gBAAAA,EAAkB;AAChD,cAAMC,kBACJ,MAAM,OAAOjD,KAAKkD,KAAKzB,eAAeuB,gBAAAA,IACtCG;AACF,cAAMC,IAAe,IAAIH,eAAAA;AACzB,cAAMG,EAAEC,GAAG3D,GAAGgB,UAAS,CAAA;AACvB,cAAMhB,GAAGyC,SAAS;UAChBC,KAAK;UACLC,UAAU;YAACW;YAAkBd;;QAC/B,CAAA;AACAa;MACF;AAEA,UAAIA,mBAAmB,GAAG;AACxBnD,eAAAA,EAAS0D,KAAK,uBAAA;AACd;MACF;AAEA1D,aAAAA,EAASe,KAAK,YAAYoC,cAAAA,2BAAyC;IACrE,CAAA;EACF;AACF;AAEAtD,IAAAA,EAAM8D,SAASpD,cAAAA;","names":["cli","db","database","logger","Command","Option","context_provider","path","fs","config","MigrateCommand","paths","fresh","Boolean","execute","run","schema","getSchema","info","retry","retry_count","tables","table","name","dropTable","tableExists","createTable","blueprint","id","timestamps","string","integer","migrationsDir","get","files","dirEntries","readdir","filter","entry","endsWith","sort","batch_number","runQuery","sql","bindings","next_batch","migrations","completed_migrations","map","r","filename","pending_migrations","file","includes","migrated_count","class_to_migrate","ClassToMigrate","join","default","c","up","warn","register"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/app/console/migrate/MigrateRollbackCommand.ts"],"sourcesContent":["import { cli, db as database } from \"../../../facades\";\nimport { Command, Option } from \"clipanion\";\nimport { context_provider } from \"@devbro/neko-context\";\nimport path from \"path\";\nimport fs from \"fs/promises\";\nimport { config } from \"@devbro/neko-config\";\nimport { Migration } from \"@devbro/neko-sql\";\nimport * as t from \"typanion\";\n\nexport class MigrateRollbackCommand extends Command {\n static paths = [[`migrate`, \"rollback\"]];\n\n steps = Option.String(`--steps`, {\n description: `how many migrations to rollback`,\n validator: t.isNumber(),\n });\n\n async execute() {\n await context_provider.run(async () => {\n // this.context.stdout.write(`Hello Migrate Command!\\n`);\n const db = database();\n const schema = db.getSchema();\n\n const migrationsDir = config.get(\"migration.path\");\n let files: string[] = [];\n\n const dirEntries = await fs.readdir(migrationsDir);\n files = dirEntries.filter((entry) => entry.endsWith(\".ts\")).sort();\n\n const migrations = await db.runQuery({\n sql: \"select * from migrations order by created_at DESC\",\n bindings: [],\n });\n\n const count = 0;\n for (const migration of migrations) {\n const class_to_migrate = migration.filename;\n this.context.stdout.write(`rolling back ${class_to_migrate}`);\n\n const ClassToMigrate = (\n await import(path.join(migrationsDir, class_to_migrate))\n ).default;\n\n const c: Migration = new ClassToMigrate();\n await c.down(db.getSchema());\n await db.runQuery({\n sql: \"delete from migrations where id = $1\",\n bindings: [migration.id],\n });\n }\n });\n }\n}\n\ncli().register(MigrateRollbackCommand);\n"],"mappings":";;AAAA,SAASA,KAAKC,MAAMC,gBAAgB;AACpC,SAASC,SAASC,cAAc;AAChC,SAASC,wBAAwB;AACjC,OAAOC,UAAU;AACjB,OAAOC,QAAQ;AACf,SAASC,cAAc;AAEvB,YAAYC,OAAO;AAEZ,MAAMC,+BAA+BP,QAAAA;EAT5C,OAS4CA;;;EAC1C,OAAOQ,QAAQ;IAAC;MAAC;MAAW;;;EAE5BC,QAAQR,OAAOS,OAAO,WAAW;IAC/BC,aAAa;IACbC,WAAWN,EAAEO,SAAQ;EACvB,CAAA;EAEA,MAAMC,UAAU;AACd,UAAMZ,iBAAiBa,IAAI,YAAA;AAEzB,YAAMjB,KAAKC,SAAAA;AACX,YAAMiB,SAASlB,GAAGmB,UAAS;AAE3B,YAAMC,gBAAgBb,OAAOc,IAAI,gBAAA;AACjC,UAAIC,QAAkB,CAAA;AAEtB,YAAMC,aAAa,MAAMjB,GAAGkB,QAAQJ,aAAAA;AACpCE,cAAQC,WAAWE,OAAO,CAACC,UAAUA,MAAMC,SAAS,KAAA,CAAA,EAAQC,KAAI;AAEhE,YAAMC,aAAa,MAAM7B,GAAG8B,SAAS;QACnCC,KAAK;QACLC,UAAU,CAAA;MACZ,CAAA;AAEA,YAAMC,QAAQ;AACd,iBAAWC,aAAaL,YAAY;AAClC,cAAMM,mBAAmBD,UAAUE;AACnC,aAAKC,QAAQC,OAAOC,MAAM,gBAAgBJ,gBAAAA,EAAkB;AAE5D,cAAMK,kBACJ,MAAM,OAAOnC,KAAKoC,KAAKrB,eAAee,gBAAAA,IACtCO;AAEF,cAAMC,IAAe,IAAIH,eAAAA;AACzB,cAAMG,EAAEC,KAAK5C,GAAGmB,UAAS,CAAA;AACzB,cAAMnB,GAAG8B,SAAS;UAChBC,KAAK;UACLC,UAAU;YAACE,UAAUW;;QACvB,CAAA;MACF;IACF,CAAA;EACF;AACF;AAEA9C,IAAAA,EAAM+C,SAASrC,sBAAAA;","names":["cli","db","database","Command","Option","context_provider","path","fs","config","t","MigrateRollbackCommand","paths","steps","String","description","validator","isNumber","execute","run","schema","getSchema","migrationsDir","get","files","dirEntries","readdir","filter","entry","endsWith","sort","migrations","runQuery","sql","bindings","count","migration","class_to_migrate","filename","context","stdout","write","ClassToMigrate","join","default","c","down","id","register"]}
@@ -1,4 +0,0 @@
1
- export { MigrateCommand } from './MigrateCommand.js';
2
- export { MakeMigrateCommand } from './MakeMigrateCommand.js';
3
- export { MigrateRollbackCommand } from './MigrateRollbackCommand.js';
4
- import 'clipanion';
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/app/console/migrate/index.ts"],"sourcesContent":["export * from \"./MigrateCommand\";\nexport * from \"./MakeMigrateCommand\";\nexport * from \"./MigrateRollbackCommand\";"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/app/console/project/CreateProjectCommand.ts"],"sourcesContent":["import { Command, Option } from \"clipanion\";\nimport { Case } from \"change-case-all\";\nimport path from \"path\";\nimport * as fs from \"fs/promises\";\nimport { fileURLToPath } from \"url\";\nimport handlebars from \"handlebars\";\nimport { execSync } from \"child_process\";\n\nexport class CreateProjectCommand extends Command {\n static paths = [[`create`, `project`]];\n\n static usage = Command.Usage({\n category: `Project`,\n description: `Create a new project`,\n details: `\n This command creates a new project with the specified name at the given path.\n If no path is provided, the project will be created in the current directory.\n `,\n examples: [\n [\n `Create a new project in specified directory`,\n `create project --path /path/to/my-project --git`,\n ],\n [\n `Create a new project at a specific path with git initialized`,\n `create project --path /path/to/my-project --git`,\n ],\n ],\n });\n\n projectPath = Option.String(\"--path\", { required: true });\n\n git = Option.Boolean(`--git`, false, {\n description: `Initialize a git repository in the new project`,\n });\n\n async folderExists(folderPath: string): Promise<boolean> {\n try {\n const stats = await fs.stat(folderPath);\n return stats.isDirectory();\n } catch (error: any) {\n if (error.code === \"ENOENT\") {\n return false; // Folder does not exist\n }\n throw error; // Other errors (e.g., permission issues)\n }\n }\n\n async execute() {\n // Create the project directory path by joining the specified path and project name\n const projectPath = path.join(this.projectPath);\n // Check if directory already exists\n try {\n await fs.access(projectPath);\n console.error(`Error: Directory ${projectPath} already exists.`);\n return 1;\n } catch {\n // Directory doesn't exist, we can proceed\n }\n\n await fs.mkdir(projectPath, { recursive: true });\n console.log(`Created project directory at: ${projectPath}`);\n\n let dirname =\n typeof __dirname === \"undefined\"\n ? path.dirname(fileURLToPath(import.meta.url))\n : __dirname;\n\n let basePath = path.join(dirname, `./base_project`);\n if ((await this.folderExists(basePath)) === false) {\n // we are running a compiled code that was bundled and the code is running from ./dist/bin/ folder.\n basePath = path.join(dirname, `../app/console/project/base_project`);\n }\n\n console.log(`Using base project path: ${basePath}`);\n //copy content of ./base_project to the new project directory\n const baseProjectPath = basePath;\n\n await this.processTplFolder(baseProjectPath, projectPath, {});\n console.log(`Copied base project files to: ${projectPath}`);\n\n //modify package.json with foldername\n const packageJsonPath = path.join(projectPath, `package.json`);\n const packageJson = JSON.parse(await fs.readFile(packageJsonPath, `utf-8`));\n packageJson.name = Case.snake(path.basename(projectPath));\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));\n console.log(`Updated package.json with project name: ${packageJson.name}`);\n\n if (this.git) {\n try {\n execSync(\n 'git init; git add --all; git commit --allow-empty -m \"chore: first commit for pashmak\"',\n {\n cwd: projectPath,\n },\n );\n } catch (error) {\n console.error(`Failed to create project.`, error);\n return 1;\n }\n }\n }\n\n async processTplFolder(src: string, dest: string, data: any = {}) {\n const files = await fs.readdir(src, { withFileTypes: true });\n for (const file of files) {\n const srcPath = path.join(src, file.name);\n const destPath =\n file.isFile() && file.name.endsWith(\".tpl\")\n ? path.join(dest, file.name.substring(0, file.name.length - 4))\n : path.join(dest, file.name);\n\n if (file.isDirectory()) {\n await fs.mkdir(destPath, { recursive: true });\n await this.processTplFolder(srcPath, destPath, data);\n } else if (file.name.endsWith(\".tpl\")) {\n await this.processTplFile(srcPath, destPath, {});\n } else {\n throw new Error(\n \"unexpected non tpl file: \" + srcPath + \" \" + file.name,\n );\n }\n }\n }\n\n async processTplFile(src: string, dest: string, data: any = {}) {\n const compiledTemplate = handlebars.compile(\n (await fs.readFile(src)).toString(),\n );\n const template = await compiledTemplate(data);\n await fs.writeFile(dest, template);\n }\n}\n"],"mappings":"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","names":["Command","Option","Case","path","fs","fileURLToPath","handlebars","execSync","CreateProjectCommand","paths","usage","Usage","category","description","details","examples","projectPath","String","required","git","Boolean","folderExists","folderPath","stats","stat","isDirectory","error","code","execute","join","access","console","mkdir","recursive","log","dirname","__dirname","url","basePath","baseProjectPath","processTplFolder","packageJsonPath","packageJson","JSON","parse","readFile","name","snake","basename","writeFile","stringify","cwd","src","dest","data","files","readdir","withFileTypes","file","srcPath","destPath","isFile","endsWith","substring","length","processTplFile","Error","compiledTemplate","compile","toString","template"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/config.ts"],"sourcesContent":["export * from \"@devbro/neko-config\";\n"],"mappings":"AAAA,cAAc;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/context.ts"],"sourcesContent":["export * from \"@devbro/neko-context\";\n"],"mappings":"AAAA,cAAc;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/facades.ts"],"sourcesContent":["import { Router } from \"./router\";\nimport { Schedule, Scheduler } from \"@devbro/neko-scheduler\";\nimport { createSingleton } from \"@devbro/neko-helper\";\nimport { ctx, ctxSafe } from \"@devbro/neko-context\";\nimport { Connection } from \"@devbro/neko-sql\";\nimport { Storage, StorageFactory } from \"@devbro/neko-storage\";\nimport {\n Mailer,\n Mailable,\n MailerProvider,\n FunctionProvider,\n SESProvider,\n SMTPProvider,\n MemoryProvider,\n} from \"@devbro/neko-mailer\";\nimport { config } from \"@devbro/neko-config\";\nimport { Cli } from \"clipanion\";\nimport { HttpServer } from \"./http\";\nimport { HttpError } from \"./http\";\nimport * as yup from \"yup\";\nimport { Logger } from \"@devbro/neko-logger\";\n\nexport const router = createSingleton<Router>(() => new Router());\nexport const scheduler = createSingleton<Scheduler>(() => {\n const rc = new Scheduler();\n rc.setErrorHandler((err: any, job: Schedule) => {\n logger().error({\n msg: \"Scheduled job error\",\n err,\n job_name: job.getName(),\n });\n });\n return rc;\n});\nexport const db = (label = \"default\") =>\n ctx().getOrThrow<Connection>([\"database\", label]);\n\nexport const storage = createSingleton<Storage>((label: string = \"default\") =>\n StorageFactory.create(config.get([\"storages\", label].join(\".\"))),\n);\n\nexport const cli = createSingleton<Cli>(() => {\n const [node, app, ...args] = process.argv;\n return new Cli({\n binaryLabel: `My Application`,\n binaryName: `${node} ${app}`,\n binaryVersion: `1.0.0`,\n });\n});\n\nexport const httpServer = createSingleton<HttpServer>(() => {\n const server = new HttpServer();\n\n server.setErrorHandler(async (err: Error, req: any, res: any) => {\n if (err instanceof HttpError) {\n res.writeHead(err.statusCode, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ message: err.message, error: err.code }));\n logger().warn({ msg: \"HttpError: \" + err.message, err });\n return;\n } else if (err instanceof yup.ValidationError) {\n res.writeHead(422, { \"Content-Type\": \"application/json\" });\n const errs: any = {};\n err.inner.forEach((e: yup.ValidationError) => {\n // Sanitize sensitive fields\n const sanitizedParams = { ...e.params };\n if (/passw/i.test(e.path!)) {\n sanitizedParams.value = \"******\";\n sanitizedParams.originalValue = \"******\";\n }\n\n errs[e.path!] = {\n type: e.type,\n message: e.message,\n params: sanitizedParams,\n };\n });\n\n res.end(JSON.stringify({ message: \"validation error\", errors: errs }));\n logger().warn({ msg: \"ValidationError: \" + err.message, err });\n return;\n } else {\n logger().error({ msg: \"Error: \" + err.message, err });\n }\n res.writeHead(500, { \"Content-Type\": \"\" });\n res.end(JSON.stringify({ error: \"Internal Server Error\" }));\n });\n server.setRouter(router());\n\n return server;\n});\n\nexport const logger = createSingleton<Logger>((label) => {\n const logger_config: any = config.get([\"loggers\", label].join(\".\"));\n const rc = new Logger(logger_config);\n rc.setExtrasFunction((message: any) => {\n message.requestId = ctxSafe()?.get(\"requestId\") || \"N/A\";\n return message;\n });\n\n return rc;\n});\n\nexport const mailer = createSingleton((label) => {\n const mailer_config: any = config.get([\"mailer\", label].join(\".\"));\n let provider: MailerProvider | undefined;\n\n if (mailer_config.provider === \"logger\") {\n provider = new FunctionProvider((mail: Mailable) => {\n logger().info({\n msg: \"Sending email\",\n mail,\n });\n });\n } else if (mailer_config.provider === \"SES\") {\n provider = new SESProvider(mailer_config.config);\n } else if (mailer_config.provider === \"SMTP\") {\n provider = new SMTPProvider(mailer_config.config);\n } else if (mailer_config.provider === \"MEMORY\") {\n provider = new MemoryProvider();\n }\n\n if (!provider) {\n throw new Error(\n `cannot initiate mailer provider: ${mailer_config?.provider}`,\n );\n }\n\n const rc = new Mailer(provider);\n return rc;\n});\n"],"mappings":";;AAAA,SAASA,cAAc;AACvB,SAAmBC,iBAAiB;AACpC,SAASC,uBAAuB;AAChC,SAASC,KAAKC,eAAe;AAE7B,SAAkBC,sBAAsB;AACxC,SACEC,QAGAC,kBACAC,aACAC,cACAC,sBACK;AACP,SAASC,cAAc;AACvB,SAASC,WAAW;AACpB,SAASC,kBAAkB;AAC3B,SAASC,iBAAiB;AAC1B,YAAYC,SAAS;AACrB,SAASC,cAAc;AAEhB,MAAMC,SAASf,gBAAwB,MAAM,IAAIF,OAAAA,CAAAA;AACjD,MAAMkB,YAAYhB,gBAA2B,MAAA;AAClD,QAAMiB,KAAK,IAAIlB,UAAAA;AACfkB,KAAGC,gBAAgB,CAACC,KAAUC,QAAAA;AAC5BC,WAAAA,EAASC,MAAM;MACbC,KAAK;MACLJ;MACAK,UAAUJ,IAAIK,QAAO;IACvB,CAAA;EACF,CAAA;AACA,SAAOR;AACT,CAAA;AACO,MAAMS,KAAK,wBAACC,QAAQ,cACzB1B,IAAAA,EAAM2B,WAAuB;EAAC;EAAYD;CAAM,GADhC;AAGX,MAAME,UAAU7B,gBAAyB,CAAC2B,QAAgB,cAC/DxB,eAAe2B,OAAOrB,OAAOsB,IAAI;EAAC;EAAYJ;EAAOK,KAAK,GAAA,CAAA,CAAA,CAAA;AAGrD,MAAMC,MAAMjC,gBAAqB,MAAA;AACtC,QAAM,CAACkC,MAAMC,KAAK,GAAGC,IAAAA,IAAQC,QAAQC;AACrC,SAAO,IAAI5B,IAAI;IACb6B,aAAa;IACbC,YAAY,GAAGN,IAAAA,IAAQC,GAAAA;IACvBM,eAAe;EACjB,CAAA;AACF,CAAA;AAEO,MAAMC,aAAa1C,gBAA4B,MAAA;AACpD,QAAM2C,SAAS,IAAIhC,WAAAA;AAEnBgC,SAAOzB,gBAAgB,OAAOC,KAAYyB,KAAUC,QAAAA;AAClD,QAAI1B,eAAeP,WAAW;AAC5BiC,UAAIC,UAAU3B,IAAI4B,YAAY;QAAE,gBAAgB;MAAmB,CAAA;AACnEF,UAAIG,IAAIC,KAAKC,UAAU;QAAEC,SAAShC,IAAIgC;QAAS7B,OAAOH,IAAIiC;MAAK,CAAA,CAAA;AAC/D/B,aAAAA,EAASgC,KAAK;QAAE9B,KAAK,gBAAgBJ,IAAIgC;QAAShC;MAAI,CAAA;AACtD;IACF,WAAWA,eAAeN,IAAIyC,iBAAiB;AAC7CT,UAAIC,UAAU,KAAK;QAAE,gBAAgB;MAAmB,CAAA;AACxD,YAAMS,OAAY,CAAC;AACnBpC,UAAIqC,MAAMC,QAAQ,CAACC,MAAAA;AAEjB,cAAMC,kBAAkB;UAAE,GAAGD,EAAEE;QAAO;AACtC,YAAI,SAASC,KAAKH,EAAEI,IAAI,GAAI;AAC1BH,0BAAgBI,QAAQ;AACxBJ,0BAAgBK,gBAAgB;QAClC;AAEAT,aAAKG,EAAEI,IAAI,IAAK;UACdG,MAAMP,EAAEO;UACRd,SAASO,EAAEP;UACXS,QAAQD;QACV;MACF,CAAA;AAEAd,UAAIG,IAAIC,KAAKC,UAAU;QAAEC,SAAS;QAAoBe,QAAQX;MAAK,CAAA,CAAA;AACnElC,aAAAA,EAASgC,KAAK;QAAE9B,KAAK,sBAAsBJ,IAAIgC;QAAShC;MAAI,CAAA;AAC5D;IACF,OAAO;AACLE,aAAAA,EAASC,MAAM;QAAEC,KAAK,YAAYJ,IAAIgC;QAAShC;MAAI,CAAA;IACrD;AACA0B,QAAIC,UAAU,KAAK;MAAE,gBAAgB;IAAG,CAAA;AACxCD,QAAIG,IAAIC,KAAKC,UAAU;MAAE5B,OAAO;IAAwB,CAAA,CAAA;EAC1D,CAAA;AACAqB,SAAOwB,UAAUpD,OAAAA,CAAAA;AAEjB,SAAO4B;AACT,CAAA;AAEO,MAAMtB,SAASrB,gBAAwB,CAAC2B,UAAAA;AAC7C,QAAMyC,gBAAqB3D,OAAOsB,IAAI;IAAC;IAAWJ;IAAOK,KAAK,GAAA,CAAA;AAC9D,QAAMf,KAAK,IAAIH,OAAOsD,aAAAA;AACtBnD,KAAGoD,kBAAkB,CAAClB,YAAAA;AACpBA,YAAQmB,YAAYpE,QAAAA,GAAW6B,IAAI,WAAA,KAAgB;AACnD,WAAOoB;EACT,CAAA;AAEA,SAAOlC;AACT,CAAA;AAEO,MAAMsD,SAASvE,gBAAgB,CAAC2B,UAAAA;AACrC,QAAM6C,gBAAqB/D,OAAOsB,IAAI;IAAC;IAAUJ;IAAOK,KAAK,GAAA,CAAA;AAC7D,MAAIyC;AAEJ,MAAID,cAAcC,aAAa,UAAU;AACvCA,eAAW,IAAIpE,iBAAiB,CAACqE,SAAAA;AAC/BrD,aAAAA,EAASsD,KAAK;QACZpD,KAAK;QACLmD;MACF,CAAA;IACF,CAAA;EACF,WAAWF,cAAcC,aAAa,OAAO;AAC3CA,eAAW,IAAInE,YAAYkE,cAAc/D,MAAM;EACjD,WAAW+D,cAAcC,aAAa,QAAQ;AAC5CA,eAAW,IAAIlE,aAAaiE,cAAc/D,MAAM;EAClD,WAAW+D,cAAcC,aAAa,UAAU;AAC9CA,eAAW,IAAIjE,eAAAA;EACjB;AAEA,MAAI,CAACiE,UAAU;AACb,UAAM,IAAIG,MACR,oCAAoCJ,eAAeC,QAAAA,EAAU;EAEjE;AAEA,QAAMxD,KAAK,IAAIb,OAAOqE,QAAAA;AACtB,SAAOxD;AACT,CAAA;","names":["Router","Scheduler","createSingleton","ctx","ctxSafe","StorageFactory","Mailer","FunctionProvider","SESProvider","SMTPProvider","MemoryProvider","config","Cli","HttpServer","HttpError","yup","Logger","router","scheduler","rc","setErrorHandler","err","job","logger","error","msg","job_name","getName","db","label","getOrThrow","storage","create","get","join","cli","node","app","args","process","argv","binaryLabel","binaryName","binaryVersion","httpServer","server","req","res","writeHead","statusCode","end","JSON","stringify","message","code","warn","ValidationError","errs","inner","forEach","e","sanitizedParams","params","test","path","value","originalValue","type","errors","setRouter","logger_config","setExtrasFunction","requestId","mailer","mailer_config","provider","mail","info","Error"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/helper.ts"],"sourcesContent":["export * from \"@devbro/neko-helper\";\n"],"mappings":"AAAA,cAAc;","names":[]}
package/dist/http.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/http.ts"],"sourcesContent":["export * from \"@devbro/neko-http\";\n"],"mappings":"AAAA,cAAc;","names":[]}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import dotenv from \"dotenv\";\nimport { context_provider } from \"@devbro/neko-context\";\nimport { Middleware } from \"@devbro/neko-router\";\nimport { runNext } from \"@devbro/neko-router\";\nimport { Request, Response } from \"@devbro/neko-router\";\nimport { config } from \"@devbro/neko-config\";\n\nexport { config };\nexport async function bootstrap(options: { root_dir: string }): Promise<void> {\n // This function is used to bootstrap the application.\n // It can be used to initialize the application, load configuration, etc.\n // Currently, it does nothing but can be extended in the future.\n dotenv.config();\n\n console.log(\"Bootstrapping application...\");\n console.log(`Root directory: ${options.root_dir}`);\n let a = (await import(`${options.root_dir}/config/default`)).default;\n config.load(a);\n\n console.log(\"Loading application modules...\");\n await import(`./app/console`);\n console.log(\"Loading Database Provider ...\");\n const { DatabaseServiceProvider } = await import(\"./DatabaseServiceProvider\");\n\n console.log(\"Setting up pre-loader for context provider...\");\n context_provider.setPreLoader(async (f: Function) => {\n const middlewares: Middleware[] = [];\n // do I need to use ServiceProvider like a middleware or can I get rid of this logic?\n middlewares.push(DatabaseServiceProvider.getInstance());\n\n return await runNext(\n middlewares,\n {} as Request,\n {} as Response,\n // @ts-ignore\n f,\n );\n });\n console.log(\"Application bootstrapped successfully.\");\n}\n"],"mappings":";;AAAA,OAAOA,YAAY;AACnB,SAASC,wBAAwB;AAEjC,SAASC,eAAe;AAExB,SAASC,cAAc;AAGvB,eAAsBC,UAAUC,SAA6B;AAI3DL,SAAOG,OAAM;AAEbG,UAAQC,IAAI,8BAAA;AACZD,UAAQC,IAAI,mBAAmBF,QAAQG,QAAQ,EAAE;AACjD,MAAIC,KAAK,MAAM,OAAO,GAAGJ,QAAQG,QAAQ,oBAAoBE;AAC7DP,SAAOQ,KAAKF,CAAAA;AAEZH,UAAQC,IAAI,gCAAA;AACZ,QAAM,OAAO,eAAe;AAC5BD,UAAQC,IAAI,+BAAA;AACZ,QAAM,EAAEK,wBAAuB,IAAK,MAAM,OAAO,2BAAA;AAEjDN,UAAQC,IAAI,+CAAA;AACZN,mBAAiBY,aAAa,OAAOC,MAAAA;AACnC,UAAMC,cAA4B,CAAA;AAElCA,gBAAYC,KAAKJ,wBAAwBK,YAAW,CAAA;AAEpD,WAAO,MAAMf;MACXa;MACA,CAAC;MACD,CAAC;;MAEDD;IAAAA;EAEJ,CAAA;AACAR,UAAQC,IAAI,wCAAA;AACd;AA/BsBH;","names":["dotenv","context_provider","runNext","config","bootstrap","options","console","log","root_dir","a","default","load","DatabaseServiceProvider","setPreLoader","f","middlewares","push","getInstance"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/logger.ts"],"sourcesContent":["export * from \"@devbro/neko-logger\";\n"],"mappings":"AAAA,cAAc;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/mailer.ts"],"sourcesContent":["export * from \"@devbro/neko-mailer\";\n"],"mappings":"AAAA,cAAc;","names":[]}