@geekmidas/cli 0.0.26 → 0.2.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/FUNCTION_CRON_SUPPORT.md +266 -0
- package/README.md +84 -17
- package/dist/CronGenerator-1PflEYe2.cjs +60 -0
- package/dist/CronGenerator-1PflEYe2.cjs.map +1 -0
- package/dist/CronGenerator-DXRfHQcV.mjs +54 -0
- package/dist/CronGenerator-DXRfHQcV.mjs.map +1 -0
- package/dist/EndpointGenerator-BbGrDiCP.cjs +264 -0
- package/dist/EndpointGenerator-BbGrDiCP.cjs.map +1 -0
- package/dist/EndpointGenerator-BmZ9BxbO.mjs +258 -0
- package/dist/EndpointGenerator-BmZ9BxbO.mjs.map +1 -0
- package/dist/FunctionGenerator-Clw64SwQ.cjs +59 -0
- package/dist/FunctionGenerator-Clw64SwQ.cjs.map +1 -0
- package/dist/FunctionGenerator-DOEB_yPh.mjs +53 -0
- package/dist/FunctionGenerator-DOEB_yPh.mjs.map +1 -0
- package/dist/Generator-CDoEXCDg.cjs +47 -0
- package/dist/Generator-CDoEXCDg.cjs.map +1 -0
- package/dist/Generator-UanJW0_V.mjs +41 -0
- package/dist/Generator-UanJW0_V.mjs.map +1 -0
- package/dist/SubscriberGenerator-BfMZCVNy.cjs +204 -0
- package/dist/SubscriberGenerator-BfMZCVNy.cjs.map +1 -0
- package/dist/SubscriberGenerator-D2u00NI3.mjs +198 -0
- package/dist/SubscriberGenerator-D2u00NI3.mjs.map +1 -0
- package/dist/build/index.cjs +12 -0
- package/dist/build/index.mjs +12 -0
- package/dist/build/manifests.cjs +3 -0
- package/dist/build/manifests.mjs +3 -0
- package/dist/build/providerResolver.cjs +5 -0
- package/dist/build/providerResolver.mjs +3 -0
- package/dist/build/types.cjs +0 -0
- package/dist/build/types.mjs +0 -0
- package/dist/build-BBhlEjf5.cjs +89 -0
- package/dist/build-BBhlEjf5.cjs.map +1 -0
- package/dist/build-kY-lG30Q.mjs +83 -0
- package/dist/build-kY-lG30Q.mjs.map +1 -0
- package/dist/config-D1EpSGk6.cjs +36 -0
- package/dist/config-D1EpSGk6.cjs.map +1 -0
- package/dist/config-U-mdW-7Y.mjs +30 -0
- package/dist/config-U-mdW-7Y.mjs.map +1 -0
- package/dist/config.cjs +1 -1
- package/dist/config.mjs +1 -1
- package/dist/generators/CronGenerator.cjs +4 -0
- package/dist/generators/CronGenerator.mjs +4 -0
- package/dist/generators/EndpointGenerator.cjs +4 -0
- package/dist/generators/EndpointGenerator.mjs +4 -0
- package/dist/generators/FunctionGenerator.cjs +4 -0
- package/dist/generators/FunctionGenerator.mjs +4 -0
- package/dist/generators/Generator.cjs +3 -0
- package/dist/generators/Generator.mjs +3 -0
- package/dist/generators/SubscriberGenerator.cjs +4 -0
- package/dist/generators/SubscriberGenerator.mjs +4 -0
- package/dist/generators/index.cjs +12 -0
- package/dist/generators/index.mjs +8 -0
- package/dist/generators-CEKtVh81.cjs +0 -0
- package/dist/generators-CsLujGXs.mjs +0 -0
- package/dist/index.cjs +71 -25
- package/dist/index.cjs.map +1 -0
- package/dist/index.mjs +71 -25
- package/dist/index.mjs.map +1 -0
- package/dist/manifests-BrJXpHrf.mjs +21 -0
- package/dist/manifests-BrJXpHrf.mjs.map +1 -0
- package/dist/manifests-D0saShvH.cjs +27 -0
- package/dist/manifests-D0saShvH.cjs.map +1 -0
- package/dist/{openapi-CksVdkh2.mjs → openapi-BQx3_JbM.mjs} +8 -6
- package/dist/openapi-BQx3_JbM.mjs.map +1 -0
- package/dist/{openapi-D4QQJUPY.cjs → openapi-CMLr04cz.cjs} +9 -7
- package/dist/openapi-CMLr04cz.cjs.map +1 -0
- package/dist/{openapi-react-query-DpT3XHFC.mjs → openapi-react-query-DbrWwQzb.mjs} +5 -3
- package/dist/openapi-react-query-DbrWwQzb.mjs.map +1 -0
- package/dist/{openapi-react-query-C1JLYUOs.cjs → openapi-react-query-Dvjqx_Eo.cjs} +5 -3
- package/dist/openapi-react-query-Dvjqx_Eo.cjs.map +1 -0
- package/dist/openapi-react-query.cjs +1 -1
- package/dist/openapi-react-query.mjs +1 -1
- package/dist/openapi.cjs +4 -3
- package/dist/openapi.mjs +4 -3
- package/dist/providerResolver-B_TjNF0_.mjs +96 -0
- package/dist/providerResolver-B_TjNF0_.mjs.map +1 -0
- package/dist/providerResolver-DgvzNfP4.cjs +114 -0
- package/dist/providerResolver-DgvzNfP4.cjs.map +1 -0
- package/examples/cron-example.ts +45 -0
- package/examples/function-example.ts +40 -0
- package/examples/gkm.config.json +22 -0
- package/examples/gkm.minimal.config.json +7 -0
- package/examples/gkm.production.config.json +27 -0
- package/examples/logger.ts +1 -1
- package/package.json +38 -14
- package/src/__tests__/config.spec.ts +110 -0
- package/src/__tests__/openapi-react-query.spec.ts +506 -0
- package/src/__tests__/openapi.spec.ts +362 -0
- package/src/__tests__/test-helpers.ts +180 -0
- package/src/build/__tests__/index-new.spec.ts +577 -0
- package/src/build/index.ts +197 -0
- package/src/build/manifests.ts +35 -0
- package/src/build/providerResolver.ts +184 -0
- package/src/build/types.ts +37 -0
- package/src/config.ts +14 -6
- package/src/generators/CronGenerator.ts +98 -0
- package/src/generators/EndpointGenerator.ts +389 -0
- package/src/generators/FunctionGenerator.ts +97 -0
- package/src/generators/Generator.ts +95 -0
- package/src/generators/SubscriberGenerator.ts +271 -0
- package/src/generators/__tests__/CronGenerator.spec.ts +445 -0
- package/src/generators/__tests__/EndpointGenerator.spec.ts +394 -0
- package/src/generators/__tests__/FunctionGenerator.spec.ts +256 -0
- package/src/generators/__tests__/SubscriberGenerator.spec.ts +341 -0
- package/src/generators/index.ts +9 -0
- package/src/index.ts +57 -22
- package/src/openapi-react-query.ts +2 -1
- package/src/openapi.ts +5 -4
- package/src/types.ts +91 -2
- package/dist/build-BTggTCYL.cjs +0 -176
- package/dist/build-Ca4P6_lY.mjs +0 -170
- package/dist/build.cjs +0 -5
- package/dist/build.mjs +0 -5
- package/dist/config-BNqUMsvc.cjs +0 -24
- package/dist/config-BciAdY6_.mjs +0 -18
- package/dist/loadEndpoints-BBIavB9h.cjs +0 -37
- package/dist/loadEndpoints-DAZ53Og2.mjs +0 -31
- package/dist/loadEndpoints.cjs +0 -3
- package/dist/loadEndpoints.mjs +0 -3
- package/src/build.ts +0 -305
- package/src/loadEndpoints.ts +0 -48
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
const require_providerResolver = require('../providerResolver-DgvzNfP4.cjs');
|
|
2
|
+
|
|
3
|
+
exports.getAWSServiceConfig = require_providerResolver.getAWSServiceConfig;
|
|
4
|
+
exports.getServerConfig = require_providerResolver.getServerConfig;
|
|
5
|
+
exports.resolveProviders = require_providerResolver.resolveProviders;
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
const require_chunk = require('./chunk-CUT6urMc.cjs');
|
|
2
|
+
const require_config = require('./config-D1EpSGk6.cjs');
|
|
3
|
+
const require_CronGenerator = require('./CronGenerator-1PflEYe2.cjs');
|
|
4
|
+
const require_EndpointGenerator = require('./EndpointGenerator-BbGrDiCP.cjs');
|
|
5
|
+
const require_FunctionGenerator = require('./FunctionGenerator-Clw64SwQ.cjs');
|
|
6
|
+
const require_SubscriberGenerator = require('./SubscriberGenerator-BfMZCVNy.cjs');
|
|
7
|
+
const require_manifests = require('./manifests-D0saShvH.cjs');
|
|
8
|
+
const require_providerResolver = require('./providerResolver-DgvzNfP4.cjs');
|
|
9
|
+
const node_fs_promises = require_chunk.__toESM(require("node:fs/promises"));
|
|
10
|
+
const node_path = require_chunk.__toESM(require("node:path"));
|
|
11
|
+
|
|
12
|
+
//#region src/build/index.ts
|
|
13
|
+
const logger = console;
|
|
14
|
+
async function buildCommand(options) {
|
|
15
|
+
const config = await require_config.loadConfig();
|
|
16
|
+
const resolved = require_providerResolver.resolveProviders(config, options);
|
|
17
|
+
logger.log(`Building with providers: ${resolved.providers.join(", ")}`);
|
|
18
|
+
logger.log(`Loading routes from: ${config.routes}`);
|
|
19
|
+
if (config.functions) logger.log(`Loading functions from: ${config.functions}`);
|
|
20
|
+
if (config.crons) logger.log(`Loading crons from: ${config.crons}`);
|
|
21
|
+
if (config.subscribers) logger.log(`Loading subscribers from: ${config.subscribers}`);
|
|
22
|
+
logger.log(`Using envParser: ${config.envParser}`);
|
|
23
|
+
const [envParserPath, envParserName] = config.envParser.split("#");
|
|
24
|
+
const envParserImportPattern = !envParserName ? "envParser" : envParserName === "envParser" ? "{ envParser }" : `{ ${envParserName} as envParser }`;
|
|
25
|
+
const [loggerPath, loggerName] = config.logger.split("#");
|
|
26
|
+
const loggerImportPattern = !loggerName ? "logger" : loggerName === "logger" ? "{ logger }" : `{ ${loggerName} as logger }`;
|
|
27
|
+
const buildContext = {
|
|
28
|
+
envParserPath,
|
|
29
|
+
envParserImportPattern,
|
|
30
|
+
loggerPath,
|
|
31
|
+
loggerImportPattern
|
|
32
|
+
};
|
|
33
|
+
const endpointGenerator = new require_EndpointGenerator.EndpointGenerator();
|
|
34
|
+
const functionGenerator = new require_FunctionGenerator.FunctionGenerator();
|
|
35
|
+
const cronGenerator = new require_CronGenerator.CronGenerator();
|
|
36
|
+
const subscriberGenerator = new require_SubscriberGenerator.SubscriberGenerator();
|
|
37
|
+
const [allEndpoints, allFunctions, allCrons, allSubscribers] = await Promise.all([
|
|
38
|
+
endpointGenerator.load(config.routes),
|
|
39
|
+
config.functions ? functionGenerator.load(config.functions) : [],
|
|
40
|
+
config.crons ? cronGenerator.load(config.crons) : [],
|
|
41
|
+
config.subscribers ? subscriberGenerator.load(config.subscribers) : []
|
|
42
|
+
]);
|
|
43
|
+
logger.log(`Found ${allEndpoints.length} endpoints`);
|
|
44
|
+
logger.log(`Found ${allFunctions.length} functions`);
|
|
45
|
+
logger.log(`Found ${allCrons.length} crons`);
|
|
46
|
+
logger.log(`Found ${allSubscribers.length} subscribers`);
|
|
47
|
+
if (allEndpoints.length === 0 && allFunctions.length === 0 && allCrons.length === 0 && allSubscribers.length === 0) {
|
|
48
|
+
logger.log("No endpoints, functions, crons, or subscribers found to process");
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const rootOutputDir = (0, node_path.join)(process.cwd(), ".gkm");
|
|
52
|
+
await (0, node_fs_promises.mkdir)(rootOutputDir, { recursive: true });
|
|
53
|
+
const allBuildResults = await Promise.all(resolved.providers.map((provider) => buildForProvider(provider, buildContext, endpointGenerator, functionGenerator, cronGenerator, subscriberGenerator, allEndpoints, allFunctions, allCrons, allSubscribers, resolved.enableOpenApi)));
|
|
54
|
+
const aggregatedRoutes = allBuildResults.flatMap((result) => result.routes);
|
|
55
|
+
const aggregatedFunctions = allBuildResults.flatMap((result) => result.functions);
|
|
56
|
+
const aggregatedCrons = allBuildResults.flatMap((result) => result.crons);
|
|
57
|
+
const aggregatedSubscribers = allBuildResults.flatMap((result) => result.subscribers);
|
|
58
|
+
await require_manifests.generateManifests(rootOutputDir, aggregatedRoutes, aggregatedFunctions, aggregatedCrons, aggregatedSubscribers);
|
|
59
|
+
}
|
|
60
|
+
async function buildForProvider(provider, context, endpointGenerator, functionGenerator, cronGenerator, subscriberGenerator, endpoints, functions, crons, subscribers, enableOpenApi) {
|
|
61
|
+
const outputDir = (0, node_path.join)(process.cwd(), ".gkm", provider);
|
|
62
|
+
await (0, node_fs_promises.mkdir)(outputDir, { recursive: true });
|
|
63
|
+
logger.log(`\nGenerating handlers for provider: ${provider}`);
|
|
64
|
+
const [routes, functionInfos, cronInfos, subscriberInfos] = await Promise.all([
|
|
65
|
+
endpointGenerator.build(context, endpoints, outputDir, {
|
|
66
|
+
provider,
|
|
67
|
+
enableOpenApi
|
|
68
|
+
}),
|
|
69
|
+
functionGenerator.build(context, functions, outputDir, { provider }),
|
|
70
|
+
cronGenerator.build(context, crons, outputDir, { provider }),
|
|
71
|
+
subscriberGenerator.build(context, subscribers, outputDir, { provider })
|
|
72
|
+
]);
|
|
73
|
+
logger.log(`Generated ${routes.length} routes, ${functionInfos.length} functions, ${cronInfos.length} crons, ${subscriberInfos.length} subscribers for ${provider}`);
|
|
74
|
+
return {
|
|
75
|
+
routes,
|
|
76
|
+
functions: functionInfos,
|
|
77
|
+
crons: cronInfos,
|
|
78
|
+
subscribers: subscriberInfos
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
//#endregion
|
|
83
|
+
Object.defineProperty(exports, 'buildCommand', {
|
|
84
|
+
enumerable: true,
|
|
85
|
+
get: function () {
|
|
86
|
+
return buildCommand;
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=build-BBhlEjf5.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-BBhlEjf5.cjs","names":["options: BuildOptions","buildContext: BuildContext","EndpointGenerator","FunctionGenerator","CronGenerator","SubscriberGenerator","provider: LegacyProvider","context: BuildContext","endpointGenerator: EndpointGenerator","functionGenerator: FunctionGenerator","cronGenerator: CronGenerator","subscriberGenerator: SubscriberGenerator","endpoints: GeneratedConstruct<Endpoint<any, any, any, any, any, any>>[]","functions: GeneratedConstruct<Function<any, any, any, any>>[]","crons: GeneratedConstruct<Cron<any, any, any, any>>[]","subscribers: GeneratedConstruct<Subscriber<any, any, any, any, any, any>>[]","enableOpenApi: boolean"],"sources":["../src/build/index.ts"],"sourcesContent":["import { mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { Cron } from '@geekmidas/constructs/crons';\nimport type { Endpoint } from '@geekmidas/constructs/endpoints';\nimport type { Function } from '@geekmidas/constructs/functions';\nimport type { Subscriber } from '@geekmidas/constructs/subscribers';\nimport { loadConfig } from '../config';\nimport {\n CronGenerator,\n EndpointGenerator,\n FunctionGenerator,\n type GeneratedConstruct,\n SubscriberGenerator,\n} from '../generators';\nimport type {\n BuildOptions,\n CronInfo,\n FunctionInfo,\n LegacyProvider,\n RouteInfo,\n SubscriberInfo,\n} from '../types';\nimport { generateManifests } from './manifests';\nimport { resolveProviders } from './providerResolver';\nimport type { BuildContext } from './types';\n\nconst logger = console;\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n const config = await loadConfig();\n\n // Resolve providers from new config format\n const resolved = resolveProviders(config, options);\n\n logger.log(`Building with providers: ${resolved.providers.join(', ')}`);\n logger.log(`Loading routes from: ${config.routes}`);\n if (config.functions) {\n logger.log(`Loading functions from: ${config.functions}`);\n }\n if (config.crons) {\n logger.log(`Loading crons from: ${config.crons}`);\n }\n if (config.subscribers) {\n logger.log(`Loading subscribers from: ${config.subscribers}`);\n }\n logger.log(`Using envParser: ${config.envParser}`);\n\n // Parse envParser configuration\n const [envParserPath, envParserName] = config.envParser.split('#');\n const envParserImportPattern = !envParserName\n ? 'envParser'\n : envParserName === 'envParser'\n ? '{ envParser }'\n : `{ ${envParserName} as envParser }`;\n\n // Parse logger configuration\n const [loggerPath, loggerName] = config.logger.split('#');\n const loggerImportPattern = !loggerName\n ? 'logger'\n : loggerName === 'logger'\n ? '{ logger }'\n : `{ ${loggerName} as logger }`;\n\n const buildContext: BuildContext = {\n envParserPath,\n envParserImportPattern,\n loggerPath,\n loggerImportPattern,\n };\n\n // Initialize generators\n const endpointGenerator = new EndpointGenerator();\n const functionGenerator = new FunctionGenerator();\n const cronGenerator = new CronGenerator();\n const subscriberGenerator = new SubscriberGenerator();\n\n // Load all constructs in parallel\n const [allEndpoints, allFunctions, allCrons, allSubscribers] =\n await Promise.all([\n endpointGenerator.load(config.routes),\n config.functions ? functionGenerator.load(config.functions) : [],\n config.crons ? cronGenerator.load(config.crons) : [],\n config.subscribers ? subscriberGenerator.load(config.subscribers) : [],\n ]);\n\n logger.log(`Found ${allEndpoints.length} endpoints`);\n logger.log(`Found ${allFunctions.length} functions`);\n logger.log(`Found ${allCrons.length} crons`);\n logger.log(`Found ${allSubscribers.length} subscribers`);\n\n if (\n allEndpoints.length === 0 &&\n allFunctions.length === 0 &&\n allCrons.length === 0 &&\n allSubscribers.length === 0\n ) {\n logger.log(\n 'No endpoints, functions, crons, or subscribers found to process',\n );\n return;\n }\n\n // Ensure .gkm directory exists\n const rootOutputDir = join(process.cwd(), '.gkm');\n await mkdir(rootOutputDir, { recursive: true });\n\n // Collect all build results from each provider\n const allBuildResults = await Promise.all(\n resolved.providers.map((provider) =>\n buildForProvider(\n provider,\n buildContext,\n endpointGenerator,\n functionGenerator,\n cronGenerator,\n subscriberGenerator,\n allEndpoints,\n allFunctions,\n allCrons,\n allSubscribers,\n resolved.enableOpenApi,\n ),\n ),\n );\n\n // Aggregate all routes, functions, crons, and subscribers from all providers\n const aggregatedRoutes = allBuildResults.flatMap((result) => result.routes);\n const aggregatedFunctions = allBuildResults.flatMap(\n (result) => result.functions,\n );\n const aggregatedCrons = allBuildResults.flatMap((result) => result.crons);\n const aggregatedSubscribers = allBuildResults.flatMap(\n (result) => result.subscribers,\n );\n\n // Generate single manifest at root .gkm directory\n await generateManifests(\n rootOutputDir,\n aggregatedRoutes,\n aggregatedFunctions,\n aggregatedCrons,\n aggregatedSubscribers,\n );\n}\n\ninterface BuildResult {\n routes: RouteInfo[];\n functions: FunctionInfo[];\n crons: CronInfo[];\n subscribers: SubscriberInfo[];\n}\n\nasync function buildForProvider(\n provider: LegacyProvider,\n context: BuildContext,\n endpointGenerator: EndpointGenerator,\n functionGenerator: FunctionGenerator,\n cronGenerator: CronGenerator,\n subscriberGenerator: SubscriberGenerator,\n endpoints: GeneratedConstruct<Endpoint<any, any, any, any, any, any>>[],\n functions: GeneratedConstruct<Function<any, any, any, any>>[],\n crons: GeneratedConstruct<Cron<any, any, any, any>>[],\n subscribers: GeneratedConstruct<Subscriber<any, any, any, any, any, any>>[],\n enableOpenApi: boolean,\n): Promise<BuildResult> {\n const outputDir = join(process.cwd(), '.gkm', provider);\n\n // Ensure output directory exists\n await mkdir(outputDir, { recursive: true });\n\n logger.log(`\\nGenerating handlers for provider: ${provider}`);\n\n // Build all constructs in parallel\n const [routes, functionInfos, cronInfos, subscriberInfos] = await Promise.all(\n [\n endpointGenerator.build(context, endpoints, outputDir, {\n provider,\n enableOpenApi,\n }),\n functionGenerator.build(context, functions, outputDir, { provider }),\n cronGenerator.build(context, crons, outputDir, { provider }),\n subscriberGenerator.build(context, subscribers, outputDir, { provider }),\n ],\n );\n\n logger.log(\n `Generated ${routes.length} routes, ${functionInfos.length} functions, ${cronInfos.length} crons, ${subscriberInfos.length} subscribers for ${provider}`,\n );\n\n // Return build results instead of generating manifest here\n return {\n routes,\n functions: functionInfos,\n crons: cronInfos,\n subscribers: subscriberInfos,\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { loadConfig } from "./config-U-mdW-7Y.mjs";
|
|
2
|
+
import { CronGenerator } from "./CronGenerator-DXRfHQcV.mjs";
|
|
3
|
+
import { EndpointGenerator } from "./EndpointGenerator-BmZ9BxbO.mjs";
|
|
4
|
+
import { FunctionGenerator } from "./FunctionGenerator-DOEB_yPh.mjs";
|
|
5
|
+
import { SubscriberGenerator } from "./SubscriberGenerator-D2u00NI3.mjs";
|
|
6
|
+
import { generateManifests } from "./manifests-BrJXpHrf.mjs";
|
|
7
|
+
import { resolveProviders } from "./providerResolver-B_TjNF0_.mjs";
|
|
8
|
+
import { mkdir } from "node:fs/promises";
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
|
|
11
|
+
//#region src/build/index.ts
|
|
12
|
+
const logger = console;
|
|
13
|
+
async function buildCommand(options) {
|
|
14
|
+
const config = await loadConfig();
|
|
15
|
+
const resolved = resolveProviders(config, options);
|
|
16
|
+
logger.log(`Building with providers: ${resolved.providers.join(", ")}`);
|
|
17
|
+
logger.log(`Loading routes from: ${config.routes}`);
|
|
18
|
+
if (config.functions) logger.log(`Loading functions from: ${config.functions}`);
|
|
19
|
+
if (config.crons) logger.log(`Loading crons from: ${config.crons}`);
|
|
20
|
+
if (config.subscribers) logger.log(`Loading subscribers from: ${config.subscribers}`);
|
|
21
|
+
logger.log(`Using envParser: ${config.envParser}`);
|
|
22
|
+
const [envParserPath, envParserName] = config.envParser.split("#");
|
|
23
|
+
const envParserImportPattern = !envParserName ? "envParser" : envParserName === "envParser" ? "{ envParser }" : `{ ${envParserName} as envParser }`;
|
|
24
|
+
const [loggerPath, loggerName] = config.logger.split("#");
|
|
25
|
+
const loggerImportPattern = !loggerName ? "logger" : loggerName === "logger" ? "{ logger }" : `{ ${loggerName} as logger }`;
|
|
26
|
+
const buildContext = {
|
|
27
|
+
envParserPath,
|
|
28
|
+
envParserImportPattern,
|
|
29
|
+
loggerPath,
|
|
30
|
+
loggerImportPattern
|
|
31
|
+
};
|
|
32
|
+
const endpointGenerator = new EndpointGenerator();
|
|
33
|
+
const functionGenerator = new FunctionGenerator();
|
|
34
|
+
const cronGenerator = new CronGenerator();
|
|
35
|
+
const subscriberGenerator = new SubscriberGenerator();
|
|
36
|
+
const [allEndpoints, allFunctions, allCrons, allSubscribers] = await Promise.all([
|
|
37
|
+
endpointGenerator.load(config.routes),
|
|
38
|
+
config.functions ? functionGenerator.load(config.functions) : [],
|
|
39
|
+
config.crons ? cronGenerator.load(config.crons) : [],
|
|
40
|
+
config.subscribers ? subscriberGenerator.load(config.subscribers) : []
|
|
41
|
+
]);
|
|
42
|
+
logger.log(`Found ${allEndpoints.length} endpoints`);
|
|
43
|
+
logger.log(`Found ${allFunctions.length} functions`);
|
|
44
|
+
logger.log(`Found ${allCrons.length} crons`);
|
|
45
|
+
logger.log(`Found ${allSubscribers.length} subscribers`);
|
|
46
|
+
if (allEndpoints.length === 0 && allFunctions.length === 0 && allCrons.length === 0 && allSubscribers.length === 0) {
|
|
47
|
+
logger.log("No endpoints, functions, crons, or subscribers found to process");
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const rootOutputDir = join(process.cwd(), ".gkm");
|
|
51
|
+
await mkdir(rootOutputDir, { recursive: true });
|
|
52
|
+
const allBuildResults = await Promise.all(resolved.providers.map((provider) => buildForProvider(provider, buildContext, endpointGenerator, functionGenerator, cronGenerator, subscriberGenerator, allEndpoints, allFunctions, allCrons, allSubscribers, resolved.enableOpenApi)));
|
|
53
|
+
const aggregatedRoutes = allBuildResults.flatMap((result) => result.routes);
|
|
54
|
+
const aggregatedFunctions = allBuildResults.flatMap((result) => result.functions);
|
|
55
|
+
const aggregatedCrons = allBuildResults.flatMap((result) => result.crons);
|
|
56
|
+
const aggregatedSubscribers = allBuildResults.flatMap((result) => result.subscribers);
|
|
57
|
+
await generateManifests(rootOutputDir, aggregatedRoutes, aggregatedFunctions, aggregatedCrons, aggregatedSubscribers);
|
|
58
|
+
}
|
|
59
|
+
async function buildForProvider(provider, context, endpointGenerator, functionGenerator, cronGenerator, subscriberGenerator, endpoints, functions, crons, subscribers, enableOpenApi) {
|
|
60
|
+
const outputDir = join(process.cwd(), ".gkm", provider);
|
|
61
|
+
await mkdir(outputDir, { recursive: true });
|
|
62
|
+
logger.log(`\nGenerating handlers for provider: ${provider}`);
|
|
63
|
+
const [routes, functionInfos, cronInfos, subscriberInfos] = await Promise.all([
|
|
64
|
+
endpointGenerator.build(context, endpoints, outputDir, {
|
|
65
|
+
provider,
|
|
66
|
+
enableOpenApi
|
|
67
|
+
}),
|
|
68
|
+
functionGenerator.build(context, functions, outputDir, { provider }),
|
|
69
|
+
cronGenerator.build(context, crons, outputDir, { provider }),
|
|
70
|
+
subscriberGenerator.build(context, subscribers, outputDir, { provider })
|
|
71
|
+
]);
|
|
72
|
+
logger.log(`Generated ${routes.length} routes, ${functionInfos.length} functions, ${cronInfos.length} crons, ${subscriberInfos.length} subscribers for ${provider}`);
|
|
73
|
+
return {
|
|
74
|
+
routes,
|
|
75
|
+
functions: functionInfos,
|
|
76
|
+
crons: cronInfos,
|
|
77
|
+
subscribers: subscriberInfos
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
//#endregion
|
|
82
|
+
export { buildCommand };
|
|
83
|
+
//# sourceMappingURL=build-kY-lG30Q.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-kY-lG30Q.mjs","names":["options: BuildOptions","buildContext: BuildContext","provider: LegacyProvider","context: BuildContext","endpointGenerator: EndpointGenerator","functionGenerator: FunctionGenerator","cronGenerator: CronGenerator","subscriberGenerator: SubscriberGenerator","endpoints: GeneratedConstruct<Endpoint<any, any, any, any, any, any>>[]","functions: GeneratedConstruct<Function<any, any, any, any>>[]","crons: GeneratedConstruct<Cron<any, any, any, any>>[]","subscribers: GeneratedConstruct<Subscriber<any, any, any, any, any, any>>[]","enableOpenApi: boolean"],"sources":["../src/build/index.ts"],"sourcesContent":["import { mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { Cron } from '@geekmidas/constructs/crons';\nimport type { Endpoint } from '@geekmidas/constructs/endpoints';\nimport type { Function } from '@geekmidas/constructs/functions';\nimport type { Subscriber } from '@geekmidas/constructs/subscribers';\nimport { loadConfig } from '../config';\nimport {\n CronGenerator,\n EndpointGenerator,\n FunctionGenerator,\n type GeneratedConstruct,\n SubscriberGenerator,\n} from '../generators';\nimport type {\n BuildOptions,\n CronInfo,\n FunctionInfo,\n LegacyProvider,\n RouteInfo,\n SubscriberInfo,\n} from '../types';\nimport { generateManifests } from './manifests';\nimport { resolveProviders } from './providerResolver';\nimport type { BuildContext } from './types';\n\nconst logger = console;\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n const config = await loadConfig();\n\n // Resolve providers from new config format\n const resolved = resolveProviders(config, options);\n\n logger.log(`Building with providers: ${resolved.providers.join(', ')}`);\n logger.log(`Loading routes from: ${config.routes}`);\n if (config.functions) {\n logger.log(`Loading functions from: ${config.functions}`);\n }\n if (config.crons) {\n logger.log(`Loading crons from: ${config.crons}`);\n }\n if (config.subscribers) {\n logger.log(`Loading subscribers from: ${config.subscribers}`);\n }\n logger.log(`Using envParser: ${config.envParser}`);\n\n // Parse envParser configuration\n const [envParserPath, envParserName] = config.envParser.split('#');\n const envParserImportPattern = !envParserName\n ? 'envParser'\n : envParserName === 'envParser'\n ? '{ envParser }'\n : `{ ${envParserName} as envParser }`;\n\n // Parse logger configuration\n const [loggerPath, loggerName] = config.logger.split('#');\n const loggerImportPattern = !loggerName\n ? 'logger'\n : loggerName === 'logger'\n ? '{ logger }'\n : `{ ${loggerName} as logger }`;\n\n const buildContext: BuildContext = {\n envParserPath,\n envParserImportPattern,\n loggerPath,\n loggerImportPattern,\n };\n\n // Initialize generators\n const endpointGenerator = new EndpointGenerator();\n const functionGenerator = new FunctionGenerator();\n const cronGenerator = new CronGenerator();\n const subscriberGenerator = new SubscriberGenerator();\n\n // Load all constructs in parallel\n const [allEndpoints, allFunctions, allCrons, allSubscribers] =\n await Promise.all([\n endpointGenerator.load(config.routes),\n config.functions ? functionGenerator.load(config.functions) : [],\n config.crons ? cronGenerator.load(config.crons) : [],\n config.subscribers ? subscriberGenerator.load(config.subscribers) : [],\n ]);\n\n logger.log(`Found ${allEndpoints.length} endpoints`);\n logger.log(`Found ${allFunctions.length} functions`);\n logger.log(`Found ${allCrons.length} crons`);\n logger.log(`Found ${allSubscribers.length} subscribers`);\n\n if (\n allEndpoints.length === 0 &&\n allFunctions.length === 0 &&\n allCrons.length === 0 &&\n allSubscribers.length === 0\n ) {\n logger.log(\n 'No endpoints, functions, crons, or subscribers found to process',\n );\n return;\n }\n\n // Ensure .gkm directory exists\n const rootOutputDir = join(process.cwd(), '.gkm');\n await mkdir(rootOutputDir, { recursive: true });\n\n // Collect all build results from each provider\n const allBuildResults = await Promise.all(\n resolved.providers.map((provider) =>\n buildForProvider(\n provider,\n buildContext,\n endpointGenerator,\n functionGenerator,\n cronGenerator,\n subscriberGenerator,\n allEndpoints,\n allFunctions,\n allCrons,\n allSubscribers,\n resolved.enableOpenApi,\n ),\n ),\n );\n\n // Aggregate all routes, functions, crons, and subscribers from all providers\n const aggregatedRoutes = allBuildResults.flatMap((result) => result.routes);\n const aggregatedFunctions = allBuildResults.flatMap(\n (result) => result.functions,\n );\n const aggregatedCrons = allBuildResults.flatMap((result) => result.crons);\n const aggregatedSubscribers = allBuildResults.flatMap(\n (result) => result.subscribers,\n );\n\n // Generate single manifest at root .gkm directory\n await generateManifests(\n rootOutputDir,\n aggregatedRoutes,\n aggregatedFunctions,\n aggregatedCrons,\n aggregatedSubscribers,\n );\n}\n\ninterface BuildResult {\n routes: RouteInfo[];\n functions: FunctionInfo[];\n crons: CronInfo[];\n subscribers: SubscriberInfo[];\n}\n\nasync function buildForProvider(\n provider: LegacyProvider,\n context: BuildContext,\n endpointGenerator: EndpointGenerator,\n functionGenerator: FunctionGenerator,\n cronGenerator: CronGenerator,\n subscriberGenerator: SubscriberGenerator,\n endpoints: GeneratedConstruct<Endpoint<any, any, any, any, any, any>>[],\n functions: GeneratedConstruct<Function<any, any, any, any>>[],\n crons: GeneratedConstruct<Cron<any, any, any, any>>[],\n subscribers: GeneratedConstruct<Subscriber<any, any, any, any, any, any>>[],\n enableOpenApi: boolean,\n): Promise<BuildResult> {\n const outputDir = join(process.cwd(), '.gkm', provider);\n\n // Ensure output directory exists\n await mkdir(outputDir, { recursive: true });\n\n logger.log(`\\nGenerating handlers for provider: ${provider}`);\n\n // Build all constructs in parallel\n const [routes, functionInfos, cronInfos, subscriberInfos] = await Promise.all(\n [\n endpointGenerator.build(context, endpoints, outputDir, {\n provider,\n enableOpenApi,\n }),\n functionGenerator.build(context, functions, outputDir, { provider }),\n cronGenerator.build(context, crons, outputDir, { provider }),\n subscriberGenerator.build(context, subscribers, outputDir, { provider }),\n ],\n );\n\n logger.log(\n `Generated ${routes.length} routes, ${functionInfos.length} functions, ${cronInfos.length} crons, ${subscriberInfos.length} subscribers for ${provider}`,\n );\n\n // Return build results instead of generating manifest here\n return {\n routes,\n functions: functionInfos,\n crons: cronInfos,\n subscribers: subscriberInfos,\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const require_chunk = require('./chunk-CUT6urMc.cjs');
|
|
2
|
+
const fs = require_chunk.__toESM(require("fs"));
|
|
3
|
+
const path = require_chunk.__toESM(require("path"));
|
|
4
|
+
|
|
5
|
+
//#region src/config.ts
|
|
6
|
+
async function loadConfig() {
|
|
7
|
+
const files = [
|
|
8
|
+
"gkm.config.json",
|
|
9
|
+
"gkm.config.ts",
|
|
10
|
+
"gkm.config.js"
|
|
11
|
+
];
|
|
12
|
+
let configPath = "";
|
|
13
|
+
for (const file of files) {
|
|
14
|
+
const path$1 = (0, path.join)(process.cwd(), file);
|
|
15
|
+
if ((0, fs.existsSync)(path$1)) {
|
|
16
|
+
configPath = path$1;
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if (!configPath) throw new Error("Configuration file not found. Please create gkm.config.json, gkm.config.ts, or gkm.config.js in the project root.");
|
|
21
|
+
try {
|
|
22
|
+
const config = await import(configPath);
|
|
23
|
+
return config.default;
|
|
24
|
+
} catch (error) {
|
|
25
|
+
throw new Error(`Failed to load gkm.config.json: ${error.message}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
//#endregion
|
|
30
|
+
Object.defineProperty(exports, 'loadConfig', {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function () {
|
|
33
|
+
return loadConfig;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=config-D1EpSGk6.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-D1EpSGk6.cjs","names":["path"],"sources":["../src/config.ts"],"sourcesContent":["import { existsSync } from 'fs';\nimport { join } from 'path';\nimport type { GkmConfig } from './types.ts';\n\nexport async function loadConfig(): Promise<GkmConfig> {\n const files = ['gkm.config.json', 'gkm.config.ts', 'gkm.config.js'];\n let configPath = '';\n\n for (const file of files) {\n const path = join(process.cwd(), file);\n if (existsSync(path)) {\n configPath = path;\n break;\n }\n }\n\n if (!configPath) {\n throw new Error(\n 'Configuration file not found. Please create gkm.config.json, gkm.config.ts, or gkm.config.js in the project root.',\n );\n }\n\n try {\n const config = await import(configPath);\n return config.default;\n } catch (error) {\n throw new Error(\n `Failed to load gkm.config.json: ${(error as Error).message}`,\n );\n }\n}\n"],"mappings":";;;;;AAIA,eAAsB,aAAiC;CACrD,MAAM,QAAQ;EAAC;EAAmB;EAAiB;CAAgB;CACnE,IAAI,aAAa;AAEjB,MAAK,MAAM,QAAQ,OAAO;EACxB,MAAMA,SAAO,eAAK,QAAQ,KAAK,EAAE,KAAK;AACtC,MAAI,mBAAWA,OAAK,EAAE;AACpB,gBAAaA;AACb;EACD;CACF;AAED,MAAK,WACH,OAAM,IAAI,MACR;AAIJ,KAAI;EACF,MAAM,SAAS,MAAM,OAAO;AAC5B,SAAO,OAAO;CACf,SAAQ,OAAO;AACd,QAAM,IAAI,OACP,kCAAmC,MAAgB,QAAQ;CAE/D;AACF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { existsSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
|
|
4
|
+
//#region src/config.ts
|
|
5
|
+
async function loadConfig() {
|
|
6
|
+
const files = [
|
|
7
|
+
"gkm.config.json",
|
|
8
|
+
"gkm.config.ts",
|
|
9
|
+
"gkm.config.js"
|
|
10
|
+
];
|
|
11
|
+
let configPath = "";
|
|
12
|
+
for (const file of files) {
|
|
13
|
+
const path = join(process.cwd(), file);
|
|
14
|
+
if (existsSync(path)) {
|
|
15
|
+
configPath = path;
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
if (!configPath) throw new Error("Configuration file not found. Please create gkm.config.json, gkm.config.ts, or gkm.config.js in the project root.");
|
|
20
|
+
try {
|
|
21
|
+
const config = await import(configPath);
|
|
22
|
+
return config.default;
|
|
23
|
+
} catch (error) {
|
|
24
|
+
throw new Error(`Failed to load gkm.config.json: ${error.message}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
//#endregion
|
|
29
|
+
export { loadConfig };
|
|
30
|
+
//# sourceMappingURL=config-U-mdW-7Y.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-U-mdW-7Y.mjs","names":[],"sources":["../src/config.ts"],"sourcesContent":["import { existsSync } from 'fs';\nimport { join } from 'path';\nimport type { GkmConfig } from './types.ts';\n\nexport async function loadConfig(): Promise<GkmConfig> {\n const files = ['gkm.config.json', 'gkm.config.ts', 'gkm.config.js'];\n let configPath = '';\n\n for (const file of files) {\n const path = join(process.cwd(), file);\n if (existsSync(path)) {\n configPath = path;\n break;\n }\n }\n\n if (!configPath) {\n throw new Error(\n 'Configuration file not found. Please create gkm.config.json, gkm.config.ts, or gkm.config.js in the project root.',\n );\n }\n\n try {\n const config = await import(configPath);\n return config.default;\n } catch (error) {\n throw new Error(\n `Failed to load gkm.config.json: ${(error as Error).message}`,\n );\n }\n}\n"],"mappings":";;;;AAIA,eAAsB,aAAiC;CACrD,MAAM,QAAQ;EAAC;EAAmB;EAAiB;CAAgB;CACnE,IAAI,aAAa;AAEjB,MAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,OAAO,KAAK,QAAQ,KAAK,EAAE,KAAK;AACtC,MAAI,WAAW,KAAK,EAAE;AACpB,gBAAa;AACb;EACD;CACF;AAED,MAAK,WACH,OAAM,IAAI,MACR;AAIJ,KAAI;EACF,MAAM,SAAS,MAAM,OAAO;AAC5B,SAAO,OAAO;CACf,SAAQ,OAAO;AACd,QAAM,IAAI,OACP,kCAAmC,MAAgB,QAAQ;CAE/D;AACF"}
|
package/dist/config.cjs
CHANGED
package/dist/config.mjs
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const require_Generator = require('../Generator-CDoEXCDg.cjs');
|
|
2
|
+
const require_CronGenerator = require('../CronGenerator-1PflEYe2.cjs');
|
|
3
|
+
const require_EndpointGenerator = require('../EndpointGenerator-BbGrDiCP.cjs');
|
|
4
|
+
const require_FunctionGenerator = require('../FunctionGenerator-Clw64SwQ.cjs');
|
|
5
|
+
const require_SubscriberGenerator = require('../SubscriberGenerator-BfMZCVNy.cjs');
|
|
6
|
+
require('../generators-CEKtVh81.cjs');
|
|
7
|
+
|
|
8
|
+
exports.ConstructGenerator = require_Generator.ConstructGenerator;
|
|
9
|
+
exports.CronGenerator = require_CronGenerator.CronGenerator;
|
|
10
|
+
exports.EndpointGenerator = require_EndpointGenerator.EndpointGenerator;
|
|
11
|
+
exports.FunctionGenerator = require_FunctionGenerator.FunctionGenerator;
|
|
12
|
+
exports.SubscriberGenerator = require_SubscriberGenerator.SubscriberGenerator;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ConstructGenerator } from "../Generator-UanJW0_V.mjs";
|
|
2
|
+
import { CronGenerator } from "../CronGenerator-DXRfHQcV.mjs";
|
|
3
|
+
import { EndpointGenerator } from "../EndpointGenerator-BmZ9BxbO.mjs";
|
|
4
|
+
import { FunctionGenerator } from "../FunctionGenerator-DOEB_yPh.mjs";
|
|
5
|
+
import { SubscriberGenerator } from "../SubscriberGenerator-D2u00NI3.mjs";
|
|
6
|
+
import "../generators-CsLujGXs.mjs";
|
|
7
|
+
|
|
8
|
+
export { ConstructGenerator, CronGenerator, EndpointGenerator, FunctionGenerator, SubscriberGenerator };
|
|
File without changes
|
|
File without changes
|
package/dist/index.cjs
CHANGED
|
@@ -1,42 +1,75 @@
|
|
|
1
1
|
#!/usr/bin/env -S npx tsx
|
|
2
2
|
const require_chunk = require('./chunk-CUT6urMc.cjs');
|
|
3
|
-
require('./config-
|
|
4
|
-
require('./
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
require('./config-D1EpSGk6.cjs');
|
|
4
|
+
require('./Generator-CDoEXCDg.cjs');
|
|
5
|
+
require('./CronGenerator-1PflEYe2.cjs');
|
|
6
|
+
require('./EndpointGenerator-BbGrDiCP.cjs');
|
|
7
|
+
require('./FunctionGenerator-Clw64SwQ.cjs');
|
|
8
|
+
require('./SubscriberGenerator-BfMZCVNy.cjs');
|
|
9
|
+
require('./generators-CEKtVh81.cjs');
|
|
10
|
+
require('./manifests-D0saShvH.cjs');
|
|
11
|
+
require('./providerResolver-DgvzNfP4.cjs');
|
|
12
|
+
const require_build = require('./build-BBhlEjf5.cjs');
|
|
13
|
+
const require_openapi_react_query = require('./openapi-react-query-Dvjqx_Eo.cjs');
|
|
14
|
+
const require_openapi = require('./openapi-CMLr04cz.cjs');
|
|
8
15
|
const commander = require_chunk.__toESM(require("commander"));
|
|
9
16
|
|
|
10
17
|
//#region package.json
|
|
11
18
|
var name = "@geekmidas/cli";
|
|
12
|
-
var version = "0.0
|
|
19
|
+
var version = "0.2.0";
|
|
13
20
|
var private$1 = false;
|
|
14
21
|
var type = "module";
|
|
22
|
+
var exports$1 = {
|
|
23
|
+
".": {
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"import": "./dist/index.mjs",
|
|
26
|
+
"require": "./dist/index.cjs"
|
|
27
|
+
},
|
|
28
|
+
"./openapi": {
|
|
29
|
+
"types": "./dist/openapi.d.ts",
|
|
30
|
+
"import": "./dist/openapi.mjs",
|
|
31
|
+
"require": "./dist/openapi.cjs"
|
|
32
|
+
},
|
|
33
|
+
"./openapi-react-query": {
|
|
34
|
+
"types": "./dist/openapi-react-query.d.ts",
|
|
35
|
+
"import": "./dist/openapi-react-query.mjs",
|
|
36
|
+
"require": "./dist/openapi-react-query.cjs"
|
|
37
|
+
}
|
|
38
|
+
};
|
|
15
39
|
var bin = { "gkm": "./dist/index.cjs" };
|
|
16
|
-
var
|
|
17
|
-
"
|
|
18
|
-
"
|
|
40
|
+
var scripts = {
|
|
41
|
+
"ts": "tsc --noEmit --skipLibCheck src/**/*.ts",
|
|
42
|
+
"test": "vitest",
|
|
43
|
+
"test:once": "vitest run",
|
|
44
|
+
"test:coverage": "vitest run --coverage"
|
|
19
45
|
};
|
|
20
46
|
var dependencies = {
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
47
|
+
"@apidevtools/swagger-parser": "^10.1.0",
|
|
48
|
+
"@geekmidas/constructs": "workspace:*",
|
|
49
|
+
"@geekmidas/schema": "workspace:*",
|
|
50
|
+
"@geekmidas/envkit": "workspace:*",
|
|
51
|
+
"commander": "^12.1.0",
|
|
52
|
+
"fast-glob": "^3.3.2",
|
|
53
|
+
"lodash.kebabcase": "^4.1.1",
|
|
54
|
+
"openapi-typescript": "^7.4.2"
|
|
25
55
|
};
|
|
26
|
-
var peerDependencies = { "@geekmidas/api": "workspace:*" };
|
|
27
56
|
var devDependencies = {
|
|
28
|
-
"@types/lodash.
|
|
29
|
-
"@
|
|
57
|
+
"@types/lodash.kebabcase": "^4.1.9",
|
|
58
|
+
"@geekmidas/testkit": "workspace:*",
|
|
59
|
+
"typescript": "^5.8.2",
|
|
60
|
+
"vitest": "^3.2.4",
|
|
61
|
+
"@geekmidas/logger": "workspace:*",
|
|
62
|
+
"zod": "^3.23.8"
|
|
30
63
|
};
|
|
31
64
|
var package_default = {
|
|
32
65
|
name,
|
|
33
66
|
version,
|
|
34
67
|
private: private$1,
|
|
35
68
|
type,
|
|
69
|
+
exports: exports$1,
|
|
36
70
|
bin,
|
|
37
|
-
|
|
71
|
+
scripts,
|
|
38
72
|
dependencies,
|
|
39
|
-
peerDependencies,
|
|
40
73
|
devDependencies
|
|
41
74
|
};
|
|
42
75
|
|
|
@@ -44,15 +77,27 @@ var package_default = {
|
|
|
44
77
|
//#region src/index.ts
|
|
45
78
|
const program = new commander.Command();
|
|
46
79
|
program.name("gkm").description("GeekMidas backend framework CLI").version(package_default.version).option("--cwd <path>", "Change working directory");
|
|
47
|
-
program.command("build").description("Build
|
|
80
|
+
program.command("build").description("Build handlers from endpoints, functions, and crons").option("--provider <provider>", "Target provider for generated handlers (aws, server)").option("--providers <providers>", "[DEPRECATED] Use --provider instead. Target providers for generated handlers (comma-separated)").option("--enable-openapi", "Enable OpenAPI documentation generation for server builds").action(async (options) => {
|
|
48
81
|
try {
|
|
49
82
|
const globalOptions = program.opts();
|
|
50
83
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
84
|
+
if (options.provider) {
|
|
85
|
+
if (!["aws", "server"].includes(options.provider)) {
|
|
86
|
+
console.error(`Invalid provider: ${options.provider}. Must be 'aws' or 'server'.`);
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
await require_build.buildCommand({
|
|
90
|
+
provider: options.provider,
|
|
91
|
+
enableOpenApi: options.enableOpenapi || false
|
|
92
|
+
});
|
|
93
|
+
} else if (options.providers) {
|
|
94
|
+
console.warn("⚠️ --providers flag is deprecated. Use --provider instead.");
|
|
95
|
+
const providerList = [...new Set(options.providers.split(",").map((p) => p.trim()))];
|
|
96
|
+
await require_build.buildCommand({
|
|
97
|
+
providers: providerList,
|
|
98
|
+
enableOpenApi: options.enableOpenapi || false
|
|
99
|
+
});
|
|
100
|
+
} else await require_build.buildCommand({ enableOpenApi: options.enableOpenapi || false });
|
|
56
101
|
} catch (error) {
|
|
57
102
|
console.error("Build failed:", error.message);
|
|
58
103
|
process.exit(1);
|
|
@@ -95,4 +140,5 @@ program.command("generate:react-query").description("Generate React Query hooks
|
|
|
95
140
|
});
|
|
96
141
|
program.parse();
|
|
97
142
|
|
|
98
|
-
//#endregion
|
|
143
|
+
//#endregion
|
|
144
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["Command","pkg","options: {\n provider?: string;\n providers?: string;\n enableOpenapi?: boolean;\n }","options: { output?: string }","options: { input?: string; output?: string; name?: string }"],"sources":["../package.json","../src/index.ts"],"sourcesContent":["{\n \"name\": \"@geekmidas/cli\",\n \"version\": \"0.2.0\",\n \"private\": false,\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./openapi\": {\n \"types\": \"./dist/openapi.d.ts\",\n \"import\": \"./dist/openapi.mjs\",\n \"require\": \"./dist/openapi.cjs\"\n },\n \"./openapi-react-query\": {\n \"types\": \"./dist/openapi-react-query.d.ts\",\n \"import\": \"./dist/openapi-react-query.mjs\",\n \"require\": \"./dist/openapi-react-query.cjs\"\n }\n },\n \"bin\": {\n \"gkm\": \"./dist/index.cjs\"\n },\n \"scripts\": {\n \"ts\": \"tsc --noEmit --skipLibCheck src/**/*.ts\",\n \"test\": \"vitest\",\n \"test:once\": \"vitest run\",\n \"test:coverage\": \"vitest run --coverage\"\n },\n \"dependencies\": {\n \"@apidevtools/swagger-parser\": \"^10.1.0\",\n \"@geekmidas/constructs\": \"workspace:*\",\n \"@geekmidas/schema\": \"workspace:*\",\n \"@geekmidas/envkit\": \"workspace:*\",\n \"commander\": \"^12.1.0\",\n \"fast-glob\": \"^3.3.2\",\n \"lodash.kebabcase\": \"^4.1.1\",\n \"openapi-typescript\": \"^7.4.2\"\n },\n \"devDependencies\": {\n \"@types/lodash.kebabcase\": \"^4.1.9\",\n \"@geekmidas/testkit\": \"workspace:*\",\n \"typescript\": \"^5.8.2\",\n \"vitest\": \"^3.2.4\",\n \"@geekmidas/logger\": \"workspace:*\",\n \"zod\": \"^3.23.8\"\n }\n}\n","#!/usr/bin/env -S npx tsx\n\nimport { Command } from 'commander';\nimport pkg from '../package.json' assert { type: 'json' };\nimport { buildCommand } from './build/index.ts';\nimport { generateReactQueryCommand } from './openapi-react-query.ts';\nimport { openapiCommand } from './openapi.ts';\nimport type { LegacyProvider, MainProvider } from './types.ts';\n\nconst program = new Command();\n\nprogram\n .name('gkm')\n .description('GeekMidas backend framework CLI')\n .version(pkg.version)\n .option('--cwd <path>', 'Change working directory');\n\nprogram\n .command('build')\n .description('Build handlers from endpoints, functions, and crons')\n .option(\n '--provider <provider>',\n 'Target provider for generated handlers (aws, server)',\n )\n .option(\n '--providers <providers>',\n '[DEPRECATED] Use --provider instead. Target providers for generated handlers (comma-separated)',\n )\n .option(\n '--enable-openapi',\n 'Enable OpenAPI documentation generation for server builds',\n )\n .action(\n async (options: {\n provider?: string;\n providers?: string;\n enableOpenapi?: boolean;\n }) => {\n try {\n const globalOptions = program.opts();\n if (globalOptions.cwd) {\n process.chdir(globalOptions.cwd);\n }\n\n // Handle new single provider option\n if (options.provider) {\n if (!['aws', 'server'].includes(options.provider)) {\n console.error(\n `Invalid provider: ${options.provider}. Must be 'aws' or 'server'.`,\n );\n process.exit(1);\n }\n await buildCommand({\n provider: options.provider as MainProvider,\n enableOpenApi: options.enableOpenapi || false,\n });\n }\n // Handle legacy providers option\n else if (options.providers) {\n console.warn(\n '⚠️ --providers flag is deprecated. Use --provider instead.',\n );\n const providerList = [\n ...new Set(options.providers.split(',').map((p) => p.trim())),\n ] as LegacyProvider[];\n await buildCommand({\n providers: providerList,\n enableOpenApi: options.enableOpenapi || false,\n });\n }\n // Default to config-driven build\n else {\n await buildCommand({\n enableOpenApi: options.enableOpenapi || false,\n });\n }\n } catch (error) {\n console.error('Build failed:', (error as Error).message);\n process.exit(1);\n }\n },\n );\n\nprogram\n .command('cron')\n .description('Manage cron jobs')\n .action(() => {\n const globalOptions = program.opts();\n if (globalOptions.cwd) {\n process.chdir(globalOptions.cwd);\n }\n process.stdout.write('Cron management - coming soon\\n');\n });\n\nprogram\n .command('function')\n .description('Manage serverless functions')\n .action(() => {\n const globalOptions = program.opts();\n if (globalOptions.cwd) {\n process.chdir(globalOptions.cwd);\n }\n process.stdout.write('Serverless function management - coming soon\\n');\n });\n\nprogram\n .command('api')\n .description('Manage REST API endpoints')\n .action(() => {\n const globalOptions = program.opts();\n if (globalOptions.cwd) {\n process.chdir(globalOptions.cwd);\n }\n process.stdout.write('REST API management - coming soon\\n');\n });\n\nprogram\n .command('openapi')\n .description('Generate OpenAPI 3.0 specification from endpoints')\n .option(\n '--output <path>',\n 'Output file path for the OpenAPI spec',\n 'openapi.json',\n )\n .action(async (options: { output?: string }) => {\n try {\n const globalOptions = program.opts();\n if (globalOptions.cwd) {\n process.chdir(globalOptions.cwd);\n }\n await openapiCommand(options);\n } catch (error) {\n console.error('OpenAPI generation failed:', (error as Error).message);\n process.exit(1);\n }\n });\n\nprogram\n .command('generate:react-query')\n .description('Generate React Query hooks from OpenAPI specification')\n .option('--input <path>', 'Input OpenAPI spec file path', 'openapi.json')\n .option(\n '--output <path>',\n 'Output file path for generated hooks',\n 'src/api/hooks.ts',\n )\n .option('--name <name>', 'API name prefix for generated code', 'API')\n .action(\n async (options: { input?: string; output?: string; name?: string }) => {\n try {\n const globalOptions = program.opts();\n if (globalOptions.cwd) {\n process.chdir(globalOptions.cwd);\n }\n await generateReactQueryCommand(options);\n } catch (error) {\n console.error(\n 'React Query generation failed:',\n (error as Error).message,\n );\n process.exit(1);\n }\n },\n );\n\nprogram.parse();\n"],"mappings":"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"}
|