@geekmidas/cli 0.10.0 → 0.13.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 (146) hide show
  1. package/README.md +525 -0
  2. package/dist/bundler-B1qy9b-j.cjs +112 -0
  3. package/dist/bundler-B1qy9b-j.cjs.map +1 -0
  4. package/dist/bundler-DskIqW2t.mjs +111 -0
  5. package/dist/bundler-DskIqW2t.mjs.map +1 -0
  6. package/dist/{config-C9aXOHBe.cjs → config-AmInkU7k.cjs} +8 -8
  7. package/dist/config-AmInkU7k.cjs.map +1 -0
  8. package/dist/{config-BrkUalUh.mjs → config-DYULeEv8.mjs} +3 -3
  9. package/dist/config-DYULeEv8.mjs.map +1 -0
  10. package/dist/config.cjs +1 -1
  11. package/dist/config.d.cts +1 -1
  12. package/dist/config.d.mts +1 -1
  13. package/dist/config.mjs +1 -1
  14. package/dist/encryption-C8H-38Yy.mjs +42 -0
  15. package/dist/encryption-C8H-38Yy.mjs.map +1 -0
  16. package/dist/encryption-Dyf_r1h-.cjs +44 -0
  17. package/dist/encryption-Dyf_r1h-.cjs.map +1 -0
  18. package/dist/index.cjs +2123 -179
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.mjs +2141 -192
  21. package/dist/index.mjs.map +1 -1
  22. package/dist/{openapi-CZLI4QTr.mjs → openapi-BfFlOBCG.mjs} +801 -38
  23. package/dist/openapi-BfFlOBCG.mjs.map +1 -0
  24. package/dist/{openapi-BeHLKcwP.cjs → openapi-Bt_1FDpT.cjs} +794 -31
  25. package/dist/openapi-Bt_1FDpT.cjs.map +1 -0
  26. package/dist/{openapi-react-query-o5iMi8tz.cjs → openapi-react-query-B-sNWHFU.cjs} +5 -5
  27. package/dist/openapi-react-query-B-sNWHFU.cjs.map +1 -0
  28. package/dist/{openapi-react-query-CcciaVu5.mjs → openapi-react-query-B6XTeGqS.mjs} +5 -5
  29. package/dist/openapi-react-query-B6XTeGqS.mjs.map +1 -0
  30. package/dist/openapi-react-query.cjs +1 -1
  31. package/dist/openapi-react-query.d.cts.map +1 -1
  32. package/dist/openapi-react-query.d.mts.map +1 -1
  33. package/dist/openapi-react-query.mjs +1 -1
  34. package/dist/openapi.cjs +2 -2
  35. package/dist/openapi.d.cts +1 -1
  36. package/dist/openapi.d.cts.map +1 -1
  37. package/dist/openapi.d.mts +1 -1
  38. package/dist/openapi.d.mts.map +1 -1
  39. package/dist/openapi.mjs +2 -2
  40. package/dist/storage-BOOpAF8N.cjs +5 -0
  41. package/dist/storage-Bj1E26lU.cjs +187 -0
  42. package/dist/storage-Bj1E26lU.cjs.map +1 -0
  43. package/dist/storage-kSxTjkNb.mjs +133 -0
  44. package/dist/storage-kSxTjkNb.mjs.map +1 -0
  45. package/dist/storage-tgZSUnKl.mjs +3 -0
  46. package/dist/{types-b-vwGpqc.d.cts → types-BR0M2v_c.d.mts} +100 -1
  47. package/dist/types-BR0M2v_c.d.mts.map +1 -0
  48. package/dist/{types-DXgiA1sF.d.mts → types-BhkZc-vm.d.cts} +100 -1
  49. package/dist/types-BhkZc-vm.d.cts.map +1 -0
  50. package/examples/cron-example.ts +27 -27
  51. package/examples/env.ts +27 -27
  52. package/examples/function-example.ts +31 -31
  53. package/examples/gkm.config.json +20 -20
  54. package/examples/gkm.config.ts +8 -8
  55. package/examples/gkm.minimal.config.json +5 -5
  56. package/examples/gkm.production.config.json +25 -25
  57. package/examples/logger.ts +2 -2
  58. package/package.json +6 -6
  59. package/src/__tests__/EndpointGenerator.hooks.spec.ts +191 -191
  60. package/src/__tests__/config.spec.ts +55 -55
  61. package/src/__tests__/loadEnvFiles.spec.ts +93 -93
  62. package/src/__tests__/normalizeHooksConfig.spec.ts +58 -58
  63. package/src/__tests__/openapi-react-query.spec.ts +497 -497
  64. package/src/__tests__/openapi.spec.ts +428 -428
  65. package/src/__tests__/test-helpers.ts +76 -76
  66. package/src/auth/__tests__/credentials.spec.ts +204 -0
  67. package/src/auth/__tests__/index.spec.ts +168 -0
  68. package/src/auth/credentials.ts +187 -0
  69. package/src/auth/index.ts +226 -0
  70. package/src/build/__tests__/bundler.spec.ts +444 -0
  71. package/src/build/__tests__/index-new.spec.ts +474 -474
  72. package/src/build/__tests__/manifests.spec.ts +333 -333
  73. package/src/build/bundler.ts +210 -0
  74. package/src/build/endpoint-analyzer.ts +236 -0
  75. package/src/build/handler-templates.ts +1253 -0
  76. package/src/build/index.ts +260 -179
  77. package/src/build/manifests.ts +52 -52
  78. package/src/build/providerResolver.ts +145 -145
  79. package/src/build/types.ts +64 -43
  80. package/src/config.ts +39 -39
  81. package/src/deploy/__tests__/docker.spec.ts +111 -0
  82. package/src/deploy/__tests__/dokploy.spec.ts +245 -0
  83. package/src/deploy/__tests__/init.spec.ts +662 -0
  84. package/src/deploy/docker.ts +128 -0
  85. package/src/deploy/dokploy.ts +204 -0
  86. package/src/deploy/index.ts +136 -0
  87. package/src/deploy/init.ts +484 -0
  88. package/src/deploy/types.ts +48 -0
  89. package/src/dev/__tests__/index.spec.ts +266 -266
  90. package/src/dev/index.ts +647 -601
  91. package/src/docker/__tests__/compose.spec.ts +531 -0
  92. package/src/docker/__tests__/templates.spec.ts +280 -0
  93. package/src/docker/compose.ts +273 -0
  94. package/src/docker/index.ts +230 -0
  95. package/src/docker/templates.ts +446 -0
  96. package/src/generators/CronGenerator.ts +72 -72
  97. package/src/generators/EndpointGenerator.ts +699 -398
  98. package/src/generators/FunctionGenerator.ts +84 -84
  99. package/src/generators/Generator.ts +72 -72
  100. package/src/generators/OpenApiTsGenerator.ts +577 -577
  101. package/src/generators/SubscriberGenerator.ts +124 -124
  102. package/src/generators/__tests__/CronGenerator.spec.ts +433 -433
  103. package/src/generators/__tests__/EndpointGenerator.spec.ts +532 -382
  104. package/src/generators/__tests__/FunctionGenerator.spec.ts +244 -244
  105. package/src/generators/__tests__/SubscriberGenerator.spec.ts +397 -382
  106. package/src/generators/index.ts +4 -4
  107. package/src/index.ts +623 -201
  108. package/src/init/__tests__/generators.spec.ts +334 -334
  109. package/src/init/__tests__/init.spec.ts +332 -332
  110. package/src/init/__tests__/utils.spec.ts +89 -89
  111. package/src/init/generators/config.ts +175 -175
  112. package/src/init/generators/docker.ts +41 -41
  113. package/src/init/generators/env.ts +72 -72
  114. package/src/init/generators/index.ts +1 -1
  115. package/src/init/generators/models.ts +64 -64
  116. package/src/init/generators/monorepo.ts +161 -161
  117. package/src/init/generators/package.ts +71 -71
  118. package/src/init/generators/source.ts +6 -6
  119. package/src/init/index.ts +203 -208
  120. package/src/init/templates/api.ts +115 -115
  121. package/src/init/templates/index.ts +75 -75
  122. package/src/init/templates/minimal.ts +98 -98
  123. package/src/init/templates/serverless.ts +89 -89
  124. package/src/init/templates/worker.ts +98 -98
  125. package/src/init/utils.ts +54 -56
  126. package/src/openapi-react-query.ts +194 -194
  127. package/src/openapi.ts +63 -63
  128. package/src/secrets/__tests__/encryption.spec.ts +226 -0
  129. package/src/secrets/__tests__/generator.spec.ts +319 -0
  130. package/src/secrets/__tests__/index.spec.ts +91 -0
  131. package/src/secrets/__tests__/storage.spec.ts +611 -0
  132. package/src/secrets/encryption.ts +91 -0
  133. package/src/secrets/generator.ts +164 -0
  134. package/src/secrets/index.ts +383 -0
  135. package/src/secrets/storage.ts +192 -0
  136. package/src/secrets/types.ts +53 -0
  137. package/src/types.ts +295 -176
  138. package/tsdown.config.ts +11 -8
  139. package/dist/config-BrkUalUh.mjs.map +0 -1
  140. package/dist/config-C9aXOHBe.cjs.map +0 -1
  141. package/dist/openapi-BeHLKcwP.cjs.map +0 -1
  142. package/dist/openapi-CZLI4QTr.mjs.map +0 -1
  143. package/dist/openapi-react-query-CcciaVu5.mjs.map +0 -1
  144. package/dist/openapi-react-query-o5iMi8tz.cjs.map +0 -1
  145. package/dist/types-DXgiA1sF.d.mts.map +0 -1
  146. package/dist/types-b-vwGpqc.d.cts.map +0 -1
@@ -4,42 +4,42 @@ import { cron } from '@geekmidas/constructs/crons';
4
4
  * Example cron that generates a daily report at 9 AM UTC
5
5
  */
6
6
  export const dailyReport = cron
7
- .schedule('cron(0 9 * * ? *)')
8
- .timeout(600000) // 10 minutes
9
- .handle(async ({ services, logger }) => {
10
- logger.info('Generating daily report');
7
+ .schedule('cron(0 9 * * ? *)')
8
+ .timeout(600000) // 10 minutes
9
+ .handle(async ({ services, logger }) => {
10
+ logger.info('Generating daily report');
11
11
 
12
- const reportDate = new Date().toISOString().split('T')[0];
12
+ const reportDate = new Date().toISOString().split('T')[0];
13
13
 
14
- // Generate report logic here
15
- const reportData = {
16
- date: reportDate,
17
- totalOrders: 150,
18
- totalRevenue: 12500.0,
19
- topProducts: [
20
- { id: 'prod-1', name: 'Widget A', sales: 45 },
21
- { id: 'prod-2', name: 'Widget B', sales: 32 },
22
- ],
23
- };
14
+ // Generate report logic here
15
+ const reportData = {
16
+ date: reportDate,
17
+ totalOrders: 150,
18
+ totalRevenue: 12500.0,
19
+ topProducts: [
20
+ { id: 'prod-1', name: 'Widget A', sales: 45 },
21
+ { id: 'prod-2', name: 'Widget B', sales: 32 },
22
+ ],
23
+ };
24
24
 
25
- logger.info('Daily report generated', reportData);
25
+ logger.info('Daily report generated', reportData);
26
26
 
27
- return reportData;
28
- });
27
+ return reportData;
28
+ });
29
29
 
30
30
  /**
31
31
  * Example cron that runs every hour
32
32
  */
33
33
  export const hourlyCleanup = cron
34
- .schedule('rate(1 hour)')
35
- .timeout(300000) // 5 minutes
36
- .handle(async ({ services, logger }) => {
37
- logger.info('Running hourly cleanup');
34
+ .schedule('rate(1 hour)')
35
+ .timeout(300000) // 5 minutes
36
+ .handle(async ({ services, logger }) => {
37
+ logger.info('Running hourly cleanup');
38
38
 
39
- // Cleanup logic here
40
- const itemsCleaned = 42;
39
+ // Cleanup logic here
40
+ const itemsCleaned = 42;
41
41
 
42
- logger.info(`Cleaned ${itemsCleaned} items`);
42
+ logger.info(`Cleaned ${itemsCleaned} items`);
43
43
 
44
- return { itemsCleaned };
45
- });
44
+ return { itemsCleaned };
45
+ });
package/examples/env.ts CHANGED
@@ -1,33 +1,33 @@
1
1
  import { EnvironmentParser } from '@geekmidas/envkit';
2
2
 
3
3
  export const envParser = new EnvironmentParser(process.env)
4
- .create((get) => ({
5
- // Database configuration
6
- database: {
7
- url: get('DATABASE_URL').string().url(),
8
- maxConnections: get('DB_MAX_CONNECTIONS')
9
- .string()
10
- .transform(Number)
11
- .default('10'),
12
- },
4
+ .create((get) => ({
5
+ // Database configuration
6
+ database: {
7
+ url: get('DATABASE_URL').string().url(),
8
+ maxConnections: get('DB_MAX_CONNECTIONS')
9
+ .string()
10
+ .transform(Number)
11
+ .default('10'),
12
+ },
13
13
 
14
- // API configuration
15
- api: {
16
- port: get('PORT').string().transform(Number).default('3000'),
17
- cors: {
18
- origin: get('CORS_ORIGIN').string().default('*'),
19
- },
20
- },
14
+ // API configuration
15
+ api: {
16
+ port: get('PORT').string().transform(Number).default('3000'),
17
+ cors: {
18
+ origin: get('CORS_ORIGIN').string().default('*'),
19
+ },
20
+ },
21
21
 
22
- // AWS configuration (for Lambda deployments)
23
- aws: {
24
- region: get('AWS_REGION').string().default('us-east-1'),
25
- },
22
+ // AWS configuration (for Lambda deployments)
23
+ aws: {
24
+ region: get('AWS_REGION').string().default('us-east-1'),
25
+ },
26
26
 
27
- // Application settings
28
- app: {
29
- environment: get('NODE_ENV').string().default('development'),
30
- logLevel: get('LOG_LEVEL').string().default('info'),
31
- },
32
- }))
33
- .parse();
27
+ // Application settings
28
+ app: {
29
+ environment: get('NODE_ENV').string().default('development'),
30
+ logLevel: get('LOG_LEVEL').string().default('info'),
31
+ },
32
+ }))
33
+ .parse();
@@ -5,36 +5,36 @@ import { z } from 'zod';
5
5
  * Example function that processes an order
6
6
  */
7
7
  export const processOrder = f
8
- .input(
9
- z.object({
10
- orderId: z.string(),
11
- items: z.array(
12
- z.object({
13
- id: z.string(),
14
- quantity: z.number().int().positive(),
15
- }),
16
- ),
17
- }),
18
- )
19
- .output(
20
- z.object({
21
- orderId: z.string(),
22
- status: z.enum(['processing', 'completed', 'failed']),
23
- processedAt: z.string().datetime(),
24
- }),
25
- )
26
- .timeout(300000) // 5 minutes
27
- .handle(async ({ input, services, logger }) => {
28
- logger.info(`Processing order ${input.orderId}`);
8
+ .input(
9
+ z.object({
10
+ orderId: z.string(),
11
+ items: z.array(
12
+ z.object({
13
+ id: z.string(),
14
+ quantity: z.number().int().positive(),
15
+ }),
16
+ ),
17
+ }),
18
+ )
19
+ .output(
20
+ z.object({
21
+ orderId: z.string(),
22
+ status: z.enum(['processing', 'completed', 'failed']),
23
+ processedAt: z.string().datetime(),
24
+ }),
25
+ )
26
+ .timeout(300000) // 5 minutes
27
+ .handle(async ({ input, services, logger }) => {
28
+ logger.info(`Processing order ${input.orderId}`);
29
29
 
30
- // Process order logic here
31
- for (const item of input.items) {
32
- logger.info(`Processing item ${item.id}, quantity: ${item.quantity}`);
33
- }
30
+ // Process order logic here
31
+ for (const item of input.items) {
32
+ logger.info(`Processing item ${item.id}, quantity: ${item.quantity}`);
33
+ }
34
34
 
35
- return {
36
- orderId: input.orderId,
37
- status: 'completed' as const,
38
- processedAt: new Date().toISOString(),
39
- };
40
- });
35
+ return {
36
+ orderId: input.orderId,
37
+ status: 'completed' as const,
38
+ processedAt: new Date().toISOString(),
39
+ };
40
+ });
@@ -1,22 +1,22 @@
1
1
  {
2
- "routes": "./src/endpoints/**/*.ts",
3
- "functions": "./src/functions/**/*.ts",
4
- "crons": "./src/crons/**/*.ts",
5
- "envParser": "./src/env.ts#envParser",
6
- "logger": "./src/logger.ts#logger",
7
- "providers": {
8
- "aws": {
9
- "apiGateway": {
10
- "v1": false,
11
- "v2": true
12
- },
13
- "lambda": {
14
- "functions": true,
15
- "crons": true
16
- }
17
- },
18
- "server": {
19
- "enableOpenApi": true
20
- }
21
- }
2
+ "routes": "./src/endpoints/**/*.ts",
3
+ "functions": "./src/functions/**/*.ts",
4
+ "crons": "./src/crons/**/*.ts",
5
+ "envParser": "./src/env.ts#envParser",
6
+ "logger": "./src/logger.ts#logger",
7
+ "providers": {
8
+ "aws": {
9
+ "apiGateway": {
10
+ "v1": false,
11
+ "v2": true
12
+ },
13
+ "lambda": {
14
+ "functions": true,
15
+ "crons": true
16
+ }
17
+ },
18
+ "server": {
19
+ "enableOpenApi": true
20
+ }
21
+ }
22
22
  }
@@ -1,14 +1,14 @@
1
1
  import { defineConfig } from '@geekmidas/cli/config';
2
2
 
3
3
  export default defineConfig({
4
- // Glob pattern to find endpoint files
5
- routes: 'src/routes/**/*.ts',
4
+ // Glob pattern to find endpoint files
5
+ routes: 'src/routes/**/*.ts',
6
6
 
7
- // Environment parser configuration
8
- // Format: path#exportName (if no #exportName, treats as default import)
9
- envParser: './src/env.ts#envParser',
7
+ // Environment parser configuration
8
+ // Format: path#exportName (if no #exportName, treats as default import)
9
+ envParser: './src/env.ts#envParser',
10
10
 
11
- // Logger configuration
12
- // Format: path#exportName (if no #exportName, treats as default import)
13
- logger: './src/logger.ts#logger',
11
+ // Logger configuration
12
+ // Format: path#exportName (if no #exportName, treats as default import)
13
+ logger: './src/logger.ts#logger',
14
14
  });
@@ -1,7 +1,7 @@
1
1
  {
2
- "routes": "./src/endpoints/**/*.ts",
3
- "functions": "./src/functions/**/*.ts",
4
- "crons": "./src/crons/**/*.ts",
5
- "envParser": "./src/env.ts#envParser",
6
- "logger": "./src/logger.ts#logger"
2
+ "routes": "./src/endpoints/**/*.ts",
3
+ "functions": "./src/functions/**/*.ts",
4
+ "crons": "./src/crons/**/*.ts",
5
+ "envParser": "./src/env.ts#envParser",
6
+ "logger": "./src/logger.ts#logger"
7
7
  }
@@ -1,27 +1,27 @@
1
1
  {
2
- "routes": "./src/endpoints/**/*.ts",
3
- "functions": "./src/functions/**/*.ts",
4
- "crons": "./src/crons/**/*.ts",
5
- "envParser": "./src/env.ts#envParser",
6
- "logger": "./src/logger.ts#logger",
7
- "providers": {
8
- "aws": {
9
- "apiGateway": {
10
- "v2": {
11
- "enabled": true,
12
- "outputDir": "dist/api-gateway"
13
- }
14
- },
15
- "lambda": {
16
- "functions": {
17
- "enabled": true,
18
- "outputDir": "dist/functions"
19
- },
20
- "crons": {
21
- "enabled": true,
22
- "outputDir": "dist/crons"
23
- }
24
- }
25
- }
26
- }
2
+ "routes": "./src/endpoints/**/*.ts",
3
+ "functions": "./src/functions/**/*.ts",
4
+ "crons": "./src/crons/**/*.ts",
5
+ "envParser": "./src/env.ts#envParser",
6
+ "logger": "./src/logger.ts#logger",
7
+ "providers": {
8
+ "aws": {
9
+ "apiGateway": {
10
+ "v2": {
11
+ "enabled": true,
12
+ "outputDir": "dist/api-gateway"
13
+ }
14
+ },
15
+ "lambda": {
16
+ "functions": {
17
+ "enabled": true,
18
+ "outputDir": "dist/functions"
19
+ },
20
+ "crons": {
21
+ "enabled": true,
22
+ "outputDir": "dist/crons"
23
+ }
24
+ }
25
+ }
26
+ }
27
27
  }
@@ -2,8 +2,8 @@ import { ConsoleLogger } from '@geekmidas/logger/console';
2
2
 
3
3
  // Create a console logger instance
4
4
  export const logger = new ConsoleLogger({
5
- level: process.env.LOG_LEVEL || 'info',
6
- pretty: process.env.NODE_ENV !== 'production',
5
+ level: process.env.LOG_LEVEL || 'info',
6
+ pretty: process.env.NODE_ENV !== 'production',
7
7
  });
8
8
 
9
9
  // You can also export a default logger
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geekmidas/cli",
3
- "version": "0.10.0",
3
+ "version": "0.13.0",
4
4
  "description": "CLI tools for building Lambda handlers, server applications, and generating OpenAPI specs",
5
5
  "private": false,
6
6
  "type": "module",
@@ -50,14 +50,14 @@
50
50
  "typescript": "^5.8.2",
51
51
  "vitest": "^3.2.4",
52
52
  "zod": "~4.1.13",
53
- "@geekmidas/testkit": "0.4.0"
53
+ "@geekmidas/testkit": "0.6.0"
54
54
  },
55
55
  "peerDependencies": {
56
- "@geekmidas/constructs": "~0.3.2",
57
- "@geekmidas/logger": "~0.3.0",
58
- "@geekmidas/envkit": "~0.2.0",
56
+ "@geekmidas/constructs": "~0.5.0",
57
+ "@geekmidas/envkit": "~0.3.0",
58
+ "@geekmidas/logger": "~0.4.0",
59
59
  "@geekmidas/schema": "~0.1.0",
60
- "@geekmidas/telescope": "~0.2.1"
60
+ "@geekmidas/telescope": "~0.4.0"
61
61
  },
62
62
  "peerDependenciesMeta": {
63
63
  "@geekmidas/telescope": {