@geekmidas/cli 0.8.0 → 0.10.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 (35) hide show
  1. package/dist/{config-Bq72aj8e.mjs → config-BrkUalUh.mjs} +4 -2
  2. package/dist/config-BrkUalUh.mjs.map +1 -0
  3. package/dist/{config-CFls09Ey.cjs → config-C9aXOHBe.cjs} +4 -2
  4. package/dist/config-C9aXOHBe.cjs.map +1 -0
  5. package/dist/config.cjs +1 -1
  6. package/dist/config.d.cts +1 -0
  7. package/dist/config.d.cts.map +1 -0
  8. package/dist/config.d.mts +1 -0
  9. package/dist/config.d.mts.map +1 -0
  10. package/dist/config.mjs +1 -1
  11. package/dist/index.cjs +27 -15
  12. package/dist/index.cjs.map +1 -1
  13. package/dist/index.mjs +27 -15
  14. package/dist/index.mjs.map +1 -1
  15. package/dist/{openapi-CHhTPief.cjs → openapi-BeHLKcwP.cjs} +13 -13
  16. package/dist/{openapi-CHhTPief.cjs.map → openapi-BeHLKcwP.cjs.map} +1 -1
  17. package/dist/{openapi--vOy9mo4.mjs → openapi-CZLI4QTr.mjs} +13 -13
  18. package/dist/{openapi--vOy9mo4.mjs.map → openapi-CZLI4QTr.mjs.map} +1 -1
  19. package/dist/openapi-react-query.d.cts.map +1 -0
  20. package/dist/openapi-react-query.d.mts.map +1 -0
  21. package/dist/openapi.cjs +2 -2
  22. package/dist/openapi.d.cts.map +1 -0
  23. package/dist/openapi.d.mts.map +1 -0
  24. package/dist/openapi.mjs +2 -2
  25. package/dist/types-DXgiA1sF.d.mts.map +1 -0
  26. package/dist/types-b-vwGpqc.d.cts.map +1 -0
  27. package/package.json +7 -7
  28. package/src/__tests__/test-helpers.ts +3 -2
  29. package/src/config.ts +3 -1
  30. package/src/dev/index.ts +35 -11
  31. package/src/generators/OpenApiTsGenerator.ts +11 -11
  32. package/src/index.ts +11 -18
  33. package/tsconfig.json +9 -0
  34. package/dist/config-Bq72aj8e.mjs.map +0 -1
  35. package/dist/config-CFls09Ey.cjs.map +0 -1
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env -S npx tsx
2
- import { loadConfig, parseModuleConfig } from "./config-Bq72aj8e.mjs";
3
- import { ConstructGenerator, EndpointGenerator, OPENAPI_OUTPUT_PATH, generateOpenApi, openapiCommand, resolveOpenApiConfig } from "./openapi--vOy9mo4.mjs";
2
+ import { loadConfig, parseModuleConfig } from "./config-BrkUalUh.mjs";
3
+ import { ConstructGenerator, EndpointGenerator, OPENAPI_OUTPUT_PATH, generateOpenApi, openapiCommand, resolveOpenApiConfig } from "./openapi-CZLI4QTr.mjs";
4
4
  import { generateReactQueryCommand } from "./openapi-react-query-CcciaVu5.mjs";
5
5
  import { join, relative } from "path";
6
6
  import { Command } from "commander";
@@ -19,7 +19,7 @@ import prompts from "prompts";
19
19
 
20
20
  //#region package.json
21
21
  var name = "@geekmidas/cli";
22
- var version = "0.8.0";
22
+ var version = "0.10.0";
23
23
  var description = "CLI tools for building Lambda handlers, server applications, and generating OpenAPI specs";
24
24
  var private$1 = false;
25
25
  var type = "module";
@@ -620,11 +620,12 @@ async function devCommand(options) {
620
620
  await buildServer(config$1, buildContext, resolved.providers[0], enableOpenApi);
621
621
  if (enableOpenApi) await generateOpenApi(config$1);
622
622
  const runtime = config$1.runtime ?? "node";
623
- const devServer = new DevServer(resolved.providers[0], options.port || 3e3, enableOpenApi, telescope, studio, runtime);
623
+ const devServer = new DevServer(resolved.providers[0], options.port || 3e3, options.portExplicit ?? false, enableOpenApi, telescope, studio, runtime);
624
624
  await devServer.start();
625
- const envParserFile = config$1.envParser.split("#")[0];
626
- const loggerFile = config$1.logger.split("#")[0];
627
- const hooksFile = config$1.hooks?.server?.split("#")[0];
625
+ const envParserFile = config$1.envParser.split("#")[0] ?? config$1.envParser;
626
+ const loggerFile = config$1.logger.split("#")[0] ?? config$1.logger;
627
+ const hooksFileParts = config$1.hooks?.server?.split("#");
628
+ const hooksFile = hooksFileParts?.[0];
628
629
  const watchPatterns = [
629
630
  config$1.routes,
630
631
  ...config$1.functions ? [config$1.functions] : [],
@@ -633,7 +634,7 @@ async function devCommand(options) {
633
634
  envParserFile.endsWith(".ts") ? envParserFile : `${envParserFile}.ts`,
634
635
  loggerFile.endsWith(".ts") ? loggerFile : `${loggerFile}.ts`,
635
636
  ...hooksFile ? [hooksFile.endsWith(".ts") ? hooksFile : `${hooksFile}.ts`] : []
636
- ].flat();
637
+ ].flat().filter((p) => typeof p === "string");
637
638
  const normalizedPatterns = watchPatterns.map((p) => p.startsWith("./") ? p.slice(2) : p);
638
639
  logger$2.log(`👀 Watching for changes in: ${normalizedPatterns.join(", ")}`);
639
640
  const resolvedFiles = await fg(normalizedPatterns, {
@@ -641,7 +642,10 @@ async function devCommand(options) {
641
642
  absolute: false,
642
643
  onlyFiles: true
643
644
  });
644
- const dirsToWatch = [...new Set(resolvedFiles.map((f) => f.split("/").slice(0, -1).join("/")))];
645
+ const dirsToWatch = [...new Set(resolvedFiles.map((f) => {
646
+ const parts = f.split("/");
647
+ return parts.slice(0, -1).join("/");
648
+ }))];
645
649
  logger$2.log(`📁 Found ${resolvedFiles.length} files in ${dirsToWatch.length} directories`);
646
650
  const watcher = chokidar.watch([...resolvedFiles, ...dirsToWatch], {
647
651
  ignored: /(^|[\/\\])\../,
@@ -712,9 +716,10 @@ var DevServer = class {
712
716
  serverProcess = null;
713
717
  isRunning = false;
714
718
  actualPort;
715
- constructor(provider, requestedPort, enableOpenApi, telescope, studio, runtime = "node") {
719
+ constructor(provider, requestedPort, portExplicit, enableOpenApi, telescope, studio, runtime = "node") {
716
720
  this.provider = provider;
717
721
  this.requestedPort = requestedPort;
722
+ this.portExplicit = portExplicit;
718
723
  this.enableOpenApi = enableOpenApi;
719
724
  this.telescope = telescope;
720
725
  this.studio = studio;
@@ -723,8 +728,14 @@ var DevServer = class {
723
728
  }
724
729
  async start() {
725
730
  if (this.isRunning) await this.stop();
726
- this.actualPort = await findAvailablePort(this.requestedPort);
727
- if (this.actualPort !== this.requestedPort) logger$2.log(`ℹ️ Port ${this.requestedPort} was in use, using port ${this.actualPort} instead`);
731
+ if (this.portExplicit) {
732
+ const available = await isPortAvailable(this.requestedPort);
733
+ if (!available) throw new Error(`Port ${this.requestedPort} is already in use. Either stop the process using that port or omit -p/--port to auto-select an available port.`);
734
+ this.actualPort = this.requestedPort;
735
+ } else {
736
+ this.actualPort = await findAvailablePort(this.requestedPort);
737
+ if (this.actualPort !== this.requestedPort) logger$2.log(`ℹ️ Port ${this.requestedPort} was in use, using port ${this.actualPort} instead`);
738
+ }
728
739
  const serverEntryPath = join$1(process.cwd(), ".gkm", this.provider, "server.ts");
729
740
  await this.createServerEntry();
730
741
  logger$2.log(`\n✨ Starting server on port ${this.actualPort}...`);
@@ -2700,12 +2711,13 @@ program.command("build").description("Build handlers from endpoints, functions,
2700
2711
  process.exit(1);
2701
2712
  }
2702
2713
  });
2703
- program.command("dev").description("Start development server with automatic reload").option("--port <port>", "Port to run the development server on", "3000").option("--enable-openapi", "Enable OpenAPI documentation for development server", true).action(async (options) => {
2714
+ program.command("dev").description("Start development server with automatic reload").option("-p, --port <port>", "Port to run the development server on").option("--enable-openapi", "Enable OpenAPI documentation for development server", true).action(async (options) => {
2704
2715
  try {
2705
2716
  const globalOptions = program.opts();
2706
2717
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
2707
2718
  await devCommand({
2708
2719
  port: options.port ? Number.parseInt(options.port) : 3e3,
2720
+ portExplicit: !!options.port,
2709
2721
  enableOpenApi: options.enableOpenapi ?? true
2710
2722
  });
2711
2723
  } catch (error) {
@@ -2728,11 +2740,11 @@ program.command("api").description("Manage REST API endpoints").action(() => {
2728
2740
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
2729
2741
  process.stdout.write("REST API management - coming soon\n");
2730
2742
  });
2731
- program.command("openapi").description("Generate OpenAPI specification from endpoints (TypeScript by default)").option("--output <path>", "Output file path for the OpenAPI spec", "openapi.ts").option("--json", "Generate JSON instead of TypeScript (legacy)", false).action(async (options) => {
2743
+ program.command("openapi").description("Generate OpenAPI specification from endpoints").action(async () => {
2732
2744
  try {
2733
2745
  const globalOptions = program.opts();
2734
2746
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
2735
- await openapiCommand(options);
2747
+ await openapiCommand({});
2736
2748
  } catch (error) {
2737
2749
  console.error("OpenAPI generation failed:", error.message);
2738
2750
  process.exit(1);