@devbro/pashmak 0.1.8 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/dist/{DatabaseServiceProvider.js → DatabaseServiceProvider.mjs} +5 -9
  2. package/dist/DatabaseServiceProvider.mjs.map +1 -0
  3. package/dist/app/console/{DefaultCommand.js → DefaultCommand.mjs} +2 -2
  4. package/dist/app/console/DefaultCommand.mjs.map +1 -0
  5. package/dist/app/console/{KeyGenerateCommand.js → KeyGenerateCommand.mjs} +2 -2
  6. package/dist/app/console/KeyGenerateCommand.mjs.map +1 -0
  7. package/dist/app/console/{StartCommand.js → StartCommand.mjs} +2 -2
  8. package/dist/app/console/StartCommand.mjs.map +1 -0
  9. package/dist/app/console/generate/{GenerateControllerCommand.js → GenerateControllerCommand.mjs} +2 -2
  10. package/dist/app/console/generate/GenerateControllerCommand.mjs.map +1 -0
  11. package/dist/app/console/generate/{index.d.ts → index.d.mts} +1 -1
  12. package/dist/app/console/generate/{index.js → index.mjs} +1 -1
  13. package/dist/app/console/index.d.mts +9 -0
  14. package/dist/app/console/{index.js → index.mjs} +2 -2
  15. package/dist/app/console/index.mjs.map +1 -0
  16. package/dist/app/console/migrate/{GenerateMigrateCommand.js → GenerateMigrateCommand.mjs} +2 -2
  17. package/dist/app/console/migrate/GenerateMigrateCommand.mjs.map +1 -0
  18. package/dist/app/console/migrate/{MigrateCommand.js → MigrateCommand.mjs} +2 -2
  19. package/dist/app/console/migrate/MigrateCommand.mjs.map +1 -0
  20. package/dist/app/console/migrate/{MigrateRollbackCommand.js → MigrateRollbackCommand.mjs} +2 -2
  21. package/dist/app/console/migrate/MigrateRollbackCommand.mjs.map +1 -0
  22. package/dist/app/console/migrate/{index.d.ts → index.d.mts} +3 -3
  23. package/dist/app/console/migrate/{index.js → index.mjs} +1 -1
  24. package/dist/app/console/project/{CreateProjectCommand.js → CreateProjectCommand.mjs} +2 -2
  25. package/dist/app/console/project/CreateProjectCommand.mjs.map +1 -0
  26. package/dist/bin/DatabaseServiceProvider.cjs +88 -0
  27. package/dist/bin/app/console/DefaultCommand.cjs +506 -0
  28. package/dist/bin/app/console/KeyGenerateCommand.cjs +554 -0
  29. package/dist/bin/app/console/StartCommand.cjs +520 -0
  30. package/dist/bin/app/console/generate/GenerateControllerCommand.cjs +532 -0
  31. package/dist/bin/app/console/generate/index.cjs +532 -0
  32. package/dist/bin/app/console/index.cjs +2167 -0
  33. package/dist/bin/app/console/migrate/GenerateMigrateCommand.cjs +529 -0
  34. package/dist/bin/app/console/migrate/MigrateCommand.cjs +565 -0
  35. package/dist/bin/app/console/migrate/MigrateRollbackCommand.cjs +1684 -0
  36. package/dist/bin/app/console/migrate/index.cjs +1829 -0
  37. package/dist/bin/app/console/project/CreateProjectCommand.cjs +155 -0
  38. package/dist/bin/{pashmak_cli.cjs → bin/pashmak_cli.cjs} +4 -4
  39. package/dist/bin/config.cjs +24 -0
  40. package/dist/bin/context.cjs +24 -0
  41. package/dist/bin/facades.cjs +491 -0
  42. package/dist/bin/helper.cjs +24 -0
  43. package/dist/bin/http.cjs +24 -0
  44. package/dist/bin/index.cjs +2452 -0
  45. package/dist/bin/logger.cjs +24 -0
  46. package/dist/bin/mailer.cjs +24 -0
  47. package/dist/bin/middlewares.cjs +512 -0
  48. package/dist/bin/orm.cjs +24 -0
  49. package/dist/bin/{pashmak_cli.js → pashmak_cli.mjs} +1 -1
  50. package/dist/bin/router.cjs +547 -0
  51. package/dist/bin/sql.cjs +24 -0
  52. package/dist/{config.js → config.mjs} +1 -1
  53. package/dist/config.mjs.map +1 -0
  54. package/dist/{context.js → context.mjs} +1 -1
  55. package/dist/context.mjs.map +1 -0
  56. package/dist/{facades.js → facades.mjs} +30 -57
  57. package/dist/facades.mjs.map +1 -0
  58. package/dist/{helper.js → helper.mjs} +1 -1
  59. package/dist/helper.mjs.map +1 -0
  60. package/dist/{http.js → http.mjs} +1 -1
  61. package/dist/http.mjs.map +1 -0
  62. package/dist/{index.js → index.mjs} +2 -2
  63. package/dist/index.mjs.map +1 -0
  64. package/dist/{logger.js → logger.mjs} +1 -1
  65. package/dist/logger.mjs.map +1 -0
  66. package/dist/{mailer.js → mailer.mjs} +1 -1
  67. package/dist/mailer.mjs.map +1 -0
  68. package/dist/{middlewares.js → middlewares.mjs} +3 -5
  69. package/dist/middlewares.mjs.map +1 -0
  70. package/dist/{orm.js → orm.mjs} +1 -1
  71. package/dist/orm.mjs.map +1 -0
  72. package/dist/{router.js → router.mjs} +2 -4
  73. package/dist/router.mjs.map +1 -0
  74. package/dist/{sql.js → sql.mjs} +1 -1
  75. package/dist/sql.mjs.map +1 -0
  76. package/package.json +14 -15
  77. package/dist/DatabaseServiceProvider.js.map +0 -1
  78. package/dist/app/console/DefaultCommand.js.map +0 -1
  79. package/dist/app/console/KeyGenerateCommand.js.map +0 -1
  80. package/dist/app/console/StartCommand.js.map +0 -1
  81. package/dist/app/console/generate/GenerateControllerCommand.js.map +0 -1
  82. package/dist/app/console/index.d.ts +0 -9
  83. package/dist/app/console/index.js.map +0 -1
  84. package/dist/app/console/migrate/GenerateMigrateCommand.js.map +0 -1
  85. package/dist/app/console/migrate/MigrateCommand.js.map +0 -1
  86. package/dist/app/console/migrate/MigrateRollbackCommand.js.map +0 -1
  87. package/dist/app/console/project/CreateProjectCommand.js.map +0 -1
  88. package/dist/config.js.map +0 -1
  89. package/dist/context.js.map +0 -1
  90. package/dist/facades.js.map +0 -1
  91. package/dist/helper.js.map +0 -1
  92. package/dist/http.js.map +0 -1
  93. package/dist/index.js.map +0 -1
  94. package/dist/logger.js.map +0 -1
  95. package/dist/mailer.js.map +0 -1
  96. package/dist/middlewares.js.map +0 -1
  97. package/dist/orm.js.map +0 -1
  98. package/dist/router.js.map +0 -1
  99. package/dist/sql.js.map +0 -1
  100. /package/dist/{DatabaseServiceProvider.d.ts → DatabaseServiceProvider.d.mts} +0 -0
  101. /package/dist/app/console/{DefaultCommand.d.ts → DefaultCommand.d.mts} +0 -0
  102. /package/dist/app/console/{KeyGenerateCommand.d.ts → KeyGenerateCommand.d.mts} +0 -0
  103. /package/dist/app/console/{StartCommand.d.ts → StartCommand.d.mts} +0 -0
  104. /package/dist/app/console/generate/{GenerateControllerCommand.d.ts → GenerateControllerCommand.d.mts} +0 -0
  105. /package/dist/app/console/generate/{index.js.map → index.mjs.map} +0 -0
  106. /package/dist/app/console/migrate/{GenerateMigrateCommand.d.ts → GenerateMigrateCommand.d.mts} +0 -0
  107. /package/dist/app/console/migrate/{MigrateCommand.d.ts → MigrateCommand.d.mts} +0 -0
  108. /package/dist/app/console/migrate/{MigrateRollbackCommand.d.ts → MigrateRollbackCommand.d.mts} +0 -0
  109. /package/dist/app/console/migrate/{index.js.map → index.mjs.map} +0 -0
  110. /package/dist/app/console/project/{CreateProjectCommand.d.ts → CreateProjectCommand.d.mts} +0 -0
  111. /package/dist/bin/{pashmak_cli.d.ts → pashmak_cli.d.mts} +0 -0
  112. /package/dist/bin/{pashmak_cli.js.map → pashmak_cli.mjs.map} +0 -0
  113. /package/dist/{config.d.ts → config.d.mts} +0 -0
  114. /package/dist/{context.d.ts → context.d.mts} +0 -0
  115. /package/dist/{facades.d.ts → facades.d.mts} +0 -0
  116. /package/dist/{helper.d.ts → helper.d.mts} +0 -0
  117. /package/dist/{http.d.ts → http.d.mts} +0 -0
  118. /package/dist/{index.d.ts → index.d.mts} +0 -0
  119. /package/dist/{logger.d.ts → logger.d.mts} +0 -0
  120. /package/dist/{mailer.d.ts → mailer.d.mts} +0 -0
  121. /package/dist/{middlewares.d.ts → middlewares.d.mts} +0 -0
  122. /package/dist/{orm.d.ts → orm.d.mts} +0 -0
  123. /package/dist/{router.d.ts → router.d.mts} +0 -0
  124. /package/dist/{sql.d.ts → sql.d.mts} +0 -0
@@ -15,16 +15,12 @@ class DatabaseServiceProvider extends Middleware {
15
15
  try {
16
16
  for (const [name, db_config] of Object.entries(db_configs)) {
17
17
  const conn = await this.getConnection(db_config);
18
- ctx().set([
19
- "database",
20
- name
21
- ], conn);
18
+ ctx().set(["database", name], conn);
22
19
  conns.push(conn);
23
20
  }
24
- BaseModel.setConnection(() => ctx().getOrThrow([
25
- "database",
26
- "default"
27
- ]));
21
+ BaseModel.setConnection(
22
+ () => ctx().getOrThrow(["database", "default"])
23
+ );
28
24
  await next();
29
25
  } finally {
30
26
  for (const conn of conns) {
@@ -52,4 +48,4 @@ class DatabaseServiceProvider extends Middleware {
52
48
  export {
53
49
  DatabaseServiceProvider
54
50
  };
55
- //# sourceMappingURL=DatabaseServiceProvider.js.map
51
+ //# sourceMappingURL=DatabaseServiceProvider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/DatabaseServiceProvider.mts"],"sourcesContent":["import { Middleware } from \"@devbro/neko-router\";\nimport { Request, Response } from \"@devbro/neko-router\";\nimport { PostgresqlConnection } from \"@devbro/neko-sql\";\nimport { PoolConfig } from \"pg\";\nimport { Connection } from \"@devbro/neko-sql\";\nimport { BaseModel } from \"@devbro/neko-orm\";\nimport { ctx } from \"@devbro/neko-context\";\nimport { config } from \"@devbro/neko-config\";\n\nexport class DatabaseServiceProvider extends Middleware {\n async call(\n req: Request,\n res: Response,\n next: () => Promise<void>,\n ): Promise<void> {\n const db_configs: Record<string, PoolConfig & { name: string }> =\n config.get(\"databases\");\n\n const conns = [];\n try {\n for (const [name, db_config] of Object.entries(db_configs)) {\n const conn = await this.getConnection(db_config);\n ctx().set([\"database\", name], conn);\n conns.push(conn);\n }\n BaseModel.setConnection(() =>\n ctx().getOrThrow<Connection>([\"database\", \"default\"]),\n );\n await next();\n } finally {\n for (const conn of conns) {\n await conn.disconnect();\n }\n }\n }\n\n private static instance: DatabaseServiceProvider;\n\n async register(): Promise<void> {}\n\n static getInstance(): DatabaseServiceProvider {\n if (!DatabaseServiceProvider.instance) {\n DatabaseServiceProvider.instance = new DatabaseServiceProvider();\n }\n return DatabaseServiceProvider.instance;\n }\n\n async getConnection(db_config: PoolConfig): Promise<PostgresqlConnection> {\n const conn = new PostgresqlConnection(db_config);\n if (!(await conn.connect())) {\n throw new Error(\"Failed to connect to the database\");\n }\n return conn;\n }\n}\n"],"mappings":";;AAAA,SAAS,kBAAkB;AAE3B,SAAS,4BAA4B;AAGrC,SAAS,iBAAiB;AAC1B,SAAS,WAAW;AACpB,SAAS,cAAc;AAEhB,MAAM,gCAAgC,WAAW;AAAA,EATxD,OASwD;AAAA;AAAA;AAAA,EACtD,MAAM,KACJ,KACA,KACA,MACe;AACf,UAAM,aACJ,OAAO,IAAI,WAAW;AAExB,UAAM,QAAQ,CAAC;AACf,QAAI;AACF,iBAAW,CAAC,MAAM,SAAS,KAAK,OAAO,QAAQ,UAAU,GAAG;AAC1D,cAAM,OAAO,MAAM,KAAK,cAAc,SAAS;AAC/C,YAAI,EAAE,IAAI,CAAC,YAAY,IAAI,GAAG,IAAI;AAClC,cAAM,KAAK,IAAI;AAAA,MACjB;AACA,gBAAU;AAAA,QAAc,MACtB,IAAI,EAAE,WAAuB,CAAC,YAAY,SAAS,CAAC;AAAA,MACtD;AACA,YAAM,KAAK;AAAA,IACb,UAAE;AACA,iBAAW,QAAQ,OAAO;AACxB,cAAM,KAAK,WAAW;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAe;AAAA,EAEf,MAAM,WAA0B;AAAA,EAAC;AAAA,EAEjC,OAAO,cAAuC;AAC5C,QAAI,CAAC,wBAAwB,UAAU;AACrC,8BAAwB,WAAW,IAAI,wBAAwB;AAAA,IACjE;AACA,WAAO,wBAAwB;AAAA,EACjC;AAAA,EAEA,MAAM,cAAc,WAAsD;AACxE,UAAM,OAAO,IAAI,qBAAqB,SAAS;AAC/C,QAAI,CAAE,MAAM,KAAK,QAAQ,GAAI;AAC3B,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AACA,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -1,7 +1,7 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
  import { Command } from "clipanion";
4
- import { cli } from "../../facades";
4
+ import { cli } from "../../facades.mjs";
5
5
  class DefaultCommand extends Command {
6
6
  static {
7
7
  __name(this, "DefaultCommand");
@@ -32,4 +32,4 @@ cli().register(DefaultCommand);
32
32
  export {
33
33
  DefaultCommand
34
34
  };
35
- //# sourceMappingURL=DefaultCommand.js.map
35
+ //# sourceMappingURL=DefaultCommand.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/app/console/DefaultCommand.ts"],"sourcesContent":["import { Command, Option } from \"clipanion\";\nimport { cli } from \"../../facades.mjs\";\n\nexport class DefaultCommand extends Command {\n static usage = Command.Usage({\n category: `Main`,\n description: `server management command line.`,\n details: `\n The base command for running and managing your server.\n\n Make sure you understand how things work.\n `,\n examples: [],\n });\n\n async execute() {\n // @ts-ignore\n const commandList = cli().registrations; //.definitions().map((def:any) => def.paths.map((path:any) => path.join(' '))).flat();\n\n const paths: string[] = [];\n commandList.forEach((index, val) =>\n paths.push(index.builder.paths[0]?.join(\" \") || \"\"),\n );\n\n console.log(\"Available commands:\");\n for (const cmd of paths) {\n if (cmd) {\n console.log(cmd);\n }\n }\n }\n}\n\ncli().register(DefaultCommand);\n"],"mappings":";;AAAA,SAASA,eAAuB;AAChC,SAASC,WAAW;AAEb,MAAMC,uBAAuBF,QAAAA;EAHpC,OAGoCA;;;EAClC,OAAOG,QAAQH,QAAQI,MAAM;IAC3BC,UAAU;IACVC,aAAa;IACbC,SAAS;;;;;IAKTC,UAAU,CAAA;EACZ,CAAA;EAEA,MAAMC,UAAU;AAEd,UAAMC,cAAcT,IAAAA,EAAMU;AAE1B,UAAMC,QAAkB,CAAA;AACxBF,gBAAYG,QAAQ,CAACC,OAAOC,QAC1BH,MAAMI,KAAKF,MAAMG,QAAQL,MAAM,CAAA,GAAIM,KAAK,GAAA,KAAQ,EAAA,CAAA;AAGlDC,YAAQC,IAAI,qBAAA;AACZ,eAAWC,OAAOT,OAAO;AACvB,UAAIS,KAAK;AACPF,gBAAQC,IAAIC,GAAAA;MACd;IACF;EACF;AACF;AAEApB,IAAAA,EAAMqB,SAASpB,cAAAA;","names":["Command","cli","DefaultCommand","usage","Usage","category","description","details","examples","execute","commandList","registrations","paths","forEach","index","val","push","builder","join","console","log","cmd","register"]}
@@ -4,7 +4,7 @@ import { Command, Option } from "clipanion";
4
4
  import { generateKeyPairSync } from "crypto";
5
5
  import fs from "fs/promises";
6
6
  import path from "path";
7
- import { logger, cli } from "../../facades";
7
+ import { logger, cli } from "../../facades.mjs";
8
8
  class KeyGenerateCommand extends Command {
9
9
  static {
10
10
  __name(this, "KeyGenerateCommand");
@@ -80,4 +80,4 @@ cli().register(KeyGenerateCommand);
80
80
  export {
81
81
  KeyGenerateCommand
82
82
  };
83
- //# sourceMappingURL=KeyGenerateCommand.js.map
83
+ //# sourceMappingURL=KeyGenerateCommand.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/app/console/KeyGenerateCommand.ts"],"sourcesContent":["import { Command, Option } from \"clipanion\";\nimport { generateKeyPairSync } from \"crypto\";\nimport fs from \"fs/promises\";\nimport path from \"path\";\nimport { logger, cli } from \"../../facades.mjs\";\n\nexport class KeyGenerateCommand extends Command {\n static paths = [[`generate`, \"key\"]];\n\n static usage = Command.Usage({\n category: `Main`,\n description: `generate keys`,\n details: `\n This command generates RSA key pair for JWT signing.\n Use --rotate flag to preserve old public key.\n `,\n examples: [\n [`Generate new keys`, `generate key`],\n [`Rotate existing keys`, `generate key --rotate`],\n ],\n });\n\n rotate = Option.Boolean(`--rotate`, false, {\n description: `Rotate existing keys (backup old keys before replacement)`,\n });\n\n async execute() {\n logger().info(\"generating keys for jwt token and adding to .env file\");\n const { publicKey, privateKey } = generateKeyPairSync(\"rsa\", {\n modulusLength: 2048, // 2048-bit key is standard for RS256\n publicKeyEncoding: {\n type: \"spki\",\n format: \"pem\",\n },\n privateKeyEncoding: {\n type: \"pkcs8\",\n format: \"pem\",\n },\n });\n\n let envfile = \"\";\n try {\n envfile = await fs.readFile(path.join(process.cwd(), \".env\"), \"utf-8\");\n } catch {}\n let old_public_key = envfile.match(/^jwt_secret_public=(.*)/m);\n\n envfile = this.addEnvParam(\n envfile,\n \"jwt_secret_public\",\n this.stripPemHeaders(publicKey),\n );\n envfile = this.addEnvParam(\n envfile,\n \"jwt_secret_private\",\n this.stripPemHeaders(privateKey),\n );\n\n if (this.rotate && old_public_key && old_public_key[1]) {\n envfile = this.addEnvParam(\n envfile,\n \"jwt_secret_public_retired\",\n old_public_key[1],\n );\n }\n\n await fs.writeFile(path.join(process.cwd(), \".env\"), envfile, \"utf-8\");\n }\n\n addEnvParam(file: string, key: string, value: string) {\n let regex = new RegExp(`^${key}=.*`, \"gm\");\n file = file.replace(regex, `${key}=${value}`);\n const match = file.match(regex);\n\n if (!match) {\n file = file + `\\n${key}=${value}`;\n }\n return file;\n }\n\n stripPemHeaders(pem: string) {\n return pem\n .replace(/-----BEGIN [\\w\\s]+-----/g, \"\")\n .replace(/-----END [\\w\\s]+-----/g, \"\")\n .replace(/\\r?\\n|\\r/g, \"\");\n }\n}\n\ncli().register(KeyGenerateCommand);\n"],"mappings":";;AAAA,SAASA,SAASC,cAAc;AAChC,SAASC,2BAA2B;AACpC,OAAOC,QAAQ;AACf,OAAOC,UAAU;AACjB,SAASC,QAAQC,WAAW;AAErB,MAAMC,2BAA2BP,QAAAA;EANxC,OAMwCA;;;EACtC,OAAOQ,QAAQ;IAAC;MAAC;MAAY;;;EAE7B,OAAOC,QAAQT,QAAQU,MAAM;IAC3BC,UAAU;IACVC,aAAa;IACbC,SAAS;;;;IAITC,UAAU;MACR;QAAC;QAAqB;;MACtB;QAAC;QAAwB;;;EAE7B,CAAA;EAEAC,SAASd,OAAOe,QAAQ,YAAY,OAAO;IACzCJ,aAAa;EACf,CAAA;EAEA,MAAMK,UAAU;AACdZ,WAAAA,EAASa,KAAK,uDAAA;AACd,UAAM,EAAEC,WAAWC,WAAU,IAAKlB,oBAAoB,OAAO;MAC3DmB,eAAe;MACfC,mBAAmB;QACjBC,MAAM;QACNC,QAAQ;MACV;MACAC,oBAAoB;QAClBF,MAAM;QACNC,QAAQ;MACV;IACF,CAAA;AAEA,QAAIE,UAAU;AACd,QAAI;AACFA,gBAAU,MAAMvB,GAAGwB,SAASvB,KAAKwB,KAAKC,QAAQC,IAAG,GAAI,MAAA,GAAS,OAAA;IAChE,QAAQ;IAAC;AACT,QAAIC,iBAAiBL,QAAQM,MAAM,0BAAA;AAEnCN,cAAU,KAAKO,YACbP,SACA,qBACA,KAAKQ,gBAAgBf,SAAAA,CAAAA;AAEvBO,cAAU,KAAKO,YACbP,SACA,sBACA,KAAKQ,gBAAgBd,UAAAA,CAAAA;AAGvB,QAAI,KAAKL,UAAUgB,kBAAkBA,eAAe,CAAA,GAAI;AACtDL,gBAAU,KAAKO,YACbP,SACA,6BACAK,eAAe,CAAA,CAAE;IAErB;AAEA,UAAM5B,GAAGgC,UAAU/B,KAAKwB,KAAKC,QAAQC,IAAG,GAAI,MAAA,GAASJ,SAAS,OAAA;EAChE;EAEAO,YAAYG,MAAcC,KAAaC,OAAe;AACpD,QAAIC,QAAQ,IAAIC,OAAO,IAAIH,GAAAA,OAAU,IAAA;AACrCD,WAAOA,KAAKK,QAAQF,OAAO,GAAGF,GAAAA,IAAOC,KAAAA,EAAO;AAC5C,UAAMN,QAAQI,KAAKJ,MAAMO,KAAAA;AAEzB,QAAI,CAACP,OAAO;AACVI,aAAOA,OAAO;EAAKC,GAAAA,IAAOC,KAAAA;IAC5B;AACA,WAAOF;EACT;EAEAF,gBAAgBQ,KAAa;AAC3B,WAAOA,IACJD,QAAQ,4BAA4B,EAAA,EACpCA,QAAQ,0BAA0B,EAAA,EAClCA,QAAQ,aAAa,EAAA;EAC1B;AACF;AAEAnC,IAAAA,EAAMqC,SAASpC,kBAAAA;","names":["Command","Option","generateKeyPairSync","fs","path","logger","cli","KeyGenerateCommand","paths","usage","Usage","category","description","details","examples","rotate","Boolean","execute","info","publicKey","privateKey","modulusLength","publicKeyEncoding","type","format","privateKeyEncoding","envfile","readFile","join","process","cwd","old_public_key","match","addEnvParam","stripPemHeaders","writeFile","file","key","value","regex","RegExp","replace","pem","register"]}
@@ -2,7 +2,7 @@ var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
  import { Command, Option } from "clipanion";
4
4
  import { config } from "@devbro/neko-config";
5
- import { cli, httpServer, logger, scheduler } from "../../facades";
5
+ import { cli, httpServer, logger, scheduler } from "../../facades.mjs";
6
6
  import { PostgresqlConnection } from "@devbro/neko-sql";
7
7
  class StartCommand extends Command {
8
8
  static {
@@ -46,4 +46,4 @@ cli().register(StartCommand);
46
46
  export {
47
47
  StartCommand
48
48
  };
49
- //# sourceMappingURL=StartCommand.js.map
49
+ //# sourceMappingURL=StartCommand.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/app/console/StartCommand.ts"],"sourcesContent":["import { Command, Option } from \"clipanion\";\nimport { config } from \"@devbro/neko-config\";\n\nimport { cli, httpServer, logger, scheduler } from \"../../facades.mjs\";\nimport { PostgresqlConnection } from \"@devbro/neko-sql\";\n\nexport class StartCommand extends Command {\n scheduler = Option.Boolean(`--scheduler`, false);\n http = Option.Boolean(`--http`, false);\n all = Option.Boolean(\"--all\", false);\n static paths = [[`start`]];\n\n async execute() {\n if ([this.all, this.http, this.scheduler].filter((x) => x).length == 0) {\n this.context.stdout.write(\n `No service was selected. please check -h for details\\n`,\n );\n return;\n }\n\n logger().info(`Starting Server\\n`);\n\n PostgresqlConnection.defaults.idleTimeoutMillis = 10000;\n\n if (this.scheduler || this.all) {\n logger().info(`starting scheduler\\n`);\n scheduler().start();\n }\n\n if (this.http || this.all) {\n const server = httpServer();\n await server.listen(config.get(\"port\"), () => {\n logger().info(\n \"Server is running on http://localhost:\" + config.get(\"port\"),\n );\n });\n }\n }\n}\n\ncli().register(StartCommand);\n"],"mappings":";;AAAA,SAASA,SAASC,cAAc;AAChC,SAASC,cAAc;AAEvB,SAASC,KAAKC,YAAYC,QAAQC,iBAAiB;AACnD,SAASC,4BAA4B;AAE9B,MAAMC,qBAAqBR,QAAAA;EANlC,OAMkCA;;;EAChCM,YAAYL,OAAOQ,QAAQ,eAAe,KAAA;EAC1CC,OAAOT,OAAOQ,QAAQ,UAAU,KAAA;EAChCE,MAAMV,OAAOQ,QAAQ,SAAS,KAAA;EAC9B,OAAOG,QAAQ;IAAC;MAAC;;;EAEjB,MAAMC,UAAU;AACd,QAAI;MAAC,KAAKF;MAAK,KAAKD;MAAM,KAAKJ;MAAWQ,OAAO,CAACC,MAAMA,CAAAA,EAAGC,UAAU,GAAG;AACtE,WAAKC,QAAQC,OAAOC,MAClB;CAAwD;AAE1D;IACF;AAEAd,WAAAA,EAASe,KAAK;CAAmB;AAEjCb,yBAAqBc,SAASC,oBAAoB;AAElD,QAAI,KAAKhB,aAAa,KAAKK,KAAK;AAC9BN,aAAAA,EAASe,KAAK;CAAsB;AACpCd,gBAAAA,EAAYiB,MAAK;IACnB;AAEA,QAAI,KAAKb,QAAQ,KAAKC,KAAK;AACzB,YAAMa,SAASpB,WAAAA;AACf,YAAMoB,OAAOC,OAAOvB,OAAOwB,IAAI,MAAA,GAAS,MAAA;AACtCrB,eAAAA,EAASe,KACP,2CAA2ClB,OAAOwB,IAAI,MAAA,CAAA;MAE1D,CAAA;IACF;EACF;AACF;AAEAvB,IAAAA,EAAMwB,SAASnB,YAAAA;","names":["Command","Option","config","cli","httpServer","logger","scheduler","PostgresqlConnection","StartCommand","Boolean","http","all","paths","execute","filter","x","length","context","stdout","write","info","defaults","idleTimeoutMillis","start","server","listen","get","register"]}
@@ -1,6 +1,6 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import { cli } from "../../../facades";
3
+ import { cli } from "../../../facades.mjs";
4
4
  import { Command, Option } from "clipanion";
5
5
  import { Case } from "change-case-all";
6
6
  import path from "path";
@@ -57,4 +57,4 @@ cli().register(GenerateControllerCommand);
57
57
  export {
58
58
  GenerateControllerCommand
59
59
  };
60
- //# sourceMappingURL=GenerateControllerCommand.js.map
60
+ //# sourceMappingURL=GenerateControllerCommand.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/app/console/generate/GenerateControllerCommand.ts"],"sourcesContent":["import { cli } from \"../../../facades.mjs\";\nimport { Command, Option } from \"clipanion\";\nimport { Case } from \"change-case-all\";\nimport path from \"path\";\nimport * as fs from \"fs/promises\";\nimport { config } from \"@devbro/neko-config\";\nimport handlebars from \"handlebars\";\nimport { fileURLToPath } from \"url\";\nimport pluralize from \"pluralize\";\n\nexport class GenerateControllerCommand extends Command {\n static paths = [\n [`make`, `controller`],\n [`generate`, `controller`],\n ];\n\n name = Option.String({ required: true });\n\n async execute() {\n const rootDir = process.cwd();\n\n const date = new Date();\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const secondsOfDay = String(\n date.getHours() * 3600 + date.getMinutes() * 60 + date.getSeconds(),\n ).padStart(5, \"0\");\n\n const fixed_name = Case.snake(this.name);\n const filename = `${Case.capital(this.name)}Controller.ts`;\n this.context.stdout.write(`creating migration file ${filename}\\n`);\n\n await fs.mkdir(config.get(\"migration.path\"), { recursive: true });\n\n let dirname = typeof __dirname === \"string\" ? __dirname : undefined;\n if (!dirname) {\n dirname = path.dirname(fileURLToPath(import.meta.url));\n }\n\n const compiledTemplate = handlebars.compile(\n (await fs.readFile(path.join(dirname, \"./controller.tpl\"))).toString(),\n );\n const template = await compiledTemplate({\n className: Case.pascal(this.name),\n classNameLower: Case.snake(this.name),\n routeName: Case.kebab(pluralize(this.name)),\n });\n\n await fs.writeFile(\n path.join(rootDir, \"src/app/controllers\", filename),\n template,\n );\n }\n}\n\ncli().register(GenerateControllerCommand);\n"],"mappings":";;AAAA,SAASA,WAAW;AACpB,SAASC,SAASC,cAAc;AAChC,SAASC,YAAY;AACrB,OAAOC,UAAU;AACjB,YAAYC,QAAQ;AACpB,SAASC,cAAc;AACvB,OAAOC,gBAAgB;AACvB,SAASC,qBAAqB;AAC9B,OAAOC,eAAe;AAEf,MAAMC,kCAAkCT,QAAAA;EAV/C,OAU+CA;;;EAC7C,OAAOU,QAAQ;IACb;MAAC;MAAQ;;IACT;MAAC;MAAY;;;EAGfC,OAAOV,OAAOW,OAAO;IAAEC,UAAU;EAAK,CAAA;EAEtC,MAAMC,UAAU;AACd,UAAMC,UAAUC,QAAQC,IAAG;AAE3B,UAAMC,OAAO,oBAAIC,KAAAA;AACjB,UAAMC,OAAOF,KAAKG,YAAW;AAC7B,UAAMC,QAAQV,OAAOM,KAAKK,SAAQ,IAAK,CAAA,EAAGC,SAAS,GAAG,GAAA;AACtD,UAAMC,MAAMb,OAAOM,KAAKQ,QAAO,CAAA,EAAIF,SAAS,GAAG,GAAA;AAC/C,UAAMG,eAAef,OACnBM,KAAKU,SAAQ,IAAK,OAAOV,KAAKW,WAAU,IAAK,KAAKX,KAAKY,WAAU,CAAA,EACjEN,SAAS,GAAG,GAAA;AAEd,UAAMO,aAAa7B,KAAK8B,MAAM,KAAKrB,IAAI;AACvC,UAAMsB,WAAW,GAAG/B,KAAKgC,QAAQ,KAAKvB,IAAI,CAAA;AAC1C,SAAKwB,QAAQC,OAAOC,MAAM,2BAA2BJ,QAAAA;CAAY;AAEjE,UAAM7B,GAAGkC,MAAMjC,OAAOkC,IAAI,gBAAA,GAAmB;MAAEC,WAAW;IAAK,CAAA;AAE/D,QAAIC,UAAU,OAAOC,cAAc,WAAWA,YAAYC;AAC1D,QAAI,CAACF,SAAS;AACZA,gBAAUtC,KAAKsC,QAAQlC,cAAc,YAAYqC,GAAG,CAAA;IACtD;AAEA,UAAMC,mBAAmBvC,WAAWwC,SACjC,MAAM1C,GAAG2C,SAAS5C,KAAK6C,KAAKP,SAAS,kBAAA,CAAA,GAAsBQ,SAAQ,CAAA;AAEtE,UAAMC,WAAW,MAAML,iBAAiB;MACtCM,WAAWjD,KAAKkD,OAAO,KAAKzC,IAAI;MAChC0C,gBAAgBnD,KAAK8B,MAAM,KAAKrB,IAAI;MACpC2C,WAAWpD,KAAKqD,MAAM/C,UAAU,KAAKG,IAAI,CAAA;IAC3C,CAAA;AAEA,UAAMP,GAAGoD,UACPrD,KAAK6C,KAAKjC,SAAS,uBAAuBkB,QAAAA,GAC1CiB,QAAAA;EAEJ;AACF;AAEAnD,IAAAA,EAAM0D,SAAShD,yBAAAA;","names":["cli","Command","Option","Case","path","fs","config","handlebars","fileURLToPath","pluralize","GenerateControllerCommand","paths","name","String","required","execute","rootDir","process","cwd","date","Date","year","getFullYear","month","getMonth","padStart","day","getDate","secondsOfDay","getHours","getMinutes","getSeconds","fixed_name","snake","filename","capital","context","stdout","write","mkdir","get","recursive","dirname","__dirname","undefined","url","compiledTemplate","compile","readFile","join","toString","template","className","pascal","classNameLower","routeName","kebab","writeFile","register"]}
@@ -1,2 +1,2 @@
1
- export { GenerateControllerCommand } from './GenerateControllerCommand.js';
1
+ export { GenerateControllerCommand } from './GenerateControllerCommand.mjs';
2
2
  import 'clipanion';
@@ -1,2 +1,2 @@
1
1
  export * from "./GenerateControllerCommand";
2
- //# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,9 @@
1
+ export { MigrateCommand } from './migrate/MigrateCommand.mjs';
2
+ export { GenerateMigrateCommand } from './migrate/GenerateMigrateCommand.mjs';
3
+ export { MigrateRollbackCommand } from './migrate/MigrateRollbackCommand.mjs';
4
+ export { StartCommand } from './StartCommand.mjs';
5
+ export { DefaultCommand } from './DefaultCommand.mjs';
6
+ export { KeyGenerateCommand } from './KeyGenerateCommand.mjs';
7
+ export { GenerateControllerCommand } from './generate/GenerateControllerCommand.mjs';
8
+ export { CreateProjectCommand } from './project/CreateProjectCommand.mjs';
9
+ import 'clipanion';
@@ -4,7 +4,7 @@ export * from "./DefaultCommand";
4
4
  export * from "./KeyGenerateCommand";
5
5
  export * from "./generate";
6
6
  export * from "./project/CreateProjectCommand";
7
- import { cli } from "../../facades";
7
+ import { cli } from "../../facades.mjs";
8
8
  import { CreateProjectCommand } from "./project/CreateProjectCommand";
9
9
  cli().register(CreateProjectCommand);
10
- //# sourceMappingURL=index.js.map
10
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/app/console/index.ts"],"sourcesContent":["export * from \"./migrate\";\nexport * from \"./StartCommand\";\nexport * from \"./DefaultCommand\";\nexport * from \"./KeyGenerateCommand\";\nexport * from \"./generate\";\nexport * from \"./project/CreateProjectCommand\";\n\nimport { cli } from \"../../facades.mjs\";\nimport { CreateProjectCommand } from \"./project/CreateProjectCommand\";\n\ncli().register(CreateProjectCommand);\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAEd,SAASA,WAAW;AACpB,SAASC,4BAA4B;AAErCD,IAAAA,EAAME,SAASD,oBAAAA;","names":["cli","CreateProjectCommand","register"]}
@@ -1,6 +1,6 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import { cli } from "../../../facades";
3
+ import { cli } from "../../../facades.mjs";
4
4
  import { Command, Option } from "clipanion";
5
5
  import { Case } from "change-case-all";
6
6
  import path from "path";
@@ -54,4 +54,4 @@ cli().register(GenerateMigrateCommand);
54
54
  export {
55
55
  GenerateMigrateCommand
56
56
  };
57
- //# sourceMappingURL=GenerateMigrateCommand.js.map
57
+ //# sourceMappingURL=GenerateMigrateCommand.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/app/console/migrate/GenerateMigrateCommand.ts"],"sourcesContent":["import { cli } from \"../../../facades.mjs\";\nimport { Command, Option } from \"clipanion\";\nimport { Case } from \"change-case-all\";\nimport path from \"path\";\nimport * as fs from \"fs/promises\";\nimport { config } from \"@devbro/neko-config\";\nimport handlebars from \"handlebars\";\nimport { fileURLToPath } from \"url\";\nimport { table } from \"console\";\n\nexport class GenerateMigrateCommand extends Command {\n static paths = [\n [`generate`, `migrate`],\n [\"generate\", \"migration\"],\n ];\n\n name = Option.String({ required: true });\n\n async execute() {\n const date = new Date();\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const secondsOfDay = String(\n date.getHours() * 3600 + date.getMinutes() * 60 + date.getSeconds(),\n ).padStart(5, \"0\");\n\n const fixed_name = Case.snake(this.name);\n const filename = `${year}_${month}_${day}_${secondsOfDay}_${fixed_name}.ts`;\n this.context.stdout.write(`creating migration file ${filename}\\n`);\n\n await fs.mkdir(config.get(\"migration.path\"), { recursive: true });\n\n let dirname = typeof __dirname === \"string\" ? __dirname : undefined;\n if (!dirname) {\n dirname = path.dirname(fileURLToPath(import.meta.url));\n }\n\n const compiledTemplate = handlebars.compile(\n (\n await fs.readFile(path.join(dirname, \"./make_migration.tpl\"))\n ).toString(),\n );\n const template = await compiledTemplate({\n className: Case.pascal(this.name) + \"Migration\",\n tableName: Case.snake(this.name),\n });\n\n await fs.writeFile(\n path.join(config.get(\"migration.path\"), filename),\n template,\n );\n }\n}\n\ncli().register(GenerateMigrateCommand);\n"],"mappings":";;AAAA,SAASA,WAAW;AACpB,SAASC,SAASC,cAAc;AAChC,SAASC,YAAY;AACrB,OAAOC,UAAU;AACjB,YAAYC,QAAQ;AACpB,SAASC,cAAc;AACvB,OAAOC,gBAAgB;AACvB,SAASC,qBAAqB;AAGvB,MAAMC,+BAA+BR,QAAAA;EAV5C,OAU4CA;;;EAC1C,OAAOS,QAAQ;IACb;MAAC;MAAY;;IACb;MAAC;MAAY;;;EAGfC,OAAOT,OAAOU,OAAO;IAAEC,UAAU;EAAK,CAAA;EAEtC,MAAMC,UAAU;AACd,UAAMC,OAAO,oBAAIC,KAAAA;AACjB,UAAMC,OAAOF,KAAKG,YAAW;AAC7B,UAAMC,QAAQP,OAAOG,KAAKK,SAAQ,IAAK,CAAA,EAAGC,SAAS,GAAG,GAAA;AACtD,UAAMC,MAAMV,OAAOG,KAAKQ,QAAO,CAAA,EAAIF,SAAS,GAAG,GAAA;AAC/C,UAAMG,eAAeZ,OACnBG,KAAKU,SAAQ,IAAK,OAAOV,KAAKW,WAAU,IAAK,KAAKX,KAAKY,WAAU,CAAA,EACjEN,SAAS,GAAG,GAAA;AAEd,UAAMO,aAAazB,KAAK0B,MAAM,KAAKlB,IAAI;AACvC,UAAMmB,WAAW,GAAGb,IAAAA,IAAQE,KAAAA,IAASG,GAAAA,IAAOE,YAAAA,IAAgBI,UAAAA;AAC5D,SAAKG,QAAQC,OAAOC,MAAM,2BAA2BH,QAAAA;CAAY;AAEjE,UAAMzB,GAAG6B,MAAM5B,OAAO6B,IAAI,gBAAA,GAAmB;MAAEC,WAAW;IAAK,CAAA;AAE/D,QAAIC,UAAU,OAAOC,cAAc,WAAWA,YAAYC;AAC1D,QAAI,CAACF,SAAS;AACZA,gBAAUjC,KAAKiC,QAAQ7B,cAAc,YAAYgC,GAAG,CAAA;IACtD;AAEA,UAAMC,mBAAmBlC,WAAWmC,SAEhC,MAAMrC,GAAGsC,SAASvC,KAAKwC,KAAKP,SAAS,sBAAA,CAAA,GACrCQ,SAAQ,CAAA;AAEZ,UAAMC,WAAW,MAAML,iBAAiB;MACtCM,WAAW5C,KAAK6C,OAAO,KAAKrC,IAAI,IAAI;MACpCsC,WAAW9C,KAAK0B,MAAM,KAAKlB,IAAI;IACjC,CAAA;AAEA,UAAMN,GAAG6C,UACP9C,KAAKwC,KAAKtC,OAAO6B,IAAI,gBAAA,GAAmBL,QAAAA,GACxCgB,QAAAA;EAEJ;AACF;AAEA9C,IAAAA,EAAMmD,SAAS1C,sBAAAA;","names":["cli","Command","Option","Case","path","fs","config","handlebars","fileURLToPath","GenerateMigrateCommand","paths","name","String","required","execute","date","Date","year","getFullYear","month","getMonth","padStart","day","getDate","secondsOfDay","getHours","getMinutes","getSeconds","fixed_name","snake","filename","context","stdout","write","mkdir","get","recursive","dirname","__dirname","undefined","url","compiledTemplate","compile","readFile","join","toString","template","className","pascal","tableName","writeFile","register"]}
@@ -1,6 +1,6 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import { cli, db as database, logger } from "../../../facades";
3
+ import { cli, db as database, logger } from "../../../facades.mjs";
4
4
  import { Command, Option } from "clipanion";
5
5
  import { context_provider } from "@devbro/neko-context";
6
6
  import path from "path";
@@ -90,4 +90,4 @@ cli().register(MigrateCommand);
90
90
  export {
91
91
  MigrateCommand
92
92
  };
93
- //# sourceMappingURL=MigrateCommand.js.map
93
+ //# sourceMappingURL=MigrateCommand.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/app/console/migrate/MigrateCommand.ts"],"sourcesContent":["import { cli, db as database, logger } from \"../../../facades.mjs\";\nimport { Command, Option } from \"clipanion\";\nimport { Blueprint } from \"@devbro/neko-sql\";\nimport { context_provider } from \"@devbro/neko-context\";\nimport path from \"path\";\nimport fs from \"fs/promises\";\nimport { config } from \"@devbro/neko-config\";\nimport { Migration } from \"@devbro/neko-sql\";\n\nexport class MigrateCommand extends Command {\n static paths = [[`migrate`]];\n\n fresh = Option.Boolean(\"--fresh\", false);\n\n async execute() {\n await context_provider.run(async () => {\n // this.context.stdout.write(`Hello Migrate Command!\\n`);\n const db = database();\n const schema = db.getSchema();\n\n if (this.fresh) {\n logger().info(\"dropping all tables!!\");\n let retry = true;\n let retry_count = 0;\n while (retry && retry_count < 10) {\n retry = false;\n retry_count++;\n const tables = await schema.tables();\n for (const table of tables) {\n logger().info(`dropping table ${table.name}`);\n try {\n await schema.dropTable(table.name);\n } catch {\n logger().info(`failed to drop ${table.name}`);\n retry = true;\n }\n }\n }\n }\n\n //create migration table if not exists\n if (!(await schema.tableExists(\"migrations\"))) {\n await schema.createTable(\"migrations\", (blueprint: Blueprint) => {\n blueprint.id();\n blueprint.timestamps();\n blueprint.string(\"filename\");\n blueprint.integer(\"batch\");\n });\n }\n\n const migrationsDir = config.get(\"migration.path\");\n let files: string[] = [];\n\n const dirEntries = await fs.readdir(migrationsDir);\n files = dirEntries\n .filter((entry) => entry.endsWith(\".ts\") || entry.endsWith(\".js\"))\n .sort();\n let batch_number = await db.runQuery({\n sql: \"select max(batch) as next_batch from migrations\",\n bindings: [],\n });\n batch_number = batch_number[0].next_batch || 0;\n batch_number++;\n\n const migrations = await db.runQuery({\n sql: \"select * from migrations order by created_at ASC\",\n bindings: [],\n });\n\n const completed_migrations = migrations.map((r: any) => r.filename);\n const pending_migrations = files.filter(\n (file) => !completed_migrations.includes(file),\n );\n\n let migrated_count = 0;\n for (const class_to_migrate of pending_migrations) {\n logger().info(`migrating up ${class_to_migrate}`);\n const ClassToMigrate = (\n await import(path.join(migrationsDir, class_to_migrate))\n ).default;\n const c: Migration = new ClassToMigrate();\n await c.up(db.getSchema());\n await db.runQuery({\n sql: \"insert into migrations (filename, batch) values ($1,$2)\",\n bindings: [class_to_migrate, batch_number],\n });\n migrated_count++;\n }\n\n if (migrated_count === 0) {\n logger().warn(\"no migrations to run!\");\n return;\n }\n\n logger().info(`migrated ${migrated_count} migrations successfully!`);\n });\n }\n}\n\ncli().register(MigrateCommand);\n"],"mappings":";;AAAA,SAASA,KAAKC,MAAMC,UAAUC,cAAc;AAC5C,SAASC,SAASC,cAAc;AAEhC,SAASC,wBAAwB;AACjC,OAAOC,UAAU;AACjB,OAAOC,QAAQ;AACf,SAASC,cAAc;AAGhB,MAAMC,uBAAuBN,QAAAA;EATpC,OASoCA;;;EAClC,OAAOO,QAAQ;IAAC;MAAC;;;EAEjBC,QAAQP,OAAOQ,QAAQ,WAAW,KAAA;EAElC,MAAMC,UAAU;AACd,UAAMR,iBAAiBS,IAAI,YAAA;AAEzB,YAAMd,KAAKC,SAAAA;AACX,YAAMc,SAASf,GAAGgB,UAAS;AAE3B,UAAI,KAAKL,OAAO;AACdT,eAAAA,EAASe,KAAK,uBAAA;AACd,YAAIC,QAAQ;AACZ,YAAIC,cAAc;AAClB,eAAOD,SAASC,cAAc,IAAI;AAChCD,kBAAQ;AACRC;AACA,gBAAMC,SAAS,MAAML,OAAOK,OAAM;AAClC,qBAAWC,SAASD,QAAQ;AAC1BlB,mBAAAA,EAASe,KAAK,kBAAkBI,MAAMC,IAAI,EAAE;AAC5C,gBAAI;AACF,oBAAMP,OAAOQ,UAAUF,MAAMC,IAAI;YACnC,QAAQ;AACNpB,qBAAAA,EAASe,KAAK,kBAAkBI,MAAMC,IAAI,EAAE;AAC5CJ,sBAAQ;YACV;UACF;QACF;MACF;AAGA,UAAI,CAAE,MAAMH,OAAOS,YAAY,YAAA,GAAgB;AAC7C,cAAMT,OAAOU,YAAY,cAAc,CAACC,cAAAA;AACtCA,oBAAUC,GAAE;AACZD,oBAAUE,WAAU;AACpBF,oBAAUG,OAAO,UAAA;AACjBH,oBAAUI,QAAQ,OAAA;QACpB,CAAA;MACF;AAEA,YAAMC,gBAAgBvB,OAAOwB,IAAI,gBAAA;AACjC,UAAIC,QAAkB,CAAA;AAEtB,YAAMC,aAAa,MAAM3B,GAAG4B,QAAQJ,aAAAA;AACpCE,cAAQC,WACLE,OAAO,CAACC,UAAUA,MAAMC,SAAS,KAAA,KAAUD,MAAMC,SAAS,KAAA,CAAA,EAC1DC,KAAI;AACP,UAAIC,eAAe,MAAMxC,GAAGyC,SAAS;QACnCC,KAAK;QACLC,UAAU,CAAA;MACZ,CAAA;AACAH,qBAAeA,aAAa,CAAA,EAAGI,cAAc;AAC7CJ;AAEA,YAAMK,aAAa,MAAM7C,GAAGyC,SAAS;QACnCC,KAAK;QACLC,UAAU,CAAA;MACZ,CAAA;AAEA,YAAMG,uBAAuBD,WAAWE,IAAI,CAACC,MAAWA,EAAEC,QAAQ;AAClE,YAAMC,qBAAqBjB,MAAMG,OAC/B,CAACe,SAAS,CAACL,qBAAqBM,SAASD,IAAAA,CAAAA;AAG3C,UAAIE,iBAAiB;AACrB,iBAAWC,oBAAoBJ,oBAAoB;AACjDhD,eAAAA,EAASe,KAAK,gBAAgBqC,gBAAAA,EAAkB;AAChD,cAAMC,kBACJ,MAAM,OAAOjD,KAAKkD,KAAKzB,eAAeuB,gBAAAA,IACtCG;AACF,cAAMC,IAAe,IAAIH,eAAAA;AACzB,cAAMG,EAAEC,GAAG3D,GAAGgB,UAAS,CAAA;AACvB,cAAMhB,GAAGyC,SAAS;UAChBC,KAAK;UACLC,UAAU;YAACW;YAAkBd;;QAC/B,CAAA;AACAa;MACF;AAEA,UAAIA,mBAAmB,GAAG;AACxBnD,eAAAA,EAAS0D,KAAK,uBAAA;AACd;MACF;AAEA1D,aAAAA,EAASe,KAAK,YAAYoC,cAAAA,2BAAyC;IACrE,CAAA;EACF;AACF;AAEAtD,IAAAA,EAAM8D,SAASpD,cAAAA;","names":["cli","db","database","logger","Command","Option","context_provider","path","fs","config","MigrateCommand","paths","fresh","Boolean","execute","run","schema","getSchema","info","retry","retry_count","tables","table","name","dropTable","tableExists","createTable","blueprint","id","timestamps","string","integer","migrationsDir","get","files","dirEntries","readdir","filter","entry","endsWith","sort","batch_number","runQuery","sql","bindings","next_batch","migrations","completed_migrations","map","r","filename","pending_migrations","file","includes","migrated_count","class_to_migrate","ClassToMigrate","join","default","c","up","warn","register"]}
@@ -1,6 +1,6 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import { cli, db as database } from "../../../facades";
3
+ import { cli, db as database } from "../../../facades.mjs";
4
4
  import { Command, Option } from "clipanion";
5
5
  import { context_provider } from "@devbro/neko-context";
6
6
  import path from "path";
@@ -54,4 +54,4 @@ cli().register(MigrateRollbackCommand);
54
54
  export {
55
55
  MigrateRollbackCommand
56
56
  };
57
- //# sourceMappingURL=MigrateRollbackCommand.js.map
57
+ //# sourceMappingURL=MigrateRollbackCommand.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/app/console/migrate/MigrateRollbackCommand.ts"],"sourcesContent":["import { cli, db as database } from \"../../../facades.mjs\";\nimport { Command, Option } from \"clipanion\";\nimport { context_provider } from \"@devbro/neko-context\";\nimport path from \"path\";\nimport fs from \"fs/promises\";\nimport { config } from \"@devbro/neko-config\";\nimport { Migration } from \"@devbro/neko-sql\";\nimport * as t from \"typanion\";\n\nexport class MigrateRollbackCommand extends Command {\n static paths = [[`migrate`, \"rollback\"]];\n\n steps = Option.String(`--steps`, {\n description: `how many migrations to rollback`,\n validator: t.isNumber(),\n });\n\n async execute() {\n await context_provider.run(async () => {\n // this.context.stdout.write(`Hello Migrate Command!\\n`);\n const db = database();\n const schema = db.getSchema();\n\n const migrationsDir = config.get(\"migration.path\");\n let files: string[] = [];\n\n const dirEntries = await fs.readdir(migrationsDir);\n files = dirEntries.filter((entry) => entry.endsWith(\".ts\")).sort();\n\n const migrations = await db.runQuery({\n sql: \"select * from migrations order by created_at DESC\",\n bindings: [],\n });\n\n const count = 0;\n for (const migration of migrations) {\n const class_to_migrate = migration.filename;\n this.context.stdout.write(`rolling back ${class_to_migrate}`);\n\n const ClassToMigrate = (\n await import(path.join(migrationsDir, class_to_migrate))\n ).default;\n\n const c: Migration = new ClassToMigrate();\n await c.down(db.getSchema());\n await db.runQuery({\n sql: \"delete from migrations where id = $1\",\n bindings: [migration.id],\n });\n }\n });\n }\n}\n\ncli().register(MigrateRollbackCommand);\n"],"mappings":";;AAAA,SAASA,KAAKC,MAAMC,gBAAgB;AACpC,SAASC,SAASC,cAAc;AAChC,SAASC,wBAAwB;AACjC,OAAOC,UAAU;AACjB,OAAOC,QAAQ;AACf,SAASC,cAAc;AAEvB,YAAYC,OAAO;AAEZ,MAAMC,+BAA+BP,QAAAA;EAT5C,OAS4CA;;;EAC1C,OAAOQ,QAAQ;IAAC;MAAC;MAAW;;;EAE5BC,QAAQR,OAAOS,OAAO,WAAW;IAC/BC,aAAa;IACbC,WAAWN,EAAEO,SAAQ;EACvB,CAAA;EAEA,MAAMC,UAAU;AACd,UAAMZ,iBAAiBa,IAAI,YAAA;AAEzB,YAAMjB,KAAKC,SAAAA;AACX,YAAMiB,SAASlB,GAAGmB,UAAS;AAE3B,YAAMC,gBAAgBb,OAAOc,IAAI,gBAAA;AACjC,UAAIC,QAAkB,CAAA;AAEtB,YAAMC,aAAa,MAAMjB,GAAGkB,QAAQJ,aAAAA;AACpCE,cAAQC,WAAWE,OAAO,CAACC,UAAUA,MAAMC,SAAS,KAAA,CAAA,EAAQC,KAAI;AAEhE,YAAMC,aAAa,MAAM7B,GAAG8B,SAAS;QACnCC,KAAK;QACLC,UAAU,CAAA;MACZ,CAAA;AAEA,YAAMC,QAAQ;AACd,iBAAWC,aAAaL,YAAY;AAClC,cAAMM,mBAAmBD,UAAUE;AACnC,aAAKC,QAAQC,OAAOC,MAAM,gBAAgBJ,gBAAAA,EAAkB;AAE5D,cAAMK,kBACJ,MAAM,OAAOnC,KAAKoC,KAAKrB,eAAee,gBAAAA,IACtCO;AAEF,cAAMC,IAAe,IAAIH,eAAAA;AACzB,cAAMG,EAAEC,KAAK5C,GAAGmB,UAAS,CAAA;AACzB,cAAMnB,GAAG8B,SAAS;UAChBC,KAAK;UACLC,UAAU;YAACE,UAAUW;;QACvB,CAAA;MACF;IACF,CAAA;EACF;AACF;AAEA9C,IAAAA,EAAM+C,SAASrC,sBAAAA;","names":["cli","db","database","Command","Option","context_provider","path","fs","config","t","MigrateRollbackCommand","paths","steps","String","description","validator","isNumber","execute","run","schema","getSchema","migrationsDir","get","files","dirEntries","readdir","filter","entry","endsWith","sort","migrations","runQuery","sql","bindings","count","migration","class_to_migrate","filename","context","stdout","write","ClassToMigrate","join","default","c","down","id","register"]}
@@ -1,4 +1,4 @@
1
- export { MigrateCommand } from './MigrateCommand.js';
2
- export { GenerateMigrateCommand } from './GenerateMigrateCommand.js';
3
- export { MigrateRollbackCommand } from './MigrateRollbackCommand.js';
1
+ export { MigrateCommand } from './MigrateCommand.mjs';
2
+ export { GenerateMigrateCommand } from './GenerateMigrateCommand.mjs';
3
+ export { MigrateRollbackCommand } from './MigrateRollbackCommand.mjs';
4
4
  import 'clipanion';
@@ -1,4 +1,4 @@
1
1
  export * from "./MigrateCommand";
2
2
  export * from "./GenerateMigrateCommand";
3
3
  export * from "./MigrateRollbackCommand";
4
- //# sourceMappingURL=index.js.map
4
+ //# sourceMappingURL=index.mjs.map
@@ -64,7 +64,7 @@ class CreateProjectCommand extends Command {
64
64
  recursive: true
65
65
  });
66
66
  console.log(`Created project directory at: ${projectPath}`);
67
- let dirname = typeof __dirname === "undefined" ? path.dirname(fileURLToPath(import.meta.url)) : __dirname;
67
+ const dirname = typeof __dirname === "undefined" ? path.dirname(fileURLToPath(import.meta.url)) : __dirname;
68
68
  let basePath = path.join(dirname, `./base_project`);
69
69
  if (await this.folderExists(basePath) === false) {
70
70
  basePath = path.join(dirname, `../app/console/project/base_project`);
@@ -117,4 +117,4 @@ class CreateProjectCommand extends Command {
117
117
  export {
118
118
  CreateProjectCommand
119
119
  };
120
- //# sourceMappingURL=CreateProjectCommand.js.map
120
+ //# sourceMappingURL=CreateProjectCommand.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/app/console/project/CreateProjectCommand.ts"],"sourcesContent":["import { Command, Option } from \"clipanion\";\nimport { Case } from \"change-case-all\";\nimport path from \"path\";\nimport * as fs from \"fs/promises\";\nimport { fileURLToPath } from \"url\";\nimport handlebars from \"handlebars\";\nimport { execSync } from \"child_process\";\n\nexport class CreateProjectCommand extends Command {\n static paths = [[`create`, `project`]];\n\n static usage = Command.Usage({\n category: `Project`,\n description: `Create a new project`,\n details: `\n This command creates a new project with the specified name at the given path.\n If no path is provided, the project will be created in the current directory.\n `,\n examples: [\n [\n `Create a new project in specified directory`,\n `create project --path /path/to/my-project --git`,\n ],\n [\n `Create a new project at a specific path with git initialized`,\n `create project --path /path/to/my-project --git`,\n ],\n ],\n });\n\n projectPath = Option.String(\"--path\", { required: true });\n\n git = Option.Boolean(`--git`, false, {\n description: `Initialize a git repository in the new project`,\n });\n\n async folderExists(folderPath: string): Promise<boolean> {\n try {\n const stats = await fs.stat(folderPath);\n return stats.isDirectory();\n } catch (error: any) {\n if (error.code === \"ENOENT\") {\n return false; // Folder does not exist\n }\n throw error; // Other errors (e.g., permission issues)\n }\n }\n\n async execute() {\n // Create the project directory path by joining the specified path and project name\n const projectPath = path.join(this.projectPath);\n // Check if directory already exists\n try {\n await fs.access(projectPath);\n console.error(`Error: Directory ${projectPath} already exists.`);\n return 1;\n } catch {\n // Directory doesn't exist, we can proceed\n }\n\n await fs.mkdir(projectPath, { recursive: true });\n console.log(`Created project directory at: ${projectPath}`);\n\n 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":["Command","Option","Case","path","fs","fileURLToPath","handlebars","execSync","CreateProjectCommand","paths","usage","Usage","category","description","details","examples","projectPath","String","required","git","Boolean","folderExists","folderPath","stats","stat","isDirectory","error","code","execute","join","access","console","mkdir","recursive","log","dirname","__dirname","url","basePath","baseProjectPath","processTplFolder","packageJsonPath","packageJson","JSON","parse","readFile","name","snake","basename","writeFile","stringify","cwd","src","dest","data","files","readdir","withFileTypes","file","srcPath","destPath","isFile","endsWith","substring","length","processTplFile","Error","compiledTemplate","compile","toString","template"]}
@@ -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
+ });