@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.
- package/dist/{config-Bq72aj8e.mjs → config-BrkUalUh.mjs} +4 -2
- package/dist/config-BrkUalUh.mjs.map +1 -0
- package/dist/{config-CFls09Ey.cjs → config-C9aXOHBe.cjs} +4 -2
- package/dist/config-C9aXOHBe.cjs.map +1 -0
- package/dist/config.cjs +1 -1
- package/dist/config.d.cts +1 -0
- package/dist/config.d.cts.map +1 -0
- package/dist/config.d.mts +1 -0
- package/dist/config.d.mts.map +1 -0
- package/dist/config.mjs +1 -1
- package/dist/index.cjs +27 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +27 -15
- package/dist/index.mjs.map +1 -1
- package/dist/{openapi-CHhTPief.cjs → openapi-BeHLKcwP.cjs} +13 -13
- package/dist/{openapi-CHhTPief.cjs.map → openapi-BeHLKcwP.cjs.map} +1 -1
- package/dist/{openapi--vOy9mo4.mjs → openapi-CZLI4QTr.mjs} +13 -13
- package/dist/{openapi--vOy9mo4.mjs.map → openapi-CZLI4QTr.mjs.map} +1 -1
- package/dist/openapi-react-query.d.cts.map +1 -0
- package/dist/openapi-react-query.d.mts.map +1 -0
- package/dist/openapi.cjs +2 -2
- package/dist/openapi.d.cts.map +1 -0
- package/dist/openapi.d.mts.map +1 -0
- package/dist/openapi.mjs +2 -2
- package/dist/types-DXgiA1sF.d.mts.map +1 -0
- package/dist/types-b-vwGpqc.d.cts.map +1 -0
- package/package.json +7 -7
- package/src/__tests__/test-helpers.ts +3 -2
- package/src/config.ts +3 -1
- package/src/dev/index.ts +35 -11
- package/src/generators/OpenApiTsGenerator.ts +11 -11
- package/src/index.ts +11 -18
- package/tsconfig.json +9 -0
- package/dist/config-Bq72aj8e.mjs.map +0 -1
- 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-
|
|
3
|
-
import { ConstructGenerator, EndpointGenerator, OPENAPI_OUTPUT_PATH, generateOpenApi, openapiCommand, resolveOpenApiConfig } from "./openapi
|
|
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.
|
|
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
|
|
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) =>
|
|
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
|
-
|
|
727
|
-
|
|
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"
|
|
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
|
|
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(
|
|
2747
|
+
await openapiCommand({});
|
|
2736
2748
|
} catch (error) {
|
|
2737
2749
|
console.error("OpenAPI generation failed:", error.message);
|
|
2738
2750
|
process.exit(1);
|