jsxserve 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.
Files changed (185) hide show
  1. package/dist/cli/commands/build.d.ts +2 -0
  2. package/dist/cli/commands/build.d.ts.map +1 -0
  3. package/dist/cli/commands/build.js +11 -0
  4. package/dist/cli/commands/build.js.map +1 -0
  5. package/dist/cli/commands/dev.d.ts +2 -0
  6. package/dist/cli/commands/dev.d.ts.map +1 -0
  7. package/dist/cli/commands/dev.js +15 -0
  8. package/dist/cli/commands/dev.js.map +1 -0
  9. package/dist/cli/commands/generate.d.ts +2 -0
  10. package/dist/cli/commands/generate.d.ts.map +1 -0
  11. package/dist/cli/commands/generate.js +103 -0
  12. package/dist/cli/commands/generate.js.map +1 -0
  13. package/dist/cli/commands/init.d.ts +2 -0
  14. package/dist/cli/commands/init.d.ts.map +1 -0
  15. package/dist/cli/commands/init.js +60 -0
  16. package/dist/cli/commands/init.js.map +1 -0
  17. package/dist/cli/commands/migrate.d.ts +2 -0
  18. package/dist/cli/commands/migrate.d.ts.map +1 -0
  19. package/dist/cli/commands/migrate.js +53 -0
  20. package/dist/cli/commands/migrate.js.map +1 -0
  21. package/dist/cli/index.d.ts +3 -0
  22. package/dist/cli/index.d.ts.map +1 -0
  23. package/dist/cli/index.js +77 -0
  24. package/dist/cli/index.js.map +1 -0
  25. package/dist/cli/templates/controller.d.ts +2 -0
  26. package/dist/cli/templates/controller.d.ts.map +1 -0
  27. package/dist/cli/templates/controller.js +18 -0
  28. package/dist/cli/templates/controller.js.map +1 -0
  29. package/dist/cli/templates/middleware.d.ts +2 -0
  30. package/dist/cli/templates/middleware.d.ts.map +1 -0
  31. package/dist/cli/templates/middleware.js +15 -0
  32. package/dist/cli/templates/middleware.js.map +1 -0
  33. package/dist/cli/templates/migration.d.ts +2 -0
  34. package/dist/cli/templates/migration.d.ts.map +1 -0
  35. package/dist/cli/templates/migration.js +13 -0
  36. package/dist/cli/templates/migration.js.map +1 -0
  37. package/dist/cli/templates/model.d.ts +5 -0
  38. package/dist/cli/templates/model.d.ts.map +1 -0
  39. package/dist/cli/templates/model.js +22 -0
  40. package/dist/cli/templates/model.js.map +1 -0
  41. package/dist/cli/templates/project.d.ts +6 -0
  42. package/dist/cli/templates/project.d.ts.map +1 -0
  43. package/dist/cli/templates/project.js +115 -0
  44. package/dist/cli/templates/project.js.map +1 -0
  45. package/dist/cli/utils/fs.d.ts +3 -0
  46. package/dist/cli/utils/fs.d.ts.map +1 -0
  47. package/dist/cli/utils/fs.js +27 -0
  48. package/dist/cli/utils/fs.js.map +1 -0
  49. package/dist/cli/utils/prompt.d.ts +4 -0
  50. package/dist/cli/utils/prompt.d.ts.map +1 -0
  51. package/dist/cli/utils/prompt.js +30 -0
  52. package/dist/cli/utils/prompt.js.map +1 -0
  53. package/dist/components/App.d.ts +7 -0
  54. package/dist/components/App.d.ts.map +1 -0
  55. package/dist/components/App.js +9 -0
  56. package/dist/components/App.js.map +1 -0
  57. package/dist/components/Controller.d.ts +17 -0
  58. package/dist/components/Controller.d.ts.map +1 -0
  59. package/dist/components/Controller.js +12 -0
  60. package/dist/components/Controller.js.map +1 -0
  61. package/dist/components/Middleware.d.ts +5 -0
  62. package/dist/components/Middleware.d.ts.map +1 -0
  63. package/dist/components/Middleware.js +3 -0
  64. package/dist/components/Middleware.js.map +1 -0
  65. package/dist/components/Provider.d.ts +7 -0
  66. package/dist/components/Provider.d.ts.map +1 -0
  67. package/dist/components/Provider.js +3 -0
  68. package/dist/components/Provider.js.map +1 -0
  69. package/dist/db/adapter.d.ts +35 -0
  70. package/dist/db/adapter.d.ts.map +1 -0
  71. package/dist/db/adapter.js +2 -0
  72. package/dist/db/adapter.js.map +1 -0
  73. package/dist/db/adapters/mongodb.d.ts +19 -0
  74. package/dist/db/adapters/mongodb.d.ts.map +1 -0
  75. package/dist/db/adapters/mongodb.js +114 -0
  76. package/dist/db/adapters/mongodb.js.map +1 -0
  77. package/dist/db/adapters/mysql.d.ts +13 -0
  78. package/dist/db/adapters/mysql.d.ts.map +1 -0
  79. package/dist/db/adapters/mysql.js +33 -0
  80. package/dist/db/adapters/mysql.js.map +1 -0
  81. package/dist/db/adapters/postgres.d.ts +13 -0
  82. package/dist/db/adapters/postgres.d.ts.map +1 -0
  83. package/dist/db/adapters/postgres.js +29 -0
  84. package/dist/db/adapters/postgres.js.map +1 -0
  85. package/dist/db/adapters/sql-adapter.d.ts +18 -0
  86. package/dist/db/adapters/sql-adapter.d.ts.map +1 -0
  87. package/dist/db/adapters/sql-adapter.js +93 -0
  88. package/dist/db/adapters/sql-adapter.js.map +1 -0
  89. package/dist/db/adapters/sqlite.d.ts +13 -0
  90. package/dist/db/adapters/sqlite.d.ts.map +1 -0
  91. package/dist/db/adapters/sqlite.js +38 -0
  92. package/dist/db/adapters/sqlite.js.map +1 -0
  93. package/dist/db/create-adapter.d.ts +3 -0
  94. package/dist/db/create-adapter.d.ts.map +1 -0
  95. package/dist/db/create-adapter.js +19 -0
  96. package/dist/db/create-adapter.js.map +1 -0
  97. package/dist/db/database-controller.d.ts +6 -0
  98. package/dist/db/database-controller.d.ts.map +1 -0
  99. package/dist/db/database-controller.js +8 -0
  100. package/dist/db/database-controller.js.map +1 -0
  101. package/dist/db/database.d.ts +22 -0
  102. package/dist/db/database.d.ts.map +1 -0
  103. package/dist/db/database.js +38 -0
  104. package/dist/db/database.js.map +1 -0
  105. package/dist/db/field.d.ts +28 -0
  106. package/dist/db/field.d.ts.map +1 -0
  107. package/dist/db/field.js +56 -0
  108. package/dist/db/field.js.map +1 -0
  109. package/dist/db/index.d.ts +11 -0
  110. package/dist/db/index.d.ts.map +1 -0
  111. package/dist/db/index.js +7 -0
  112. package/dist/db/index.js.map +1 -0
  113. package/dist/db/migration.d.ts +24 -0
  114. package/dist/db/migration.d.ts.map +1 -0
  115. package/dist/db/migration.js +106 -0
  116. package/dist/db/migration.js.map +1 -0
  117. package/dist/db/model.d.ts +10 -0
  118. package/dist/db/model.d.ts.map +1 -0
  119. package/dist/db/model.js +12 -0
  120. package/dist/db/model.js.map +1 -0
  121. package/dist/db/query-builder.d.ts +24 -0
  122. package/dist/db/query-builder.d.ts.map +1 -0
  123. package/dist/db/query-builder.js +66 -0
  124. package/dist/db/query-builder.js.map +1 -0
  125. package/dist/db/sql.d.ts +9 -0
  126. package/dist/db/sql.d.ts.map +1 -0
  127. package/dist/db/sql.js +72 -0
  128. package/dist/db/sql.js.map +1 -0
  129. package/dist/index.d.ts +17 -0
  130. package/dist/index.d.ts.map +1 -0
  131. package/dist/index.js +71 -0
  132. package/dist/index.js.map +1 -0
  133. package/dist/jsx-dev-runtime.d.ts +5 -0
  134. package/dist/jsx-dev-runtime.d.ts.map +1 -0
  135. package/dist/jsx-dev-runtime.js +6 -0
  136. package/dist/jsx-dev-runtime.js.map +1 -0
  137. package/dist/jsx-runtime.d.ts +13 -0
  138. package/dist/jsx-runtime.d.ts.map +1 -0
  139. package/dist/jsx-runtime.js +7 -0
  140. package/dist/jsx-runtime.js.map +1 -0
  141. package/dist/middleware.d.ts +3 -0
  142. package/dist/middleware.d.ts.map +1 -0
  143. package/dist/middleware.js +14 -0
  144. package/dist/middleware.js.map +1 -0
  145. package/dist/response.d.ts +13 -0
  146. package/dist/response.d.ts.map +1 -0
  147. package/dist/response.js +49 -0
  148. package/dist/response.js.map +1 -0
  149. package/dist/router.d.ts +7 -0
  150. package/dist/router.d.ts.map +1 -0
  151. package/dist/router.js +13 -0
  152. package/dist/router.js.map +1 -0
  153. package/dist/server/bun.d.ts +5 -0
  154. package/dist/server/bun.d.ts.map +1 -0
  155. package/dist/server/bun.js +18 -0
  156. package/dist/server/bun.js.map +1 -0
  157. package/dist/server/detect.d.ts +2 -0
  158. package/dist/server/detect.d.ts.map +1 -0
  159. package/dist/server/detect.js +4 -0
  160. package/dist/server/detect.js.map +1 -0
  161. package/dist/server/index.d.ts +4 -0
  162. package/dist/server/index.d.ts.map +1 -0
  163. package/dist/server/index.js +10 -0
  164. package/dist/server/index.js.map +1 -0
  165. package/dist/server/node.d.ts +5 -0
  166. package/dist/server/node.d.ts.map +1 -0
  167. package/dist/server/node.js +77 -0
  168. package/dist/server/node.js.map +1 -0
  169. package/dist/server/types.d.ts +9 -0
  170. package/dist/server/types.d.ts.map +1 -0
  171. package/dist/server/types.js +2 -0
  172. package/dist/server/types.js.map +1 -0
  173. package/dist/tree.d.ts +8 -0
  174. package/dist/tree.d.ts.map +1 -0
  175. package/dist/tree.js +130 -0
  176. package/dist/tree.js.map +1 -0
  177. package/dist/types.d.ts +46 -0
  178. package/dist/types.d.ts.map +1 -0
  179. package/dist/types.js +11 -0
  180. package/dist/types.js.map +1 -0
  181. package/dist/validation.d.ts +65 -0
  182. package/dist/validation.d.ts.map +1 -0
  183. package/dist/validation.js +197 -0
  184. package/dist/validation.js.map +1 -0
  185. package/package.json +65 -0
@@ -0,0 +1,2 @@
1
+ export declare function build(): Promise<void>;
2
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"AAEA,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAS3C"}
@@ -0,0 +1,11 @@
1
+ import { spawn } from "node:child_process";
2
+ export async function build() {
3
+ const child = spawn("npx", ["tsc"], {
4
+ stdio: "inherit",
5
+ shell: false,
6
+ });
7
+ child.on("close", (code) => {
8
+ process.exit(code ?? 0);
9
+ });
10
+ }
11
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE;QAClC,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACzB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function dev(): Promise<void>;
2
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAGA,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAazC"}
@@ -0,0 +1,15 @@
1
+ import { spawn } from "node:child_process";
2
+ import { isBun } from "../../server/detect.js";
3
+ export async function dev() {
4
+ const cmd = isBun()
5
+ ? { bin: "bun", args: ["--watch", "src/app.tsx"] }
6
+ : { bin: "npx", args: ["tsx", "watch", "src/app.tsx"] };
7
+ const child = spawn(cmd.bin, cmd.args, {
8
+ stdio: "inherit",
9
+ shell: false,
10
+ });
11
+ child.on("close", (code) => {
12
+ process.exit(code ?? 0);
13
+ });
14
+ }
15
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,GAAG;IACvB,MAAM,GAAG,GAAG,KAAK,EAAE;QACjB,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE;QAClD,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;IAE1D,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE;QACrC,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACzB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function generate(type: string, name: string, args: string[], force: boolean): Promise<void>;
2
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAoDA,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC,CA2Df"}
@@ -0,0 +1,103 @@
1
+ import { join } from "node:path";
2
+ import { readdir } from "node:fs/promises";
3
+ import { writeFileWithLog } from "../utils/fs.js";
4
+ import { controllerTemplate } from "../templates/controller.js";
5
+ import { modelTemplate } from "../templates/model.js";
6
+ import { middlewareTemplate } from "../templates/middleware.js";
7
+ import { migrationTemplate } from "../templates/migration.js";
8
+ const red = (s) => `\x1b[31m${s}\x1b[0m`;
9
+ const VALID_TYPES = ["controller", "model", "middleware", "migration"];
10
+ function parseFields(args) {
11
+ return args
12
+ .filter((a) => a.includes(":"))
13
+ .map((a) => {
14
+ const [name, type] = a.split(":");
15
+ return { name, type };
16
+ });
17
+ }
18
+ async function dirExists(path) {
19
+ try {
20
+ const { stat } = await import("node:fs/promises");
21
+ const s = await stat(path);
22
+ return s.isDirectory();
23
+ }
24
+ catch {
25
+ return false;
26
+ }
27
+ }
28
+ async function nextMigrationNumber(migrationsDir) {
29
+ try {
30
+ const entries = await readdir(migrationsDir);
31
+ let max = 0;
32
+ for (const entry of entries) {
33
+ const match = entry.match(/^(\d+)/);
34
+ if (match) {
35
+ const n = parseInt(match[1], 10);
36
+ if (n > max)
37
+ max = n;
38
+ }
39
+ }
40
+ return max + 1;
41
+ }
42
+ catch {
43
+ return 1;
44
+ }
45
+ }
46
+ function pad(n, width) {
47
+ return String(n).padStart(width, "0");
48
+ }
49
+ export async function generate(type, name, args, force) {
50
+ if (!VALID_TYPES.includes(type)) {
51
+ console.log(red(`Unknown type: ${type}`));
52
+ console.log(`Valid types: ${VALID_TYPES.join(", ")}`);
53
+ return;
54
+ }
55
+ if (!name) {
56
+ console.log(red("Name is required."));
57
+ return;
58
+ }
59
+ const cwd = process.cwd();
60
+ switch (type) {
61
+ case "controller": {
62
+ if (!(await dirExists(join(cwd, "src")))) {
63
+ console.log(red("Not in a jsxpress project. No src/ directory found."));
64
+ return;
65
+ }
66
+ const filePath = join(cwd, "src", "controllers", `${name}.ts`);
67
+ await writeFileWithLog(filePath, controllerTemplate(name), force);
68
+ break;
69
+ }
70
+ case "model": {
71
+ if (!(await dirExists(join(cwd, "src")))) {
72
+ console.log(red("Not in a jsxpress project. No src/ directory found."));
73
+ return;
74
+ }
75
+ const fields = parseFields(args);
76
+ const className = name.charAt(0).toUpperCase() + name.slice(1);
77
+ const filePath = join(cwd, "src", "models", `${className}.ts`);
78
+ await writeFileWithLog(filePath, modelTemplate(className, fields), force);
79
+ break;
80
+ }
81
+ case "middleware": {
82
+ if (!(await dirExists(join(cwd, "src")))) {
83
+ console.log(red("Not in a jsxpress project. No src/ directory found."));
84
+ return;
85
+ }
86
+ const filePath = join(cwd, "src", "middleware", `${name}.ts`);
87
+ await writeFileWithLog(filePath, middlewareTemplate(name), force);
88
+ break;
89
+ }
90
+ case "migration": {
91
+ const migrationsDir = join(cwd, "migrations");
92
+ if (!(await dirExists(migrationsDir))) {
93
+ console.log(red("No migrations/ directory found."));
94
+ return;
95
+ }
96
+ const num = await nextMigrationNumber(migrationsDir);
97
+ const filePath = join(migrationsDir, `${pad(num, 3)}_${name}.ts`);
98
+ await writeFileWithLog(filePath, migrationTemplate(), force);
99
+ break;
100
+ }
101
+ }
102
+ }
103
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function init(projectName?: string): Promise<void>;
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAuBA,wBAAsB,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD9D"}
@@ -0,0 +1,60 @@
1
+ import { join, basename } from "node:path";
2
+ import { readdir } from "node:fs/promises";
3
+ import { writeFileWithLog, mkdirIfNeeded } from "../utils/fs.js";
4
+ import { ask, select, confirm } from "../utils/prompt.js";
5
+ import { appTemplate, homeControllerTemplate, tsconfigTemplate, packageJsonTemplate, gitignoreTemplate, } from "../templates/project.js";
6
+ const green = (s) => `\x1b[32m${s}\x1b[0m`;
7
+ async function isDirEmpty(path) {
8
+ try {
9
+ const entries = await readdir(path);
10
+ return entries.length === 0;
11
+ }
12
+ catch {
13
+ return true;
14
+ }
15
+ }
16
+ export async function init(projectName) {
17
+ const name = projectName || (await ask(`Project name (${basename(process.cwd())}): `)) || basename(process.cwd());
18
+ const dialect = await select("Select database:", [
19
+ "sqlite",
20
+ "postgres",
21
+ "mysql",
22
+ "mongodb",
23
+ "none",
24
+ ]);
25
+ const targetDir = join(process.cwd(), name);
26
+ if (!(await isDirEmpty(targetDir))) {
27
+ const proceed = await confirm("Directory is not empty. Continue?");
28
+ if (!proceed) {
29
+ console.log("Aborted.");
30
+ return;
31
+ }
32
+ }
33
+ // Create directory structure
34
+ await mkdirIfNeeded(join(targetDir, "src", "controllers"));
35
+ if (dialect !== "none") {
36
+ await mkdirIfNeeded(join(targetDir, "src", "models"));
37
+ if (dialect !== "mongodb") {
38
+ await mkdirIfNeeded(join(targetDir, "migrations"));
39
+ }
40
+ }
41
+ // Write files
42
+ const files = [
43
+ [join(targetDir, "package.json"), packageJsonTemplate(name, dialect)],
44
+ [join(targetDir, "tsconfig.json"), tsconfigTemplate()],
45
+ [join(targetDir, ".gitignore"), gitignoreTemplate()],
46
+ [join(targetDir, "src", "app.tsx"), appTemplate(dialect)],
47
+ [join(targetDir, "src", "controllers", "home.ts"), homeControllerTemplate()],
48
+ ];
49
+ for (const [path, content] of files) {
50
+ await writeFileWithLog(path, content);
51
+ }
52
+ console.log("");
53
+ console.log(green("Done!") + ` Project ${name} created.`);
54
+ console.log("");
55
+ console.log("Next steps:");
56
+ console.log(` cd ${name}`);
57
+ console.log(" npm install");
58
+ console.log(" npx jsxserve dev");
59
+ }
60
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function migrate(subcommand: string): Promise<void>;
2
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/migrate.ts"],"names":[],"mappings":"AAQA,wBAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD/D"}
@@ -0,0 +1,53 @@
1
+ import { join } from "node:path";
2
+ import { createDatabaseAdapter } from "../../db/create-adapter.js";
3
+ import { MigrationRunner } from "../../db/migration.js";
4
+ const red = (s) => `\x1b[31m${s}\x1b[0m`;
5
+ const green = (s) => `\x1b[32m${s}\x1b[0m`;
6
+ export async function migrate(subcommand) {
7
+ const dialect = process.env.DB_DIALECT;
8
+ const url = process.env.DB_URL;
9
+ if (!dialect || !url) {
10
+ console.log(red("Missing DB_DIALECT or DB_URL environment variables."));
11
+ return;
12
+ }
13
+ const adapter = createDatabaseAdapter(dialect, url);
14
+ try {
15
+ await adapter.connect();
16
+ const runner = new MigrationRunner(adapter, join(process.cwd(), "migrations"));
17
+ switch (subcommand) {
18
+ case "up": {
19
+ const before = await runner.applied();
20
+ await runner.up();
21
+ const after = await runner.applied();
22
+ const applied = after.size - before.size;
23
+ console.log(green(`Applied ${applied} migration(s).`));
24
+ break;
25
+ }
26
+ case "down": {
27
+ await runner.down();
28
+ console.log(green("Rolled back 1 migration."));
29
+ break;
30
+ }
31
+ case "status": {
32
+ const pending = await runner.pending();
33
+ if (pending.length === 0) {
34
+ console.log(green("All migrations are up to date."));
35
+ }
36
+ else {
37
+ console.log(`Pending migrations (${pending.length}):`);
38
+ for (const m of pending) {
39
+ console.log(` ${m.id} - ${m.name}`);
40
+ }
41
+ }
42
+ break;
43
+ }
44
+ default:
45
+ console.log(red(`Unknown migrate subcommand: ${subcommand}`));
46
+ console.log("Valid subcommands: up, down, status");
47
+ }
48
+ }
49
+ finally {
50
+ await adapter.close();
51
+ }
52
+ }
53
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/cli/commands/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC;AACjD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,UAAkB;IAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAiC,CAAC;IAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;IAE/B,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;QACxE,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;QAE/E,QAAQ,UAAU,EAAE,CAAC;YACnB,KAAK,IAAI,CAAC,CAAC,CAAC;gBACV,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;gBACtC,MAAM,MAAM,CAAC,EAAE,EAAE,CAAC;gBAClB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;gBACrC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,OAAO,gBAAgB,CAAC,CAAC,CAAC;gBACvD,MAAM;YACR,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;gBAC/C,MAAM;YACR,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;gBACvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;gBACvD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;oBACvD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;wBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YAED;gBACE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+BAA+B,UAAU,EAAE,CAAC,CAAC,CAAC;gBAC9D,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env node
2
+ import { init } from "./commands/init.js";
3
+ import { generate } from "./commands/generate.js";
4
+ import { dev } from "./commands/dev.js";
5
+ import { build } from "./commands/build.js";
6
+ import { migrate } from "./commands/migrate.js";
7
+ const HELP = `
8
+ Usage: jsxserve <command> [options]
9
+
10
+ Commands:
11
+ init [name] Create a new jsxserve project
12
+ generate <type> <name> [fields...] Generate a component (alias: g)
13
+ dev Start development server with watch mode
14
+ build Compile TypeScript with tsc
15
+ migrate <up|down|status> Run database migrations
16
+
17
+ Generate types:
18
+ controller Generate a controller class
19
+ model Generate a model class (fields as name:type)
20
+ middleware Generate a middleware class
21
+ migration Generate a migration file
22
+
23
+ Options:
24
+ --force Overwrite existing files
25
+ --help Show this help message
26
+
27
+ Examples:
28
+ jsxserve init my-app
29
+ jsxserve g controller users
30
+ jsxserve g model Post title:text views:integer
31
+ jsxserve g middleware auth
32
+ jsxserve g migration create_users
33
+ jsxserve dev
34
+ jsxserve migrate up
35
+ `.trim();
36
+ function parseArgs(argv) {
37
+ const force = argv.includes("--force");
38
+ const filtered = argv.filter((a) => a !== "--force");
39
+ const command = filtered[0] ?? "";
40
+ const args = filtered.slice(1);
41
+ return { command, args, force };
42
+ }
43
+ async function main() {
44
+ const { command, args, force } = parseArgs(process.argv.slice(2));
45
+ switch (command) {
46
+ case "init":
47
+ await init(args[0]);
48
+ break;
49
+ case "generate":
50
+ case "g":
51
+ await generate(args[0], args[1], args.slice(2), force);
52
+ break;
53
+ case "dev":
54
+ await dev();
55
+ break;
56
+ case "build":
57
+ await build();
58
+ break;
59
+ case "migrate":
60
+ await migrate(args[0]);
61
+ break;
62
+ case "--help":
63
+ case "":
64
+ console.log(HELP);
65
+ break;
66
+ default:
67
+ console.log(`Unknown command: ${command}`);
68
+ console.log("");
69
+ console.log(HELP);
70
+ break;
71
+ }
72
+ }
73
+ main().catch((err) => {
74
+ console.error(err);
75
+ process.exit(1);
76
+ });
77
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BZ,CAAC,IAAI,EAAE,CAAC;AAET,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAElE,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM;QAER,KAAK,UAAU,CAAC;QAChB,KAAK,GAAG;YACN,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACvD,MAAM;QAER,KAAK,KAAK;YACR,MAAM,GAAG,EAAE,CAAC;YACZ,MAAM;QAER,KAAK,OAAO;YACV,MAAM,KAAK,EAAE,CAAC;YACd,MAAM;QAER,KAAK,SAAS;YACZ,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM;QAER,KAAK,QAAQ,CAAC;QACd,KAAK,EAAE;YACL,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,MAAM;QAER;YACE,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,MAAM;IACV,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function controllerTemplate(name: string): string;
2
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/controller.ts"],"names":[],"mappings":"AAIA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAavD"}
@@ -0,0 +1,18 @@
1
+ function toPascalCase(s) {
2
+ return s.replace(/(^|[-_ ])(\w)/g, (_, __, c) => c.toUpperCase());
3
+ }
4
+ export function controllerTemplate(name) {
5
+ const className = toPascalCase(name);
6
+ return `import { Controller, type JsxpressRequest } from "jsxserve";
7
+ import { Res } from "jsxserve";
8
+
9
+ export class ${className} extends Controller {
10
+ name = "${name}";
11
+
12
+ get(req: JsxpressRequest) {
13
+ return Res.json({ message: "GET /${name}" });
14
+ }
15
+ }
16
+ `;
17
+ }
18
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../src/cli/templates/controller.ts"],"names":[],"mappings":"AAAA,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO;;;eAGM,SAAS;YACZ,IAAI;;;uCAGuB,IAAI;;;CAG1C,CAAC;AACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function middlewareTemplate(name: string): string;
2
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/middleware.ts"],"names":[],"mappings":"AAIA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUvD"}
@@ -0,0 +1,15 @@
1
+ function toPascalCase(s) {
2
+ return s.replace(/(^|[-_ ])(\w)/g, (_, __, c) => c.toUpperCase());
3
+ }
4
+ export function middlewareTemplate(name) {
5
+ const className = toPascalCase(name);
6
+ return `import { Middleware, type JsxpressRequest, type NextFunction } from "jsxserve";
7
+
8
+ export class ${className} extends Middleware {
9
+ async handle(req: JsxpressRequest, next: NextFunction): Promise<Response> {
10
+ return next();
11
+ }
12
+ }
13
+ `;
14
+ }
15
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/cli/templates/middleware.ts"],"names":[],"mappings":"AAAA,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO;;eAEM,SAAS;;;;;CAKvB,CAAC;AACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function migrationTemplate(): string;
2
+ //# sourceMappingURL=migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/migration.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,IAAI,MAAM,CAW1C"}
@@ -0,0 +1,13 @@
1
+ export function migrationTemplate() {
2
+ return `import type { DatabaseAdapter } from "jsxserve";
3
+
4
+ export async function up(adapter: DatabaseAdapter): Promise<void> {
5
+ await adapter.raw("");
6
+ }
7
+
8
+ export async function down(adapter: DatabaseAdapter): Promise<void> {
9
+ await adapter.raw("");
10
+ }
11
+ `;
12
+ }
13
+ //# sourceMappingURL=migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../../src/cli/templates/migration.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB;IAC/B,OAAO;;;;;;;;;CASR,CAAC;AACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function modelTemplate(name: string, fields: {
2
+ name: string;
3
+ type: string;
4
+ }[]): string;
5
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/model.ts"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GACvC,MAAM,CAmBR"}
@@ -0,0 +1,22 @@
1
+ function toPascalCase(s) {
2
+ return s.replace(/(^|[-_ ])(\w)/g, (_, __, c) => c.toUpperCase());
3
+ }
4
+ export function modelTemplate(name, fields) {
5
+ const className = toPascalCase(name);
6
+ const tableName = name.toLowerCase() + "s";
7
+ const fieldLines = fields
8
+ .map((f) => ` ${f.name}: Field.${f.type}().notNull(),`)
9
+ .join("\n");
10
+ return `import { Model, Field } from "jsxserve";
11
+
12
+ export class ${className} extends Model {
13
+ static table = "${tableName}";
14
+
15
+ static schema = {
16
+ id: Field.serial().primaryKey(),
17
+ ${fieldLines}
18
+ };
19
+ }
20
+ `;
21
+ }
22
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/cli/templates/model.ts"],"names":[],"mappings":"AAAA,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,MAAwC;IAExC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC;IAE3C,MAAM,UAAU,GAAG,MAAM;SACtB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,IAAI,eAAe,CAAC;SACzD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;eAEM,SAAS;oBACJ,SAAS;;;;EAI3B,UAAU;;;CAGX,CAAC;AACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function appTemplate(dialect?: string): string;
2
+ export declare function homeControllerTemplate(): string;
3
+ export declare function tsconfigTemplate(): string;
4
+ export declare function packageJsonTemplate(name: string, dialect?: string): string;
5
+ export declare function gitignoreTemplate(): string;
6
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/project.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAsCpD;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAY/C;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAwBzC;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAkC1E;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAM1C"}