@geekmidas/cli 0.0.26 → 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 (142) hide show
  1. package/FUNCTION_CRON_SUPPORT.md +266 -0
  2. package/README.md +21 -4
  3. package/dist/CronGenerator-ClbRcmz_.mjs +53 -0
  4. package/dist/CronGenerator-ClbRcmz_.mjs.map +1 -0
  5. package/dist/CronGenerator-Ctl4USy4.cjs +59 -0
  6. package/dist/CronGenerator-Ctl4USy4.cjs.map +1 -0
  7. package/dist/EndpointGenerator-Dj7AumHi.cjs +164 -0
  8. package/dist/EndpointGenerator-Dj7AumHi.cjs.map +1 -0
  9. package/dist/EndpointGenerator-uBA1ixUw.mjs +158 -0
  10. package/dist/EndpointGenerator-uBA1ixUw.mjs.map +1 -0
  11. package/dist/FunctionGenerator-DN681IUn.cjs +58 -0
  12. package/dist/FunctionGenerator-DN681IUn.cjs.map +1 -0
  13. package/dist/FunctionGenerator-crAa-JC7.mjs +52 -0
  14. package/dist/FunctionGenerator-crAa-JC7.mjs.map +1 -0
  15. package/dist/Generator-C3tYSTQY.cjs +47 -0
  16. package/dist/Generator-C3tYSTQY.cjs.map +1 -0
  17. package/dist/Generator-CDt4pB3W.mjs +41 -0
  18. package/dist/Generator-CDt4pB3W.mjs.map +1 -0
  19. package/dist/__tests__/config.spec.cjs +98 -0
  20. package/dist/__tests__/config.spec.cjs.map +1 -0
  21. package/dist/__tests__/config.spec.mjs +97 -0
  22. package/dist/__tests__/config.spec.mjs.map +1 -0
  23. package/dist/__tests__/test-helpers.cjs +14 -0
  24. package/dist/__tests__/test-helpers.mjs +4 -0
  25. package/dist/build/__tests__/index-new.spec.cjs +286 -0
  26. package/dist/build/__tests__/index-new.spec.cjs.map +1 -0
  27. package/dist/build/__tests__/index-new.spec.mjs +285 -0
  28. package/dist/build/__tests__/index-new.spec.mjs.map +1 -0
  29. package/dist/build/index.cjs +11 -0
  30. package/dist/build/index.mjs +11 -0
  31. package/dist/build/manifests.cjs +3 -0
  32. package/dist/build/manifests.mjs +3 -0
  33. package/dist/build/providerResolver.cjs +5 -0
  34. package/dist/build/providerResolver.mjs +3 -0
  35. package/dist/build/types.cjs +0 -0
  36. package/dist/build/types.mjs +0 -0
  37. package/dist/build-BZdwxCLW.mjs +64 -0
  38. package/dist/build-BZdwxCLW.mjs.map +1 -0
  39. package/dist/build-BfQFnU5-.cjs +70 -0
  40. package/dist/build-BfQFnU5-.cjs.map +1 -0
  41. package/dist/{chunk-CUT6urMc.cjs → chunk-CsX-DzYB.cjs} +12 -0
  42. package/dist/config-CXxYmz_o.mjs +30 -0
  43. package/dist/config-CXxYmz_o.mjs.map +1 -0
  44. package/dist/config-RcNESK0T.cjs +36 -0
  45. package/dist/config-RcNESK0T.cjs.map +1 -0
  46. package/dist/config.cjs +1 -1
  47. package/dist/config.mjs +1 -1
  48. package/dist/esm-9eeZntth.mjs +3777 -0
  49. package/dist/esm-9eeZntth.mjs.map +1 -0
  50. package/dist/esm-Crmo4h9t.cjs +4392 -0
  51. package/dist/esm-Crmo4h9t.cjs.map +1 -0
  52. package/dist/esm-CsJbr7gi.mjs +3 -0
  53. package/dist/esm-w09tAC4l.cjs +8 -0
  54. package/dist/generators/CronGenerator.cjs +4 -0
  55. package/dist/generators/CronGenerator.mjs +4 -0
  56. package/dist/generators/EndpointGenerator.cjs +4 -0
  57. package/dist/generators/EndpointGenerator.mjs +4 -0
  58. package/dist/generators/FunctionGenerator.cjs +4 -0
  59. package/dist/generators/FunctionGenerator.mjs +4 -0
  60. package/dist/generators/Generator.cjs +3 -0
  61. package/dist/generators/Generator.mjs +3 -0
  62. package/dist/generators/__tests__/CronGenerator.spec.cjs +216 -0
  63. package/dist/generators/__tests__/CronGenerator.spec.cjs.map +1 -0
  64. package/dist/generators/__tests__/CronGenerator.spec.mjs +215 -0
  65. package/dist/generators/__tests__/CronGenerator.spec.mjs.map +1 -0
  66. package/dist/generators/__tests__/EndpointGenerator.spec.cjs +182 -0
  67. package/dist/generators/__tests__/EndpointGenerator.spec.cjs.map +1 -0
  68. package/dist/generators/__tests__/EndpointGenerator.spec.mjs +181 -0
  69. package/dist/generators/__tests__/EndpointGenerator.spec.mjs.map +1 -0
  70. package/dist/generators/__tests__/FunctionGenerator.spec.cjs +152 -0
  71. package/dist/generators/__tests__/FunctionGenerator.spec.cjs.map +1 -0
  72. package/dist/generators/__tests__/FunctionGenerator.spec.mjs +151 -0
  73. package/dist/generators/__tests__/FunctionGenerator.spec.mjs.map +1 -0
  74. package/dist/generators/index.cjs +10 -0
  75. package/dist/generators/index.mjs +7 -0
  76. package/dist/generators-CsLujGXs.mjs +0 -0
  77. package/dist/generators-_pY7sHy1.cjs +0 -0
  78. package/dist/index.cjs +68 -26
  79. package/dist/index.cjs.map +1 -0
  80. package/dist/index.mjs +67 -25
  81. package/dist/index.mjs.map +1 -0
  82. package/dist/manifests-BTtfDMX8.cjs +26 -0
  83. package/dist/manifests-BTtfDMX8.cjs.map +1 -0
  84. package/dist/manifests-HX4z4kkz.mjs +20 -0
  85. package/dist/manifests-HX4z4kkz.mjs.map +1 -0
  86. package/dist/{openapi-CksVdkh2.mjs → openapi-BivnatiC.mjs} +8 -6
  87. package/dist/openapi-BivnatiC.mjs.map +1 -0
  88. package/dist/{openapi-D4QQJUPY.cjs → openapi-DW-qF3oW.cjs} +9 -7
  89. package/dist/openapi-DW-qF3oW.cjs.map +1 -0
  90. package/dist/{openapi-react-query-C1JLYUOs.cjs → openapi-react-query-J0BzBHhN.cjs} +4 -3
  91. package/dist/openapi-react-query-J0BzBHhN.cjs.map +1 -0
  92. package/dist/{openapi-react-query-DpT3XHFC.mjs → openapi-react-query-lgS7AVEz.mjs} +3 -2
  93. package/dist/openapi-react-query-lgS7AVEz.mjs.map +1 -0
  94. package/dist/openapi-react-query.cjs +1 -1
  95. package/dist/openapi-react-query.mjs +1 -1
  96. package/dist/openapi.cjs +4 -3
  97. package/dist/openapi.mjs +4 -3
  98. package/dist/providerResolver-B_TjNF0_.mjs +96 -0
  99. package/dist/providerResolver-B_TjNF0_.mjs.map +1 -0
  100. package/dist/providerResolver-Cs-0YCaP.cjs +114 -0
  101. package/dist/providerResolver-Cs-0YCaP.cjs.map +1 -0
  102. package/dist/test-helpers-ARd8GDgx.cjs +199 -0
  103. package/dist/test-helpers-ARd8GDgx.cjs.map +1 -0
  104. package/dist/test-helpers-DdVBk23F.mjs +133 -0
  105. package/dist/test-helpers-DdVBk23F.mjs.map +1 -0
  106. package/examples/cron-example.ts +45 -0
  107. package/examples/function-example.ts +40 -0
  108. package/examples/gkm.config.json +22 -0
  109. package/examples/gkm.minimal.config.json +7 -0
  110. package/examples/gkm.production.config.json +27 -0
  111. package/package.json +35 -14
  112. package/src/__tests__/config.spec.ts +110 -0
  113. package/src/__tests__/test-helpers.ts +178 -0
  114. package/src/build/__tests__/index-new.spec.ts +578 -0
  115. package/src/build/index.ts +136 -0
  116. package/src/build/manifests.ts +32 -0
  117. package/src/build/providerResolver.ts +184 -0
  118. package/src/build/types.ts +37 -0
  119. package/src/config.ts +14 -6
  120. package/src/generators/CronGenerator.ts +97 -0
  121. package/src/generators/EndpointGenerator.ts +290 -0
  122. package/src/generators/FunctionGenerator.ts +96 -0
  123. package/src/generators/Generator.ts +95 -0
  124. package/src/generators/__tests__/CronGenerator.spec.ts +445 -0
  125. package/src/generators/__tests__/EndpointGenerator.spec.ts +372 -0
  126. package/src/generators/__tests__/FunctionGenerator.spec.ts +257 -0
  127. package/src/generators/index.ts +8 -0
  128. package/src/index.ts +57 -22
  129. package/src/openapi.ts +4 -3
  130. package/src/types.ts +73 -2
  131. package/dist/build-BTggTCYL.cjs +0 -176
  132. package/dist/build-Ca4P6_lY.mjs +0 -170
  133. package/dist/build.cjs +0 -5
  134. package/dist/build.mjs +0 -5
  135. package/dist/config-BNqUMsvc.cjs +0 -24
  136. package/dist/config-BciAdY6_.mjs +0 -18
  137. package/dist/loadEndpoints-BBIavB9h.cjs +0 -37
  138. package/dist/loadEndpoints-DAZ53Og2.mjs +0 -31
  139. package/dist/loadEndpoints.cjs +0 -3
  140. package/dist/loadEndpoints.mjs +0 -3
  141. package/src/build.ts +0 -305
  142. package/src/loadEndpoints.ts +0 -48
@@ -1,20 +1,21 @@
1
- import { loadConfig } from "./config-BciAdY6_.mjs";
2
- import { loadEndpoints } from "./loadEndpoints-DAZ53Og2.mjs";
1
+ import { loadConfig } from "./config-CXxYmz_o.mjs";
2
+ import { EndpointGenerator } from "./EndpointGenerator-uBA1ixUw.mjs";
3
3
  import { mkdir, writeFile } from "node:fs/promises";
4
- import { Endpoint } from "@geekmidas/api/server";
5
4
  import { join } from "node:path";
5
+ import { Endpoint } from "@geekmidas/api/server";
6
6
 
7
7
  //#region src/openapi.ts
8
8
  async function openapiCommand(options = {}) {
9
9
  const logger = console;
10
10
  try {
11
11
  const config = await loadConfig();
12
- const loadedEndpoints = await loadEndpoints(config.routes);
12
+ const generator = new EndpointGenerator();
13
+ const loadedEndpoints = await generator.load(config.routes);
13
14
  if (loadedEndpoints.length === 0) {
14
15
  logger.log("No valid endpoints found");
15
16
  return;
16
17
  }
17
- const endpoints = loadedEndpoints.map(({ endpoint }) => endpoint);
18
+ const endpoints = loadedEndpoints.map(({ construct }) => construct);
18
19
  const spec = await Endpoint.buildOpenApiSchema(endpoints, {
19
20
  title: "API Documentation",
20
21
  version: "1.0.0",
@@ -31,4 +32,5 @@ async function openapiCommand(options = {}) {
31
32
  }
32
33
 
33
34
  //#endregion
34
- export { openapiCommand };
35
+ export { openapiCommand };
36
+ //# sourceMappingURL=openapi-BivnatiC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-BivnatiC.mjs","names":["options: OpenAPIOptions"],"sources":["../src/openapi.ts"],"sourcesContent":["#!/usr/bin/env -S npx tsx\n\nimport { mkdir, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { Endpoint } from '@geekmidas/api/server';\nimport { loadConfig } from './config.js';\nimport { EndpointGenerator } from './generators/EndpointGenerator.js';\n\ninterface OpenAPIOptions {\n output?: string;\n}\n\nexport async function openapiCommand(\n options: OpenAPIOptions = {},\n): Promise<void> {\n const logger = console;\n\n try {\n // Load config using existing function\n const config = await loadConfig();\n const generator = new EndpointGenerator();\n\n // Load all endpoints using the refactored function\n const loadedEndpoints = await generator.load(config.routes);\n\n if (loadedEndpoints.length === 0) {\n logger.log('No valid endpoints found');\n return;\n }\n\n // Extract just the endpoint instances for OpenAPI generation\n const endpoints = loadedEndpoints.map(({ construct }) => construct);\n\n // Generate OpenAPI spec using built-in method\n const spec = await Endpoint.buildOpenApiSchema(endpoints, {\n title: 'API Documentation',\n version: '1.0.0',\n description: 'Auto-generated API documentation from endpoints',\n });\n\n // Write output\n const outputPath = options.output || join(process.cwd(), 'openapi.json');\n await mkdir(join(outputPath, '..'), { recursive: true });\n await writeFile(outputPath, JSON.stringify(spec, null, 2));\n\n logger.log(`OpenAPI spec generated: ${outputPath}`);\n logger.log(`Found ${endpoints.length} endpoints`);\n } catch (error) {\n throw new Error(`OpenAPI generation failed: ${(error as Error).message}`);\n }\n}\n"],"mappings":";;;;;;;AAYA,eAAsB,eACpBA,UAA0B,CAAE,GACb;CACf,MAAM,SAAS;AAEf,KAAI;EAEF,MAAM,SAAS,MAAM,YAAY;EACjC,MAAM,YAAY,IAAI;EAGtB,MAAM,kBAAkB,MAAM,UAAU,KAAK,OAAO,OAAO;AAE3D,MAAI,gBAAgB,WAAW,GAAG;AAChC,UAAO,IAAI,2BAA2B;AACtC;EACD;EAGD,MAAM,YAAY,gBAAgB,IAAI,CAAC,EAAE,WAAW,KAAK,UAAU;EAGnE,MAAM,OAAO,MAAM,SAAS,mBAAmB,WAAW;GACxD,OAAO;GACP,SAAS;GACT,aAAa;EACd,EAAC;EAGF,MAAM,aAAa,QAAQ,UAAU,KAAK,QAAQ,KAAK,EAAE,eAAe;AACxE,QAAM,MAAM,KAAK,YAAY,KAAK,EAAE,EAAE,WAAW,KAAM,EAAC;AACxD,QAAM,UAAU,YAAY,KAAK,UAAU,MAAM,MAAM,EAAE,CAAC;AAE1D,SAAO,KAAK,0BAA0B,WAAW,EAAE;AACnD,SAAO,KAAK,QAAQ,UAAU,OAAO,YAAY;CAClD,SAAQ,OAAO;AACd,QAAM,IAAI,OAAO,6BAA8B,MAAgB,QAAQ;CACxE;AACF"}
@@ -1,21 +1,22 @@
1
- const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const require_config = require('./config-BNqUMsvc.cjs');
3
- const require_loadEndpoints = require('./loadEndpoints-BBIavB9h.cjs');
1
+ const require_chunk = require('./chunk-CsX-DzYB.cjs');
2
+ const require_config = require('./config-RcNESK0T.cjs');
3
+ const require_EndpointGenerator = require('./EndpointGenerator-Dj7AumHi.cjs');
4
4
  const node_fs_promises = require_chunk.__toESM(require("node:fs/promises"));
5
- const __geekmidas_api_server = require_chunk.__toESM(require("@geekmidas/api/server"));
6
5
  const node_path = require_chunk.__toESM(require("node:path"));
6
+ const __geekmidas_api_server = require_chunk.__toESM(require("@geekmidas/api/server"));
7
7
 
8
8
  //#region src/openapi.ts
9
9
  async function openapiCommand(options = {}) {
10
10
  const logger = console;
11
11
  try {
12
12
  const config = await require_config.loadConfig();
13
- const loadedEndpoints = await require_loadEndpoints.loadEndpoints(config.routes);
13
+ const generator = new require_EndpointGenerator.EndpointGenerator();
14
+ const loadedEndpoints = await generator.load(config.routes);
14
15
  if (loadedEndpoints.length === 0) {
15
16
  logger.log("No valid endpoints found");
16
17
  return;
17
18
  }
18
- const endpoints = loadedEndpoints.map(({ endpoint }) => endpoint);
19
+ const endpoints = loadedEndpoints.map(({ construct }) => construct);
19
20
  const spec = await __geekmidas_api_server.Endpoint.buildOpenApiSchema(endpoints, {
20
21
  title: "API Documentation",
21
22
  version: "1.0.0",
@@ -37,4 +38,5 @@ Object.defineProperty(exports, 'openapiCommand', {
37
38
  get: function () {
38
39
  return openapiCommand;
39
40
  }
40
- });
41
+ });
42
+ //# sourceMappingURL=openapi-DW-qF3oW.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-DW-qF3oW.cjs","names":["options: OpenAPIOptions","EndpointGenerator"],"sources":["../src/openapi.ts"],"sourcesContent":["#!/usr/bin/env -S npx tsx\n\nimport { mkdir, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { Endpoint } from '@geekmidas/api/server';\nimport { loadConfig } from './config.js';\nimport { EndpointGenerator } from './generators/EndpointGenerator.js';\n\ninterface OpenAPIOptions {\n output?: string;\n}\n\nexport async function openapiCommand(\n options: OpenAPIOptions = {},\n): Promise<void> {\n const logger = console;\n\n try {\n // Load config using existing function\n const config = await loadConfig();\n const generator = new EndpointGenerator();\n\n // Load all endpoints using the refactored function\n const loadedEndpoints = await generator.load(config.routes);\n\n if (loadedEndpoints.length === 0) {\n logger.log('No valid endpoints found');\n return;\n }\n\n // Extract just the endpoint instances for OpenAPI generation\n const endpoints = loadedEndpoints.map(({ construct }) => construct);\n\n // Generate OpenAPI spec using built-in method\n const spec = await Endpoint.buildOpenApiSchema(endpoints, {\n title: 'API Documentation',\n version: '1.0.0',\n description: 'Auto-generated API documentation from endpoints',\n });\n\n // Write output\n const outputPath = options.output || join(process.cwd(), 'openapi.json');\n await mkdir(join(outputPath, '..'), { recursive: true });\n await writeFile(outputPath, JSON.stringify(spec, null, 2));\n\n logger.log(`OpenAPI spec generated: ${outputPath}`);\n logger.log(`Found ${endpoints.length} endpoints`);\n } catch (error) {\n throw new Error(`OpenAPI generation failed: ${(error as Error).message}`);\n }\n}\n"],"mappings":";;;;;;;;AAYA,eAAsB,eACpBA,UAA0B,CAAE,GACb;CACf,MAAM,SAAS;AAEf,KAAI;EAEF,MAAM,SAAS,MAAM,2BAAY;EACjC,MAAM,YAAY,IAAIC;EAGtB,MAAM,kBAAkB,MAAM,UAAU,KAAK,OAAO,OAAO;AAE3D,MAAI,gBAAgB,WAAW,GAAG;AAChC,UAAO,IAAI,2BAA2B;AACtC;EACD;EAGD,MAAM,YAAY,gBAAgB,IAAI,CAAC,EAAE,WAAW,KAAK,UAAU;EAGnE,MAAM,OAAO,MAAM,gCAAS,mBAAmB,WAAW;GACxD,OAAO;GACP,SAAS;GACT,aAAa;EACd,EAAC;EAGF,MAAM,aAAa,QAAQ,UAAU,oBAAK,QAAQ,KAAK,EAAE,eAAe;AACxE,QAAM,4BAAM,oBAAK,YAAY,KAAK,EAAE,EAAE,WAAW,KAAM,EAAC;AACxD,QAAM,gCAAU,YAAY,KAAK,UAAU,MAAM,MAAM,EAAE,CAAC;AAE1D,SAAO,KAAK,0BAA0B,WAAW,EAAE;AACnD,SAAO,KAAK,QAAQ,UAAU,OAAO,YAAY;CAClD,SAAQ,OAAO;AACd,QAAM,IAAI,OAAO,6BAA8B,MAAgB,QAAQ;CACxE;AACF"}
@@ -1,8 +1,8 @@
1
- const require_chunk = require('./chunk-CUT6urMc.cjs');
1
+ const require_chunk = require('./chunk-CsX-DzYB.cjs');
2
2
  const node_fs_promises = require_chunk.__toESM(require("node:fs/promises"));
3
+ const node_path = require_chunk.__toESM(require("node:path"));
3
4
  const node_child_process = require_chunk.__toESM(require("node:child_process"));
4
5
  const node_fs = require_chunk.__toESM(require("node:fs"));
5
- const node_path = require_chunk.__toESM(require("node:path"));
6
6
  const node_util = require_chunk.__toESM(require("node:util"));
7
7
 
8
8
  //#region src/openapi-react-query.ts
@@ -168,4 +168,5 @@ Object.defineProperty(exports, 'generateReactQueryCommand', {
168
168
  get: function () {
169
169
  return generateReactQueryCommand;
170
170
  }
171
- });
171
+ });
172
+ //# sourceMappingURL=openapi-react-query-J0BzBHhN.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-react-query-J0BzBHhN.cjs","names":["exec","options: ReactQueryOptions","spec: OpenAPISpec","operations: OperationInfo[]","operation: any","schema: any","apiName: string","op: OperationInfo","paramParts: string[]","exports","str: string"],"sources":["../src/openapi-react-query.ts"],"sourcesContent":["#!/usr/bin/env -S npx tsx\n\nimport { exec } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { promisify } from 'node:util';\n\nconst execAsync = promisify(exec);\n\ninterface ReactQueryOptions {\n input?: string;\n output?: string;\n name?: string;\n}\n\ninterface OpenAPISpec {\n openapi: string;\n info?: {\n title?: string;\n version?: string;\n };\n paths: Record<string, Record<string, any>>;\n}\n\nexport async function generateReactQueryCommand(\n options: ReactQueryOptions = {},\n): Promise<void> {\n const logger = console;\n\n try {\n // Read OpenAPI spec\n const inputPath = options.input || join(process.cwd(), 'openapi.json');\n\n if (!existsSync(inputPath)) {\n throw new Error(\n `OpenAPI spec not found at ${inputPath}. Run 'npx @geekmidas/cli openapi' first.`,\n );\n }\n\n const specContent = await readFile(inputPath, 'utf-8');\n const spec: OpenAPISpec = JSON.parse(specContent);\n\n // Generate TypeScript types from OpenAPI spec\n const outputDir = dirname(\n options.output || join(process.cwd(), 'src', 'api', 'hooks.ts'),\n );\n const typesPath = join(outputDir, 'openapi-types.d.ts');\n\n logger.log('Generating TypeScript types from OpenAPI spec...');\n\n try {\n // Use npx to run openapi-typescript\n await execAsync(\n `npx openapi-typescript \"${inputPath}\" -o \"${typesPath}\"`,\n { cwd: process.cwd() },\n );\n logger.log(`TypeScript types generated: ${typesPath}`);\n } catch (error) {\n logger.warn(\n 'Could not generate types with openapi-typescript. Install it for better type inference.',\n );\n logger.warn('Run: npm install -D openapi-typescript');\n\n // Generate basic types file\n await writeFile(\n typesPath,\n `// Auto-generated placeholder types\nexport interface paths {\n [path: string]: {\n [method: string]: {\n operationId?: string;\n parameters?: any;\n requestBody?: any;\n responses?: any;\n };\n };\n}\n`,\n );\n }\n\n // Extract operation info\n const operations = extractOperations(spec);\n\n // Generate TypeScript code\n const code = generateReactQueryCode(\n spec,\n operations,\n options.name || 'API',\n );\n\n // Write output\n const outputPath =\n options.output || join(process.cwd(), 'src', 'api', 'hooks.ts');\n await mkdir(dirname(outputPath), { recursive: true });\n await writeFile(outputPath, code);\n\n logger.log(`React Query hooks generated: ${outputPath}`);\n logger.log(`Generated ${operations.length} hooks`);\n } catch (error) {\n throw new Error(\n `React Query generation failed: ${(error as Error).message}`,\n );\n }\n}\n\ninterface OperationInfo {\n operationId: string;\n path: string;\n method: string;\n endpoint: string; // Full endpoint like 'GET /users/{id}'\n parameters?: Array<{ name: string; in: string; required?: boolean }>;\n requestBody?: boolean;\n responseType?: string;\n}\n\nfunction extractOperations(spec: OpenAPISpec): OperationInfo[] {\n const operations: OperationInfo[] = [];\n\n Object.entries(spec.paths).forEach(([path, methods]) => {\n Object.entries(methods).forEach(([method, operation]) => {\n if (operation.operationId) {\n operations.push({\n operationId: operation.operationId,\n path,\n method: method.toUpperCase(),\n endpoint: `${method.toUpperCase()} ${path}`,\n parameters: operation.parameters,\n requestBody: !!operation.requestBody,\n responseType: extractResponseType(operation),\n });\n }\n });\n });\n\n return operations;\n}\n\nfunction extractResponseType(operation: any): string {\n const responses = operation.responses;\n if (!responses) return 'unknown';\n\n const successResponse = responses['200'] || responses['201'];\n if (!successResponse?.content?.['application/json']?.schema) {\n return 'unknown';\n }\n\n // Basic type inference from schema\n const schema = successResponse.content['application/json'].schema;\n return schemaToTypeString(schema);\n}\n\nfunction schemaToTypeString(schema: any): string {\n if (!schema) return 'unknown';\n\n switch (schema.type) {\n case 'string':\n return 'string';\n case 'number':\n case 'integer':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'array':\n return `Array<${schemaToTypeString(schema.items)}>`;\n case 'object':\n if (schema.properties) {\n const props = Object.entries(schema.properties)\n .map(\n ([key, value]: [string, any]) =>\n `${key}: ${schemaToTypeString(value)}`,\n )\n .join('; ');\n return `{ ${props} }`;\n }\n return 'Record<string, unknown>';\n default:\n return 'unknown';\n }\n}\n\nfunction generateReactQueryCode(\n spec: OpenAPISpec,\n operations: OperationInfo[],\n apiName: string,\n): string {\n const imports = `import { createTypedQueryClient } from '@geekmidas/api/client';\nimport type { paths } from './openapi-types';\n\n// Create typed query client\nexport const ${apiName.toLowerCase()} = createTypedQueryClient<paths>({\n baseURL: process.env.NEXT_PUBLIC_API_URL || '/api',\n});\n\n// Export individual hooks for better DX\n`;\n\n const queryHooks = operations\n .filter((op) => op.method === 'GET')\n .map((op) => generateQueryHook(op, apiName))\n .join('\\n\\n');\n\n const mutationHooks = operations\n .filter((op) => op.method !== 'GET')\n .map((op) => generateMutationHook(op, apiName))\n .join('\\n\\n');\n\n const typeExports = generateTypeExports(operations);\n\n return `${imports}\n// Query Hooks\n${queryHooks}\n\n// Mutation Hooks\n${mutationHooks}\n\n// Type exports for convenience\n${typeExports}\n\n// Re-export the api for advanced usage\nexport { ${apiName.toLowerCase()} };\n`;\n}\n\nfunction generateQueryHook(op: OperationInfo, apiName: string): string {\n const hookName = `use${capitalize(op.operationId)}`;\n const endpoint = op.endpoint;\n const hasParams = op.parameters?.some((p) => p.in === 'path');\n const hasQuery = op.parameters?.some((p) => p.in === 'query');\n\n // Generate properly typed hook\n let params = '';\n let args = '';\n\n if (hasParams || hasQuery) {\n const paramParts: string[] = [];\n if (hasParams) {\n const pathParams =\n op.parameters?.filter((p) => p.in === 'path').map((p) => p.name) || [];\n paramParts.push(\n `params: { ${pathParams.map((p) => `${p}: string`).join('; ')} }`,\n );\n }\n if (hasQuery) {\n paramParts.push(`query?: Record<string, any>`);\n }\n params = `config: { ${paramParts.join('; ')} }, `;\n args = ', config';\n }\n\n return `export const ${hookName} = (\n ${params}options?: Parameters<typeof ${apiName.toLowerCase()}.useQuery>[2]\n) => {\n return ${apiName.toLowerCase()}.useQuery('${endpoint}' as any${args}, options);\n};`;\n}\n\nfunction generateMutationHook(op: OperationInfo, apiName: string): string {\n const hookName = `use${capitalize(op.operationId)}`;\n const endpoint = op.endpoint;\n\n return `export const ${hookName} = (\n options?: Parameters<typeof ${apiName.toLowerCase()}.useMutation>[1]\n) => {\n return ${apiName.toLowerCase()}.useMutation('${endpoint}' as any, options);\n};`;\n}\n\nfunction generateTypeExports(operations: OperationInfo[]): string {\n const exports = operations.map((op) => {\n const typeName = capitalize(op.operationId);\n const isQuery = op.method === 'GET';\n\n if (isQuery) {\n return `export type ${typeName}Response = Awaited<ReturnType<ReturnType<typeof use${typeName}>['data']>>;`;\n } else {\n return `export type ${typeName}Response = Awaited<ReturnType<ReturnType<typeof use${typeName}>['mutateAsync']>>;`;\n }\n });\n\n return exports.join('\\n');\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
2
3
  import { exec } from "node:child_process";
3
4
  import { existsSync } from "node:fs";
4
- import { dirname, join } from "node:path";
5
5
  import { promisify } from "node:util";
6
6
 
7
7
  //#region src/openapi-react-query.ts
@@ -162,4 +162,5 @@ function capitalize(str) {
162
162
  }
163
163
 
164
164
  //#endregion
165
- export { generateReactQueryCommand };
165
+ export { generateReactQueryCommand };
166
+ //# sourceMappingURL=openapi-react-query-lgS7AVEz.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-react-query-lgS7AVEz.mjs","names":["options: ReactQueryOptions","spec: OpenAPISpec","operations: OperationInfo[]","operation: any","schema: any","apiName: string","op: OperationInfo","paramParts: string[]","str: string"],"sources":["../src/openapi-react-query.ts"],"sourcesContent":["#!/usr/bin/env -S npx tsx\n\nimport { exec } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { promisify } from 'node:util';\n\nconst execAsync = promisify(exec);\n\ninterface ReactQueryOptions {\n input?: string;\n output?: string;\n name?: string;\n}\n\ninterface OpenAPISpec {\n openapi: string;\n info?: {\n title?: string;\n version?: string;\n };\n paths: Record<string, Record<string, any>>;\n}\n\nexport async function generateReactQueryCommand(\n options: ReactQueryOptions = {},\n): Promise<void> {\n const logger = console;\n\n try {\n // Read OpenAPI spec\n const inputPath = options.input || join(process.cwd(), 'openapi.json');\n\n if (!existsSync(inputPath)) {\n throw new Error(\n `OpenAPI spec not found at ${inputPath}. Run 'npx @geekmidas/cli openapi' first.`,\n );\n }\n\n const specContent = await readFile(inputPath, 'utf-8');\n const spec: OpenAPISpec = JSON.parse(specContent);\n\n // Generate TypeScript types from OpenAPI spec\n const outputDir = dirname(\n options.output || join(process.cwd(), 'src', 'api', 'hooks.ts'),\n );\n const typesPath = join(outputDir, 'openapi-types.d.ts');\n\n logger.log('Generating TypeScript types from OpenAPI spec...');\n\n try {\n // Use npx to run openapi-typescript\n await execAsync(\n `npx openapi-typescript \"${inputPath}\" -o \"${typesPath}\"`,\n { cwd: process.cwd() },\n );\n logger.log(`TypeScript types generated: ${typesPath}`);\n } catch (error) {\n logger.warn(\n 'Could not generate types with openapi-typescript. Install it for better type inference.',\n );\n logger.warn('Run: npm install -D openapi-typescript');\n\n // Generate basic types file\n await writeFile(\n typesPath,\n `// Auto-generated placeholder types\nexport interface paths {\n [path: string]: {\n [method: string]: {\n operationId?: string;\n parameters?: any;\n requestBody?: any;\n responses?: any;\n };\n };\n}\n`,\n );\n }\n\n // Extract operation info\n const operations = extractOperations(spec);\n\n // Generate TypeScript code\n const code = generateReactQueryCode(\n spec,\n operations,\n options.name || 'API',\n );\n\n // Write output\n const outputPath =\n options.output || join(process.cwd(), 'src', 'api', 'hooks.ts');\n await mkdir(dirname(outputPath), { recursive: true });\n await writeFile(outputPath, code);\n\n logger.log(`React Query hooks generated: ${outputPath}`);\n logger.log(`Generated ${operations.length} hooks`);\n } catch (error) {\n throw new Error(\n `React Query generation failed: ${(error as Error).message}`,\n );\n }\n}\n\ninterface OperationInfo {\n operationId: string;\n path: string;\n method: string;\n endpoint: string; // Full endpoint like 'GET /users/{id}'\n parameters?: Array<{ name: string; in: string; required?: boolean }>;\n requestBody?: boolean;\n responseType?: string;\n}\n\nfunction extractOperations(spec: OpenAPISpec): OperationInfo[] {\n const operations: OperationInfo[] = [];\n\n Object.entries(spec.paths).forEach(([path, methods]) => {\n Object.entries(methods).forEach(([method, operation]) => {\n if (operation.operationId) {\n operations.push({\n operationId: operation.operationId,\n path,\n method: method.toUpperCase(),\n endpoint: `${method.toUpperCase()} ${path}`,\n parameters: operation.parameters,\n requestBody: !!operation.requestBody,\n responseType: extractResponseType(operation),\n });\n }\n });\n });\n\n return operations;\n}\n\nfunction extractResponseType(operation: any): string {\n const responses = operation.responses;\n if (!responses) return 'unknown';\n\n const successResponse = responses['200'] || responses['201'];\n if (!successResponse?.content?.['application/json']?.schema) {\n return 'unknown';\n }\n\n // Basic type inference from schema\n const schema = successResponse.content['application/json'].schema;\n return schemaToTypeString(schema);\n}\n\nfunction schemaToTypeString(schema: any): string {\n if (!schema) return 'unknown';\n\n switch (schema.type) {\n case 'string':\n return 'string';\n case 'number':\n case 'integer':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'array':\n return `Array<${schemaToTypeString(schema.items)}>`;\n case 'object':\n if (schema.properties) {\n const props = Object.entries(schema.properties)\n .map(\n ([key, value]: [string, any]) =>\n `${key}: ${schemaToTypeString(value)}`,\n )\n .join('; ');\n return `{ ${props} }`;\n }\n return 'Record<string, unknown>';\n default:\n return 'unknown';\n }\n}\n\nfunction generateReactQueryCode(\n spec: OpenAPISpec,\n operations: OperationInfo[],\n apiName: string,\n): string {\n const imports = `import { createTypedQueryClient } from '@geekmidas/api/client';\nimport type { paths } from './openapi-types';\n\n// Create typed query client\nexport const ${apiName.toLowerCase()} = createTypedQueryClient<paths>({\n baseURL: process.env.NEXT_PUBLIC_API_URL || '/api',\n});\n\n// Export individual hooks for better DX\n`;\n\n const queryHooks = operations\n .filter((op) => op.method === 'GET')\n .map((op) => generateQueryHook(op, apiName))\n .join('\\n\\n');\n\n const mutationHooks = operations\n .filter((op) => op.method !== 'GET')\n .map((op) => generateMutationHook(op, apiName))\n .join('\\n\\n');\n\n const typeExports = generateTypeExports(operations);\n\n return `${imports}\n// Query Hooks\n${queryHooks}\n\n// Mutation Hooks\n${mutationHooks}\n\n// Type exports for convenience\n${typeExports}\n\n// Re-export the api for advanced usage\nexport { ${apiName.toLowerCase()} };\n`;\n}\n\nfunction generateQueryHook(op: OperationInfo, apiName: string): string {\n const hookName = `use${capitalize(op.operationId)}`;\n const endpoint = op.endpoint;\n const hasParams = op.parameters?.some((p) => p.in === 'path');\n const hasQuery = op.parameters?.some((p) => p.in === 'query');\n\n // Generate properly typed hook\n let params = '';\n let args = '';\n\n if (hasParams || hasQuery) {\n const paramParts: string[] = [];\n if (hasParams) {\n const pathParams =\n op.parameters?.filter((p) => p.in === 'path').map((p) => p.name) || [];\n paramParts.push(\n `params: { ${pathParams.map((p) => `${p}: string`).join('; ')} }`,\n );\n }\n if (hasQuery) {\n paramParts.push(`query?: Record<string, any>`);\n }\n params = `config: { ${paramParts.join('; ')} }, `;\n args = ', config';\n }\n\n return `export const ${hookName} = (\n ${params}options?: Parameters<typeof ${apiName.toLowerCase()}.useQuery>[2]\n) => {\n return ${apiName.toLowerCase()}.useQuery('${endpoint}' as any${args}, options);\n};`;\n}\n\nfunction generateMutationHook(op: OperationInfo, apiName: string): string {\n const hookName = `use${capitalize(op.operationId)}`;\n const endpoint = op.endpoint;\n\n return `export const ${hookName} = (\n options?: Parameters<typeof ${apiName.toLowerCase()}.useMutation>[1]\n) => {\n return ${apiName.toLowerCase()}.useMutation('${endpoint}' as any, options);\n};`;\n}\n\nfunction generateTypeExports(operations: OperationInfo[]): string {\n const exports = operations.map((op) => {\n const typeName = capitalize(op.operationId);\n const isQuery = op.method === 'GET';\n\n if (isQuery) {\n return `export type ${typeName}Response = Awaited<ReturnType<ReturnType<typeof use${typeName}>['data']>>;`;\n } else {\n return `export type ${typeName}Response = Awaited<ReturnType<ReturnType<typeof use${typeName}>['mutateAsync']>>;`;\n }\n });\n\n return exports.join('\\n');\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env -S npx tsx
2
- const require_openapi_react_query = require('./openapi-react-query-C1JLYUOs.cjs');
2
+ const require_openapi_react_query = require('./openapi-react-query-J0BzBHhN.cjs');
3
3
 
4
4
  exports.generateReactQueryCommand = require_openapi_react_query.generateReactQueryCommand;
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env -S npx tsx
2
- import { generateReactQueryCommand } from "./openapi-react-query-DpT3XHFC.mjs";
2
+ import { generateReactQueryCommand } from "./openapi-react-query-lgS7AVEz.mjs";
3
3
 
4
4
  export { generateReactQueryCommand };
package/dist/openapi.cjs CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env -S npx tsx
2
- require('./config-BNqUMsvc.cjs');
3
- require('./loadEndpoints-BBIavB9h.cjs');
4
- const require_openapi = require('./openapi-D4QQJUPY.cjs');
2
+ require('./config-RcNESK0T.cjs');
3
+ require('./Generator-C3tYSTQY.cjs');
4
+ require('./EndpointGenerator-Dj7AumHi.cjs');
5
+ const require_openapi = require('./openapi-DW-qF3oW.cjs');
5
6
 
6
7
  exports.openapiCommand = require_openapi.openapiCommand;
package/dist/openapi.mjs CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env -S npx tsx
2
- import "./config-BciAdY6_.mjs";
3
- import "./loadEndpoints-DAZ53Og2.mjs";
4
- import { openapiCommand } from "./openapi-CksVdkh2.mjs";
2
+ import "./config-CXxYmz_o.mjs";
3
+ import "./Generator-CDt4pB3W.mjs";
4
+ import "./EndpointGenerator-uBA1ixUw.mjs";
5
+ import { openapiCommand } from "./openapi-BivnatiC.mjs";
5
6
 
6
7
  export { openapiCommand };
@@ -0,0 +1,96 @@
1
+ //#region src/build/providerResolver.ts
2
+ /**
3
+ * Resolves provider configuration from the new simplified system
4
+ * to the internal legacy format for backward compatibility
5
+ */
6
+ function resolveProviders(config, options) {
7
+ const providers = [];
8
+ let enableOpenApi = options.enableOpenApi || false;
9
+ if (options.providers) return {
10
+ providers: options.providers,
11
+ enableOpenApi
12
+ };
13
+ if (options.provider) {
14
+ const resolvedProviders = resolveMainProvider(options.provider, config.providers);
15
+ providers.push(...resolvedProviders.providers);
16
+ enableOpenApi = resolvedProviders.enableOpenApi || enableOpenApi;
17
+ } else if (config.providers) {
18
+ const resolvedProviders = resolveAllConfiguredProviders(config.providers);
19
+ providers.push(...resolvedProviders.providers);
20
+ enableOpenApi = resolvedProviders.enableOpenApi || enableOpenApi;
21
+ } else providers.push("aws-apigatewayv2", "aws-lambda");
22
+ return {
23
+ providers: [...new Set(providers)],
24
+ enableOpenApi
25
+ };
26
+ }
27
+ function resolveMainProvider(mainProvider, providersConfig) {
28
+ const providers = [];
29
+ let enableOpenApi = false;
30
+ if (mainProvider === "aws") {
31
+ const awsConfig = providersConfig?.aws;
32
+ if (awsConfig?.apiGateway) {
33
+ if (isEnabled(awsConfig.apiGateway.v1)) providers.push("aws-apigatewayv1");
34
+ if (isEnabled(awsConfig.apiGateway.v2)) providers.push("aws-apigatewayv2");
35
+ } else providers.push("aws-apigatewayv2");
36
+ if (awsConfig?.lambda) {
37
+ if (isEnabled(awsConfig.lambda.functions) || isEnabled(awsConfig.lambda.crons)) providers.push("aws-lambda");
38
+ } else providers.push("aws-lambda");
39
+ } else if (mainProvider === "server") {
40
+ providers.push("server");
41
+ const serverConfig = providersConfig?.server;
42
+ if (typeof serverConfig === "object" && serverConfig?.enableOpenApi) enableOpenApi = true;
43
+ }
44
+ return {
45
+ providers,
46
+ enableOpenApi
47
+ };
48
+ }
49
+ function resolveAllConfiguredProviders(providersConfig) {
50
+ const providers = [];
51
+ let enableOpenApi = false;
52
+ if (providersConfig.aws) {
53
+ const awsProviders = resolveMainProvider("aws", providersConfig);
54
+ providers.push(...awsProviders.providers);
55
+ }
56
+ if (providersConfig.server && isEnabled(providersConfig.server)) {
57
+ providers.push("server");
58
+ if (typeof providersConfig.server === "object" && providersConfig.server.enableOpenApi) enableOpenApi = true;
59
+ }
60
+ return {
61
+ providers,
62
+ enableOpenApi
63
+ };
64
+ }
65
+ function isEnabled(config) {
66
+ if (config === void 0) return false;
67
+ if (typeof config === "boolean") return config;
68
+ return config.enabled !== false;
69
+ }
70
+ /**
71
+ * Gets configuration for a specific AWS service
72
+ */
73
+ function getAWSServiceConfig(config, service, subService) {
74
+ const awsConfig = config.providers?.aws;
75
+ if (!awsConfig) return void 0;
76
+ if (service === "apiGateway" && awsConfig.apiGateway) {
77
+ const apiConfig = subService ? awsConfig.apiGateway[subService] : void 0;
78
+ return typeof apiConfig === "object" ? apiConfig : void 0;
79
+ }
80
+ if (service === "lambda" && awsConfig.lambda) {
81
+ const lambdaConfig = subService ? awsConfig.lambda[subService] : void 0;
82
+ return typeof lambdaConfig === "object" ? lambdaConfig : void 0;
83
+ }
84
+ return void 0;
85
+ }
86
+ /**
87
+ * Gets server configuration
88
+ */
89
+ function getServerConfig(config) {
90
+ const serverConfig = config.providers?.server;
91
+ return typeof serverConfig === "object" ? serverConfig : void 0;
92
+ }
93
+
94
+ //#endregion
95
+ export { getAWSServiceConfig, getServerConfig, resolveProviders };
96
+ //# sourceMappingURL=providerResolver-B_TjNF0_.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerResolver-B_TjNF0_.mjs","names":["config: GkmConfig","options: BuildOptions","providers: LegacyProvider[]","mainProvider: MainProvider","providersConfig?: ProvidersConfig","providersConfig: ProvidersConfig","config:\n | boolean\n | AWSApiGatewayConfig\n | AWSLambdaConfig\n | ServerConfig\n | undefined","service: 'apiGateway' | 'lambda'","subService?: 'v1' | 'v2' | 'functions' | 'crons'"],"sources":["../src/build/providerResolver.ts"],"sourcesContent":["import type {\n AWSApiGatewayConfig,\n AWSLambdaConfig,\n BuildOptions,\n GkmConfig,\n LegacyProvider,\n MainProvider,\n ProvidersConfig,\n ServerConfig,\n} from '../types';\n\nexport interface ResolvedProviders {\n providers: LegacyProvider[];\n enableOpenApi: boolean;\n}\n\n/**\n * Resolves provider configuration from the new simplified system\n * to the internal legacy format for backward compatibility\n */\nexport function resolveProviders(\n config: GkmConfig,\n options: BuildOptions,\n): ResolvedProviders {\n const providers: LegacyProvider[] = [];\n let enableOpenApi = options.enableOpenApi || false;\n\n // Handle legacy providers option (deprecated)\n if (options.providers) {\n return {\n providers: options.providers,\n enableOpenApi,\n };\n }\n\n // Handle new provider option\n if (options.provider) {\n const resolvedProviders = resolveMainProvider(\n options.provider,\n config.providers,\n );\n providers.push(...resolvedProviders.providers);\n enableOpenApi = resolvedProviders.enableOpenApi || enableOpenApi;\n }\n // Default: build all configured providers\n else if (config.providers) {\n const resolvedProviders = resolveAllConfiguredProviders(config.providers);\n providers.push(...resolvedProviders.providers);\n enableOpenApi = resolvedProviders.enableOpenApi || enableOpenApi;\n }\n // Fallback: use default AWS configuration\n else {\n providers.push('aws-apigatewayv2', 'aws-lambda');\n }\n\n return {\n providers: [...new Set(providers)], // Remove duplicates\n enableOpenApi,\n };\n}\n\nfunction resolveMainProvider(\n mainProvider: MainProvider,\n providersConfig?: ProvidersConfig,\n): ResolvedProviders {\n const providers: LegacyProvider[] = [];\n let enableOpenApi = false;\n\n if (mainProvider === 'aws') {\n const awsConfig = providersConfig?.aws;\n\n // Resolve API Gateway providers\n if (awsConfig?.apiGateway) {\n if (isEnabled(awsConfig.apiGateway.v1)) {\n providers.push('aws-apigatewayv1');\n }\n if (isEnabled(awsConfig.apiGateway.v2)) {\n providers.push('aws-apigatewayv2');\n }\n } else {\n // Default: enable v2 if no specific config\n providers.push('aws-apigatewayv2');\n }\n\n // Resolve Lambda providers\n if (awsConfig?.lambda) {\n if (\n isEnabled(awsConfig.lambda.functions) ||\n isEnabled(awsConfig.lambda.crons)\n ) {\n providers.push('aws-lambda');\n }\n } else {\n // Default: enable lambda if no specific config\n providers.push('aws-lambda');\n }\n } else if (mainProvider === 'server') {\n providers.push('server');\n const serverConfig = providersConfig?.server;\n\n if (typeof serverConfig === 'object' && serverConfig?.enableOpenApi) {\n enableOpenApi = true;\n }\n }\n\n return { providers, enableOpenApi };\n}\n\nfunction resolveAllConfiguredProviders(\n providersConfig: ProvidersConfig,\n): ResolvedProviders {\n const providers: LegacyProvider[] = [];\n let enableOpenApi = false;\n\n // AWS providers\n if (providersConfig.aws) {\n const awsProviders = resolveMainProvider('aws', providersConfig);\n providers.push(...awsProviders.providers);\n }\n\n // Server provider\n if (providersConfig.server && isEnabled(providersConfig.server)) {\n providers.push('server');\n if (\n typeof providersConfig.server === 'object' &&\n providersConfig.server.enableOpenApi\n ) {\n enableOpenApi = true;\n }\n }\n\n return { providers, enableOpenApi };\n}\n\nfunction isEnabled(\n config:\n | boolean\n | AWSApiGatewayConfig\n | AWSLambdaConfig\n | ServerConfig\n | undefined,\n): boolean {\n if (config === undefined) return false;\n if (typeof config === 'boolean') return config;\n return config.enabled !== false; // Default to true if enabled is not explicitly false\n}\n\n/**\n * Gets configuration for a specific AWS service\n */\nexport function getAWSServiceConfig<\n T extends AWSApiGatewayConfig | AWSLambdaConfig,\n>(\n config: GkmConfig,\n service: 'apiGateway' | 'lambda',\n subService?: 'v1' | 'v2' | 'functions' | 'crons',\n): T | undefined {\n const awsConfig = config.providers?.aws;\n if (!awsConfig) return undefined;\n\n if (service === 'apiGateway' && awsConfig.apiGateway) {\n const apiConfig = subService\n ? awsConfig.apiGateway[subService as 'v1' | 'v2']\n : undefined;\n return typeof apiConfig === 'object' ? (apiConfig as T) : undefined;\n }\n\n if (service === 'lambda' && awsConfig.lambda) {\n const lambdaConfig = subService\n ? awsConfig.lambda[subService as 'functions' | 'crons']\n : undefined;\n return typeof lambdaConfig === 'object' ? (lambdaConfig as T) : undefined;\n }\n\n return undefined;\n}\n\n/**\n * Gets server configuration\n */\nexport function getServerConfig(config: GkmConfig): ServerConfig | undefined {\n const serverConfig = config.providers?.server;\n return typeof serverConfig === 'object' ? serverConfig : undefined;\n}\n"],"mappings":";;;;;AAoBA,SAAgB,iBACdA,QACAC,SACmB;CACnB,MAAMC,YAA8B,CAAE;CACtC,IAAI,gBAAgB,QAAQ,iBAAiB;AAG7C,KAAI,QAAQ,UACV,QAAO;EACL,WAAW,QAAQ;EACnB;CACD;AAIH,KAAI,QAAQ,UAAU;EACpB,MAAM,oBAAoB,oBACxB,QAAQ,UACR,OAAO,UACR;AACD,YAAU,KAAK,GAAG,kBAAkB,UAAU;AAC9C,kBAAgB,kBAAkB,iBAAiB;CACpD,WAEQ,OAAO,WAAW;EACzB,MAAM,oBAAoB,8BAA8B,OAAO,UAAU;AACzE,YAAU,KAAK,GAAG,kBAAkB,UAAU;AAC9C,kBAAgB,kBAAkB,iBAAiB;CACpD,MAGC,WAAU,KAAK,oBAAoB,aAAa;AAGlD,QAAO;EACL,WAAW,CAAC,GAAG,IAAI,IAAI,UAAW;EAClC;CACD;AACF;AAED,SAAS,oBACPC,cACAC,iBACmB;CACnB,MAAMF,YAA8B,CAAE;CACtC,IAAI,gBAAgB;AAEpB,KAAI,iBAAiB,OAAO;EAC1B,MAAM,YAAY,iBAAiB;AAGnC,MAAI,WAAW,YAAY;AACzB,OAAI,UAAU,UAAU,WAAW,GAAG,CACpC,WAAU,KAAK,mBAAmB;AAEpC,OAAI,UAAU,UAAU,WAAW,GAAG,CACpC,WAAU,KAAK,mBAAmB;EAErC,MAEC,WAAU,KAAK,mBAAmB;AAIpC,MAAI,WAAW,QACb;OACE,UAAU,UAAU,OAAO,UAAU,IACrC,UAAU,UAAU,OAAO,MAAM,CAEjC,WAAU,KAAK,aAAa;EAC7B,MAGD,WAAU,KAAK,aAAa;CAE/B,WAAU,iBAAiB,UAAU;AACpC,YAAU,KAAK,SAAS;EACxB,MAAM,eAAe,iBAAiB;AAEtC,aAAW,iBAAiB,YAAY,cAAc,cACpD,iBAAgB;CAEnB;AAED,QAAO;EAAE;EAAW;CAAe;AACpC;AAED,SAAS,8BACPG,iBACmB;CACnB,MAAMH,YAA8B,CAAE;CACtC,IAAI,gBAAgB;AAGpB,KAAI,gBAAgB,KAAK;EACvB,MAAM,eAAe,oBAAoB,OAAO,gBAAgB;AAChE,YAAU,KAAK,GAAG,aAAa,UAAU;CAC1C;AAGD,KAAI,gBAAgB,UAAU,UAAU,gBAAgB,OAAO,EAAE;AAC/D,YAAU,KAAK,SAAS;AACxB,aACS,gBAAgB,WAAW,YAClC,gBAAgB,OAAO,cAEvB,iBAAgB;CAEnB;AAED,QAAO;EAAE;EAAW;CAAe;AACpC;AAED,SAAS,UACPI,QAMS;AACT,KAAI,kBAAsB,QAAO;AACjC,YAAW,WAAW,UAAW,QAAO;AACxC,QAAO,OAAO,YAAY;AAC3B;;;;AAKD,SAAgB,oBAGdN,QACAO,SACAC,YACe;CACf,MAAM,YAAY,OAAO,WAAW;AACpC,MAAK,UAAW;AAEhB,KAAI,YAAY,gBAAgB,UAAU,YAAY;EACpD,MAAM,YAAY,aACd,UAAU,WAAW;AAEzB,gBAAc,cAAc,WAAY;CACzC;AAED,KAAI,YAAY,YAAY,UAAU,QAAQ;EAC5C,MAAM,eAAe,aACjB,UAAU,OAAO;AAErB,gBAAc,iBAAiB,WAAY;CAC5C;AAED;AACD;;;;AAKD,SAAgB,gBAAgBR,QAA6C;CAC3E,MAAM,eAAe,OAAO,WAAW;AACvC,eAAc,iBAAiB,WAAW;AAC3C"}
@@ -0,0 +1,114 @@
1
+
2
+ //#region src/build/providerResolver.ts
3
+ /**
4
+ * Resolves provider configuration from the new simplified system
5
+ * to the internal legacy format for backward compatibility
6
+ */
7
+ function resolveProviders(config, options) {
8
+ const providers = [];
9
+ let enableOpenApi = options.enableOpenApi || false;
10
+ if (options.providers) return {
11
+ providers: options.providers,
12
+ enableOpenApi
13
+ };
14
+ if (options.provider) {
15
+ const resolvedProviders = resolveMainProvider(options.provider, config.providers);
16
+ providers.push(...resolvedProviders.providers);
17
+ enableOpenApi = resolvedProviders.enableOpenApi || enableOpenApi;
18
+ } else if (config.providers) {
19
+ const resolvedProviders = resolveAllConfiguredProviders(config.providers);
20
+ providers.push(...resolvedProviders.providers);
21
+ enableOpenApi = resolvedProviders.enableOpenApi || enableOpenApi;
22
+ } else providers.push("aws-apigatewayv2", "aws-lambda");
23
+ return {
24
+ providers: [...new Set(providers)],
25
+ enableOpenApi
26
+ };
27
+ }
28
+ function resolveMainProvider(mainProvider, providersConfig) {
29
+ const providers = [];
30
+ let enableOpenApi = false;
31
+ if (mainProvider === "aws") {
32
+ const awsConfig = providersConfig?.aws;
33
+ if (awsConfig?.apiGateway) {
34
+ if (isEnabled(awsConfig.apiGateway.v1)) providers.push("aws-apigatewayv1");
35
+ if (isEnabled(awsConfig.apiGateway.v2)) providers.push("aws-apigatewayv2");
36
+ } else providers.push("aws-apigatewayv2");
37
+ if (awsConfig?.lambda) {
38
+ if (isEnabled(awsConfig.lambda.functions) || isEnabled(awsConfig.lambda.crons)) providers.push("aws-lambda");
39
+ } else providers.push("aws-lambda");
40
+ } else if (mainProvider === "server") {
41
+ providers.push("server");
42
+ const serverConfig = providersConfig?.server;
43
+ if (typeof serverConfig === "object" && serverConfig?.enableOpenApi) enableOpenApi = true;
44
+ }
45
+ return {
46
+ providers,
47
+ enableOpenApi
48
+ };
49
+ }
50
+ function resolveAllConfiguredProviders(providersConfig) {
51
+ const providers = [];
52
+ let enableOpenApi = false;
53
+ if (providersConfig.aws) {
54
+ const awsProviders = resolveMainProvider("aws", providersConfig);
55
+ providers.push(...awsProviders.providers);
56
+ }
57
+ if (providersConfig.server && isEnabled(providersConfig.server)) {
58
+ providers.push("server");
59
+ if (typeof providersConfig.server === "object" && providersConfig.server.enableOpenApi) enableOpenApi = true;
60
+ }
61
+ return {
62
+ providers,
63
+ enableOpenApi
64
+ };
65
+ }
66
+ function isEnabled(config) {
67
+ if (config === void 0) return false;
68
+ if (typeof config === "boolean") return config;
69
+ return config.enabled !== false;
70
+ }
71
+ /**
72
+ * Gets configuration for a specific AWS service
73
+ */
74
+ function getAWSServiceConfig(config, service, subService) {
75
+ const awsConfig = config.providers?.aws;
76
+ if (!awsConfig) return void 0;
77
+ if (service === "apiGateway" && awsConfig.apiGateway) {
78
+ const apiConfig = subService ? awsConfig.apiGateway[subService] : void 0;
79
+ return typeof apiConfig === "object" ? apiConfig : void 0;
80
+ }
81
+ if (service === "lambda" && awsConfig.lambda) {
82
+ const lambdaConfig = subService ? awsConfig.lambda[subService] : void 0;
83
+ return typeof lambdaConfig === "object" ? lambdaConfig : void 0;
84
+ }
85
+ return void 0;
86
+ }
87
+ /**
88
+ * Gets server configuration
89
+ */
90
+ function getServerConfig(config) {
91
+ const serverConfig = config.providers?.server;
92
+ return typeof serverConfig === "object" ? serverConfig : void 0;
93
+ }
94
+
95
+ //#endregion
96
+ Object.defineProperty(exports, 'getAWSServiceConfig', {
97
+ enumerable: true,
98
+ get: function () {
99
+ return getAWSServiceConfig;
100
+ }
101
+ });
102
+ Object.defineProperty(exports, 'getServerConfig', {
103
+ enumerable: true,
104
+ get: function () {
105
+ return getServerConfig;
106
+ }
107
+ });
108
+ Object.defineProperty(exports, 'resolveProviders', {
109
+ enumerable: true,
110
+ get: function () {
111
+ return resolveProviders;
112
+ }
113
+ });
114
+ //# sourceMappingURL=providerResolver-Cs-0YCaP.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerResolver-Cs-0YCaP.cjs","names":["config: GkmConfig","options: BuildOptions","providers: LegacyProvider[]","mainProvider: MainProvider","providersConfig?: ProvidersConfig","providersConfig: ProvidersConfig","config:\n | boolean\n | AWSApiGatewayConfig\n | AWSLambdaConfig\n | ServerConfig\n | undefined","service: 'apiGateway' | 'lambda'","subService?: 'v1' | 'v2' | 'functions' | 'crons'"],"sources":["../src/build/providerResolver.ts"],"sourcesContent":["import type {\n AWSApiGatewayConfig,\n AWSLambdaConfig,\n BuildOptions,\n GkmConfig,\n LegacyProvider,\n MainProvider,\n ProvidersConfig,\n ServerConfig,\n} from '../types';\n\nexport interface ResolvedProviders {\n providers: LegacyProvider[];\n enableOpenApi: boolean;\n}\n\n/**\n * Resolves provider configuration from the new simplified system\n * to the internal legacy format for backward compatibility\n */\nexport function resolveProviders(\n config: GkmConfig,\n options: BuildOptions,\n): ResolvedProviders {\n const providers: LegacyProvider[] = [];\n let enableOpenApi = options.enableOpenApi || false;\n\n // Handle legacy providers option (deprecated)\n if (options.providers) {\n return {\n providers: options.providers,\n enableOpenApi,\n };\n }\n\n // Handle new provider option\n if (options.provider) {\n const resolvedProviders = resolveMainProvider(\n options.provider,\n config.providers,\n );\n providers.push(...resolvedProviders.providers);\n enableOpenApi = resolvedProviders.enableOpenApi || enableOpenApi;\n }\n // Default: build all configured providers\n else if (config.providers) {\n const resolvedProviders = resolveAllConfiguredProviders(config.providers);\n providers.push(...resolvedProviders.providers);\n enableOpenApi = resolvedProviders.enableOpenApi || enableOpenApi;\n }\n // Fallback: use default AWS configuration\n else {\n providers.push('aws-apigatewayv2', 'aws-lambda');\n }\n\n return {\n providers: [...new Set(providers)], // Remove duplicates\n enableOpenApi,\n };\n}\n\nfunction resolveMainProvider(\n mainProvider: MainProvider,\n providersConfig?: ProvidersConfig,\n): ResolvedProviders {\n const providers: LegacyProvider[] = [];\n let enableOpenApi = false;\n\n if (mainProvider === 'aws') {\n const awsConfig = providersConfig?.aws;\n\n // Resolve API Gateway providers\n if (awsConfig?.apiGateway) {\n if (isEnabled(awsConfig.apiGateway.v1)) {\n providers.push('aws-apigatewayv1');\n }\n if (isEnabled(awsConfig.apiGateway.v2)) {\n providers.push('aws-apigatewayv2');\n }\n } else {\n // Default: enable v2 if no specific config\n providers.push('aws-apigatewayv2');\n }\n\n // Resolve Lambda providers\n if (awsConfig?.lambda) {\n if (\n isEnabled(awsConfig.lambda.functions) ||\n isEnabled(awsConfig.lambda.crons)\n ) {\n providers.push('aws-lambda');\n }\n } else {\n // Default: enable lambda if no specific config\n providers.push('aws-lambda');\n }\n } else if (mainProvider === 'server') {\n providers.push('server');\n const serverConfig = providersConfig?.server;\n\n if (typeof serverConfig === 'object' && serverConfig?.enableOpenApi) {\n enableOpenApi = true;\n }\n }\n\n return { providers, enableOpenApi };\n}\n\nfunction resolveAllConfiguredProviders(\n providersConfig: ProvidersConfig,\n): ResolvedProviders {\n const providers: LegacyProvider[] = [];\n let enableOpenApi = false;\n\n // AWS providers\n if (providersConfig.aws) {\n const awsProviders = resolveMainProvider('aws', providersConfig);\n providers.push(...awsProviders.providers);\n }\n\n // Server provider\n if (providersConfig.server && isEnabled(providersConfig.server)) {\n providers.push('server');\n if (\n typeof providersConfig.server === 'object' &&\n providersConfig.server.enableOpenApi\n ) {\n enableOpenApi = true;\n }\n }\n\n return { providers, enableOpenApi };\n}\n\nfunction isEnabled(\n config:\n | boolean\n | AWSApiGatewayConfig\n | AWSLambdaConfig\n | ServerConfig\n | undefined,\n): boolean {\n if (config === undefined) return false;\n if (typeof config === 'boolean') return config;\n return config.enabled !== false; // Default to true if enabled is not explicitly false\n}\n\n/**\n * Gets configuration for a specific AWS service\n */\nexport function getAWSServiceConfig<\n T extends AWSApiGatewayConfig | AWSLambdaConfig,\n>(\n config: GkmConfig,\n service: 'apiGateway' | 'lambda',\n subService?: 'v1' | 'v2' | 'functions' | 'crons',\n): T | undefined {\n const awsConfig = config.providers?.aws;\n if (!awsConfig) return undefined;\n\n if (service === 'apiGateway' && awsConfig.apiGateway) {\n const apiConfig = subService\n ? awsConfig.apiGateway[subService as 'v1' | 'v2']\n : undefined;\n return typeof apiConfig === 'object' ? (apiConfig as T) : undefined;\n }\n\n if (service === 'lambda' && awsConfig.lambda) {\n const lambdaConfig = subService\n ? awsConfig.lambda[subService as 'functions' | 'crons']\n : undefined;\n return typeof lambdaConfig === 'object' ? (lambdaConfig as T) : undefined;\n }\n\n return undefined;\n}\n\n/**\n * Gets server configuration\n */\nexport function getServerConfig(config: GkmConfig): ServerConfig | undefined {\n const serverConfig = config.providers?.server;\n return typeof serverConfig === 'object' ? serverConfig : undefined;\n}\n"],"mappings":";;;;;;AAoBA,SAAgB,iBACdA,QACAC,SACmB;CACnB,MAAMC,YAA8B,CAAE;CACtC,IAAI,gBAAgB,QAAQ,iBAAiB;AAG7C,KAAI,QAAQ,UACV,QAAO;EACL,WAAW,QAAQ;EACnB;CACD;AAIH,KAAI,QAAQ,UAAU;EACpB,MAAM,oBAAoB,oBACxB,QAAQ,UACR,OAAO,UACR;AACD,YAAU,KAAK,GAAG,kBAAkB,UAAU;AAC9C,kBAAgB,kBAAkB,iBAAiB;CACpD,WAEQ,OAAO,WAAW;EACzB,MAAM,oBAAoB,8BAA8B,OAAO,UAAU;AACzE,YAAU,KAAK,GAAG,kBAAkB,UAAU;AAC9C,kBAAgB,kBAAkB,iBAAiB;CACpD,MAGC,WAAU,KAAK,oBAAoB,aAAa;AAGlD,QAAO;EACL,WAAW,CAAC,GAAG,IAAI,IAAI,UAAW;EAClC;CACD;AACF;AAED,SAAS,oBACPC,cACAC,iBACmB;CACnB,MAAMF,YAA8B,CAAE;CACtC,IAAI,gBAAgB;AAEpB,KAAI,iBAAiB,OAAO;EAC1B,MAAM,YAAY,iBAAiB;AAGnC,MAAI,WAAW,YAAY;AACzB,OAAI,UAAU,UAAU,WAAW,GAAG,CACpC,WAAU,KAAK,mBAAmB;AAEpC,OAAI,UAAU,UAAU,WAAW,GAAG,CACpC,WAAU,KAAK,mBAAmB;EAErC,MAEC,WAAU,KAAK,mBAAmB;AAIpC,MAAI,WAAW,QACb;OACE,UAAU,UAAU,OAAO,UAAU,IACrC,UAAU,UAAU,OAAO,MAAM,CAEjC,WAAU,KAAK,aAAa;EAC7B,MAGD,WAAU,KAAK,aAAa;CAE/B,WAAU,iBAAiB,UAAU;AACpC,YAAU,KAAK,SAAS;EACxB,MAAM,eAAe,iBAAiB;AAEtC,aAAW,iBAAiB,YAAY,cAAc,cACpD,iBAAgB;CAEnB;AAED,QAAO;EAAE;EAAW;CAAe;AACpC;AAED,SAAS,8BACPG,iBACmB;CACnB,MAAMH,YAA8B,CAAE;CACtC,IAAI,gBAAgB;AAGpB,KAAI,gBAAgB,KAAK;EACvB,MAAM,eAAe,oBAAoB,OAAO,gBAAgB;AAChE,YAAU,KAAK,GAAG,aAAa,UAAU;CAC1C;AAGD,KAAI,gBAAgB,UAAU,UAAU,gBAAgB,OAAO,EAAE;AAC/D,YAAU,KAAK,SAAS;AACxB,aACS,gBAAgB,WAAW,YAClC,gBAAgB,OAAO,cAEvB,iBAAgB;CAEnB;AAED,QAAO;EAAE;EAAW;CAAe;AACpC;AAED,SAAS,UACPI,QAMS;AACT,KAAI,kBAAsB,QAAO;AACjC,YAAW,WAAW,UAAW,QAAO;AACxC,QAAO,OAAO,YAAY;AAC3B;;;;AAKD,SAAgB,oBAGdN,QACAO,SACAC,YACe;CACf,MAAM,YAAY,OAAO,WAAW;AACpC,MAAK,UAAW;AAEhB,KAAI,YAAY,gBAAgB,UAAU,YAAY;EACpD,MAAM,YAAY,aACd,UAAU,WAAW;AAEzB,gBAAc,cAAc,WAAY;CACzC;AAED,KAAI,YAAY,YAAY,UAAU,QAAQ;EAC5C,MAAM,eAAe,aACjB,UAAU,OAAO;AAErB,gBAAc,iBAAiB,WAAY;CAC5C;AAED;AACD;;;;AAKD,SAAgB,gBAAgBR,QAA6C;CAC3E,MAAM,eAAe,OAAO,WAAW;AACvC,eAAc,iBAAiB,WAAW;AAC3C"}