@devbro/pashmak 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/dist/DatabaseServiceProvider.d.ts +13 -0
- package/dist/DatabaseServiceProvider.js +55 -0
- package/dist/DatabaseServiceProvider.js.map +1 -0
- package/dist/app/console/DefaultCommand.d.ts +9 -0
- package/dist/app/console/DefaultCommand.js +35 -0
- package/dist/app/console/DefaultCommand.js.map +1 -0
- package/dist/app/console/KeyGenerateCommand.d.ts +13 -0
- package/dist/app/console/KeyGenerateCommand.js +79 -0
- package/dist/app/console/KeyGenerateCommand.js.map +1 -0
- package/dist/app/console/StartCommand.d.ts +11 -0
- package/dist/app/console/StartCommand.js +49 -0
- package/dist/app/console/StartCommand.js.map +1 -0
- package/dist/app/console/generate/GenerateControllerCommand.d.ts +9 -0
- package/dist/app/console/generate/GenerateControllerCommand.js +56 -0
- package/dist/app/console/generate/GenerateControllerCommand.js.map +1 -0
- package/dist/app/console/generate/controller.tpl +30 -0
- package/dist/app/console/generate/index.d.ts +2 -0
- package/dist/app/console/generate/index.js +2 -0
- package/dist/app/console/generate/index.js.map +1 -0
- package/dist/app/console/index.d.ts +9 -0
- package/dist/app/console/index.js +7 -0
- package/dist/app/console/index.js.map +1 -0
- package/dist/app/console/migrate/MakeMigrateCommand.d.ts +9 -0
- package/dist/app/console/migrate/MakeMigrateCommand.js +51 -0
- package/dist/app/console/migrate/MakeMigrateCommand.js.map +1 -0
- package/dist/app/console/migrate/MigrateCommand.d.ts +9 -0
- package/dist/app/console/migrate/MigrateCommand.js +93 -0
- package/dist/app/console/migrate/MigrateCommand.js.map +1 -0
- package/dist/app/console/migrate/MigrateRollbackCommand.d.ts +9 -0
- package/dist/app/console/migrate/MigrateRollbackCommand.js +57 -0
- package/dist/app/console/migrate/MigrateRollbackCommand.js.map +1 -0
- package/dist/app/console/migrate/index.d.ts +4 -0
- package/dist/app/console/migrate/index.js +4 -0
- package/dist/app/console/migrate/index.js.map +1 -0
- package/dist/app/console/migrate/make_migration.tpl +15 -0
- package/dist/app/console/project/CreateProjectCommand.d.ts +14 -0
- package/dist/app/console/project/CreateProjectCommand.js +106 -0
- package/dist/app/console/project/CreateProjectCommand.js.map +1 -0
- package/dist/app/console/project/base_project/README.md.tpl +1 -0
- package/dist/app/console/project/base_project/package.json.tpl +67 -0
- package/dist/app/console/project/base_project/src/app/console/YourFirstCommand.ts.tpl +23 -0
- package/dist/app/console/project/base_project/src/app/console/index.ts.tpl +1 -0
- package/dist/app/console/project/base_project/src/app/controllers/HelloController.ts.tpl +16 -0
- package/dist/app/console/project/base_project/src/app/models/README.md.tpl +1 -0
- package/dist/app/console/project/base_project/src/boot.ts.tpl +0 -0
- package/dist/app/console/project/base_project/src/config/databases.ts.tpl +8 -0
- package/dist/app/console/project/base_project/src/config/default.ts.tpl +41 -0
- package/dist/app/console/project/base_project/src/config/loggers.ts.tpl +11 -0
- package/dist/app/console/project/base_project/src/config/storages.ts.tpl +7 -0
- package/dist/app/console/project/base_project/src/config/test.ts.tpl +1 -0
- package/dist/app/console/project/base_project/src/database/migrations/2025_05_30_41329_create_sample.ts.tpl +13 -0
- package/dist/app/console/project/base_project/src/helpers.ts.tpl +28 -0
- package/dist/app/console/project/base_project/src/index.ts.tpl +12 -0
- package/dist/app/console/project/base_project/src/initialize.ts.tpl +7 -0
- package/dist/app/console/project/base_project/src/middlewares.ts.tpl +16 -0
- package/dist/app/console/project/base_project/src/routes.ts.tpl +18 -0
- package/dist/app/console/project/base_project/src/schedules.ts.tpl +22 -0
- package/dist/app/console/project/base_project/tests/basic_test.spec.ts.tpl +27 -0
- package/dist/app/console/project/base_project/tsconfig.json.tpl +23 -0
- package/dist/app/console/project/base_project/tsup.config.ts.tpl +25 -0
- package/dist/app/console/project/base_project/vitest.config.ts.tpl +17 -0
- package/dist/config.d.ts +7 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +1 -0
- package/dist/context.js +2 -0
- package/dist/context.js.map +1 -0
- package/dist/facades.d.ts +18 -0
- package/dist/facades.js +122 -0
- package/dist/facades.js.map +1 -0
- package/dist/helper.d.ts +1 -0
- package/dist/helper.js +2 -0
- package/dist/helper.js.map +1 -0
- package/dist/http.d.ts +1 -0
- package/dist/http.js +2 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +1 -0
- package/dist/logger.js +2 -0
- package/dist/logger.js.map +1 -0
- package/dist/orm.d.ts +1 -0
- package/dist/orm.js +2 -0
- package/dist/orm.js.map +1 -0
- package/dist/pashmak_cli.d.ts +1 -0
- package/dist/pashmak_cli.js +9 -0
- package/dist/pashmak_cli.js.map +1 -0
- package/dist/router.d.ts +9 -0
- package/dist/router.js +37 -0
- package/dist/router.js.map +1 -0
- package/dist/sql.d.ts +1 -0
- package/dist/sql.js +2 -0
- package/dist/sql.js.map +1 -0
- package/package.json +134 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { defineConfig } from "tsup";
|
|
2
|
+
|
|
3
|
+
export default defineConfig([
|
|
4
|
+
{
|
|
5
|
+
entry: ["src/*.ts", "src/app/**/*.ts", "src/config/**/*.ts"],
|
|
6
|
+
format: ["esm"], // Build for commonJS and ESmodules
|
|
7
|
+
dts: true, // Generate declaration file (.d.ts)
|
|
8
|
+
splitting: false,
|
|
9
|
+
sourcemap: true,
|
|
10
|
+
clean: true,
|
|
11
|
+
bundle: false,
|
|
12
|
+
skipNodeModulesBundle: true,
|
|
13
|
+
},
|
|
14
|
+
{ // since db migration code is loaded dynamically, we need to build it separately to prevent excess files from being created
|
|
15
|
+
entry: ["src/database/migrations/*.ts"],
|
|
16
|
+
outDir: "dist/database/migrations",
|
|
17
|
+
format: ["esm"], // Build for commonJS and ESmodules
|
|
18
|
+
dts: false, // Generate declaration file (.d.ts)
|
|
19
|
+
splitting: false,
|
|
20
|
+
sourcemap: false,
|
|
21
|
+
clean: true,
|
|
22
|
+
bundle: false,
|
|
23
|
+
skipNodeModulesBundle: true,
|
|
24
|
+
},
|
|
25
|
+
]);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { defineConfig } from "vitest/config";
|
|
2
|
+
import { resolve } from "path";
|
|
3
|
+
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
test: {
|
|
6
|
+
globals: true,
|
|
7
|
+
environment: "node",
|
|
8
|
+
include: ["**/?(*.)+(spec|test).ts"],
|
|
9
|
+
exclude: ["**/node_modules/**", "**/dist/**", "**/src/config/**"],
|
|
10
|
+
root: "./",
|
|
11
|
+
},
|
|
12
|
+
resolve: {
|
|
13
|
+
alias: {
|
|
14
|
+
"@": resolve(__dirname, "src"),
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
});
|
package/dist/config.d.ts
ADDED
package/dist/config.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config.ts"],"sourcesContent":["export * from \"@devbro/neko-config\";\n"],"mappings":"AAAA,cAAc;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '@devbro/neko-context';
|
package/dist/context.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/context.ts"],"sourcesContent":["export * from \"@devbro/neko-context\";\n"],"mappings":"AAAA,cAAc;","names":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as clipanion from 'clipanion';
|
|
2
|
+
import { Cli } from 'clipanion';
|
|
3
|
+
import { Router } from '@devbro/neko-router';
|
|
4
|
+
import { Scheduler } from '@devbro/neko-scheduler';
|
|
5
|
+
import { Connection } from '@devbro/neko-sql';
|
|
6
|
+
import { Storage } from '@devbro/neko-storage';
|
|
7
|
+
import { HttpServer } from '@devbro/neko-http';
|
|
8
|
+
import { Logger } from '@devbro/neko-logger';
|
|
9
|
+
|
|
10
|
+
declare const router: (label?: string, ...args: any[]) => Router;
|
|
11
|
+
declare const scheduler: (label?: string, ...args: any[]) => Scheduler;
|
|
12
|
+
declare const db: (label?: string) => Connection;
|
|
13
|
+
declare const storage: (label?: string, ...args: any[]) => Storage;
|
|
14
|
+
declare const cli: (label?: string, ...args: any[]) => Cli<clipanion.BaseContext>;
|
|
15
|
+
declare const httpServer: (label?: string, ...args: any[]) => HttpServer;
|
|
16
|
+
declare const logger: (label?: string, ...args: any[]) => Logger;
|
|
17
|
+
|
|
18
|
+
export { cli, db, httpServer, logger, router, scheduler, storage };
|
package/dist/facades.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { Router } from "./router";
|
|
4
|
+
import { Scheduler } from "@devbro/neko-scheduler";
|
|
5
|
+
import { createSingleton } from "@devbro/neko-helper";
|
|
6
|
+
import { ctx, ctxSafe } from "@devbro/neko-context";
|
|
7
|
+
import { StorageFactory } from "@devbro/neko-storage";
|
|
8
|
+
import { config } from "@devbro/neko-config";
|
|
9
|
+
import { Cli } from "clipanion";
|
|
10
|
+
import { HttpServer } from "./http";
|
|
11
|
+
import { HttpError } from "./http";
|
|
12
|
+
import * as yup from "yup";
|
|
13
|
+
import { Logger } from "@devbro/neko-logger";
|
|
14
|
+
const router = createSingleton(() => new Router());
|
|
15
|
+
const scheduler = createSingleton(() => {
|
|
16
|
+
const rc = new Scheduler();
|
|
17
|
+
rc.setErrorHandler((err, job) => {
|
|
18
|
+
logger().error({
|
|
19
|
+
msg: "Scheduled job error",
|
|
20
|
+
err,
|
|
21
|
+
job_name: job.getName()
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
return rc;
|
|
25
|
+
});
|
|
26
|
+
const db = /* @__PURE__ */ __name((label = "default") => ctx().getOrThrow([
|
|
27
|
+
"database",
|
|
28
|
+
label
|
|
29
|
+
]), "db");
|
|
30
|
+
const storage = createSingleton((label = "default") => StorageFactory.create(config.get([
|
|
31
|
+
"storages",
|
|
32
|
+
label
|
|
33
|
+
].join("."))));
|
|
34
|
+
const cli = createSingleton(() => {
|
|
35
|
+
const [node, app, ...args] = process.argv;
|
|
36
|
+
return new Cli({
|
|
37
|
+
binaryLabel: `My Application`,
|
|
38
|
+
binaryName: `${node} ${app}`,
|
|
39
|
+
binaryVersion: `1.0.0`
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
const httpServer = createSingleton(() => {
|
|
43
|
+
const server = new HttpServer();
|
|
44
|
+
server.setErrorHandler(async (err, req, res) => {
|
|
45
|
+
if (err instanceof HttpError) {
|
|
46
|
+
res.writeHead(err.statusCode, {
|
|
47
|
+
"Content-Type": "application/json"
|
|
48
|
+
});
|
|
49
|
+
res.end(JSON.stringify({
|
|
50
|
+
message: err.message
|
|
51
|
+
}));
|
|
52
|
+
logger().warn({
|
|
53
|
+
msg: "HttpError: " + err.message,
|
|
54
|
+
err
|
|
55
|
+
});
|
|
56
|
+
return;
|
|
57
|
+
} else if (err instanceof yup.ValidationError) {
|
|
58
|
+
res.writeHead(422, {
|
|
59
|
+
"Content-Type": "application/json"
|
|
60
|
+
});
|
|
61
|
+
const errs = {};
|
|
62
|
+
err.inner.forEach((e) => {
|
|
63
|
+
const sanitizedParams = {
|
|
64
|
+
...e.params
|
|
65
|
+
};
|
|
66
|
+
if (/passw/i.test(e.path)) {
|
|
67
|
+
sanitizedParams.value = "******";
|
|
68
|
+
sanitizedParams.originalValue = "******";
|
|
69
|
+
}
|
|
70
|
+
errs[e.path] = {
|
|
71
|
+
type: e.type,
|
|
72
|
+
message: e.message,
|
|
73
|
+
params: sanitizedParams
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
res.end(JSON.stringify({
|
|
77
|
+
message: "validation error",
|
|
78
|
+
errors: errs
|
|
79
|
+
}));
|
|
80
|
+
logger().warn({
|
|
81
|
+
msg: "ValidationError: " + err.message,
|
|
82
|
+
err
|
|
83
|
+
});
|
|
84
|
+
return;
|
|
85
|
+
} else {
|
|
86
|
+
logger().error({
|
|
87
|
+
msg: "Error: " + err.message,
|
|
88
|
+
err
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
res.writeHead(500, {
|
|
92
|
+
"Content-Type": ""
|
|
93
|
+
});
|
|
94
|
+
res.end(JSON.stringify({
|
|
95
|
+
error: "Internal Server Error"
|
|
96
|
+
}));
|
|
97
|
+
});
|
|
98
|
+
server.setRouter(router());
|
|
99
|
+
return server;
|
|
100
|
+
});
|
|
101
|
+
const logger = createSingleton((label) => {
|
|
102
|
+
const logger_config = config.get([
|
|
103
|
+
"loggers",
|
|
104
|
+
label
|
|
105
|
+
].join("."));
|
|
106
|
+
const rc = new Logger(logger_config);
|
|
107
|
+
rc.setExtrasFunction((message) => {
|
|
108
|
+
message.requestId = ctxSafe()?.get("requestId") || "N/A";
|
|
109
|
+
return message;
|
|
110
|
+
});
|
|
111
|
+
return rc;
|
|
112
|
+
});
|
|
113
|
+
export {
|
|
114
|
+
cli,
|
|
115
|
+
db,
|
|
116
|
+
httpServer,
|
|
117
|
+
logger,
|
|
118
|
+
router,
|
|
119
|
+
scheduler,
|
|
120
|
+
storage
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=facades.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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 { 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 }));\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"],"mappings":"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","names":["Router","Scheduler","createSingleton","ctx","ctxSafe","StorageFactory","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","warn","ValidationError","errs","inner","forEach","e","sanitizedParams","params","test","path","value","originalValue","type","errors","setRouter","logger_config","setExtrasFunction","requestId"]}
|
package/dist/helper.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '@devbro/neko-helper';
|
package/dist/helper.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/helper.ts"],"sourcesContent":["export * from \"@devbro/neko-helper\";\n"],"mappings":"AAAA,cAAc;","names":[]}
|
package/dist/http.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '@devbro/neko-http';
|
package/dist/http.js
ADDED
package/dist/http.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/http.ts"],"sourcesContent":["export * from \"@devbro/neko-http\";\n"],"mappings":"AAAA,cAAc;","names":[]}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import dotenv from "dotenv";
|
|
4
|
+
import { context_provider } from "@devbro/neko-context";
|
|
5
|
+
import { runNext } from "@devbro/neko-router";
|
|
6
|
+
import { config } from "@devbro/neko-config";
|
|
7
|
+
async function bootstrap(options) {
|
|
8
|
+
dotenv.config();
|
|
9
|
+
console.log("Bootstrapping application...");
|
|
10
|
+
console.log(`Root directory: ${options.root_dir}`);
|
|
11
|
+
let a = (await import(`${options.root_dir}/config/default`)).default;
|
|
12
|
+
config.load(a);
|
|
13
|
+
console.log("Loading application modules...");
|
|
14
|
+
await import("./app/console");
|
|
15
|
+
console.log("Loading Database Provider ...");
|
|
16
|
+
const { DatabaseServiceProvider } = await import("./DatabaseServiceProvider");
|
|
17
|
+
console.log("Registering service providers...");
|
|
18
|
+
await import(`${options.root_dir}/app/console`);
|
|
19
|
+
await import(`${options.root_dir}/routes`);
|
|
20
|
+
await import(`${options.root_dir}/schedules`);
|
|
21
|
+
console.log("Setting up pre-loader for context provider...");
|
|
22
|
+
context_provider.setPreLoader(async (f) => {
|
|
23
|
+
const middlewares = [];
|
|
24
|
+
middlewares.push(DatabaseServiceProvider.getInstance());
|
|
25
|
+
return await runNext(
|
|
26
|
+
middlewares,
|
|
27
|
+
{},
|
|
28
|
+
{},
|
|
29
|
+
// @ts-ignore
|
|
30
|
+
f
|
|
31
|
+
);
|
|
32
|
+
});
|
|
33
|
+
console.log("Application bootstrapped successfully.");
|
|
34
|
+
}
|
|
35
|
+
__name(bootstrap, "bootstrap");
|
|
36
|
+
export {
|
|
37
|
+
bootstrap,
|
|
38
|
+
config
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=index.js.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(\"./DatabaseServiceProvider\");\n\n console.log(\"Registering service providers...\");\n await import(`${options.root_dir}/app/console`);\n await import(`${options.root_dir}/routes`);\n await import(`${options.root_dir}/schedules`);\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,kCAAA;AACZ,QAAM,OAAO,GAAGF,QAAQG,QAAQ;AAChC,QAAM,OAAO,GAAGH,QAAQG,QAAQ;AAChC,QAAM,OAAO,GAAGH,QAAQG,QAAQ;AAEhCF,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;AApCsBH;","names":["dotenv","context_provider","runNext","config","bootstrap","options","console","log","root_dir","a","default","load","DatabaseServiceProvider","setPreLoader","f","middlewares","push","getInstance"]}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '@devbro/neko-logger';
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/logger.ts"],"sourcesContent":["export * from \"@devbro/neko-logger\";\n"],"mappings":"AAAA,cAAc;","names":[]}
|
package/dist/orm.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '@devbro/neko-orm';
|
package/dist/orm.js
ADDED
package/dist/orm.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/orm.ts"],"sourcesContent":["export * from \"@devbro/neko-orm\";\n"],"mappings":"AAAA,cAAc;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/pashmak_cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport \"./app/console\";\nimport { logger, cli } from \"./facades\";\n\nconst [node, app, ...args] = process.argv;\ncli()\n .runExit(args)\n .then(() => {})\n .catch((err: any) => {\n logger().error(err);\n });\n"],"mappings":";AAEA,OAAO;AACP,SAASA,QAAQC,WAAW;AAE5B,MAAM,CAACC,MAAMC,KAAK,GAAGC,IAAAA,IAAQC,QAAQC;AACrCL,IAAAA,EACGM,QAAQH,IAAAA,EACRI,KAAK,MAAA;AAAO,CAAA,EACZC,MAAM,CAACC,QAAAA;AACNV,SAAAA,EAASW,MAAMD,GAAAA;AACjB,CAAA;","names":["logger","cli","node","app","args","process","argv","runExit","then","catch","err","error"]}
|
package/dist/router.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BaseModel } from '@devbro/neko-orm';
|
|
2
|
+
import * as yup from 'yup';
|
|
3
|
+
export * from '@devbro/neko-router';
|
|
4
|
+
|
|
5
|
+
declare function Model(model: typeof BaseModel, paramName: string): ParameterDecorator;
|
|
6
|
+
declare function Param(paramName: string): ParameterDecorator;
|
|
7
|
+
declare function ValidatedRequest(validationRules: yup.ObjectSchema<any>): ParameterDecorator;
|
|
8
|
+
|
|
9
|
+
export { Model, Param, ValidatedRequest };
|
package/dist/router.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { ctx } from "@devbro/neko-context";
|
|
4
|
+
import { HttpNotFoundError } from "@devbro/neko-http/errors";
|
|
5
|
+
import { createParamDecorator } from "@devbro/neko-router";
|
|
6
|
+
export * from "@devbro/neko-router";
|
|
7
|
+
function Model(model, paramName) {
|
|
8
|
+
return createParamDecorator(async () => {
|
|
9
|
+
let rc = await model.find(ctx().get("request").params[paramName]);
|
|
10
|
+
if (!rc) {
|
|
11
|
+
throw new HttpNotFoundError("Object not found");
|
|
12
|
+
}
|
|
13
|
+
return rc;
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
__name(Model, "Model");
|
|
17
|
+
function Param(paramName) {
|
|
18
|
+
return createParamDecorator(() => {
|
|
19
|
+
return ctx().get("request").params[paramName];
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
__name(Param, "Param");
|
|
23
|
+
function ValidatedRequest(validationRules) {
|
|
24
|
+
return createParamDecorator(async () => {
|
|
25
|
+
const rc = await validationRules.noUnknown().validate(ctx().get("request").body, {
|
|
26
|
+
abortEarly: false
|
|
27
|
+
});
|
|
28
|
+
return rc;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
__name(ValidatedRequest, "ValidatedRequest");
|
|
32
|
+
export {
|
|
33
|
+
Model,
|
|
34
|
+
Param,
|
|
35
|
+
ValidatedRequest
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/router.ts"],"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>,\n): ParameterDecorator {\n return createParamDecorator(async () => {\n const rc = await validationRules\n .noUnknown()\n .validate(ctx().get<Request>(\"request\").body, { abortEarly: false });\n\n return rc;\n });\n}\n"],"mappings":";;AAAA,SAASA,WAAW;AAGpB,SAASC,yBAAyB;AAClC,SAASC,4BAA4B;AAErC,cAAc;AAEP,SAASC,MACdC,OACAC,WAAiB;AAEjB,SAAOH,qBAAqB,YAAA;AAC1B,QAAII,KAAK,MAAMF,MAAMG,KAAKP,IAAAA,EAAMQ,IAAa,SAAA,EAAWC,OAAOJ,SAAAA,CAAU;AACzE,QAAI,CAACC,IAAI;AACP,YAAM,IAAIL,kBAAkB,kBAAA;IAC9B;AAEA,WAAOK;EACT,CAAA;AACF;AAZgBH;AAcT,SAASO,MAAML,WAAiB;AACrC,SAAOH,qBAAqB,MAAA;AAC1B,WAAOF,IAAAA,EAAMQ,IAAa,SAAA,EAAWC,OAAOJ,SAAAA;EAC9C,CAAA;AACF;AAJgBK;AAMT,SAASC,iBACdC,iBAAsC;AAEtC,SAAOV,qBAAqB,YAAA;AAC1B,UAAMI,KAAK,MAAMM,gBACdC,UAAS,EACTC,SAASd,IAAAA,EAAMQ,IAAa,SAAA,EAAWO,MAAM;MAAEC,YAAY;IAAM,CAAA;AAEpE,WAAOV;EACT,CAAA;AACF;AAVgBK;","names":["ctx","HttpNotFoundError","createParamDecorator","Model","model","paramName","rc","find","get","params","Param","ValidatedRequest","validationRules","noUnknown","validate","body","abortEarly"]}
|
package/dist/sql.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '@devbro/neko-sql';
|
package/dist/sql.js
ADDED
package/dist/sql.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sql.ts"],"sourcesContent":["export * from \"@devbro/neko-sql\";\n"],"mappings":"AAAA,cAAc;","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@devbro/pashmak",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "testing application for the entire repo",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"bin": {
|
|
10
|
+
"pashmak": "./dist/pashmak_cli.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist"
|
|
14
|
+
],
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"import": "./dist/index.js",
|
|
19
|
+
"require": "./dist/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./facades": {
|
|
22
|
+
"types": "./dist/facades.d.ts",
|
|
23
|
+
"import": "./dist/facades.js",
|
|
24
|
+
"require": "./dist/facades.js"
|
|
25
|
+
},
|
|
26
|
+
"./router": {
|
|
27
|
+
"types": "./dist/router.d.ts",
|
|
28
|
+
"import": "./dist/router.js",
|
|
29
|
+
"require": "./dist/router.js"
|
|
30
|
+
},
|
|
31
|
+
"./initialize": {
|
|
32
|
+
"types": "./dist/initialize.d.ts",
|
|
33
|
+
"import": "./dist/initialize.js",
|
|
34
|
+
"require": "./dist/initialize.js"
|
|
35
|
+
},
|
|
36
|
+
"./http": {
|
|
37
|
+
"types": "./dist/http.d.ts",
|
|
38
|
+
"import": "./dist/http.js",
|
|
39
|
+
"require": "./dist/http.js"
|
|
40
|
+
},
|
|
41
|
+
"./config": {
|
|
42
|
+
"types": "./dist/config.d.ts",
|
|
43
|
+
"import": "./dist/config.js",
|
|
44
|
+
"require": "./dist/config.js"
|
|
45
|
+
},
|
|
46
|
+
"./sql": {
|
|
47
|
+
"types": "./dist/sql.d.ts",
|
|
48
|
+
"import": "./dist/sql.js",
|
|
49
|
+
"require": "./dist/sql.js"
|
|
50
|
+
},
|
|
51
|
+
"./context": {
|
|
52
|
+
"types": "./dist/context.d.ts",
|
|
53
|
+
"import": "./dist/context.js",
|
|
54
|
+
"require": "./dist/context.js"
|
|
55
|
+
},
|
|
56
|
+
"./helper": {
|
|
57
|
+
"types": "./dist/helper.d.ts",
|
|
58
|
+
"import": "./dist/helper.js",
|
|
59
|
+
"require": "./dist/helper.js"
|
|
60
|
+
},
|
|
61
|
+
"./logger": {
|
|
62
|
+
"types": "./dist/logger.d.ts",
|
|
63
|
+
"import": "./dist/logger.js",
|
|
64
|
+
"require": "./dist/logger.js"
|
|
65
|
+
},
|
|
66
|
+
"./orm": {
|
|
67
|
+
"types": "./dist/orm.d.ts",
|
|
68
|
+
"import": "./dist/orm.js",
|
|
69
|
+
"require": "./dist/orm.js"
|
|
70
|
+
},
|
|
71
|
+
"./package.json": "./package.json"
|
|
72
|
+
},
|
|
73
|
+
"scripts": {
|
|
74
|
+
"build": "tsup && chmod +x dist/pashmak_cli.js",
|
|
75
|
+
"test": "jest",
|
|
76
|
+
"format": "eslint . --fix --ext ts,tsx --report-unused-disable-directives --max-warnings 0 ",
|
|
77
|
+
"prepare": "husky",
|
|
78
|
+
"prettier": "prettier --write .",
|
|
79
|
+
"clean": "rm -rf dist"
|
|
80
|
+
},
|
|
81
|
+
"author": "Farzad Meow Khalafi",
|
|
82
|
+
"license": "MIT",
|
|
83
|
+
"devDependencies": {
|
|
84
|
+
"@swc/core": "^1.12.9",
|
|
85
|
+
"@types/config": "^3.3.5",
|
|
86
|
+
"@types/jsonwebtoken": "^9.0.9",
|
|
87
|
+
"@types/yup": "^0.32.0",
|
|
88
|
+
"globby": "^14.1.0",
|
|
89
|
+
"jest": "^29.7.0",
|
|
90
|
+
"pino-pretty": "^13.0.0",
|
|
91
|
+
"typescript": "^5.8.3"
|
|
92
|
+
},
|
|
93
|
+
"dependencies": {
|
|
94
|
+
"bcryptjs": "^3.0.2",
|
|
95
|
+
"change-case-all": "^2.1.0",
|
|
96
|
+
"clipanion": "^4.0.0-rc.4",
|
|
97
|
+
"dotenv": "^16.5.0",
|
|
98
|
+
"handlebars": "^4.7.8",
|
|
99
|
+
"jsonwebtoken": "^9.0.2",
|
|
100
|
+
"@devbro/neko-config": "^0.1.0",
|
|
101
|
+
"@devbro/neko-context": "^0.1.0",
|
|
102
|
+
"@devbro/neko-helper": "^0.1.0",
|
|
103
|
+
"@devbro/neko-http": "^0.1.0",
|
|
104
|
+
"@devbro/neko-logger": "^0.1.0",
|
|
105
|
+
"@devbro/neko-orm": "^0.1.0",
|
|
106
|
+
"@devbro/neko-scheduler": "^0.1.0",
|
|
107
|
+
"@devbro/neko-sql": "^0.1.0",
|
|
108
|
+
"pg-pool": "3.10.0",
|
|
109
|
+
"ts-jest": "^29.3.4",
|
|
110
|
+
"tsconfig-paths": "^4.2.0",
|
|
111
|
+
"yup": "^1.6.1",
|
|
112
|
+
"@types/pluralize": "^0.0.33",
|
|
113
|
+
"pluralize": "^8.0.0"
|
|
114
|
+
},
|
|
115
|
+
"directories": {
|
|
116
|
+
"doc": "docs",
|
|
117
|
+
"test": "tests"
|
|
118
|
+
},
|
|
119
|
+
"repository": {
|
|
120
|
+
"type": "git",
|
|
121
|
+
"url": "git+ssh://git@github.com/devbro1/pashmak.git"
|
|
122
|
+
},
|
|
123
|
+
"keywords": [
|
|
124
|
+
"pashmak"
|
|
125
|
+
],
|
|
126
|
+
"bugs": {
|
|
127
|
+
"url": "https://github.com/devbro1/pashmak/issues"
|
|
128
|
+
},
|
|
129
|
+
"homepage": "https://devbro1.github.io/pashmak/",
|
|
130
|
+
"tags": {
|
|
131
|
+
"needsCompile": true,
|
|
132
|
+
"canPublishToNpm": true
|
|
133
|
+
}
|
|
134
|
+
}
|