@geekmidas/cli 0.9.0 → 0.12.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/README.md +525 -0
- package/dist/bundler-DRXCw_YR.mjs +70 -0
- package/dist/bundler-DRXCw_YR.mjs.map +1 -0
- package/dist/bundler-WsEvH_b2.cjs +71 -0
- package/dist/bundler-WsEvH_b2.cjs.map +1 -0
- package/dist/{config-CFls09Ey.cjs → config-AmInkU7k.cjs} +10 -8
- package/dist/config-AmInkU7k.cjs.map +1 -0
- package/dist/{config-Bq72aj8e.mjs → config-DYULeEv8.mjs} +6 -4
- package/dist/config-DYULeEv8.mjs.map +1 -0
- package/dist/config.cjs +1 -1
- package/dist/config.d.cts +2 -1
- package/dist/config.d.cts.map +1 -0
- package/dist/config.d.mts +2 -1
- package/dist/config.d.mts.map +1 -0
- package/dist/config.mjs +1 -1
- package/dist/encryption-C8H-38Yy.mjs +42 -0
- package/dist/encryption-C8H-38Yy.mjs.map +1 -0
- package/dist/encryption-Dyf_r1h-.cjs +44 -0
- package/dist/encryption-Dyf_r1h-.cjs.map +1 -0
- package/dist/index.cjs +2125 -184
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +2143 -197
- package/dist/index.mjs.map +1 -1
- package/dist/{openapi--vOy9mo4.mjs → openapi-BfFlOBCG.mjs} +812 -49
- package/dist/openapi-BfFlOBCG.mjs.map +1 -0
- package/dist/{openapi-CHhTPief.cjs → openapi-Bt_1FDpT.cjs} +805 -42
- package/dist/openapi-Bt_1FDpT.cjs.map +1 -0
- package/dist/{openapi-react-query-o5iMi8tz.cjs → openapi-react-query-B-sNWHFU.cjs} +5 -5
- package/dist/openapi-react-query-B-sNWHFU.cjs.map +1 -0
- package/dist/{openapi-react-query-CcciaVu5.mjs → openapi-react-query-B6XTeGqS.mjs} +5 -5
- package/dist/openapi-react-query-B6XTeGqS.mjs.map +1 -0
- package/dist/openapi-react-query.cjs +1 -1
- package/dist/openapi-react-query.d.cts.map +1 -0
- package/dist/openapi-react-query.d.mts.map +1 -0
- package/dist/openapi-react-query.mjs +1 -1
- package/dist/openapi.cjs +2 -2
- package/dist/openapi.d.cts +1 -1
- package/dist/openapi.d.cts.map +1 -0
- package/dist/openapi.d.mts +1 -1
- package/dist/openapi.d.mts.map +1 -0
- package/dist/openapi.mjs +2 -2
- package/dist/storage-BUYQJgz7.cjs +4 -0
- package/dist/storage-BXoJvmv2.cjs +149 -0
- package/dist/storage-BXoJvmv2.cjs.map +1 -0
- package/dist/storage-C9PU_30f.mjs +101 -0
- package/dist/storage-C9PU_30f.mjs.map +1 -0
- package/dist/storage-DLJAYxzJ.mjs +3 -0
- package/dist/{types-b-vwGpqc.d.cts → types-BR0M2v_c.d.mts} +100 -1
- package/dist/types-BR0M2v_c.d.mts.map +1 -0
- package/dist/{types-DXgiA1sF.d.mts → types-BhkZc-vm.d.cts} +100 -1
- package/dist/types-BhkZc-vm.d.cts.map +1 -0
- package/examples/cron-example.ts +27 -27
- package/examples/env.ts +27 -27
- package/examples/function-example.ts +31 -31
- package/examples/gkm.config.json +20 -20
- package/examples/gkm.config.ts +8 -8
- package/examples/gkm.minimal.config.json +5 -5
- package/examples/gkm.production.config.json +25 -25
- package/examples/logger.ts +2 -2
- package/package.json +6 -6
- package/src/__tests__/EndpointGenerator.hooks.spec.ts +191 -191
- package/src/__tests__/config.spec.ts +55 -55
- package/src/__tests__/loadEnvFiles.spec.ts +93 -93
- package/src/__tests__/normalizeHooksConfig.spec.ts +58 -58
- package/src/__tests__/openapi-react-query.spec.ts +497 -497
- package/src/__tests__/openapi.spec.ts +428 -428
- package/src/__tests__/test-helpers.ts +77 -76
- package/src/auth/__tests__/credentials.spec.ts +204 -0
- package/src/auth/__tests__/index.spec.ts +168 -0
- package/src/auth/credentials.ts +187 -0
- package/src/auth/index.ts +226 -0
- package/src/build/__tests__/index-new.spec.ts +474 -474
- package/src/build/__tests__/manifests.spec.ts +333 -333
- package/src/build/bundler.ts +141 -0
- package/src/build/endpoint-analyzer.ts +236 -0
- package/src/build/handler-templates.ts +1253 -0
- package/src/build/index.ts +250 -179
- package/src/build/manifests.ts +52 -52
- package/src/build/providerResolver.ts +145 -145
- package/src/build/types.ts +64 -43
- package/src/config.ts +39 -37
- package/src/deploy/__tests__/docker.spec.ts +111 -0
- package/src/deploy/__tests__/dokploy.spec.ts +245 -0
- package/src/deploy/__tests__/init.spec.ts +662 -0
- package/src/deploy/docker.ts +128 -0
- package/src/deploy/dokploy.ts +204 -0
- package/src/deploy/index.ts +136 -0
- package/src/deploy/init.ts +484 -0
- package/src/deploy/types.ts +48 -0
- package/src/dev/__tests__/index.spec.ts +266 -266
- package/src/dev/index.ts +647 -593
- package/src/docker/__tests__/compose.spec.ts +531 -0
- package/src/docker/__tests__/templates.spec.ts +280 -0
- package/src/docker/compose.ts +273 -0
- package/src/docker/index.ts +230 -0
- package/src/docker/templates.ts +446 -0
- package/src/generators/CronGenerator.ts +72 -72
- package/src/generators/EndpointGenerator.ts +699 -398
- package/src/generators/FunctionGenerator.ts +84 -84
- package/src/generators/Generator.ts +72 -72
- package/src/generators/OpenApiTsGenerator.ts +589 -589
- package/src/generators/SubscriberGenerator.ts +124 -124
- package/src/generators/__tests__/CronGenerator.spec.ts +433 -433
- package/src/generators/__tests__/EndpointGenerator.spec.ts +532 -382
- package/src/generators/__tests__/FunctionGenerator.spec.ts +244 -244
- package/src/generators/__tests__/SubscriberGenerator.spec.ts +397 -382
- package/src/generators/index.ts +4 -4
- package/src/index.ts +628 -206
- package/src/init/__tests__/generators.spec.ts +334 -334
- package/src/init/__tests__/init.spec.ts +332 -332
- package/src/init/__tests__/utils.spec.ts +89 -89
- package/src/init/generators/config.ts +175 -175
- package/src/init/generators/docker.ts +41 -41
- package/src/init/generators/env.ts +72 -72
- package/src/init/generators/index.ts +1 -1
- package/src/init/generators/models.ts +64 -64
- package/src/init/generators/monorepo.ts +161 -161
- package/src/init/generators/package.ts +71 -71
- package/src/init/generators/source.ts +6 -6
- package/src/init/index.ts +203 -208
- package/src/init/templates/api.ts +115 -115
- package/src/init/templates/index.ts +75 -75
- package/src/init/templates/minimal.ts +98 -98
- package/src/init/templates/serverless.ts +89 -89
- package/src/init/templates/worker.ts +98 -98
- package/src/init/utils.ts +54 -56
- package/src/openapi-react-query.ts +194 -194
- package/src/openapi.ts +63 -63
- package/src/secrets/__tests__/encryption.spec.ts +226 -0
- package/src/secrets/__tests__/generator.spec.ts +319 -0
- package/src/secrets/__tests__/index.spec.ts +91 -0
- package/src/secrets/__tests__/storage.spec.ts +403 -0
- package/src/secrets/encryption.ts +91 -0
- package/src/secrets/generator.ts +164 -0
- package/src/secrets/index.ts +383 -0
- package/src/secrets/storage.ts +134 -0
- package/src/secrets/types.ts +53 -0
- package/src/types.ts +295 -176
- package/tsconfig.json +9 -0
- package/tsdown.config.ts +11 -8
- package/dist/config-Bq72aj8e.mjs.map +0 -1
- package/dist/config-CFls09Ey.cjs.map +0 -1
- package/dist/openapi--vOy9mo4.mjs.map +0 -1
- package/dist/openapi-CHhTPief.cjs.map +0 -1
- package/dist/openapi-react-query-CcciaVu5.mjs.map +0 -1
- package/dist/openapi-react-query-o5iMi8tz.cjs.map +0 -1
|
@@ -4,100 +4,100 @@ import { Subscriber } from '@geekmidas/constructs/subscribers';
|
|
|
4
4
|
import type { BuildContext } from '../build/types';
|
|
5
5
|
import type { SubscriberInfo } from '../types';
|
|
6
6
|
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
ConstructGenerator,
|
|
8
|
+
type GeneratedConstruct,
|
|
9
|
+
type GeneratorOptions,
|
|
10
10
|
} from './Generator';
|
|
11
11
|
|
|
12
12
|
export class SubscriberGenerator extends ConstructGenerator<
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
Subscriber<any, any, any, any, any, any>,
|
|
14
|
+
SubscriberInfo[]
|
|
15
15
|
> {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
16
|
+
isConstruct(value: any): value is Subscriber<any, any, any, any, any, any> {
|
|
17
|
+
return Subscriber.isSubscriber(value);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async build(
|
|
21
|
+
context: BuildContext,
|
|
22
|
+
constructs: GeneratedConstruct<Subscriber<any, any, any, any, any, any>>[],
|
|
23
|
+
outputDir: string,
|
|
24
|
+
options?: GeneratorOptions,
|
|
25
|
+
): Promise<SubscriberInfo[]> {
|
|
26
|
+
const provider = options?.provider || 'aws-lambda';
|
|
27
|
+
const logger = console;
|
|
28
|
+
const subscriberInfos: SubscriberInfo[] = [];
|
|
29
|
+
|
|
30
|
+
if (provider === 'server') {
|
|
31
|
+
// Generate subscribers.ts for server-based polling (even if empty)
|
|
32
|
+
await this.generateServerSubscribersFile(outputDir, constructs);
|
|
33
|
+
|
|
34
|
+
logger.log(
|
|
35
|
+
`Generated server subscribers file with ${constructs.length} subscribers (polling mode)`,
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
// Return empty array as server subscribers don't have individual handlers
|
|
39
|
+
return subscriberInfos;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (constructs.length === 0) {
|
|
43
|
+
return subscriberInfos;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (provider !== 'aws-lambda') {
|
|
47
|
+
return subscriberInfos;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Create subscribers subdirectory
|
|
51
|
+
const subscribersDir = join(outputDir, 'subscribers');
|
|
52
|
+
await mkdir(subscribersDir, { recursive: true });
|
|
53
|
+
|
|
54
|
+
// Generate subscriber handlers
|
|
55
|
+
for (const { key, construct, path } of constructs) {
|
|
56
|
+
const handlerFile = await this.generateSubscriberHandler(
|
|
57
|
+
subscribersDir,
|
|
58
|
+
path.relative,
|
|
59
|
+
key,
|
|
60
|
+
construct,
|
|
61
|
+
context,
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
subscriberInfos.push({
|
|
65
|
+
name: key,
|
|
66
|
+
handler: relative(process.cwd(), handlerFile).replace(
|
|
67
|
+
/\.ts$/,
|
|
68
|
+
'.handler',
|
|
69
|
+
),
|
|
70
|
+
subscribedEvents: construct.subscribedEvents || [],
|
|
71
|
+
timeout: construct.timeout,
|
|
72
|
+
memorySize: construct.memorySize,
|
|
73
|
+
environment: await construct.getEnvironment(),
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
logger.log(`Generated subscriber handler: ${key}`);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return subscriberInfos;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
private async generateSubscriberHandler(
|
|
83
|
+
outputDir: string,
|
|
84
|
+
sourceFile: string,
|
|
85
|
+
exportName: string,
|
|
86
|
+
_subscriber: Subscriber<any, any, any, any, any, any>,
|
|
87
|
+
context: BuildContext,
|
|
88
|
+
): Promise<string> {
|
|
89
|
+
const handlerFileName = `${exportName}.ts`;
|
|
90
|
+
const handlerPath = join(outputDir, handlerFileName);
|
|
91
|
+
|
|
92
|
+
const relativePath = relative(dirname(handlerPath), sourceFile);
|
|
93
|
+
const importPath = relativePath.replace(/\.ts$/, '.js');
|
|
94
|
+
|
|
95
|
+
const relativeEnvParserPath = relative(
|
|
96
|
+
dirname(handlerPath),
|
|
97
|
+
context.envParserPath,
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
const content = `import { AWSLambdaSubscriber } from '@geekmidas/constructs/aws';
|
|
101
101
|
import { ${exportName} } from '${importPath}';
|
|
102
102
|
import ${context.envParserImportPattern} from '${relativeEnvParserPath}';
|
|
103
103
|
|
|
@@ -106,44 +106,44 @@ const adapter = new AWSLambdaSubscriber(envParser, ${exportName});
|
|
|
106
106
|
export const handler = adapter.handler;
|
|
107
107
|
`;
|
|
108
108
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
await writeFile(handlerPath, content);
|
|
110
|
+
return handlerPath;
|
|
111
|
+
}
|
|
112
112
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
113
|
+
private async generateServerSubscribersFile(
|
|
114
|
+
outputDir: string,
|
|
115
|
+
subscribers: GeneratedConstruct<Subscriber<any, any, any, any, any, any>>[],
|
|
116
|
+
): Promise<string> {
|
|
117
|
+
// Ensure output directory exists
|
|
118
|
+
await mkdir(outputDir, { recursive: true });
|
|
119
119
|
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
const subscribersFileName = 'subscribers.ts';
|
|
121
|
+
const subscribersPath = join(outputDir, subscribersFileName);
|
|
122
122
|
|
|
123
|
-
|
|
124
|
-
|
|
123
|
+
// Group imports by file
|
|
124
|
+
const importsByFile = new Map<string, string[]>();
|
|
125
125
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
126
|
+
for (const { path, key } of subscribers) {
|
|
127
|
+
const relativePath = relative(dirname(subscribersPath), path.relative);
|
|
128
|
+
const importPath = relativePath.replace(/\.ts$/, '.js');
|
|
129
129
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
130
|
+
if (!importsByFile.has(importPath)) {
|
|
131
|
+
importsByFile.set(importPath, []);
|
|
132
|
+
}
|
|
133
|
+
importsByFile.get(importPath)?.push(key);
|
|
134
|
+
}
|
|
135
135
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
136
|
+
// Generate import statements
|
|
137
|
+
const imports = Array.from(importsByFile.entries())
|
|
138
|
+
.map(
|
|
139
|
+
([importPath, exports]) =>
|
|
140
|
+
`import { ${exports.join(', ')} } from '${importPath}';`,
|
|
141
|
+
)
|
|
142
|
+
.join('\n');
|
|
143
143
|
|
|
144
|
-
|
|
144
|
+
const allExportNames = subscribers.map(({ key }) => key);
|
|
145
145
|
|
|
146
|
-
|
|
146
|
+
const content = `/**
|
|
147
147
|
* Generated subscribers setup
|
|
148
148
|
*
|
|
149
149
|
* ⚠️ WARNING: This is for LOCAL DEVELOPMENT ONLY
|
|
@@ -194,7 +194,7 @@ export async function setupSubscribers(
|
|
|
194
194
|
return;
|
|
195
195
|
}
|
|
196
196
|
|
|
197
|
-
const serviceDiscovery = ServiceDiscovery.getInstance(
|
|
197
|
+
const serviceDiscovery = ServiceDiscovery.getInstance(envParser);
|
|
198
198
|
|
|
199
199
|
// Create connection once, outside the loop (more efficient)
|
|
200
200
|
// EventConnectionFactory automatically determines the right connection type
|
|
@@ -269,7 +269,7 @@ export async function setupSubscribers(
|
|
|
269
269
|
}
|
|
270
270
|
`;
|
|
271
271
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
272
|
+
await writeFile(subscribersPath, content);
|
|
273
|
+
return subscribersPath;
|
|
274
|
+
}
|
|
275
275
|
}
|