@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.
- package/FUNCTION_CRON_SUPPORT.md +266 -0
- package/README.md +21 -4
- package/dist/CronGenerator-ClbRcmz_.mjs +53 -0
- package/dist/CronGenerator-ClbRcmz_.mjs.map +1 -0
- package/dist/CronGenerator-Ctl4USy4.cjs +59 -0
- package/dist/CronGenerator-Ctl4USy4.cjs.map +1 -0
- package/dist/EndpointGenerator-Dj7AumHi.cjs +164 -0
- package/dist/EndpointGenerator-Dj7AumHi.cjs.map +1 -0
- package/dist/EndpointGenerator-uBA1ixUw.mjs +158 -0
- package/dist/EndpointGenerator-uBA1ixUw.mjs.map +1 -0
- package/dist/FunctionGenerator-DN681IUn.cjs +58 -0
- package/dist/FunctionGenerator-DN681IUn.cjs.map +1 -0
- package/dist/FunctionGenerator-crAa-JC7.mjs +52 -0
- package/dist/FunctionGenerator-crAa-JC7.mjs.map +1 -0
- package/dist/Generator-C3tYSTQY.cjs +47 -0
- package/dist/Generator-C3tYSTQY.cjs.map +1 -0
- package/dist/Generator-CDt4pB3W.mjs +41 -0
- package/dist/Generator-CDt4pB3W.mjs.map +1 -0
- package/dist/__tests__/config.spec.cjs +98 -0
- package/dist/__tests__/config.spec.cjs.map +1 -0
- package/dist/__tests__/config.spec.mjs +97 -0
- package/dist/__tests__/config.spec.mjs.map +1 -0
- package/dist/__tests__/test-helpers.cjs +14 -0
- package/dist/__tests__/test-helpers.mjs +4 -0
- package/dist/build/__tests__/index-new.spec.cjs +286 -0
- package/dist/build/__tests__/index-new.spec.cjs.map +1 -0
- package/dist/build/__tests__/index-new.spec.mjs +285 -0
- package/dist/build/__tests__/index-new.spec.mjs.map +1 -0
- package/dist/build/index.cjs +11 -0
- package/dist/build/index.mjs +11 -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-BZdwxCLW.mjs +64 -0
- package/dist/build-BZdwxCLW.mjs.map +1 -0
- package/dist/build-BfQFnU5-.cjs +70 -0
- package/dist/build-BfQFnU5-.cjs.map +1 -0
- package/dist/{chunk-CUT6urMc.cjs → chunk-CsX-DzYB.cjs} +12 -0
- package/dist/config-CXxYmz_o.mjs +30 -0
- package/dist/config-CXxYmz_o.mjs.map +1 -0
- package/dist/config-RcNESK0T.cjs +36 -0
- package/dist/config-RcNESK0T.cjs.map +1 -0
- package/dist/config.cjs +1 -1
- package/dist/config.mjs +1 -1
- package/dist/esm-9eeZntth.mjs +3777 -0
- package/dist/esm-9eeZntth.mjs.map +1 -0
- package/dist/esm-Crmo4h9t.cjs +4392 -0
- package/dist/esm-Crmo4h9t.cjs.map +1 -0
- package/dist/esm-CsJbr7gi.mjs +3 -0
- package/dist/esm-w09tAC4l.cjs +8 -0
- 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/__tests__/CronGenerator.spec.cjs +216 -0
- package/dist/generators/__tests__/CronGenerator.spec.cjs.map +1 -0
- package/dist/generators/__tests__/CronGenerator.spec.mjs +215 -0
- package/dist/generators/__tests__/CronGenerator.spec.mjs.map +1 -0
- package/dist/generators/__tests__/EndpointGenerator.spec.cjs +182 -0
- package/dist/generators/__tests__/EndpointGenerator.spec.cjs.map +1 -0
- package/dist/generators/__tests__/EndpointGenerator.spec.mjs +181 -0
- package/dist/generators/__tests__/EndpointGenerator.spec.mjs.map +1 -0
- package/dist/generators/__tests__/FunctionGenerator.spec.cjs +152 -0
- package/dist/generators/__tests__/FunctionGenerator.spec.cjs.map +1 -0
- package/dist/generators/__tests__/FunctionGenerator.spec.mjs +151 -0
- package/dist/generators/__tests__/FunctionGenerator.spec.mjs.map +1 -0
- package/dist/generators/index.cjs +10 -0
- package/dist/generators/index.mjs +7 -0
- package/dist/generators-CsLujGXs.mjs +0 -0
- package/dist/generators-_pY7sHy1.cjs +0 -0
- package/dist/index.cjs +68 -26
- package/dist/index.cjs.map +1 -0
- package/dist/index.mjs +67 -25
- package/dist/index.mjs.map +1 -0
- package/dist/manifests-BTtfDMX8.cjs +26 -0
- package/dist/manifests-BTtfDMX8.cjs.map +1 -0
- package/dist/manifests-HX4z4kkz.mjs +20 -0
- package/dist/manifests-HX4z4kkz.mjs.map +1 -0
- package/dist/{openapi-CksVdkh2.mjs → openapi-BivnatiC.mjs} +8 -6
- package/dist/openapi-BivnatiC.mjs.map +1 -0
- package/dist/{openapi-D4QQJUPY.cjs → openapi-DW-qF3oW.cjs} +9 -7
- package/dist/openapi-DW-qF3oW.cjs.map +1 -0
- package/dist/{openapi-react-query-C1JLYUOs.cjs → openapi-react-query-J0BzBHhN.cjs} +4 -3
- package/dist/openapi-react-query-J0BzBHhN.cjs.map +1 -0
- package/dist/{openapi-react-query-DpT3XHFC.mjs → openapi-react-query-lgS7AVEz.mjs} +3 -2
- package/dist/openapi-react-query-lgS7AVEz.mjs.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-Cs-0YCaP.cjs +114 -0
- package/dist/providerResolver-Cs-0YCaP.cjs.map +1 -0
- package/dist/test-helpers-ARd8GDgx.cjs +199 -0
- package/dist/test-helpers-ARd8GDgx.cjs.map +1 -0
- package/dist/test-helpers-DdVBk23F.mjs +133 -0
- package/dist/test-helpers-DdVBk23F.mjs.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/package.json +35 -14
- package/src/__tests__/config.spec.ts +110 -0
- package/src/__tests__/test-helpers.ts +178 -0
- package/src/build/__tests__/index-new.spec.ts +578 -0
- package/src/build/index.ts +136 -0
- package/src/build/manifests.ts +32 -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 +97 -0
- package/src/generators/EndpointGenerator.ts +290 -0
- package/src/generators/FunctionGenerator.ts +96 -0
- package/src/generators/Generator.ts +95 -0
- package/src/generators/__tests__/CronGenerator.spec.ts +445 -0
- package/src/generators/__tests__/EndpointGenerator.spec.ts +372 -0
- package/src/generators/__tests__/FunctionGenerator.spec.ts +257 -0
- package/src/generators/index.ts +8 -0
- package/src/index.ts +57 -22
- package/src/openapi.ts +4 -3
- package/src/types.ts +73 -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
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { Endpoint } from "@geekmidas/api/server";
|
|
2
|
-
import fg from "fast-glob";
|
|
3
|
-
|
|
4
|
-
//#region src/loadEndpoints.ts
|
|
5
|
-
async function loadEndpoints(routes) {
|
|
6
|
-
const logger = console;
|
|
7
|
-
const files = await fg.stream(routes, {
|
|
8
|
-
cwd: process.cwd(),
|
|
9
|
-
absolute: true
|
|
10
|
-
});
|
|
11
|
-
const endpoints = [];
|
|
12
|
-
for await (const f of files) try {
|
|
13
|
-
const file = f.toString();
|
|
14
|
-
const module = await import(file);
|
|
15
|
-
for (const [exportName, exportValue] of Object.entries(module)) if (Endpoint.isEndpoint(exportValue)) {
|
|
16
|
-
exportValue.operationId = exportName;
|
|
17
|
-
endpoints.push({
|
|
18
|
-
name: exportName,
|
|
19
|
-
endpoint: exportValue,
|
|
20
|
-
file
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
} catch (error) {
|
|
24
|
-
logger.warn(`Failed to load ${f}:`, error.message);
|
|
25
|
-
throw new Error("Failed to load endpoints. Please check the logs for details.");
|
|
26
|
-
}
|
|
27
|
-
return endpoints;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
//#endregion
|
|
31
|
-
export { loadEndpoints };
|
package/dist/loadEndpoints.cjs
DELETED
package/dist/loadEndpoints.mjs
DELETED
package/src/build.ts
DELETED
|
@@ -1,305 +0,0 @@
|
|
|
1
|
-
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { dirname, join, relative } from 'path';
|
|
3
|
-
import { loadConfig } from './config.js';
|
|
4
|
-
import { loadEndpoints } from './loadEndpoints.js';
|
|
5
|
-
import type {
|
|
6
|
-
BuildOptions,
|
|
7
|
-
Provider,
|
|
8
|
-
RouteInfo,
|
|
9
|
-
RoutesManifest,
|
|
10
|
-
} from './types.js';
|
|
11
|
-
|
|
12
|
-
const logger = console;
|
|
13
|
-
export async function buildCommand(options: BuildOptions): Promise<void> {
|
|
14
|
-
logger.log(`Building with providers: ${options.providers.join(', ')}`);
|
|
15
|
-
|
|
16
|
-
const config = await loadConfig();
|
|
17
|
-
logger.log(`Loading routes from: ${config.routes}`);
|
|
18
|
-
logger.log(`Using envParser: ${config.envParser}`);
|
|
19
|
-
|
|
20
|
-
// Parse envParser configuration
|
|
21
|
-
const [envParserPath, envParserName] = config.envParser.split('#');
|
|
22
|
-
const envParserImportPattern = !envParserName
|
|
23
|
-
? 'envParser'
|
|
24
|
-
: envParserName === 'envParser'
|
|
25
|
-
? '{ envParser }'
|
|
26
|
-
: `{ ${envParserName} as envParser }`;
|
|
27
|
-
|
|
28
|
-
// Parse logger configuration
|
|
29
|
-
const [loggerPath, loggerName] = config.logger.split('#');
|
|
30
|
-
const loggerImportPattern = !loggerName
|
|
31
|
-
? 'logger'
|
|
32
|
-
: loggerName === 'logger'
|
|
33
|
-
? '{ logger }'
|
|
34
|
-
: `{ ${loggerName} as logger }`;
|
|
35
|
-
|
|
36
|
-
// Load all endpoints using the refactored function
|
|
37
|
-
const loadedEndpoints = await loadEndpoints(config.routes);
|
|
38
|
-
|
|
39
|
-
if (loadedEndpoints.length === 0) {
|
|
40
|
-
logger.log('No endpoints found to process');
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const allEndpoints = loadedEndpoints.map(({ name, endpoint, file }) => {
|
|
45
|
-
const routeInfo: RouteInfo = {
|
|
46
|
-
path: endpoint._path,
|
|
47
|
-
method: endpoint.method,
|
|
48
|
-
handler: '', // Will be filled in later
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
logger.log(
|
|
52
|
-
`Found endpoint: ${name} - ${routeInfo.method} ${routeInfo.path}`,
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
return {
|
|
56
|
-
file: relative(process.cwd(), file),
|
|
57
|
-
exportName: name,
|
|
58
|
-
endpoint,
|
|
59
|
-
routeInfo,
|
|
60
|
-
};
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
// Process each provider
|
|
64
|
-
for (const provider of options.providers) {
|
|
65
|
-
const routes: RouteInfo[] = [];
|
|
66
|
-
const outputDir = join(process.cwd(), '.gkm', provider);
|
|
67
|
-
|
|
68
|
-
// Ensure output directory exists
|
|
69
|
-
await mkdir(outputDir, { recursive: true });
|
|
70
|
-
|
|
71
|
-
logger.log(`\nGenerating handlers for provider: ${provider}`);
|
|
72
|
-
|
|
73
|
-
// Generate handlers based on provider
|
|
74
|
-
if (provider === 'server') {
|
|
75
|
-
// Generate single server file with all endpoints
|
|
76
|
-
const serverFile = await generateServerFile(
|
|
77
|
-
outputDir,
|
|
78
|
-
allEndpoints,
|
|
79
|
-
envParserPath,
|
|
80
|
-
envParserImportPattern,
|
|
81
|
-
loggerPath,
|
|
82
|
-
loggerImportPattern,
|
|
83
|
-
options.enableOpenApi || false,
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
routes.push({
|
|
87
|
-
path: '*',
|
|
88
|
-
method: 'ALL',
|
|
89
|
-
handler: relative(process.cwd(), serverFile),
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
logger.log(
|
|
93
|
-
`Generated server app with ${allEndpoints.length} endpoints${options.enableOpenApi ? ' (OpenAPI enabled)' : ''}`,
|
|
94
|
-
);
|
|
95
|
-
} else {
|
|
96
|
-
// Generate individual handler files for AWS providers
|
|
97
|
-
for (const { file, exportName, routeInfo } of allEndpoints) {
|
|
98
|
-
const handlerFile = await generateHandlerFile(
|
|
99
|
-
outputDir,
|
|
100
|
-
file,
|
|
101
|
-
exportName,
|
|
102
|
-
provider,
|
|
103
|
-
routeInfo,
|
|
104
|
-
envParserPath,
|
|
105
|
-
envParserImportPattern,
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
routes.push({
|
|
109
|
-
...routeInfo,
|
|
110
|
-
handler: relative(process.cwd(), handlerFile).replace(
|
|
111
|
-
/\.ts$/,
|
|
112
|
-
'.handler',
|
|
113
|
-
),
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
logger.log(
|
|
117
|
-
`Generated handler for ${routeInfo.method} ${routeInfo.path}`,
|
|
118
|
-
);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// Generate routes.json
|
|
123
|
-
const manifest: RoutesManifest = { routes };
|
|
124
|
-
const manifestPath = join(outputDir, 'routes.json');
|
|
125
|
-
await writeFile(manifestPath, JSON.stringify(manifest, null, 2));
|
|
126
|
-
|
|
127
|
-
logger.log(
|
|
128
|
-
`Generated ${routes.length} handlers in ${relative(process.cwd(), outputDir)}`,
|
|
129
|
-
);
|
|
130
|
-
logger.log(`Routes manifest: ${relative(process.cwd(), manifestPath)}`);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
async function generateServerFile(
|
|
135
|
-
outputDir: string,
|
|
136
|
-
endpoints: Array<{
|
|
137
|
-
file: string;
|
|
138
|
-
exportName: string;
|
|
139
|
-
endpoint: any;
|
|
140
|
-
routeInfo: RouteInfo;
|
|
141
|
-
}>,
|
|
142
|
-
envParserPath: string,
|
|
143
|
-
envParserImportPattern: string,
|
|
144
|
-
loggerPath: string,
|
|
145
|
-
loggerImportPattern: string,
|
|
146
|
-
enableOpenApi: boolean,
|
|
147
|
-
): Promise<string> {
|
|
148
|
-
const serverFileName = 'app.ts';
|
|
149
|
-
const serverPath = join(outputDir, serverFileName);
|
|
150
|
-
|
|
151
|
-
// Group imports by file
|
|
152
|
-
const importsByFile = new Map<string, string[]>();
|
|
153
|
-
|
|
154
|
-
for (const { file, exportName } of endpoints) {
|
|
155
|
-
const relativePath = relative(dirname(serverPath), file);
|
|
156
|
-
const importPath = relativePath.replace(/\.ts$/, '.js');
|
|
157
|
-
|
|
158
|
-
if (!importsByFile.has(importPath)) {
|
|
159
|
-
importsByFile.set(importPath, []);
|
|
160
|
-
}
|
|
161
|
-
importsByFile.get(importPath)!.push(exportName);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
const relativeEnvParserPath = relative(dirname(serverPath), envParserPath);
|
|
165
|
-
const relativeLoggerPath = relative(dirname(serverPath), loggerPath);
|
|
166
|
-
|
|
167
|
-
// Generate import statements
|
|
168
|
-
const imports = Array.from(importsByFile.entries())
|
|
169
|
-
.map(
|
|
170
|
-
([importPath, exports]) =>
|
|
171
|
-
`import { ${exports.join(', ')} } from '${importPath}';`,
|
|
172
|
-
)
|
|
173
|
-
.join('\n');
|
|
174
|
-
|
|
175
|
-
const allExportNames = endpoints.map(({ exportName }) => exportName);
|
|
176
|
-
|
|
177
|
-
const content = `import { HonoEndpoint } from '@geekmidas/api/hono';
|
|
178
|
-
import { Endpoint } from '@geekmidas/api/server';
|
|
179
|
-
import { ServiceDiscovery } from '@geekmidas/api/services';
|
|
180
|
-
import { Hono } from 'hono';
|
|
181
|
-
import ${envParserImportPattern} from '${relativeEnvParserPath}';
|
|
182
|
-
import ${loggerImportPattern} from '${relativeLoggerPath}';
|
|
183
|
-
${imports}
|
|
184
|
-
|
|
185
|
-
export function createApp(app?: Hono, enableOpenApi: boolean = ${enableOpenApi}): Hono {
|
|
186
|
-
const honoApp = app || new Hono();
|
|
187
|
-
|
|
188
|
-
const endpoints: Endpoint<any, any, any, any, any, any, any>[] = [
|
|
189
|
-
${allExportNames.join(',\n ')}
|
|
190
|
-
];
|
|
191
|
-
|
|
192
|
-
const serviceDiscovery = ServiceDiscovery.getInstance(
|
|
193
|
-
logger,
|
|
194
|
-
envParser
|
|
195
|
-
);
|
|
196
|
-
|
|
197
|
-
// Configure OpenAPI options based on enableOpenApi flag
|
|
198
|
-
const openApiOptions: any = enableOpenApi ? {
|
|
199
|
-
docsPath: '/docs',
|
|
200
|
-
openApiOptions: {
|
|
201
|
-
title: 'API Documentation',
|
|
202
|
-
version: '1.0.0',
|
|
203
|
-
description: 'Generated API documentation'
|
|
204
|
-
}
|
|
205
|
-
} : { docsPath: false };
|
|
206
|
-
|
|
207
|
-
HonoEndpoint.addRoutes(endpoints, serviceDiscovery, honoApp, openApiOptions);
|
|
208
|
-
|
|
209
|
-
return honoApp;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
// Default export for convenience
|
|
213
|
-
export default createApp;
|
|
214
|
-
`;
|
|
215
|
-
|
|
216
|
-
await writeFile(serverPath, content);
|
|
217
|
-
return serverPath;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
async function generateHandlerFile(
|
|
221
|
-
outputDir: string,
|
|
222
|
-
sourceFile: string,
|
|
223
|
-
exportName: string,
|
|
224
|
-
provider: Provider,
|
|
225
|
-
_routeInfo: RouteInfo,
|
|
226
|
-
envParserPath: string,
|
|
227
|
-
envParserImportPattern: string,
|
|
228
|
-
): Promise<string> {
|
|
229
|
-
const handlerFileName = `${exportName}.ts`;
|
|
230
|
-
const handlerPath = join(outputDir, handlerFileName);
|
|
231
|
-
|
|
232
|
-
const relativePath = relative(dirname(handlerPath), sourceFile);
|
|
233
|
-
const importPath = relativePath.replace(/\.ts$/, '.js');
|
|
234
|
-
|
|
235
|
-
const relativeEnvParserPath = relative(dirname(handlerPath), envParserPath);
|
|
236
|
-
|
|
237
|
-
let content: string;
|
|
238
|
-
|
|
239
|
-
switch (provider) {
|
|
240
|
-
case 'aws-apigatewayv1':
|
|
241
|
-
content = generateAWSApiGatewayV1Handler(
|
|
242
|
-
importPath,
|
|
243
|
-
exportName,
|
|
244
|
-
relativeEnvParserPath,
|
|
245
|
-
envParserImportPattern,
|
|
246
|
-
);
|
|
247
|
-
break;
|
|
248
|
-
case 'aws-apigatewayv2':
|
|
249
|
-
content = generateAWSApiGatewayV2Handler(
|
|
250
|
-
importPath,
|
|
251
|
-
exportName,
|
|
252
|
-
relativeEnvParserPath,
|
|
253
|
-
envParserImportPattern,
|
|
254
|
-
);
|
|
255
|
-
break;
|
|
256
|
-
case 'server':
|
|
257
|
-
content = generateServerHandler(importPath, exportName);
|
|
258
|
-
break;
|
|
259
|
-
default:
|
|
260
|
-
throw new Error(`Unsupported provider: ${provider}`);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
await writeFile(handlerPath, content);
|
|
264
|
-
return handlerPath;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
function generateAWSApiGatewayV1Handler(
|
|
268
|
-
importPath: string,
|
|
269
|
-
exportName: string,
|
|
270
|
-
envParserPath: string,
|
|
271
|
-
envParserImportPattern: string,
|
|
272
|
-
): string {
|
|
273
|
-
return `import { AmazonApiGatewayV1Endpoint } from '@geekmidas/api/aws-apigateway';
|
|
274
|
-
import { ${exportName} } from '${importPath}';
|
|
275
|
-
import ${envParserImportPattern} from '${envParserPath}';
|
|
276
|
-
|
|
277
|
-
const adapter = new AmazonApiGatewayV1Endpoint(envParser, ${exportName});
|
|
278
|
-
|
|
279
|
-
export const handler = adapter.handler;
|
|
280
|
-
`;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
function generateAWSApiGatewayV2Handler(
|
|
284
|
-
importPath: string,
|
|
285
|
-
exportName: string,
|
|
286
|
-
envParserPath: string,
|
|
287
|
-
envParserImportPattern: string,
|
|
288
|
-
): string {
|
|
289
|
-
return `import { AmazonApiGatewayV2Endpoint } from '@geekmidas/api/aws-apigateway';
|
|
290
|
-
import { ${exportName} } from '${importPath}';
|
|
291
|
-
import ${envParserImportPattern} from '${envParserPath}';
|
|
292
|
-
|
|
293
|
-
const adapter = new AmazonApiGatewayV2Endpoint(envParser, ${exportName});
|
|
294
|
-
|
|
295
|
-
export const handler = adapter.handler;
|
|
296
|
-
`;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
function generateServerHandler(importPath: string, exportName: string): string {
|
|
300
|
-
return `import { ${exportName} } from '${importPath}';
|
|
301
|
-
|
|
302
|
-
// Server handler - implement based on your server framework
|
|
303
|
-
export const handler = ${exportName};
|
|
304
|
-
`;
|
|
305
|
-
}
|
package/src/loadEndpoints.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { Endpoint } from '@geekmidas/api/server';
|
|
2
|
-
import fg from 'fast-glob';
|
|
3
|
-
import type { Routes } from './types';
|
|
4
|
-
|
|
5
|
-
export interface LoadedEndpoint {
|
|
6
|
-
name: string;
|
|
7
|
-
endpoint: Endpoint<any, any, any, any, any, any>;
|
|
8
|
-
file: string;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export async function loadEndpoints(routes: Routes): Promise<LoadedEndpoint[]> {
|
|
12
|
-
const logger = console;
|
|
13
|
-
|
|
14
|
-
// Find all endpoint files
|
|
15
|
-
const files = await fg.stream(routes, {
|
|
16
|
-
cwd: process.cwd(),
|
|
17
|
-
absolute: true,
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
// Load endpoints
|
|
21
|
-
const endpoints: LoadedEndpoint[] = [];
|
|
22
|
-
|
|
23
|
-
for await (const f of files) {
|
|
24
|
-
try {
|
|
25
|
-
const file = f.toString();
|
|
26
|
-
const module = await import(file);
|
|
27
|
-
|
|
28
|
-
// Check all exports for endpoints
|
|
29
|
-
for (const [exportName, exportValue] of Object.entries(module)) {
|
|
30
|
-
if (Endpoint.isEndpoint(exportValue)) {
|
|
31
|
-
exportValue.operationId = exportName;
|
|
32
|
-
endpoints.push({
|
|
33
|
-
name: exportName,
|
|
34
|
-
endpoint: exportValue as Endpoint<any, any, any, any, any, any>,
|
|
35
|
-
file,
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
} catch (error) {
|
|
40
|
-
logger.warn(`Failed to load ${f}:`, (error as Error).message);
|
|
41
|
-
throw new Error(
|
|
42
|
-
'Failed to load endpoints. Please check the logs for details.',
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return endpoints;
|
|
48
|
-
}
|