@devbro/pashmak 0.1.8 → 0.1.10
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} +5 -3
- package/dist/app/console/DefaultCommand.mjs.map +1 -0
- package/dist/app/console/{KeyGenerateCommand.js → KeyGenerateCommand.mjs} +21 -19
- package/dist/app/console/KeyGenerateCommand.mjs.map +1 -0
- package/dist/app/console/{StartCommand.js → StartCommand.mjs} +11 -15
- package/dist/app/console/StartCommand.mjs.map +1 -0
- package/dist/app/console/generate/{GenerateControllerCommand.js → GenerateControllerCommand.mjs} +16 -19
- package/dist/app/console/generate/GenerateControllerCommand.mjs.map +1 -0
- package/dist/app/console/generate/{index.d.ts → index.d.mts} +1 -1
- package/dist/app/console/generate/index.mjs +2 -0
- package/dist/app/console/generate/index.mjs.map +1 -0
- package/dist/app/console/index.d.mts +9 -0
- package/dist/app/console/index.mjs +10 -0
- package/dist/app/console/index.mjs.map +1 -0
- package/dist/app/console/migrate/{GenerateMigrateCommand.js → GenerateMigrateCommand.mjs} +16 -19
- package/dist/app/console/migrate/GenerateMigrateCommand.mjs.map +1 -0
- package/dist/app/console/migrate/{MigrateCommand.js → MigrateCommand.mjs} +7 -12
- package/dist/app/console/migrate/MigrateCommand.mjs.map +1 -0
- package/dist/app/console/migrate/{MigrateRollbackCommand.js → MigrateRollbackCommand.mjs} +4 -11
- package/dist/app/console/migrate/MigrateRollbackCommand.mjs.map +1 -0
- package/dist/app/console/migrate/{index.d.ts → index.d.mts} +3 -3
- package/dist/app/console/migrate/index.mjs +4 -0
- package/dist/app/console/migrate/index.mjs.map +1 -0
- package/dist/app/console/project/{CreateProjectCommand.js → CreateProjectCommand.mjs} +19 -25
- package/dist/app/console/project/CreateProjectCommand.mjs.map +1 -0
- package/dist/bin/DatabaseServiceProvider.cjs +88 -0
- package/dist/bin/app/console/DefaultCommand.cjs +508 -0
- package/dist/bin/app/console/KeyGenerateCommand.cjs +556 -0
- package/dist/bin/app/console/StartCommand.cjs +516 -0
- package/dist/bin/app/console/generate/GenerateControllerCommand.cjs +529 -0
- package/dist/bin/app/console/generate/index.cjs +529 -0
- package/dist/bin/app/console/index.cjs +2143 -0
- package/dist/bin/app/console/migrate/GenerateMigrateCommand.cjs +526 -0
- package/dist/bin/app/console/migrate/MigrateCommand.cjs +560 -0
- package/dist/bin/app/console/migrate/MigrateRollbackCommand.cjs +1677 -0
- package/dist/bin/app/console/migrate/index.cjs +1814 -0
- package/dist/bin/app/console/project/CreateProjectCommand.cjs +149 -0
- package/dist/bin/{pashmak_cli.cjs → bin/pashmak_cli.cjs} +19 -25
- 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 +2425 -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} +3 -3
- package/dist/bin/pashmak_cli.mjs.map +1 -0
- 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.d.ts → index.d.mts} +1 -0
- package/dist/{index.js → index.mjs} +4 -7
- 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.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/generate/index.js +0 -2
- package/dist/app/console/generate/index.js.map +0 -1
- package/dist/app/console/index.d.ts +0 -9
- package/dist/app/console/index.js +0 -10
- package/dist/app/console/index.js.map +0 -1
- package/dist/app/console/migrate/GenerateMigrateCommand.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.js +0 -4
- package/dist/app/console/migrate/index.js.map +0 -1
- package/dist/app/console/project/CreateProjectCommand.js.map +0 -1
- package/dist/bin/pashmak_cli.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/migrate/{GenerateMigrateCommand.d.ts → GenerateMigrateCommand.d.mts} +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/{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/{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/{router.d.ts → router.d.mts} +0 -0
- /package/dist/{sql.d.ts → sql.d.mts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/app/console/project/CreateProjectCommand.mts"],"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 const 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":[]}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
|
|
21
|
+
// src/DatabaseServiceProvider.mts
|
|
22
|
+
var DatabaseServiceProvider_exports = {};
|
|
23
|
+
__export(DatabaseServiceProvider_exports, {
|
|
24
|
+
DatabaseServiceProvider: () => DatabaseServiceProvider
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(DatabaseServiceProvider_exports);
|
|
27
|
+
|
|
28
|
+
// ../neko-router/dist/Middleware.mjs
|
|
29
|
+
var Middleware = class {
|
|
30
|
+
static {
|
|
31
|
+
__name(this, "Middleware");
|
|
32
|
+
}
|
|
33
|
+
constructor(params = {}) {
|
|
34
|
+
}
|
|
35
|
+
static getInstance(params) {
|
|
36
|
+
throw new Error("Method not implemented. Please implement a static getInstance method.");
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
// src/DatabaseServiceProvider.mts
|
|
41
|
+
var import_neko_sql = require("@devbro/neko-sql");
|
|
42
|
+
var import_neko_orm = require("@devbro/neko-orm");
|
|
43
|
+
var import_neko_context = require("@devbro/neko-context");
|
|
44
|
+
var import_neko_config = require("@devbro/neko-config");
|
|
45
|
+
var DatabaseServiceProvider = class _DatabaseServiceProvider extends Middleware {
|
|
46
|
+
static {
|
|
47
|
+
__name(this, "DatabaseServiceProvider");
|
|
48
|
+
}
|
|
49
|
+
async call(req, res, next) {
|
|
50
|
+
const db_configs = import_neko_config.config.get("databases");
|
|
51
|
+
const conns = [];
|
|
52
|
+
try {
|
|
53
|
+
for (const [name, db_config] of Object.entries(db_configs)) {
|
|
54
|
+
const conn = await this.getConnection(db_config);
|
|
55
|
+
(0, import_neko_context.ctx)().set(["database", name], conn);
|
|
56
|
+
conns.push(conn);
|
|
57
|
+
}
|
|
58
|
+
import_neko_orm.BaseModel.setConnection(
|
|
59
|
+
() => (0, import_neko_context.ctx)().getOrThrow(["database", "default"])
|
|
60
|
+
);
|
|
61
|
+
await next();
|
|
62
|
+
} finally {
|
|
63
|
+
for (const conn of conns) {
|
|
64
|
+
await conn.disconnect();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
static instance;
|
|
69
|
+
async register() {
|
|
70
|
+
}
|
|
71
|
+
static getInstance() {
|
|
72
|
+
if (!_DatabaseServiceProvider.instance) {
|
|
73
|
+
_DatabaseServiceProvider.instance = new _DatabaseServiceProvider();
|
|
74
|
+
}
|
|
75
|
+
return _DatabaseServiceProvider.instance;
|
|
76
|
+
}
|
|
77
|
+
async getConnection(db_config) {
|
|
78
|
+
const conn = new import_neko_sql.PostgresqlConnection(db_config);
|
|
79
|
+
if (!await conn.connect()) {
|
|
80
|
+
throw new Error("Failed to connect to the database");
|
|
81
|
+
}
|
|
82
|
+
return conn;
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
86
|
+
0 && (module.exports = {
|
|
87
|
+
DatabaseServiceProvider
|
|
88
|
+
});
|
|
@@ -0,0 +1,508 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
22
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
23
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
24
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
25
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
26
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
28
|
+
mod
|
|
29
|
+
));
|
|
30
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
31
|
+
|
|
32
|
+
// src/app/console/DefaultCommand.mts
|
|
33
|
+
var DefaultCommand_exports = {};
|
|
34
|
+
__export(DefaultCommand_exports, {
|
|
35
|
+
DefaultCommand: () => DefaultCommand
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(DefaultCommand_exports);
|
|
38
|
+
var import_clipanion2 = require("clipanion");
|
|
39
|
+
|
|
40
|
+
// src/router.mts
|
|
41
|
+
var import_neko_context = require("@devbro/neko-context");
|
|
42
|
+
var import_errors = require("@devbro/neko-http/errors");
|
|
43
|
+
|
|
44
|
+
// ../neko-router/dist/Middleware.mjs
|
|
45
|
+
var Middleware = class {
|
|
46
|
+
static {
|
|
47
|
+
__name(this, "Middleware");
|
|
48
|
+
}
|
|
49
|
+
constructor(params = {}) {
|
|
50
|
+
}
|
|
51
|
+
static getInstance(params) {
|
|
52
|
+
throw new Error("Method not implemented. Please implement a static getInstance method.");
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// ../neko-router/dist/MiddlewareFactory.mjs
|
|
57
|
+
var MiddlewareFactory = class {
|
|
58
|
+
static {
|
|
59
|
+
__name(this, "MiddlewareFactory");
|
|
60
|
+
}
|
|
61
|
+
static create(func) {
|
|
62
|
+
const cls = class extends Middleware {
|
|
63
|
+
static {
|
|
64
|
+
__name(this, "cls");
|
|
65
|
+
}
|
|
66
|
+
call(req, res, next) {
|
|
67
|
+
return func(req, res, next);
|
|
68
|
+
}
|
|
69
|
+
constructor(params = {}) {
|
|
70
|
+
super(params);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
return new cls();
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// ../neko-router/dist/CompiledRoute.mjs
|
|
78
|
+
var CompiledRoute = class {
|
|
79
|
+
static {
|
|
80
|
+
__name(this, "CompiledRoute");
|
|
81
|
+
}
|
|
82
|
+
constructor(route, request, response, globalMiddlewares = []) {
|
|
83
|
+
this.route = route;
|
|
84
|
+
this.request = request;
|
|
85
|
+
this.response = response;
|
|
86
|
+
this.globalMiddlewares = globalMiddlewares;
|
|
87
|
+
this.prepareMiddlewares();
|
|
88
|
+
}
|
|
89
|
+
middlewares = [];
|
|
90
|
+
getMiddlewares() {
|
|
91
|
+
return this.middlewares;
|
|
92
|
+
}
|
|
93
|
+
prepareMiddlewares() {
|
|
94
|
+
this.middlewares = [];
|
|
95
|
+
for (const middleware of [...this.globalMiddlewares, ...this.route.getMiddlewares()]) {
|
|
96
|
+
if (middleware instanceof Middleware) {
|
|
97
|
+
this.middlewares.push(middleware);
|
|
98
|
+
} else if (this.isClass(middleware)) {
|
|
99
|
+
this.middlewares.push(middleware.getInstance({}));
|
|
100
|
+
} else if (typeof middleware === "function") {
|
|
101
|
+
this.middlewares.push(MiddlewareFactory.create(middleware));
|
|
102
|
+
} else {
|
|
103
|
+
throw new Error("Invalid middleware type");
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
isClass(func) {
|
|
108
|
+
return typeof func === "function" && /^class\s/.test(Function.prototype.toString.call(func));
|
|
109
|
+
}
|
|
110
|
+
async run() {
|
|
111
|
+
return await this.runMiddlewares(this.middlewares, this.request, this.response);
|
|
112
|
+
}
|
|
113
|
+
prepareOutputJsonFormat(obj) {
|
|
114
|
+
function traverse(value) {
|
|
115
|
+
if (!value || typeof value !== "object") {
|
|
116
|
+
return value;
|
|
117
|
+
}
|
|
118
|
+
if (typeof value.toJson === "function") {
|
|
119
|
+
return traverse(value.toJson());
|
|
120
|
+
}
|
|
121
|
+
if (Array.isArray(value)) {
|
|
122
|
+
return value.map(traverse);
|
|
123
|
+
}
|
|
124
|
+
const result = {};
|
|
125
|
+
for (const key in value) {
|
|
126
|
+
if (Object.prototype.hasOwnProperty.call(value, key)) {
|
|
127
|
+
result[key] = traverse(value[key]);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
132
|
+
__name(traverse, "traverse");
|
|
133
|
+
return traverse(obj);
|
|
134
|
+
}
|
|
135
|
+
convertToString(obj) {
|
|
136
|
+
if (typeof obj === "string") {
|
|
137
|
+
return obj;
|
|
138
|
+
} else if (obj instanceof Buffer) {
|
|
139
|
+
return obj.toString();
|
|
140
|
+
} else if (typeof obj === "object") {
|
|
141
|
+
return JSON.stringify(this.prepareOutputJsonFormat(obj));
|
|
142
|
+
}
|
|
143
|
+
return String(obj);
|
|
144
|
+
}
|
|
145
|
+
processResponseBody(res, controller_rc) {
|
|
146
|
+
if (controller_rc && res.writableEnded) {
|
|
147
|
+
throw new Error("cannot write to response, response has already ended");
|
|
148
|
+
}
|
|
149
|
+
if (res.writableEnded) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (controller_rc) {
|
|
153
|
+
const header_content_type = res.getHeader("Content-Type");
|
|
154
|
+
if (!header_content_type && typeof controller_rc === "object") {
|
|
155
|
+
res.setHeader("Content-Type", "application/json");
|
|
156
|
+
} else if (!header_content_type) {
|
|
157
|
+
res.setHeader("Content-Type", "text/plain");
|
|
158
|
+
}
|
|
159
|
+
res.end(this.convertToString(controller_rc));
|
|
160
|
+
return;
|
|
161
|
+
} else {
|
|
162
|
+
res.statusCode = [200].includes(res.statusCode) ? 204 : res.statusCode;
|
|
163
|
+
res.end();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async runMiddlewares(middlewares, req, res) {
|
|
167
|
+
let index = 0;
|
|
168
|
+
const me = this;
|
|
169
|
+
async function next() {
|
|
170
|
+
if (index >= middlewares.length) {
|
|
171
|
+
const controller_rc = await me.route.callHanlder(req, res);
|
|
172
|
+
await me.processResponseBody(res, controller_rc);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
const middleware = middlewares[index++];
|
|
176
|
+
if (middleware instanceof Middleware) {
|
|
177
|
+
await middleware.call(req, res, next);
|
|
178
|
+
} else if (typeof middleware === "function") {
|
|
179
|
+
await middleware(req, res, next);
|
|
180
|
+
} else {
|
|
181
|
+
throw new Error("does not know how to run middleware");
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
__name(next, "next");
|
|
185
|
+
await next();
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
// ../neko-router/dist/Route.mjs
|
|
190
|
+
var Route = class {
|
|
191
|
+
static {
|
|
192
|
+
__name(this, "Route");
|
|
193
|
+
}
|
|
194
|
+
constructor(methods, path2, handler) {
|
|
195
|
+
this.methods = methods;
|
|
196
|
+
this.path = path2;
|
|
197
|
+
this.handler = handler;
|
|
198
|
+
this.urlRegex = this.pathToRegex(path2);
|
|
199
|
+
}
|
|
200
|
+
middlewares = [];
|
|
201
|
+
urlRegex;
|
|
202
|
+
pathToRegex(path2) {
|
|
203
|
+
const lex = this.lexUrlPath(path2);
|
|
204
|
+
return this.tokensToRegex(lex);
|
|
205
|
+
}
|
|
206
|
+
lexUrlPath(path2) {
|
|
207
|
+
const tokens = [];
|
|
208
|
+
let i = 0;
|
|
209
|
+
while (i < path2.length) {
|
|
210
|
+
const char = path2[i];
|
|
211
|
+
if (char === "/") {
|
|
212
|
+
tokens.push({ type: "SLASH", value: "/" });
|
|
213
|
+
i++;
|
|
214
|
+
} else if (char === ":") {
|
|
215
|
+
let start = i + 1;
|
|
216
|
+
while (start < path2.length && /[a-zA-Z0-9_]/.test(path2[start])) {
|
|
217
|
+
start++;
|
|
218
|
+
}
|
|
219
|
+
tokens.push({ type: "PARAM", value: path2.slice(i + 1, start) });
|
|
220
|
+
i = start;
|
|
221
|
+
} else if (char === "*") {
|
|
222
|
+
let start = i + 1;
|
|
223
|
+
while (start < path2.length && /[a-zA-Z0-9_]/.test(path2[start])) {
|
|
224
|
+
start++;
|
|
225
|
+
}
|
|
226
|
+
tokens.push({ type: "WILDCARD", value: path2.slice(i + 1, start) });
|
|
227
|
+
i = start;
|
|
228
|
+
} else {
|
|
229
|
+
let start = i;
|
|
230
|
+
while (start < path2.length && !["/", ":", "*"].includes(path2[start])) {
|
|
231
|
+
start++;
|
|
232
|
+
}
|
|
233
|
+
tokens.push({ type: "TEXT", value: path2.slice(i, start) });
|
|
234
|
+
i = start;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return tokens;
|
|
238
|
+
}
|
|
239
|
+
tokensToRegex(tokens) {
|
|
240
|
+
const regexParts = [];
|
|
241
|
+
for (const token of tokens) {
|
|
242
|
+
if (token.type === "SLASH") {
|
|
243
|
+
regexParts.push("\\/");
|
|
244
|
+
} else if (token.type === "PARAM") {
|
|
245
|
+
regexParts.push(`(?<${token.value}>[^\\/]+)`);
|
|
246
|
+
} else if (token.type === "WILDCARD") {
|
|
247
|
+
regexParts.push("(.+)");
|
|
248
|
+
} else if (token.type === "TEXT") {
|
|
249
|
+
regexParts.push(token.value.replace(/[-\/\\^$.*+?()[\]{}|]/g, "\\$&"));
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
if (regexParts.length > 0 && regexParts[regexParts.length - 1] === "\\/") {
|
|
253
|
+
regexParts[regexParts.length - 1] = "\\/?";
|
|
254
|
+
} else {
|
|
255
|
+
regexParts.push("\\/?");
|
|
256
|
+
}
|
|
257
|
+
return new RegExp(`^${regexParts.join("")}$`);
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* to evaludate if request is a match for this route
|
|
261
|
+
* @param request http request
|
|
262
|
+
* @returns return true if route is a match for this request
|
|
263
|
+
*/
|
|
264
|
+
test(request) {
|
|
265
|
+
if (this.methods.indexOf(request.method) === -1) {
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
const url = new URL(request.url || "/", "http://localhost");
|
|
269
|
+
return this.testPath(url.pathname);
|
|
270
|
+
}
|
|
271
|
+
testPath(pathname) {
|
|
272
|
+
return this.urlRegex.test(pathname);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* returns details of the match, otherwise it returns false
|
|
276
|
+
* @param request the request to match
|
|
277
|
+
* @returns object cotaining details of match including matched params
|
|
278
|
+
*/
|
|
279
|
+
match(request) {
|
|
280
|
+
if (this.methods.indexOf(request.method) === -1) {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
const url = new URL(request.url || "/", "http://localhost");
|
|
284
|
+
const r = this.urlRegex.exec(url.pathname);
|
|
285
|
+
if (!r) {
|
|
286
|
+
return false;
|
|
287
|
+
}
|
|
288
|
+
return {
|
|
289
|
+
url,
|
|
290
|
+
params: r.groups || {}
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
addMiddleware(middlewares) {
|
|
294
|
+
this.middlewares = this.middlewares.concat(middlewares);
|
|
295
|
+
return this;
|
|
296
|
+
}
|
|
297
|
+
getMiddlewares() {
|
|
298
|
+
return this.middlewares;
|
|
299
|
+
}
|
|
300
|
+
callHanlder(request, response) {
|
|
301
|
+
return this.handler(request, response);
|
|
302
|
+
}
|
|
303
|
+
};
|
|
304
|
+
|
|
305
|
+
// ../neko-router/dist/Router.mjs
|
|
306
|
+
var import_path = __toESM(require("path"), 1);
|
|
307
|
+
var Router = class {
|
|
308
|
+
static {
|
|
309
|
+
__name(this, "Router");
|
|
310
|
+
}
|
|
311
|
+
middlewares = [];
|
|
312
|
+
routes = [];
|
|
313
|
+
addRoute(methods, path2, handler) {
|
|
314
|
+
const route = new Route(methods, path2, handler);
|
|
315
|
+
this.routes.push(route);
|
|
316
|
+
return route;
|
|
317
|
+
}
|
|
318
|
+
getMiddlewares() {
|
|
319
|
+
return [...this.middlewares];
|
|
320
|
+
}
|
|
321
|
+
addController(controller) {
|
|
322
|
+
const basePath = controller.basePath || "";
|
|
323
|
+
for (const route of controller.routes) {
|
|
324
|
+
const urlPath = import_path.default.join(basePath, route.path);
|
|
325
|
+
this.addRoute(route.methods, urlPath, async (req, res) => {
|
|
326
|
+
const controllerInstance = controller.getInstance();
|
|
327
|
+
return await controllerInstance[route.handler]();
|
|
328
|
+
}).addMiddleware([...controller.baseMiddlewares, ...route.middlewares]);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
addGlobalMiddleware(middlewares) {
|
|
332
|
+
this.middlewares = this.middlewares.concat(middlewares);
|
|
333
|
+
}
|
|
334
|
+
resolve(request) {
|
|
335
|
+
for (const route of this.routes) {
|
|
336
|
+
if (route.test(request)) {
|
|
337
|
+
return route;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return void 0;
|
|
341
|
+
}
|
|
342
|
+
resolveMultiple(request) {
|
|
343
|
+
const rc = [];
|
|
344
|
+
const url = new URL(request.url || "/", "http://localhost");
|
|
345
|
+
for (const route of this.routes) {
|
|
346
|
+
if (route.testPath(url.pathname)) {
|
|
347
|
+
rc.push(route);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return rc;
|
|
351
|
+
}
|
|
352
|
+
getCompiledRoute(request, response) {
|
|
353
|
+
const route = this.resolve(request);
|
|
354
|
+
if (!route) {
|
|
355
|
+
return void 0;
|
|
356
|
+
}
|
|
357
|
+
const match = route.match(request);
|
|
358
|
+
if (!match) {
|
|
359
|
+
return void 0;
|
|
360
|
+
}
|
|
361
|
+
request.params = match.params;
|
|
362
|
+
return new CompiledRoute(route, request, response, this.middlewares);
|
|
363
|
+
}
|
|
364
|
+
};
|
|
365
|
+
|
|
366
|
+
// src/facades.mts
|
|
367
|
+
var import_neko_scheduler = require("@devbro/neko-scheduler");
|
|
368
|
+
var import_neko_helper = require("@devbro/neko-helper");
|
|
369
|
+
var import_neko_context2 = require("@devbro/neko-context");
|
|
370
|
+
var import_neko_storage = require("@devbro/neko-storage");
|
|
371
|
+
var import_neko_mailer = require("@devbro/neko-mailer");
|
|
372
|
+
var import_neko_config = require("@devbro/neko-config");
|
|
373
|
+
var import_clipanion = require("clipanion");
|
|
374
|
+
|
|
375
|
+
// src/http.mts
|
|
376
|
+
var http_exports = {};
|
|
377
|
+
__reExport(http_exports, require("@devbro/neko-http"));
|
|
378
|
+
|
|
379
|
+
// src/facades.mts
|
|
380
|
+
var yup = __toESM(require("yup"), 1);
|
|
381
|
+
var import_neko_logger = require("@devbro/neko-logger");
|
|
382
|
+
var router = (0, import_neko_helper.createSingleton)(() => new Router());
|
|
383
|
+
var scheduler = (0, import_neko_helper.createSingleton)(() => {
|
|
384
|
+
const rc = new import_neko_scheduler.Scheduler();
|
|
385
|
+
rc.setErrorHandler((err, job) => {
|
|
386
|
+
logger().error({
|
|
387
|
+
msg: "Scheduled job error",
|
|
388
|
+
err,
|
|
389
|
+
job_name: job.getName()
|
|
390
|
+
});
|
|
391
|
+
});
|
|
392
|
+
return rc;
|
|
393
|
+
});
|
|
394
|
+
var storage = (0, import_neko_helper.createSingleton)(
|
|
395
|
+
(label = "default") => import_neko_storage.StorageFactory.create(import_neko_config.config.get(["storages", label].join(".")))
|
|
396
|
+
);
|
|
397
|
+
var cli = (0, import_neko_helper.createSingleton)(() => {
|
|
398
|
+
const [node, app, ...args] = process.argv;
|
|
399
|
+
return new import_clipanion.Cli({
|
|
400
|
+
binaryLabel: `My Application`,
|
|
401
|
+
binaryName: `${node} ${app}`,
|
|
402
|
+
binaryVersion: `1.0.0`
|
|
403
|
+
});
|
|
404
|
+
});
|
|
405
|
+
var httpServer = (0, import_neko_helper.createSingleton)(() => {
|
|
406
|
+
const server = new http_exports.HttpServer();
|
|
407
|
+
server.setErrorHandler(async (err, req, res) => {
|
|
408
|
+
if (err instanceof http_exports.HttpError) {
|
|
409
|
+
res.writeHead(err.statusCode, { "Content-Type": "application/json" });
|
|
410
|
+
res.end(JSON.stringify({ message: err.message, error: err.code }));
|
|
411
|
+
logger().warn({ msg: "HttpError: " + err.message, err });
|
|
412
|
+
return;
|
|
413
|
+
} else if (err instanceof yup.ValidationError) {
|
|
414
|
+
res.writeHead(422, { "Content-Type": "application/json" });
|
|
415
|
+
const errs = {};
|
|
416
|
+
err.inner.forEach((e) => {
|
|
417
|
+
const sanitizedParams = { ...e.params };
|
|
418
|
+
if (/passw/i.test(e.path)) {
|
|
419
|
+
sanitizedParams.value = "******";
|
|
420
|
+
sanitizedParams.originalValue = "******";
|
|
421
|
+
}
|
|
422
|
+
errs[e.path] = {
|
|
423
|
+
type: e.type,
|
|
424
|
+
message: e.message,
|
|
425
|
+
params: sanitizedParams
|
|
426
|
+
};
|
|
427
|
+
});
|
|
428
|
+
res.end(JSON.stringify({ message: "validation error", errors: errs }));
|
|
429
|
+
logger().warn({ msg: "ValidationError: " + err.message, err });
|
|
430
|
+
return;
|
|
431
|
+
} else {
|
|
432
|
+
logger().error({ msg: "Error: " + err.message, err });
|
|
433
|
+
}
|
|
434
|
+
res.writeHead(500, { "Content-Type": "" });
|
|
435
|
+
res.end(JSON.stringify({ error: "Internal Server Error" }));
|
|
436
|
+
});
|
|
437
|
+
server.setRouter(router());
|
|
438
|
+
return server;
|
|
439
|
+
});
|
|
440
|
+
var logger = (0, import_neko_helper.createSingleton)((label) => {
|
|
441
|
+
const logger_config = import_neko_config.config.get(["loggers", label].join("."));
|
|
442
|
+
const rc = new import_neko_logger.Logger(logger_config);
|
|
443
|
+
rc.setExtrasFunction((message) => {
|
|
444
|
+
message.requestId = (0, import_neko_context2.ctxSafe)()?.get("requestId") || "N/A";
|
|
445
|
+
return message;
|
|
446
|
+
});
|
|
447
|
+
return rc;
|
|
448
|
+
});
|
|
449
|
+
var mailer = (0, import_neko_helper.createSingleton)((label) => {
|
|
450
|
+
const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
|
|
451
|
+
let provider;
|
|
452
|
+
if (mailer_config.provider === "logger") {
|
|
453
|
+
provider = new import_neko_mailer.FunctionProvider((mail) => {
|
|
454
|
+
logger().info({
|
|
455
|
+
msg: "Sending email",
|
|
456
|
+
mail
|
|
457
|
+
});
|
|
458
|
+
});
|
|
459
|
+
} else if (mailer_config.provider === "SES") {
|
|
460
|
+
provider = new import_neko_mailer.SESProvider(mailer_config.config);
|
|
461
|
+
} else if (mailer_config.provider === "SMTP") {
|
|
462
|
+
provider = new import_neko_mailer.SMTPProvider(mailer_config.config);
|
|
463
|
+
} else if (mailer_config.provider === "MEMORY") {
|
|
464
|
+
provider = new import_neko_mailer.MemoryProvider();
|
|
465
|
+
}
|
|
466
|
+
if (!provider) {
|
|
467
|
+
throw new Error(
|
|
468
|
+
`cannot initiate mailer provider: ${mailer_config?.provider}`
|
|
469
|
+
);
|
|
470
|
+
}
|
|
471
|
+
const rc = new import_neko_mailer.Mailer(provider);
|
|
472
|
+
return rc;
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
// src/app/console/DefaultCommand.mts
|
|
476
|
+
var DefaultCommand = class extends import_clipanion2.Command {
|
|
477
|
+
static {
|
|
478
|
+
__name(this, "DefaultCommand");
|
|
479
|
+
}
|
|
480
|
+
static usage = import_clipanion2.Command.Usage({
|
|
481
|
+
category: `Main`,
|
|
482
|
+
description: `server management command line.`,
|
|
483
|
+
details: `
|
|
484
|
+
The base command for running and managing your server.
|
|
485
|
+
|
|
486
|
+
Make sure you understand how things work.
|
|
487
|
+
`,
|
|
488
|
+
examples: []
|
|
489
|
+
});
|
|
490
|
+
async execute() {
|
|
491
|
+
const commandList = cli().registrations;
|
|
492
|
+
const paths = [];
|
|
493
|
+
commandList.forEach(
|
|
494
|
+
(index, val) => paths.push(index.builder.paths[0]?.join(" ") || "")
|
|
495
|
+
);
|
|
496
|
+
console.log("Available commands:");
|
|
497
|
+
for (const cmd of paths) {
|
|
498
|
+
if (cmd) {
|
|
499
|
+
console.log(cmd);
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
};
|
|
504
|
+
cli().register(DefaultCommand);
|
|
505
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
506
|
+
0 && (module.exports = {
|
|
507
|
+
DefaultCommand
|
|
508
|
+
});
|