@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.
- package/dist/{DatabaseServiceProvider.js → DatabaseServiceProvider.mjs} +5 -9
- package/dist/DatabaseServiceProvider.mjs.map +1 -0
- package/dist/app/console/{DefaultCommand.js → DefaultCommand.mjs} +2 -2
- package/dist/app/console/DefaultCommand.mjs.map +1 -0
- package/dist/app/console/{KeyGenerateCommand.js → KeyGenerateCommand.mjs} +6 -6
- package/dist/app/console/KeyGenerateCommand.mjs.map +1 -0
- package/dist/app/console/{StartCommand.js → StartCommand.mjs} +2 -2
- package/dist/app/console/StartCommand.mjs.map +1 -0
- package/dist/app/console/generate/{GenerateControllerCommand.js → GenerateControllerCommand.mjs} +3 -2
- package/dist/app/console/generate/GenerateControllerCommand.mjs.map +1 -0
- package/dist/app/console/generate/controller.tpl +14 -3
- package/dist/app/console/generate/{index.d.ts → index.d.mts} +1 -1
- package/dist/app/console/generate/{index.js → index.mjs} +1 -1
- package/dist/app/console/index.d.mts +9 -0
- package/dist/app/console/{index.js → index.mjs} +2 -2
- package/dist/app/console/index.mjs.map +1 -0
- package/dist/app/console/migrate/{MakeMigrateCommand.d.ts → GenerateMigrateCommand.d.mts} +2 -2
- package/dist/app/console/migrate/{MakeMigrateCommand.js → GenerateMigrateCommand.mjs} +8 -8
- package/dist/app/console/migrate/GenerateMigrateCommand.mjs.map +1 -0
- package/dist/app/console/migrate/{MigrateCommand.js → MigrateCommand.mjs} +2 -2
- package/dist/app/console/migrate/MigrateCommand.mjs.map +1 -0
- package/dist/app/console/migrate/{MigrateRollbackCommand.js → MigrateRollbackCommand.mjs} +2 -2
- package/dist/app/console/migrate/MigrateRollbackCommand.mjs.map +1 -0
- package/dist/app/console/migrate/index.d.mts +4 -0
- package/dist/app/console/migrate/{index.js → index.mjs} +2 -2
- package/dist/app/console/migrate/index.mjs.map +1 -0
- package/dist/app/console/project/{CreateProjectCommand.js → CreateProjectCommand.mjs} +2 -2
- package/dist/app/console/project/CreateProjectCommand.mjs.map +1 -0
- package/dist/app/console/project/base_project/package.json.tpl +1 -1
- package/dist/bin/DatabaseServiceProvider.cjs +88 -0
- package/dist/bin/app/console/DefaultCommand.cjs +506 -0
- package/dist/bin/app/console/KeyGenerateCommand.cjs +554 -0
- package/dist/bin/app/console/StartCommand.cjs +520 -0
- package/dist/bin/app/console/generate/GenerateControllerCommand.cjs +532 -0
- package/dist/bin/app/console/generate/index.cjs +532 -0
- package/dist/bin/app/console/index.cjs +2167 -0
- package/dist/bin/app/console/migrate/GenerateMigrateCommand.cjs +529 -0
- package/dist/bin/app/console/migrate/MigrateCommand.cjs +565 -0
- package/dist/bin/app/console/migrate/MigrateRollbackCommand.cjs +1684 -0
- package/dist/bin/app/console/migrate/index.cjs +1829 -0
- package/dist/bin/app/console/project/CreateProjectCommand.cjs +155 -0
- package/dist/bin/{pashmak_cli.cjs → bin/pashmak_cli.cjs} +4 -4
- package/dist/bin/config.cjs +24 -0
- package/dist/bin/context.cjs +24 -0
- package/dist/bin/facades.cjs +491 -0
- package/dist/bin/helper.cjs +24 -0
- package/dist/bin/http.cjs +24 -0
- package/dist/bin/index.cjs +2452 -0
- package/dist/bin/logger.cjs +24 -0
- package/dist/bin/mailer.cjs +24 -0
- package/dist/bin/middlewares.cjs +512 -0
- package/dist/bin/orm.cjs +24 -0
- package/dist/bin/{pashmak_cli.js → pashmak_cli.mjs} +1 -1
- package/dist/bin/router.cjs +547 -0
- package/dist/bin/sql.cjs +24 -0
- package/dist/{config.js → config.mjs} +1 -1
- package/dist/config.mjs.map +1 -0
- package/dist/{context.js → context.mjs} +1 -1
- package/dist/context.mjs.map +1 -0
- package/dist/{facades.js → facades.mjs} +30 -57
- package/dist/facades.mjs.map +1 -0
- package/dist/{helper.js → helper.mjs} +1 -1
- package/dist/helper.mjs.map +1 -0
- package/dist/{http.js → http.mjs} +1 -1
- package/dist/http.mjs.map +1 -0
- package/dist/{index.js → index.mjs} +2 -2
- package/dist/index.mjs.map +1 -0
- package/dist/{logger.js → logger.mjs} +1 -1
- package/dist/logger.mjs.map +1 -0
- package/dist/{mailer.js → mailer.mjs} +1 -1
- package/dist/mailer.mjs.map +1 -0
- package/dist/{middlewares.js → middlewares.mjs} +3 -5
- package/dist/middlewares.mjs.map +1 -0
- package/dist/{orm.js → orm.mjs} +1 -1
- package/dist/orm.mjs.map +1 -0
- package/dist/{router.d.ts → router.d.mts} +1 -1
- package/dist/{router.js → router.mjs} +2 -4
- package/dist/router.mjs.map +1 -0
- package/dist/{sql.js → sql.mjs} +1 -1
- package/dist/sql.mjs.map +1 -0
- package/package.json +14 -15
- package/dist/DatabaseServiceProvider.js.map +0 -1
- package/dist/app/console/DefaultCommand.js.map +0 -1
- package/dist/app/console/KeyGenerateCommand.js.map +0 -1
- package/dist/app/console/StartCommand.js.map +0 -1
- package/dist/app/console/generate/GenerateControllerCommand.js.map +0 -1
- package/dist/app/console/index.d.ts +0 -9
- package/dist/app/console/index.js.map +0 -1
- package/dist/app/console/migrate/MakeMigrateCommand.js.map +0 -1
- package/dist/app/console/migrate/MigrateCommand.js.map +0 -1
- package/dist/app/console/migrate/MigrateRollbackCommand.js.map +0 -1
- package/dist/app/console/migrate/index.d.ts +0 -4
- package/dist/app/console/migrate/index.js.map +0 -1
- package/dist/app/console/project/CreateProjectCommand.js.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/context.js.map +0 -1
- package/dist/facades.js.map +0 -1
- package/dist/helper.js.map +0 -1
- package/dist/http.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logger.js.map +0 -1
- package/dist/mailer.js.map +0 -1
- package/dist/middlewares.js.map +0 -1
- package/dist/orm.js.map +0 -1
- package/dist/router.js.map +0 -1
- package/dist/sql.js.map +0 -1
- /package/dist/{DatabaseServiceProvider.d.ts → DatabaseServiceProvider.d.mts} +0 -0
- /package/dist/app/console/{DefaultCommand.d.ts → DefaultCommand.d.mts} +0 -0
- /package/dist/app/console/{KeyGenerateCommand.d.ts → KeyGenerateCommand.d.mts} +0 -0
- /package/dist/app/console/{StartCommand.d.ts → StartCommand.d.mts} +0 -0
- /package/dist/app/console/generate/{GenerateControllerCommand.d.ts → GenerateControllerCommand.d.mts} +0 -0
- /package/dist/app/console/generate/{index.js.map → index.mjs.map} +0 -0
- /package/dist/app/console/migrate/{MigrateCommand.d.ts → MigrateCommand.d.mts} +0 -0
- /package/dist/app/console/migrate/{MigrateRollbackCommand.d.ts → MigrateRollbackCommand.d.mts} +0 -0
- /package/dist/app/console/project/{CreateProjectCommand.d.ts → CreateProjectCommand.d.mts} +0 -0
- /package/dist/bin/{pashmak_cli.d.ts → pashmak_cli.d.mts} +0 -0
- /package/dist/bin/{pashmak_cli.js.map → pashmak_cli.mjs.map} +0 -0
- /package/dist/{config.d.ts → config.d.mts} +0 -0
- /package/dist/{context.d.ts → context.d.mts} +0 -0
- /package/dist/{facades.d.ts → facades.d.mts} +0 -0
- /package/dist/{helper.d.ts → helper.d.mts} +0 -0
- /package/dist/{http.d.ts → http.d.mts} +0 -0
- /package/dist/{index.d.ts → index.d.mts} +0 -0
- /package/dist/{logger.d.ts → logger.d.mts} +0 -0
- /package/dist/{mailer.d.ts → mailer.d.mts} +0 -0
- /package/dist/{middlewares.d.ts → middlewares.d.mts} +0 -0
- /package/dist/{orm.d.ts → orm.d.mts} +0 -0
- /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 {
|
|
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
|
-
|
|
29
|
-
label
|
|
30
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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":[]}
|
package/dist/{orm.js → orm.mjs}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from "@devbro/neko-orm";
|
|
2
|
-
//# sourceMappingURL=orm.
|
|
2
|
+
//# sourceMappingURL=orm.mjs.map
|
package/dist/orm.mjs.map
ADDED
|
@@ -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.
|
|
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":[]}
|
package/dist/{sql.js → sql.mjs}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from "@devbro/neko-sql";
|
|
2
|
-
//# sourceMappingURL=sql.
|
|
2
|
+
//# sourceMappingURL=sql.mjs.map
|
package/dist/sql.mjs.map
ADDED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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 +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"]}
|
package/dist/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts"],"sourcesContent":["export * from \"@devbro/neko-config\";\n"],"mappings":"AAAA,cAAc;","names":[]}
|
package/dist/context.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/context.ts"],"sourcesContent":["export * from \"@devbro/neko-context\";\n"],"mappings":"AAAA,cAAc;","names":[]}
|
package/dist/facades.js.map
DELETED
|
@@ -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":"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","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"]}
|
package/dist/helper.js.map
DELETED
|
@@ -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"]}
|
package/dist/logger.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/logger.ts"],"sourcesContent":["export * from \"@devbro/neko-logger\";\n"],"mappings":"AAAA,cAAc;","names":[]}
|
package/dist/mailer.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/mailer.ts"],"sourcesContent":["export * from \"@devbro/neko-mailer\";\n"],"mappings":"AAAA,cAAc;","names":[]}
|