@devbro/pashmak 0.1.46 → 0.1.48
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/bin/app/console/DefaultCommand.cjs +22 -19
- package/dist/bin/app/console/KeyGenerateCommand.cjs +22 -19
- package/dist/bin/app/console/StartCommand.cjs +22 -19
- package/dist/bin/app/console/generate/GenerateApiDocsCommand.cjs +22 -19
- package/dist/bin/app/console/generate/GenerateControllerCommand.cjs +22 -19
- package/dist/bin/app/console/generate/index.cjs +22 -19
- package/dist/bin/app/console/index.cjs +22 -19
- package/dist/bin/app/console/migrate/GenerateMigrateCommand.cjs +22 -19
- package/dist/bin/app/console/migrate/MigrateCommand.cjs +22 -19
- package/dist/bin/app/console/migrate/MigrateRollbackCommand.cjs +22 -19
- package/dist/bin/app/console/migrate/index.cjs +22 -19
- package/dist/bin/app/console/queue/GenerateQueueMigrateCommand.cjs +22 -19
- package/dist/bin/cache.cjs +22 -19
- package/dist/bin/facades.cjs +22 -19
- package/dist/bin/factories.cjs +22 -19
- package/dist/bin/http.cjs +711 -0
- package/dist/bin/index.cjs +24 -19
- package/dist/bin/middlewares.cjs +24 -21
- package/dist/bin/queue.cjs +22 -19
- package/dist/bin/router.cjs +43 -11
- package/dist/config.d.mts +0 -1
- package/dist/facades.mjs +3 -15
- package/dist/facades.mjs.map +1 -1
- package/dist/factories.mjs.map +1 -1
- package/dist/http.d.mts +4 -0
- package/dist/http.mjs +20 -0
- package/dist/http.mjs.map +1 -1
- package/dist/router.d.mts +1 -1
- package/dist/router.mjs +40 -6
- package/dist/router.mjs.map +1 -1
- package/package.json +1 -10
package/dist/bin/index.cjs
CHANGED
|
@@ -180,20 +180,18 @@ var init_CompiledRoute = __esm({
|
|
|
180
180
|
const header_content_type = res.getHeader("Content-Type");
|
|
181
181
|
if (controller_rc instanceof import_stream.Stream || Buffer.isBuffer(controller_rc)) {
|
|
182
182
|
await this.writeAsync(res, controller_rc);
|
|
183
|
-
res.end();
|
|
184
183
|
} else if (!header_content_type && typeof controller_rc === "object") {
|
|
185
184
|
res.setHeader("Content-Type", "application/json");
|
|
186
|
-
res.
|
|
185
|
+
res.write(this.convertToString(controller_rc));
|
|
187
186
|
} else if (!header_content_type) {
|
|
188
187
|
res.setHeader("Content-Type", "text/plain");
|
|
189
|
-
res.
|
|
188
|
+
res.write(this.convertToString(controller_rc));
|
|
190
189
|
} else {
|
|
191
|
-
res.
|
|
190
|
+
res.write(this.convertToString(controller_rc));
|
|
192
191
|
}
|
|
193
192
|
return;
|
|
194
193
|
} else {
|
|
195
194
|
res.statusCode = [200].includes(res.statusCode) ? 204 : res.statusCode;
|
|
196
|
-
res.end();
|
|
197
195
|
}
|
|
198
196
|
}
|
|
199
197
|
async writeAsync(res, chunk) {
|
|
@@ -557,10 +555,29 @@ var init_router = __esm({
|
|
|
557
555
|
|
|
558
556
|
// src/http.mts
|
|
559
557
|
var http_exports = {};
|
|
558
|
+
__export(http_exports, {
|
|
559
|
+
handleHttpErrors: () => handleHttpErrors
|
|
560
|
+
});
|
|
561
|
+
async function handleHttpErrors(err, req, res) {
|
|
562
|
+
if (err instanceof import_neko_http.HttpError) {
|
|
563
|
+
res.writeHead(err.statusCode, { "Content-Type": "application/json" });
|
|
564
|
+
res.write(JSON.stringify({ message: err.message, error: err.code }));
|
|
565
|
+
logger().warn({ msg: "HttpError: " + err.message, err });
|
|
566
|
+
return;
|
|
567
|
+
} else {
|
|
568
|
+
logger().error({ msg: "Error: " + err.message, err });
|
|
569
|
+
}
|
|
570
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
571
|
+
res.write(JSON.stringify({ error: "Internal Server Error" }));
|
|
572
|
+
}
|
|
573
|
+
var import_neko_http;
|
|
560
574
|
var init_http = __esm({
|
|
561
575
|
"src/http.mts"() {
|
|
562
576
|
"use strict";
|
|
577
|
+
import_neko_http = require("@devbro/neko-http");
|
|
578
|
+
init_facades();
|
|
563
579
|
__reExport(http_exports, require("@devbro/neko-http"));
|
|
580
|
+
__name(handleHttpErrors, "handleHttpErrors");
|
|
564
581
|
}
|
|
565
582
|
});
|
|
566
583
|
|
|
@@ -795,18 +812,7 @@ var init_facades = __esm({
|
|
|
795
812
|
});
|
|
796
813
|
httpServer = (0, import_neko_helper2.createSingleton)(() => {
|
|
797
814
|
const server = new http_exports.HttpServer();
|
|
798
|
-
server.setErrorHandler(
|
|
799
|
-
if (err instanceof http_exports.HttpError) {
|
|
800
|
-
res.writeHead(err.statusCode, { "Content-Type": "application/json" });
|
|
801
|
-
res.end(JSON.stringify({ message: err.message, error: err.code }));
|
|
802
|
-
logger().warn({ msg: "HttpError: " + err.message, err });
|
|
803
|
-
return;
|
|
804
|
-
} else {
|
|
805
|
-
logger().error({ msg: "Error: " + err.message, err });
|
|
806
|
-
}
|
|
807
|
-
res.writeHead(500, { "Content-Type": "" });
|
|
808
|
-
res.end(JSON.stringify({ error: "Internal Server Error" }));
|
|
809
|
-
});
|
|
815
|
+
server.setErrorHandler(handleHttpErrors);
|
|
810
816
|
server.setRouter(router());
|
|
811
817
|
return server;
|
|
812
818
|
});
|
|
@@ -837,8 +843,7 @@ var init_facades = __esm({
|
|
|
837
843
|
queue_config.provider,
|
|
838
844
|
queue_config.config
|
|
839
845
|
);
|
|
840
|
-
|
|
841
|
-
return rc;
|
|
846
|
+
return new import_neko_queue2.QueueConnection(provider);
|
|
842
847
|
});
|
|
843
848
|
cache = (0, import_neko_helper2.createSingleton)((label) => {
|
|
844
849
|
const cache_config = import_neko_config.config.get(["caches", label].join("."));
|
package/dist/bin/middlewares.cjs
CHANGED
|
@@ -159,20 +159,18 @@ var CompiledRoute = class {
|
|
|
159
159
|
const header_content_type = res.getHeader("Content-Type");
|
|
160
160
|
if (controller_rc instanceof import_stream.Stream || Buffer.isBuffer(controller_rc)) {
|
|
161
161
|
await this.writeAsync(res, controller_rc);
|
|
162
|
-
res.end();
|
|
163
162
|
} else if (!header_content_type && typeof controller_rc === "object") {
|
|
164
163
|
res.setHeader("Content-Type", "application/json");
|
|
165
|
-
res.
|
|
164
|
+
res.write(this.convertToString(controller_rc));
|
|
166
165
|
} else if (!header_content_type) {
|
|
167
166
|
res.setHeader("Content-Type", "text/plain");
|
|
168
|
-
res.
|
|
167
|
+
res.write(this.convertToString(controller_rc));
|
|
169
168
|
} else {
|
|
170
|
-
res.
|
|
169
|
+
res.write(this.convertToString(controller_rc));
|
|
171
170
|
}
|
|
172
171
|
return;
|
|
173
172
|
} else {
|
|
174
173
|
res.statusCode = [200].includes(res.statusCode) ? 204 : res.statusCode;
|
|
175
|
-
res.end();
|
|
176
174
|
}
|
|
177
175
|
}
|
|
178
176
|
async writeAsync(res, chunk) {
|
|
@@ -468,7 +466,24 @@ var import_clipanion = require("clipanion");
|
|
|
468
466
|
|
|
469
467
|
// src/http.mts
|
|
470
468
|
var http_exports = {};
|
|
469
|
+
__export(http_exports, {
|
|
470
|
+
handleHttpErrors: () => handleHttpErrors
|
|
471
|
+
});
|
|
472
|
+
var import_neko_http = require("@devbro/neko-http");
|
|
471
473
|
__reExport(http_exports, require("@devbro/neko-http"));
|
|
474
|
+
async function handleHttpErrors(err, req, res) {
|
|
475
|
+
if (err instanceof import_neko_http.HttpError) {
|
|
476
|
+
res.writeHead(err.statusCode, { "Content-Type": "application/json" });
|
|
477
|
+
res.write(JSON.stringify({ message: err.message, error: err.code }));
|
|
478
|
+
logger().warn({ msg: "HttpError: " + err.message, err });
|
|
479
|
+
return;
|
|
480
|
+
} else {
|
|
481
|
+
logger().error({ msg: "Error: " + err.message, err });
|
|
482
|
+
}
|
|
483
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
484
|
+
res.write(JSON.stringify({ error: "Internal Server Error" }));
|
|
485
|
+
}
|
|
486
|
+
__name(handleHttpErrors, "handleHttpErrors");
|
|
472
487
|
|
|
473
488
|
// src/facades.mts
|
|
474
489
|
var import_neko_logger = require("@devbro/neko-logger");
|
|
@@ -677,18 +692,7 @@ var cli = (0, import_neko_helper2.createSingleton)(() => {
|
|
|
677
692
|
});
|
|
678
693
|
var httpServer = (0, import_neko_helper2.createSingleton)(() => {
|
|
679
694
|
const server = new http_exports.HttpServer();
|
|
680
|
-
server.setErrorHandler(
|
|
681
|
-
if (err instanceof http_exports.HttpError) {
|
|
682
|
-
res.writeHead(err.statusCode, { "Content-Type": "application/json" });
|
|
683
|
-
res.end(JSON.stringify({ message: err.message, error: err.code }));
|
|
684
|
-
logger().warn({ msg: "HttpError: " + err.message, err });
|
|
685
|
-
return;
|
|
686
|
-
} else {
|
|
687
|
-
logger().error({ msg: "Error: " + err.message, err });
|
|
688
|
-
}
|
|
689
|
-
res.writeHead(500, { "Content-Type": "" });
|
|
690
|
-
res.end(JSON.stringify({ error: "Internal Server Error" }));
|
|
691
|
-
});
|
|
695
|
+
server.setErrorHandler(handleHttpErrors);
|
|
692
696
|
server.setRouter(router());
|
|
693
697
|
return server;
|
|
694
698
|
});
|
|
@@ -719,8 +723,7 @@ var queue = (0, import_neko_helper2.createSingleton)((label) => {
|
|
|
719
723
|
queue_config.provider,
|
|
720
724
|
queue_config.config
|
|
721
725
|
);
|
|
722
|
-
|
|
723
|
-
return rc;
|
|
726
|
+
return new import_neko_queue2.QueueConnection(provider);
|
|
724
727
|
});
|
|
725
728
|
var cache = (0, import_neko_helper2.createSingleton)((label) => {
|
|
726
729
|
const cache_config = import_neko_config.config.get(["caches", label].join("."));
|
|
@@ -735,7 +738,7 @@ var cache = (0, import_neko_helper2.createSingleton)((label) => {
|
|
|
735
738
|
});
|
|
736
739
|
|
|
737
740
|
// src/middlewares.mts
|
|
738
|
-
var
|
|
741
|
+
var import_neko_http2 = require("@devbro/neko-http");
|
|
739
742
|
function cors(options = {}) {
|
|
740
743
|
return async (req, res, next) => {
|
|
741
744
|
const allowedOrigins = options.allowedOrigins || ["*"];
|
|
@@ -816,7 +819,7 @@ var RateLimiterMiddleware = class _RateLimiterMiddleware extends Middleware {
|
|
|
816
819
|
);
|
|
817
820
|
}
|
|
818
821
|
if (count > this.params.maxRequests) {
|
|
819
|
-
throw new
|
|
822
|
+
throw new import_neko_http2.HttpTooManyRequestsError(
|
|
820
823
|
"Too many requests. Please try again later."
|
|
821
824
|
);
|
|
822
825
|
}
|
package/dist/bin/queue.cjs
CHANGED
|
@@ -162,20 +162,18 @@ var CompiledRoute = class {
|
|
|
162
162
|
const header_content_type = res.getHeader("Content-Type");
|
|
163
163
|
if (controller_rc instanceof import_stream.Stream || Buffer.isBuffer(controller_rc)) {
|
|
164
164
|
await this.writeAsync(res, controller_rc);
|
|
165
|
-
res.end();
|
|
166
165
|
} else if (!header_content_type && typeof controller_rc === "object") {
|
|
167
166
|
res.setHeader("Content-Type", "application/json");
|
|
168
|
-
res.
|
|
167
|
+
res.write(this.convertToString(controller_rc));
|
|
169
168
|
} else if (!header_content_type) {
|
|
170
169
|
res.setHeader("Content-Type", "text/plain");
|
|
171
|
-
res.
|
|
170
|
+
res.write(this.convertToString(controller_rc));
|
|
172
171
|
} else {
|
|
173
|
-
res.
|
|
172
|
+
res.write(this.convertToString(controller_rc));
|
|
174
173
|
}
|
|
175
174
|
return;
|
|
176
175
|
} else {
|
|
177
176
|
res.statusCode = [200].includes(res.statusCode) ? 204 : res.statusCode;
|
|
178
|
-
res.end();
|
|
179
177
|
}
|
|
180
178
|
}
|
|
181
179
|
async writeAsync(res, chunk) {
|
|
@@ -467,7 +465,24 @@ var import_clipanion = require("clipanion");
|
|
|
467
465
|
|
|
468
466
|
// src/http.mts
|
|
469
467
|
var http_exports = {};
|
|
468
|
+
__export(http_exports, {
|
|
469
|
+
handleHttpErrors: () => handleHttpErrors
|
|
470
|
+
});
|
|
471
|
+
var import_neko_http = require("@devbro/neko-http");
|
|
470
472
|
__reExport(http_exports, require("@devbro/neko-http"));
|
|
473
|
+
async function handleHttpErrors(err, req, res) {
|
|
474
|
+
if (err instanceof import_neko_http.HttpError) {
|
|
475
|
+
res.writeHead(err.statusCode, { "Content-Type": "application/json" });
|
|
476
|
+
res.write(JSON.stringify({ message: err.message, error: err.code }));
|
|
477
|
+
logger().warn({ msg: "HttpError: " + err.message, err });
|
|
478
|
+
return;
|
|
479
|
+
} else {
|
|
480
|
+
logger().error({ msg: "Error: " + err.message, err });
|
|
481
|
+
}
|
|
482
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
483
|
+
res.write(JSON.stringify({ error: "Internal Server Error" }));
|
|
484
|
+
}
|
|
485
|
+
__name(handleHttpErrors, "handleHttpErrors");
|
|
471
486
|
|
|
472
487
|
// src/facades.mts
|
|
473
488
|
var import_neko_logger = require("@devbro/neko-logger");
|
|
@@ -573,18 +588,7 @@ var cli = (0, import_neko_helper.createSingleton)(() => {
|
|
|
573
588
|
});
|
|
574
589
|
var httpServer = (0, import_neko_helper.createSingleton)(() => {
|
|
575
590
|
const server = new http_exports.HttpServer();
|
|
576
|
-
server.setErrorHandler(
|
|
577
|
-
if (err instanceof http_exports.HttpError) {
|
|
578
|
-
res.writeHead(err.statusCode, { "Content-Type": "application/json" });
|
|
579
|
-
res.end(JSON.stringify({ message: err.message, error: err.code }));
|
|
580
|
-
logger().warn({ msg: "HttpError: " + err.message, err });
|
|
581
|
-
return;
|
|
582
|
-
} else {
|
|
583
|
-
logger().error({ msg: "Error: " + err.message, err });
|
|
584
|
-
}
|
|
585
|
-
res.writeHead(500, { "Content-Type": "" });
|
|
586
|
-
res.end(JSON.stringify({ error: "Internal Server Error" }));
|
|
587
|
-
});
|
|
591
|
+
server.setErrorHandler(handleHttpErrors);
|
|
588
592
|
server.setRouter(router());
|
|
589
593
|
return server;
|
|
590
594
|
});
|
|
@@ -615,8 +619,7 @@ var queue = (0, import_neko_helper.createSingleton)((label) => {
|
|
|
615
619
|
queue_config.provider,
|
|
616
620
|
queue_config.config
|
|
617
621
|
);
|
|
618
|
-
|
|
619
|
-
return rc;
|
|
622
|
+
return new import_neko_queue2.QueueConnection(provider);
|
|
620
623
|
});
|
|
621
624
|
var cache = (0, import_neko_helper.createSingleton)((label) => {
|
|
622
625
|
const cache_config = import_neko_config.config.get(["caches", label].join("."));
|
package/dist/bin/router.cjs
CHANGED
|
@@ -175,20 +175,18 @@ var CompiledRoute = class {
|
|
|
175
175
|
const header_content_type = res.getHeader("Content-Type");
|
|
176
176
|
if (controller_rc instanceof import_stream.Stream || Buffer.isBuffer(controller_rc)) {
|
|
177
177
|
await this.writeAsync(res, controller_rc);
|
|
178
|
-
res.end();
|
|
179
178
|
} else if (!header_content_type && typeof controller_rc === "object") {
|
|
180
179
|
res.setHeader("Content-Type", "application/json");
|
|
181
|
-
res.
|
|
180
|
+
res.write(this.convertToString(controller_rc));
|
|
182
181
|
} else if (!header_content_type) {
|
|
183
182
|
res.setHeader("Content-Type", "text/plain");
|
|
184
|
-
res.
|
|
183
|
+
res.write(this.convertToString(controller_rc));
|
|
185
184
|
} else {
|
|
186
|
-
res.
|
|
185
|
+
res.write(this.convertToString(controller_rc));
|
|
187
186
|
}
|
|
188
187
|
return;
|
|
189
188
|
} else {
|
|
190
189
|
res.statusCode = [200].includes(res.statusCode) ? 204 : res.statusCode;
|
|
191
|
-
res.end();
|
|
192
190
|
}
|
|
193
191
|
}
|
|
194
192
|
async writeAsync(res, chunk) {
|
|
@@ -612,9 +610,10 @@ function Param(param_name) {
|
|
|
612
610
|
});
|
|
613
611
|
}
|
|
614
612
|
__name(Param, "Param");
|
|
615
|
-
function ApiDocumentation(open_api_url) {
|
|
616
|
-
|
|
617
|
-
|
|
613
|
+
function ApiDocumentation(open_api_url, renderer = "redoc") {
|
|
614
|
+
if (renderer === "redoc") {
|
|
615
|
+
return (req, res) => {
|
|
616
|
+
let html = `<!DOCTYPE html>
|
|
618
617
|
<html>
|
|
619
618
|
<head>
|
|
620
619
|
<title>Redoc</title>
|
|
@@ -638,9 +637,42 @@ function ApiDocumentation(open_api_url) {
|
|
|
638
637
|
<script src="https://cdn.redoc.ly/redoc/latest/bundles/redoc.standalone.js"> </script>
|
|
639
638
|
</body>
|
|
640
639
|
</html>`;
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
640
|
+
res.setHeader("Content-Type", "text/html");
|
|
641
|
+
return html;
|
|
642
|
+
};
|
|
643
|
+
}
|
|
644
|
+
if (renderer === "rapidoc") {
|
|
645
|
+
return (req, res) => {
|
|
646
|
+
let html = `<!DOCTYPE html>
|
|
647
|
+
<html>
|
|
648
|
+
<head>
|
|
649
|
+
<title>Redoc</title>
|
|
650
|
+
<!-- needed for adaptive design -->
|
|
651
|
+
<meta charset="utf-8"/>
|
|
652
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
653
|
+
<link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,700|Roboto:300,400,700" rel="stylesheet">
|
|
654
|
+
|
|
655
|
+
<!--
|
|
656
|
+
Redoc doesn't change outer page styles
|
|
657
|
+
-->
|
|
658
|
+
<style>
|
|
659
|
+
body {
|
|
660
|
+
margin: 0;
|
|
661
|
+
padding: 0;
|
|
662
|
+
}
|
|
663
|
+
</style>
|
|
664
|
+
</head>
|
|
665
|
+
<body>
|
|
666
|
+
<script type="module" src="https://unpkg.com/rapidoc/dist/rapidoc-min.js"></script>
|
|
667
|
+
<rapi-doc spec-url="${open_api_url}" theme="dark" render-style="read" show-header="false"
|
|
668
|
+
show-method-in-nav-bar="as-colored-text" allow-server-selection="true"
|
|
669
|
+
></rapi-doc>
|
|
670
|
+
</body>
|
|
671
|
+
</html>`;
|
|
672
|
+
res.setHeader("Content-Type", "text/html");
|
|
673
|
+
return html;
|
|
674
|
+
};
|
|
675
|
+
}
|
|
644
676
|
}
|
|
645
677
|
__name(ApiDocumentation, "ApiDocumentation");
|
|
646
678
|
// Annotate the CommonJS export names for ESM import in node:
|
package/dist/config.d.mts
CHANGED
package/dist/facades.mjs
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
} from "@devbro/neko-mailer";
|
|
12
12
|
import { config } from "@devbro/neko-config";
|
|
13
13
|
import { Cli } from "clipanion";
|
|
14
|
-
import { HttpServer,
|
|
14
|
+
import { HttpServer, handleHttpErrors } from "./http.mjs";
|
|
15
15
|
import { Logger } from "@devbro/neko-logger";
|
|
16
16
|
import { CacheProviderFactory } from "./factories.mjs";
|
|
17
17
|
import { Cache } from "@devbro/neko-cache";
|
|
@@ -47,18 +47,7 @@ const cli = createSingleton(() => {
|
|
|
47
47
|
});
|
|
48
48
|
const httpServer = createSingleton(() => {
|
|
49
49
|
const server = new HttpServer();
|
|
50
|
-
server.setErrorHandler(
|
|
51
|
-
if (err instanceof HttpError) {
|
|
52
|
-
res.writeHead(err.statusCode, { "Content-Type": "application/json" });
|
|
53
|
-
res.end(JSON.stringify({ message: err.message, error: err.code }));
|
|
54
|
-
logger().warn({ msg: "HttpError: " + err.message, err });
|
|
55
|
-
return;
|
|
56
|
-
} else {
|
|
57
|
-
logger().error({ msg: "Error: " + err.message, err });
|
|
58
|
-
}
|
|
59
|
-
res.writeHead(500, { "Content-Type": "" });
|
|
60
|
-
res.end(JSON.stringify({ error: "Internal Server Error" }));
|
|
61
|
-
});
|
|
50
|
+
server.setErrorHandler(handleHttpErrors);
|
|
62
51
|
server.setRouter(router());
|
|
63
52
|
return server;
|
|
64
53
|
});
|
|
@@ -89,8 +78,7 @@ const queue = createSingleton((label) => {
|
|
|
89
78
|
queue_config.provider,
|
|
90
79
|
queue_config.config
|
|
91
80
|
);
|
|
92
|
-
|
|
93
|
-
return rc;
|
|
81
|
+
return new QueueConnection(provider);
|
|
94
82
|
});
|
|
95
83
|
const cache = createSingleton((label) => {
|
|
96
84
|
const cache_config = config.get(["caches", label].join("."));
|
package/dist/facades.mjs.map
CHANGED
|
@@ -1 +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, StorageProviderFactory } from \"@devbro/neko-storage\";\nimport {\n Mailer,\n MailerProvider,\n MailerProviderFactory,\n} from \"@devbro/neko-mailer\";\nimport { config } from \"@devbro/neko-config\";\nimport { Cli } from \"clipanion\";\nimport { HttpServer, HttpError } from \"./http.mjs\";\nimport * as yup from \"yup\";\nimport { Logger } from \"@devbro/neko-logger\";\nimport { CacheProviderFactory } from \"./factories.mjs\";\nimport { Cache } from \"@devbro/neko-cache\";\nimport { QueueConnection, QueueTransportFactory } from \"@devbro/neko-queue\";\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 let storage_config: any = config.get([\"storages\", label].join(\".\"));\n\n const provider = StorageProviderFactory.create(\n storage_config.provider,\n storage_config.config,\n );\n\n return new Storage(provider);\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(
|
|
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, StorageProviderFactory } from \"@devbro/neko-storage\";\nimport {\n Mailer,\n MailerProvider,\n MailerProviderFactory,\n} from \"@devbro/neko-mailer\";\nimport { config } from \"@devbro/neko-config\";\nimport { Cli } from \"clipanion\";\nimport { HttpServer, HttpError, handleHttpErrors } from \"./http.mjs\";\nimport * as yup from \"yup\";\nimport { Logger } from \"@devbro/neko-logger\";\nimport { CacheProviderFactory } from \"./factories.mjs\";\nimport { Cache } from \"@devbro/neko-cache\";\nimport { QueueConnection, QueueTransportFactory } from \"@devbro/neko-queue\";\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 let storage_config: any = config.get([\"storages\", label].join(\".\"));\n\n const provider = StorageProviderFactory.create(\n storage_config.provider,\n storage_config.config,\n );\n\n return new Storage(provider);\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(handleHttpErrors);\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\n const provider: MailerProvider = MailerProviderFactory.create(\n mailer_config.provider,\n mailer_config.config,\n );\n\n const rc = new Mailer(provider);\n return rc;\n});\n\nexport const queue = createSingleton((label) => {\n const queue_config: any = config.get([\"queues\", label].join(\".\"));\n if (!queue_config) {\n throw new Error(`Queue configuration for '${label}' not found`);\n }\n const provider = QueueTransportFactory.create(\n queue_config.provider,\n queue_config.config,\n );\n return new QueueConnection(provider);\n});\n\nexport const cache = createSingleton((label) => {\n const cache_config: any = config.get([\"caches\", label].join(\".\"));\n if (!cache_config) {\n throw new Error(`Cache configuration for '${label}' not found`);\n }\n const provider = CacheProviderFactory.create(\n cache_config.provider,\n cache_config.config,\n );\n\n return new Cache(provider);\n});\n"],"mappings":"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","names":[]}
|
package/dist/factories.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/factories.mts"],"sourcesContent":["import {\n
|
|
1
|
+
{"version":3,"sources":["../src/factories.mts"],"sourcesContent":["import {\n SESProvider,\n SMTPProvider,\n MemoryProvider,\n MailerProviderFactory,\n} from \"@devbro/neko-mailer\";\nimport { MemoryTransport, QueueTransportFactory } from \"@devbro/neko-queue\";\nimport { DatabaseTransport } from \"./queue.mjs\";\nimport {\n CacheProviderInterface,\n MemoryCacheProvider,\n RedisCacheProvider,\n FileCacheProvider,\n DisabledCacheProvider,\n} from \"@devbro/neko-cache\";\nimport {\n AWSS3StorageProvider,\n LocalStorageProvider,\n StorageProviderFactory,\n} from \"@devbro/neko-storage\";\n\nexport class FlexibleFactory<T> {\n registry: Map<string, any> = new Map();\n\n register<T>(key: string, ctor: (...args: any[]) => T) {\n this.registry.set(key, ctor);\n }\n\n create<T>(key: string, ...args: any[]): T {\n const ctor = this.registry.get(key);\n if (!ctor) {\n throw new Error(`No factory registered for key: ${key}`);\n }\n return ctor(...args);\n }\n}\n\nMailerProviderFactory.register(\"ses\", (opt) => {\n return new SESProvider(opt);\n});\n\nMailerProviderFactory.register(\"smtp\", (opt) => {\n return new SMTPProvider(opt);\n});\n\nMailerProviderFactory.register(\"memory\", (opt) => {\n return new MemoryProvider();\n});\n\nQueueTransportFactory.register(\"database\", (opt) => {\n return new DatabaseTransport(opt);\n});\n\nQueueTransportFactory.register(\"memory\", (opt) => {\n return new MemoryTransport(opt);\n});\n\n// CACHE\nexport class CacheProviderFactory {\n static instance: FlexibleFactory<CacheProviderInterface> =\n new FlexibleFactory<CacheProviderInterface>();\n\n static register(\n key: string,\n factory: (...args: any[]) => CacheProviderInterface,\n ): void {\n CacheProviderFactory.instance.register(key, factory);\n }\n\n static create<T>(key: string, ...args: any[]): CacheProviderInterface {\n return CacheProviderFactory.instance.create(key, ...args);\n }\n}\n\nCacheProviderFactory.register(\"memory\", (opt) => {\n return new MemoryCacheProvider(opt);\n});\n\nCacheProviderFactory.register(\"redis\", (opt) => {\n return new RedisCacheProvider(opt);\n});\n\nCacheProviderFactory.register(\"file\", (opt) => {\n return new FileCacheProvider(opt);\n});\n\nCacheProviderFactory.register(\"disabled\", (opt) => {\n return new DisabledCacheProvider();\n});\n\nStorageProviderFactory.register(\"local\", (opt) => {\n return new LocalStorageProvider(opt);\n});\n\nStorageProviderFactory.register(\"s3\", (opt) => {\n return new AWSS3StorageProvider(opt);\n});\n"],"mappings":";;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB,6BAA6B;AACvD,SAAS,yBAAyB;AAClC;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,MAAM,gBAAmB;AAAA,EArBhC,OAqBgC;AAAA;AAAA;AAAA,EAC9B,WAA6B,oBAAI,IAAI;AAAA,EAErC,SAAY,KAAa,MAA6B;AACpD,SAAK,SAAS,IAAI,KAAK,IAAI;AAAA,EAC7B;AAAA,EAEA,OAAU,QAAgB,MAAgB;AACxC,UAAM,OAAO,KAAK,SAAS,IAAI,GAAG;AAClC,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,MAAM,kCAAkC,GAAG,EAAE;AAAA,IACzD;AACA,WAAO,KAAK,GAAG,IAAI;AAAA,EACrB;AACF;AAEA,sBAAsB,SAAS,OAAO,CAAC,QAAQ;AAC7C,SAAO,IAAI,YAAY,GAAG;AAC5B,CAAC;AAED,sBAAsB,SAAS,QAAQ,CAAC,QAAQ;AAC9C,SAAO,IAAI,aAAa,GAAG;AAC7B,CAAC;AAED,sBAAsB,SAAS,UAAU,CAAC,QAAQ;AAChD,SAAO,IAAI,eAAe;AAC5B,CAAC;AAED,sBAAsB,SAAS,YAAY,CAAC,QAAQ;AAClD,SAAO,IAAI,kBAAkB,GAAG;AAClC,CAAC;AAED,sBAAsB,SAAS,UAAU,CAAC,QAAQ;AAChD,SAAO,IAAI,gBAAgB,GAAG;AAChC,CAAC;AAGM,MAAM,qBAAqB;AAAA,EA1DlC,OA0DkC;AAAA;AAAA;AAAA,EAChC,OAAO,WACL,IAAI,gBAAwC;AAAA,EAE9C,OAAO,SACL,KACA,SACM;AACN,yBAAqB,SAAS,SAAS,KAAK,OAAO;AAAA,EACrD;AAAA,EAEA,OAAO,OAAU,QAAgB,MAAqC;AACpE,WAAO,qBAAqB,SAAS,OAAO,KAAK,GAAG,IAAI;AAAA,EAC1D;AACF;AAEA,qBAAqB,SAAS,UAAU,CAAC,QAAQ;AAC/C,SAAO,IAAI,oBAAoB,GAAG;AACpC,CAAC;AAED,qBAAqB,SAAS,SAAS,CAAC,QAAQ;AAC9C,SAAO,IAAI,mBAAmB,GAAG;AACnC,CAAC;AAED,qBAAqB,SAAS,QAAQ,CAAC,QAAQ;AAC7C,SAAO,IAAI,kBAAkB,GAAG;AAClC,CAAC;AAED,qBAAqB,SAAS,YAAY,CAAC,QAAQ;AACjD,SAAO,IAAI,sBAAsB;AACnC,CAAC;AAED,uBAAuB,SAAS,SAAS,CAAC,QAAQ;AAChD,SAAO,IAAI,qBAAqB,GAAG;AACrC,CAAC;AAED,uBAAuB,SAAS,MAAM,CAAC,QAAQ;AAC7C,SAAO,IAAI,qBAAqB,GAAG;AACrC,CAAC;","names":[]}
|
package/dist/http.d.mts
CHANGED
package/dist/http.mjs
CHANGED
|
@@ -1,2 +1,22 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { HttpError } from "@devbro/neko-http";
|
|
4
|
+
import { logger } from "./facades.mts";
|
|
1
5
|
export * from "@devbro/neko-http";
|
|
6
|
+
async function handleHttpErrors(err, req, res) {
|
|
7
|
+
if (err instanceof HttpError) {
|
|
8
|
+
res.writeHead(err.statusCode, { "Content-Type": "application/json" });
|
|
9
|
+
res.write(JSON.stringify({ message: err.message, error: err.code }));
|
|
10
|
+
logger().warn({ msg: "HttpError: " + err.message, err });
|
|
11
|
+
return;
|
|
12
|
+
} else {
|
|
13
|
+
logger().error({ msg: "Error: " + err.message, err });
|
|
14
|
+
}
|
|
15
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
16
|
+
res.write(JSON.stringify({ error: "Internal Server Error" }));
|
|
17
|
+
}
|
|
18
|
+
__name(handleHttpErrors, "handleHttpErrors");
|
|
19
|
+
export {
|
|
20
|
+
handleHttpErrors
|
|
21
|
+
};
|
|
2
22
|
//# sourceMappingURL=http.mjs.map
|
package/dist/http.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/http.mts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../src/http.mts"],"sourcesContent":["import { HttpError } from \"@devbro/neko-http\";\nimport { logger } from \"./facades.mts\";\n\nexport * from \"@devbro/neko-http\";\n\nexport async function handleHttpErrors(\n err: Error,\n req: any,\n res: any,\n): Promise<void> {\n if (err instanceof HttpError) {\n res.writeHead(err.statusCode, { \"Content-Type\": \"application/json\" });\n res.write(JSON.stringify({ message: err.message, error: err.code }));\n logger().warn({ msg: \"HttpError: \" + err.message, err });\n return;\n } else {\n logger().error({ msg: \"Error: \" + err.message, err });\n }\n res.writeHead(500, { \"Content-Type\": \"application/json\" });\n res.write(JSON.stringify({ error: \"Internal Server Error\" }));\n}\n"],"mappings":";;AAAA,SAAS,iBAAiB;AAC1B,SAAS,cAAc;AAEvB,cAAc;AAEd,eAAsB,iBACpB,KACA,KACA,KACe;AACf,MAAI,eAAe,WAAW;AAC5B,QAAI,UAAU,IAAI,YAAY,EAAE,gBAAgB,mBAAmB,CAAC;AACpE,QAAI,MAAM,KAAK,UAAU,EAAE,SAAS,IAAI,SAAS,OAAO,IAAI,KAAK,CAAC,CAAC;AACnE,WAAO,EAAE,KAAK,EAAE,KAAK,gBAAgB,IAAI,SAAS,IAAI,CAAC;AACvD;AAAA,EACF,OAAO;AACL,WAAO,EAAE,MAAM,EAAE,KAAK,YAAY,IAAI,SAAS,IAAI,CAAC;AAAA,EACtD;AACA,MAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AACzD,MAAI,MAAM,KAAK,UAAU,EAAE,OAAO,wBAAwB,CAAC,CAAC;AAC9D;AAfsB;","names":[]}
|
package/dist/router.d.mts
CHANGED
|
@@ -4,6 +4,6 @@ export * from '@devbro/neko-router';
|
|
|
4
4
|
|
|
5
5
|
declare function Model(model: typeof BaseModel, param_name?: string, model_field?: string): ParameterDecorator;
|
|
6
6
|
declare function Param(param_name: string): ParameterDecorator;
|
|
7
|
-
declare function ApiDocumentation(open_api_url: string): (req: Request, res: Response) => string;
|
|
7
|
+
declare function ApiDocumentation(open_api_url: string, renderer?: "redoc" | "rapidoc"): ((req: Request, res: Response) => string) | undefined;
|
|
8
8
|
|
|
9
9
|
export { ApiDocumentation, Model, Param };
|
package/dist/router.mjs
CHANGED
|
@@ -22,9 +22,10 @@ function Param(param_name) {
|
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
__name(Param, "Param");
|
|
25
|
-
function ApiDocumentation(open_api_url) {
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
function ApiDocumentation(open_api_url, renderer = "redoc") {
|
|
26
|
+
if (renderer === "redoc") {
|
|
27
|
+
return (req, res) => {
|
|
28
|
+
let html = `<!DOCTYPE html>
|
|
28
29
|
<html>
|
|
29
30
|
<head>
|
|
30
31
|
<title>Redoc</title>
|
|
@@ -48,9 +49,42 @@ function ApiDocumentation(open_api_url) {
|
|
|
48
49
|
<script src="https://cdn.redoc.ly/redoc/latest/bundles/redoc.standalone.js"> </script>
|
|
49
50
|
</body>
|
|
50
51
|
</html>`;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
res.setHeader("Content-Type", "text/html");
|
|
53
|
+
return html;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
if (renderer === "rapidoc") {
|
|
57
|
+
return (req, res) => {
|
|
58
|
+
let html = `<!DOCTYPE html>
|
|
59
|
+
<html>
|
|
60
|
+
<head>
|
|
61
|
+
<title>Redoc</title>
|
|
62
|
+
<!-- needed for adaptive design -->
|
|
63
|
+
<meta charset="utf-8"/>
|
|
64
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
65
|
+
<link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,700|Roboto:300,400,700" rel="stylesheet">
|
|
66
|
+
|
|
67
|
+
<!--
|
|
68
|
+
Redoc doesn't change outer page styles
|
|
69
|
+
-->
|
|
70
|
+
<style>
|
|
71
|
+
body {
|
|
72
|
+
margin: 0;
|
|
73
|
+
padding: 0;
|
|
74
|
+
}
|
|
75
|
+
</style>
|
|
76
|
+
</head>
|
|
77
|
+
<body>
|
|
78
|
+
<script type="module" src="https://unpkg.com/rapidoc/dist/rapidoc-min.js"></script>
|
|
79
|
+
<rapi-doc spec-url="${open_api_url}" theme="dark" render-style="read" show-header="false"
|
|
80
|
+
show-method-in-nav-bar="as-colored-text" allow-server-selection="true"
|
|
81
|
+
></rapi-doc>
|
|
82
|
+
</body>
|
|
83
|
+
</html>`;
|
|
84
|
+
res.setHeader("Content-Type", "text/html");
|
|
85
|
+
return html;
|
|
86
|
+
};
|
|
87
|
+
}
|
|
54
88
|
}
|
|
55
89
|
__name(ApiDocumentation, "ApiDocumentation");
|
|
56
90
|
export {
|
package/dist/router.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/router.mts"],"sourcesContent":["import { ctx } from \"@devbro/neko-context\";\nimport { BaseModel } from \"@devbro/neko-orm\";\nimport { Request, Response } from \"@devbro/neko-router\";\nimport { HttpNotFoundError } from \"@devbro/neko-http/errors\";\nimport { createParamDecorator } from \"@devbro/neko-router\";\
|
|
1
|
+
{"version":3,"sources":["../src/router.mts"],"sourcesContent":["import { ctx } from \"@devbro/neko-context\";\nimport { BaseModel } from \"@devbro/neko-orm\";\nimport { Request, Response } from \"@devbro/neko-router\";\nimport { HttpNotFoundError } from \"@devbro/neko-http/errors\";\nimport { createParamDecorator } from \"@devbro/neko-router\";\nexport * from \"@devbro/neko-router\";\n\nexport function Model(\n model: typeof BaseModel,\n param_name: string = \"id\",\n model_field: string = \"id\",\n): ParameterDecorator {\n return createParamDecorator(async () => {\n let rc = await model.findOne({\n [model_field]: ctx().get<Request>(\"request\").params[param_name],\n });\n if (!rc) {\n throw new HttpNotFoundError(\"Object not found\", \"OBJECT_NOT_FOUND\");\n }\n\n return rc;\n });\n}\n\nexport function Param(param_name: string): ParameterDecorator {\n return createParamDecorator(() => {\n return ctx().get<Request>(\"request\").params[param_name] || undefined;\n });\n}\n\nexport function ApiDocumentation(\n open_api_url: string,\n renderer: \"redoc\" | \"rapidoc\" = \"redoc\",\n) {\n if (renderer === \"redoc\") {\n return (req: Request, res: Response) => {\n let html = `<!DOCTYPE html>\n<html>\n <head>\n <title>Redoc</title>\n <!-- needed for adaptive design -->\n <meta charset=\"utf-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <link href=\"https://fonts.googleapis.com/css?family=Montserrat:300,400,700|Roboto:300,400,700\" rel=\"stylesheet\">\n\n <!--\n Redoc doesn't change outer page styles\n -->\n <style>\n body {\n margin: 0;\n padding: 0;\n }\n </style>\n </head>\n <body>\n <redoc spec-url='${open_api_url}'></redoc>\n <script src=\"https://cdn.redoc.ly/redoc/latest/bundles/redoc.standalone.js\"> </script>\n </body>\n</html>`;\n\n res.setHeader(\"Content-Type\", \"text/html\");\n return html;\n };\n }\n\n if (renderer === \"rapidoc\") {\n return (req: Request, res: Response) => {\n let html = `<!DOCTYPE html>\n<html>\n <head>\n <title>Redoc</title>\n <!-- needed for adaptive design -->\n <meta charset=\"utf-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <link href=\"https://fonts.googleapis.com/css?family=Montserrat:300,400,700|Roboto:300,400,700\" rel=\"stylesheet\">\n\n <!--\n Redoc doesn't change outer page styles\n -->\n <style>\n body {\n margin: 0;\n padding: 0;\n }\n </style>\n </head>\n <body>\n <script type=\"module\" src=\"https://unpkg.com/rapidoc/dist/rapidoc-min.js\"></script>\n <rapi-doc spec-url=\"${open_api_url}\" theme=\"dark\" render-style=\"read\" show-header=\"false\"\n show-method-in-nav-bar=\"as-colored-text\" allow-server-selection=\"true\"\n ></rapi-doc>\n </body>\n</html>`;\n\n res.setHeader(\"Content-Type\", \"text/html\");\n return html;\n };\n }\n}\n"],"mappings":";;AAAA,SAAS,WAAW;AAGpB,SAAS,yBAAyB;AAClC,SAAS,4BAA4B;AACrC,cAAc;AAEP,SAAS,MACd,OACA,aAAqB,MACrB,cAAsB,MACF;AACpB,SAAO,qBAAqB,YAAY;AACtC,QAAI,KAAK,MAAM,MAAM,QAAQ;AAAA,MAC3B,CAAC,WAAW,GAAG,IAAI,EAAE,IAAa,SAAS,EAAE,OAAO,UAAU;AAAA,IAChE,CAAC;AACD,QAAI,CAAC,IAAI;AACP,YAAM,IAAI,kBAAkB,oBAAoB,kBAAkB;AAAA,IACpE;AAEA,WAAO;AAAA,EACT,CAAC;AACH;AAfgB;AAiBT,SAAS,MAAM,YAAwC;AAC5D,SAAO,qBAAqB,MAAM;AAChC,WAAO,IAAI,EAAE,IAAa,SAAS,EAAE,OAAO,UAAU,KAAK;AAAA,EAC7D,CAAC;AACH;AAJgB;AAMT,SAAS,iBACd,cACA,WAAgC,SAChC;AACA,MAAI,aAAa,SAAS;AACxB,WAAO,CAAC,KAAc,QAAkB;AACtC,UAAI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAoBM,YAAY;AAAA;AAAA;AAAA;AAK7B,UAAI,UAAU,gBAAgB,WAAW;AACzC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,aAAa,WAAW;AAC1B,WAAO,CAAC,KAAc,QAAkB;AACtC,UAAI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAqBS,YAAY;AAAA;AAAA;AAAA;AAAA;AAMhC,UAAI,UAAU,gBAAgB,WAAW;AACzC,aAAO;AAAA,IACT;AAAA,EACF;AACF;AArEgB;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devbro/pashmak",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.48",
|
|
4
4
|
"description": "testing application for the entire repo",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -118,11 +118,8 @@
|
|
|
118
118
|
"license": "MIT",
|
|
119
119
|
"devDependencies": {
|
|
120
120
|
"@swc/core": "^1.12.9",
|
|
121
|
-
"@types/config": "^3.3.5",
|
|
122
|
-
"@types/jsonwebtoken": "^9.0.9",
|
|
123
121
|
"@types/yup": "^0.32.0",
|
|
124
122
|
"globby": "^14.1.0",
|
|
125
|
-
"pino-pretty": "^13.0.0",
|
|
126
123
|
"typescript": "^5.8.3"
|
|
127
124
|
},
|
|
128
125
|
"dependencies": {
|
|
@@ -140,16 +137,10 @@
|
|
|
140
137
|
"@devbro/neko-storage": "0.1.*",
|
|
141
138
|
"@inquirer/prompts": "^7.10.0",
|
|
142
139
|
"@types/pluralize": "^0.0.33",
|
|
143
|
-
"bcryptjs": "^3.0.2",
|
|
144
140
|
"change-case-all": "^2.1.0",
|
|
145
141
|
"clipanion": "^4.0.0-rc.4",
|
|
146
|
-
"dotenv": "^16.5.0",
|
|
147
142
|
"handlebars": "^4.7.8",
|
|
148
|
-
"jsonwebtoken": "^9.0.2",
|
|
149
|
-
"pg-pool": "3.10.0",
|
|
150
143
|
"pluralize": "^8.0.0",
|
|
151
|
-
"ts-jest": "^29.3.4",
|
|
152
|
-
"tsconfig-paths": "^4.2.0",
|
|
153
144
|
"yup": "^1.6.1"
|
|
154
145
|
},
|
|
155
146
|
"directories": {
|