@geekmidas/cli 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -13
- package/dist/{CronGenerator-Ctl4USy4.cjs → CronGenerator-1PflEYe2.cjs} +8 -7
- package/dist/CronGenerator-1PflEYe2.cjs.map +1 -0
- package/dist/{CronGenerator-ClbRcmz_.mjs → CronGenerator-DXRfHQcV.mjs} +6 -5
- package/dist/CronGenerator-DXRfHQcV.mjs.map +1 -0
- package/dist/{EndpointGenerator-Dj7AumHi.cjs → EndpointGenerator-BbGrDiCP.cjs} +134 -34
- package/dist/EndpointGenerator-BbGrDiCP.cjs.map +1 -0
- package/dist/{EndpointGenerator-uBA1ixUw.mjs → EndpointGenerator-BmZ9BxbO.mjs} +132 -32
- package/dist/EndpointGenerator-BmZ9BxbO.mjs.map +1 -0
- package/dist/{FunctionGenerator-DN681IUn.cjs → FunctionGenerator-Clw64SwQ.cjs} +8 -7
- package/dist/FunctionGenerator-Clw64SwQ.cjs.map +1 -0
- package/dist/{FunctionGenerator-crAa-JC7.mjs → FunctionGenerator-DOEB_yPh.mjs} +6 -5
- package/dist/FunctionGenerator-DOEB_yPh.mjs.map +1 -0
- package/dist/{Generator-C3tYSTQY.cjs → Generator-CDoEXCDg.cjs} +2 -2
- package/dist/Generator-CDoEXCDg.cjs.map +1 -0
- package/dist/{Generator-CDt4pB3W.mjs → Generator-UanJW0_V.mjs} +1 -1
- package/dist/Generator-UanJW0_V.mjs.map +1 -0
- package/dist/SubscriberGenerator-BfMZCVNy.cjs +204 -0
- package/dist/SubscriberGenerator-BfMZCVNy.cjs.map +1 -0
- package/dist/SubscriberGenerator-D2u00NI3.mjs +198 -0
- package/dist/SubscriberGenerator-D2u00NI3.mjs.map +1 -0
- package/dist/build/index.cjs +10 -9
- package/dist/build/index.mjs +8 -7
- package/dist/build/manifests.cjs +1 -1
- package/dist/build/manifests.mjs +1 -1
- package/dist/build/providerResolver.cjs +1 -1
- package/dist/build-BBhlEjf5.cjs +89 -0
- package/dist/build-BBhlEjf5.cjs.map +1 -0
- package/dist/build-kY-lG30Q.mjs +83 -0
- package/dist/build-kY-lG30Q.mjs.map +1 -0
- package/dist/{chunk-CsX-DzYB.cjs → chunk-CUT6urMc.cjs} +0 -12
- package/dist/{config-RcNESK0T.cjs → config-D1EpSGk6.cjs} +2 -2
- package/dist/{config-RcNESK0T.cjs.map → config-D1EpSGk6.cjs.map} +1 -1
- package/dist/{config-CXxYmz_o.mjs → config-U-mdW-7Y.mjs} +1 -1
- package/dist/{config-CXxYmz_o.mjs.map → config-U-mdW-7Y.mjs.map} +1 -1
- package/dist/config.cjs +1 -1
- package/dist/config.mjs +1 -1
- package/dist/generators/CronGenerator.cjs +2 -2
- package/dist/generators/CronGenerator.mjs +2 -2
- package/dist/generators/EndpointGenerator.cjs +2 -2
- package/dist/generators/EndpointGenerator.mjs +2 -2
- package/dist/generators/FunctionGenerator.cjs +2 -2
- package/dist/generators/FunctionGenerator.mjs +2 -2
- package/dist/generators/Generator.cjs +1 -1
- package/dist/generators/Generator.mjs +1 -1
- package/dist/generators/SubscriberGenerator.cjs +4 -0
- package/dist/generators/SubscriberGenerator.mjs +4 -0
- package/dist/generators/index.cjs +8 -6
- package/dist/generators/index.mjs +6 -5
- package/dist/index.cjs +18 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +15 -11
- package/dist/index.mjs.map +1 -1
- package/dist/{manifests-HX4z4kkz.mjs → manifests-BrJXpHrf.mjs} +5 -4
- package/dist/manifests-BrJXpHrf.mjs.map +1 -0
- package/dist/{manifests-BTtfDMX8.cjs → manifests-D0saShvH.cjs} +6 -5
- package/dist/manifests-D0saShvH.cjs.map +1 -0
- package/dist/{openapi-BivnatiC.mjs → openapi-BQx3_JbM.mjs} +4 -4
- package/dist/openapi-BQx3_JbM.mjs.map +1 -0
- package/dist/{openapi-DW-qF3oW.cjs → openapi-CMLr04cz.cjs} +6 -6
- package/dist/openapi-CMLr04cz.cjs.map +1 -0
- package/dist/{openapi-react-query-lgS7AVEz.mjs → openapi-react-query-DbrWwQzb.mjs} +3 -2
- package/dist/openapi-react-query-DbrWwQzb.mjs.map +1 -0
- package/dist/{openapi-react-query-J0BzBHhN.cjs → openapi-react-query-Dvjqx_Eo.cjs} +4 -3
- package/dist/openapi-react-query-Dvjqx_Eo.cjs.map +1 -0
- package/dist/openapi-react-query.cjs +1 -1
- package/dist/openapi-react-query.mjs +1 -1
- package/dist/openapi.cjs +4 -4
- package/dist/openapi.mjs +4 -4
- package/dist/{providerResolver-Cs-0YCaP.cjs → providerResolver-DgvzNfP4.cjs} +1 -1
- package/dist/{providerResolver-Cs-0YCaP.cjs.map → providerResolver-DgvzNfP4.cjs.map} +1 -1
- package/examples/cron-example.ts +1 -1
- package/examples/function-example.ts +1 -1
- package/examples/logger.ts +1 -1
- package/package.json +6 -3
- package/src/__tests__/openapi-react-query.spec.ts +506 -0
- package/src/__tests__/openapi.spec.ts +362 -0
- package/src/__tests__/test-helpers.ts +10 -8
- package/src/build/__tests__/index-new.spec.ts +41 -42
- package/src/build/index.ts +89 -28
- package/src/build/manifests.ts +4 -1
- package/src/build/types.ts +2 -2
- package/src/generators/CronGenerator.ts +3 -2
- package/src/generators/EndpointGenerator.ts +141 -42
- package/src/generators/FunctionGenerator.ts +3 -2
- package/src/generators/Generator.ts +1 -1
- package/src/generators/SubscriberGenerator.ts +271 -0
- package/src/generators/__tests__/CronGenerator.spec.ts +1 -1
- package/src/generators/__tests__/EndpointGenerator.spec.ts +33 -11
- package/src/generators/__tests__/FunctionGenerator.spec.ts +21 -22
- package/src/generators/__tests__/SubscriberGenerator.spec.ts +341 -0
- package/src/generators/index.ts +1 -0
- package/src/openapi-react-query.ts +2 -1
- package/src/openapi.ts +1 -1
- package/src/types.ts +18 -0
- package/dist/CronGenerator-ClbRcmz_.mjs.map +0 -1
- package/dist/CronGenerator-Ctl4USy4.cjs.map +0 -1
- package/dist/EndpointGenerator-Dj7AumHi.cjs.map +0 -1
- package/dist/EndpointGenerator-uBA1ixUw.mjs.map +0 -1
- package/dist/FunctionGenerator-DN681IUn.cjs.map +0 -1
- package/dist/FunctionGenerator-crAa-JC7.mjs.map +0 -1
- package/dist/Generator-C3tYSTQY.cjs.map +0 -1
- package/dist/Generator-CDt4pB3W.mjs.map +0 -1
- package/dist/__tests__/config.spec.cjs +0 -98
- package/dist/__tests__/config.spec.cjs.map +0 -1
- package/dist/__tests__/config.spec.mjs +0 -97
- package/dist/__tests__/config.spec.mjs.map +0 -1
- package/dist/__tests__/test-helpers.cjs +0 -14
- package/dist/__tests__/test-helpers.mjs +0 -4
- package/dist/build/__tests__/index-new.spec.cjs +0 -286
- package/dist/build/__tests__/index-new.spec.cjs.map +0 -1
- package/dist/build/__tests__/index-new.spec.mjs +0 -285
- package/dist/build/__tests__/index-new.spec.mjs.map +0 -1
- package/dist/build-BZdwxCLW.mjs +0 -64
- package/dist/build-BZdwxCLW.mjs.map +0 -1
- package/dist/build-BfQFnU5-.cjs +0 -70
- package/dist/build-BfQFnU5-.cjs.map +0 -1
- package/dist/esm-9eeZntth.mjs +0 -3777
- package/dist/esm-9eeZntth.mjs.map +0 -1
- package/dist/esm-Crmo4h9t.cjs +0 -4392
- package/dist/esm-Crmo4h9t.cjs.map +0 -1
- package/dist/esm-CsJbr7gi.mjs +0 -3
- package/dist/esm-w09tAC4l.cjs +0 -8
- package/dist/generators/__tests__/CronGenerator.spec.cjs +0 -216
- package/dist/generators/__tests__/CronGenerator.spec.cjs.map +0 -1
- package/dist/generators/__tests__/CronGenerator.spec.mjs +0 -215
- package/dist/generators/__tests__/CronGenerator.spec.mjs.map +0 -1
- package/dist/generators/__tests__/EndpointGenerator.spec.cjs +0 -182
- package/dist/generators/__tests__/EndpointGenerator.spec.cjs.map +0 -1
- package/dist/generators/__tests__/EndpointGenerator.spec.mjs +0 -181
- package/dist/generators/__tests__/EndpointGenerator.spec.mjs.map +0 -1
- package/dist/generators/__tests__/FunctionGenerator.spec.cjs +0 -152
- package/dist/generators/__tests__/FunctionGenerator.spec.cjs.map +0 -1
- package/dist/generators/__tests__/FunctionGenerator.spec.mjs +0 -151
- package/dist/generators/__tests__/FunctionGenerator.spec.mjs.map +0 -1
- package/dist/manifests-BTtfDMX8.cjs.map +0 -1
- package/dist/manifests-HX4z4kkz.mjs.map +0 -1
- package/dist/openapi-BivnatiC.mjs.map +0 -1
- package/dist/openapi-DW-qF3oW.cjs.map +0 -1
- package/dist/openapi-react-query-J0BzBHhN.cjs.map +0 -1
- package/dist/openapi-react-query-lgS7AVEz.mjs.map +0 -1
- package/dist/test-helpers-ARd8GDgx.cjs +0 -199
- package/dist/test-helpers-ARd8GDgx.cjs.map +0 -1
- package/dist/test-helpers-DdVBk23F.mjs +0 -133
- package/dist/test-helpers-DdVBk23F.mjs.map +0 -1
- /package/dist/{generators-_pY7sHy1.cjs → generators-CEKtVh81.cjs} +0 -0
|
@@ -1,285 +0,0 @@
|
|
|
1
|
-
import "../../esm-9eeZntth.mjs";
|
|
2
|
-
import "../../config-CXxYmz_o.mjs";
|
|
3
|
-
import "../../Generator-CDt4pB3W.mjs";
|
|
4
|
-
import "../../CronGenerator-ClbRcmz_.mjs";
|
|
5
|
-
import "../../EndpointGenerator-uBA1ixUw.mjs";
|
|
6
|
-
import "../../FunctionGenerator-crAa-JC7.mjs";
|
|
7
|
-
import "../../generators-CsLujGXs.mjs";
|
|
8
|
-
import "../../manifests-HX4z4kkz.mjs";
|
|
9
|
-
import "../../providerResolver-B_TjNF0_.mjs";
|
|
10
|
-
import { buildCommand } from "../../build-BZdwxCLW.mjs";
|
|
11
|
-
import { createMockCronFile, createMockEndpointFile, createMockFunctionFile, createTestFile } from "../../test-helpers-DdVBk23F.mjs";
|
|
12
|
-
import { readFile } from "node:fs/promises";
|
|
13
|
-
import { join } from "node:path";
|
|
14
|
-
import { describe, expect, vi } from "vitest";
|
|
15
|
-
import { itWithDir } from "@geekmidas/testkit/os";
|
|
16
|
-
|
|
17
|
-
//#region src/build/__tests__/index-new.spec.ts
|
|
18
|
-
describe("buildCommand", () => {
|
|
19
|
-
itWithDir("should build endpoints, functions, and crons for multiple providers", async ({ dir }) => {
|
|
20
|
-
await createMockEndpointFile(dir, "src/endpoints/users.ts", "getUsersEndpoint", "/users", "GET");
|
|
21
|
-
await createMockEndpointFile(dir, "src/endpoints/posts.ts", "getPostsEndpoint", "/posts", "GET");
|
|
22
|
-
await createMockFunctionFile(dir, "src/functions/process.ts", "processDataFunction", 60);
|
|
23
|
-
await createMockCronFile(dir, "src/crons/cleanup.ts", "cleanupCron", "rate(1 day)");
|
|
24
|
-
await createTestFile(dir, "gkm.config.ts", `
|
|
25
|
-
export default {
|
|
26
|
-
routes: './src/endpoints/**/*.ts',
|
|
27
|
-
functions: './src/functions/**/*.ts',
|
|
28
|
-
crons: './src/crons/**/*.ts',
|
|
29
|
-
envParser: './config/env',
|
|
30
|
-
logger: './config/logger',
|
|
31
|
-
};
|
|
32
|
-
`);
|
|
33
|
-
await createTestFile(dir, "config/env.ts", "export default {}");
|
|
34
|
-
await createTestFile(dir, "config/logger.ts", "export default {}");
|
|
35
|
-
const originalCwd = process.cwd();
|
|
36
|
-
process.chdir(dir);
|
|
37
|
-
try {
|
|
38
|
-
await buildCommand({ provider: "server" });
|
|
39
|
-
const serverDir = join(dir, ".gkm", "server");
|
|
40
|
-
expect(await readFile(join(serverDir, "app.ts"), "utf-8")).toContain("HonoEndpoint");
|
|
41
|
-
} finally {
|
|
42
|
-
process.chdir(originalCwd);
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
itWithDir("should perform complete build with all construct types for AWS Lambda", async ({ dir }) => {
|
|
46
|
-
await createMockEndpointFile(dir, "src/endpoints/users.ts", "getUsersEndpoint", "/users", "GET");
|
|
47
|
-
await createMockEndpointFile(dir, "src/endpoints/posts.ts", "getPostsEndpoint", "/posts", "POST");
|
|
48
|
-
await createMockFunctionFile(dir, "src/functions/processData.ts", "processDataFunction", 300);
|
|
49
|
-
await createMockFunctionFile(dir, "src/functions/sendEmail.ts", "sendEmailFunction", 30);
|
|
50
|
-
await createMockCronFile(dir, "src/crons/dailyCleanup.ts", "dailyCleanupCron", "rate(1 day)");
|
|
51
|
-
await createMockCronFile(dir, "src/crons/hourlyReport.ts", "hourlyReportCron", "cron(0 * * * ? *)");
|
|
52
|
-
await createTestFile(dir, "gkm.config.ts", `
|
|
53
|
-
export default {
|
|
54
|
-
routes: './src/endpoints/**/*.ts',
|
|
55
|
-
functions: './src/functions/**/*.ts',
|
|
56
|
-
crons: './src/crons/**/*.ts',
|
|
57
|
-
envParser: './config/env',
|
|
58
|
-
logger: './config/logger',
|
|
59
|
-
};
|
|
60
|
-
`);
|
|
61
|
-
await createTestFile(dir, "config/env.ts", "export default {}");
|
|
62
|
-
await createTestFile(dir, "config/logger.ts", "export default {}");
|
|
63
|
-
const originalCwd = process.cwd();
|
|
64
|
-
process.chdir(dir);
|
|
65
|
-
try {
|
|
66
|
-
await buildCommand({ provider: "aws" });
|
|
67
|
-
const awsLambdaDir = join(dir, ".gkm", "aws-lambda");
|
|
68
|
-
const awsApiGatewayV2Dir = join(dir, ".gkm", "aws-apigatewayv2");
|
|
69
|
-
expect(await readFile(join(awsLambdaDir, "functions", "processDataFunction.ts"), "utf-8")).toContain("AWSLambdaFunction");
|
|
70
|
-
expect(await readFile(join(awsLambdaDir, "functions", "sendEmailFunction.ts"), "utf-8")).toContain("AWSLambdaFunction");
|
|
71
|
-
expect(await readFile(join(awsLambdaDir, "crons", "dailyCleanupCron.ts"), "utf-8")).toContain("AWSScheduledFunction");
|
|
72
|
-
expect(await readFile(join(awsLambdaDir, "crons", "hourlyReportCron.ts"), "utf-8")).toContain("AWSScheduledFunction");
|
|
73
|
-
expect(await readFile(join(awsApiGatewayV2Dir, "getUsersEndpoint.ts"), "utf-8")).toContain("AmazonApiGatewayV2Endpoint");
|
|
74
|
-
expect(await readFile(join(awsApiGatewayV2Dir, "getPostsEndpoint.ts"), "utf-8")).toContain("AmazonApiGatewayV2Endpoint");
|
|
75
|
-
const lambdaManifestPath = join(awsLambdaDir, "manifest.json");
|
|
76
|
-
const apiGatewayManifestPath = join(awsApiGatewayV2Dir, "manifest.json");
|
|
77
|
-
const lambdaManifest = JSON.parse(await readFile(lambdaManifestPath, "utf-8"));
|
|
78
|
-
const apiGatewayManifest = JSON.parse(await readFile(apiGatewayManifestPath, "utf-8"));
|
|
79
|
-
expect(lambdaManifest).toMatchObject({
|
|
80
|
-
routes: expect.arrayContaining([expect.objectContaining({
|
|
81
|
-
path: "/users",
|
|
82
|
-
method: "GET",
|
|
83
|
-
handler: expect.stringContaining("routes/getUsersEndpoint.handler")
|
|
84
|
-
}), expect.objectContaining({
|
|
85
|
-
path: "/posts",
|
|
86
|
-
method: "POST",
|
|
87
|
-
handler: expect.stringContaining("routes/getPostsEndpoint.handler")
|
|
88
|
-
})]),
|
|
89
|
-
functions: expect.arrayContaining([expect.objectContaining({
|
|
90
|
-
name: "processDataFunction",
|
|
91
|
-
handler: expect.stringContaining("functions/processDataFunction.handler"),
|
|
92
|
-
timeout: 300
|
|
93
|
-
}), expect.objectContaining({
|
|
94
|
-
name: "sendEmailFunction",
|
|
95
|
-
handler: expect.stringContaining("functions/sendEmailFunction.handler"),
|
|
96
|
-
timeout: 30
|
|
97
|
-
})]),
|
|
98
|
-
crons: expect.arrayContaining([expect.objectContaining({
|
|
99
|
-
name: "dailyCleanupCron",
|
|
100
|
-
handler: expect.stringContaining("crons/dailyCleanupCron.handler"),
|
|
101
|
-
schedule: "rate(1 day)"
|
|
102
|
-
}), expect.objectContaining({
|
|
103
|
-
name: "hourlyReportCron",
|
|
104
|
-
handler: expect.stringContaining("crons/hourlyReportCron.handler"),
|
|
105
|
-
schedule: "cron(0 * * * ? *)"
|
|
106
|
-
})])
|
|
107
|
-
});
|
|
108
|
-
expect(apiGatewayManifest).toMatchObject({
|
|
109
|
-
routes: expect.arrayContaining([expect.objectContaining({
|
|
110
|
-
path: "/users",
|
|
111
|
-
method: "GET",
|
|
112
|
-
handler: expect.stringContaining("getUsersEndpoint.handler")
|
|
113
|
-
}), expect.objectContaining({
|
|
114
|
-
path: "/posts",
|
|
115
|
-
method: "POST",
|
|
116
|
-
handler: expect.stringContaining("getPostsEndpoint.handler")
|
|
117
|
-
})]),
|
|
118
|
-
functions: [],
|
|
119
|
-
crons: []
|
|
120
|
-
});
|
|
121
|
-
expect(lambdaManifest.routes).toHaveLength(2);
|
|
122
|
-
expect(lambdaManifest.functions).toHaveLength(2);
|
|
123
|
-
expect(lambdaManifest.crons).toHaveLength(2);
|
|
124
|
-
expect(apiGatewayManifest.routes).toHaveLength(2);
|
|
125
|
-
expect(apiGatewayManifest.functions).toHaveLength(0);
|
|
126
|
-
expect(apiGatewayManifest.crons).toHaveLength(0);
|
|
127
|
-
} finally {
|
|
128
|
-
process.chdir(originalCwd);
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
itWithDir("should handle case with no constructs found", async ({ dir }) => {
|
|
132
|
-
await createTestFile(dir, "gkm.config.ts", `
|
|
133
|
-
export default {
|
|
134
|
-
routes: './src/endpoints/**/*.ts',
|
|
135
|
-
functions: './src/functions/**/*.ts',
|
|
136
|
-
crons: './src/crons/**/*.ts',
|
|
137
|
-
envParser: './config/env',
|
|
138
|
-
logger: './config/logger',
|
|
139
|
-
};
|
|
140
|
-
`);
|
|
141
|
-
await createTestFile(dir, "config/env.ts", "export default {}");
|
|
142
|
-
await createTestFile(dir, "config/logger.ts", "export default {}");
|
|
143
|
-
const originalCwd = process.cwd();
|
|
144
|
-
process.chdir(dir);
|
|
145
|
-
const logSpy = vi.spyOn(console, "log");
|
|
146
|
-
try {
|
|
147
|
-
await buildCommand({ provider: "server" });
|
|
148
|
-
expect(logSpy).toHaveBeenCalledWith("Found 0 endpoints");
|
|
149
|
-
expect(logSpy).toHaveBeenCalledWith("Found 0 functions");
|
|
150
|
-
expect(logSpy).toHaveBeenCalledWith("Found 0 crons");
|
|
151
|
-
expect(logSpy).toHaveBeenCalledWith("No endpoints, functions, or crons found to process");
|
|
152
|
-
} finally {
|
|
153
|
-
process.chdir(originalCwd);
|
|
154
|
-
logSpy.mockRestore();
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
itWithDir("should handle optional functions and crons config", async ({ dir }) => {
|
|
158
|
-
await createTestFile(dir, "gkm.config.ts", `
|
|
159
|
-
export default {
|
|
160
|
-
routes: './src/endpoints/**/*.ts',
|
|
161
|
-
functions: undefined,
|
|
162
|
-
crons: undefined,
|
|
163
|
-
envParser: './config/env',
|
|
164
|
-
logger: './config/logger',
|
|
165
|
-
};
|
|
166
|
-
`);
|
|
167
|
-
await createMockEndpointFile(dir, "src/endpoints/test.ts", "testEndpoint", "/test", "GET");
|
|
168
|
-
await createTestFile(dir, "config/env.ts", "export default {}");
|
|
169
|
-
await createTestFile(dir, "config/logger.ts", "export default {}");
|
|
170
|
-
const originalCwd = process.cwd();
|
|
171
|
-
process.chdir(dir);
|
|
172
|
-
const logSpy = vi.spyOn(console, "log");
|
|
173
|
-
try {
|
|
174
|
-
await buildCommand({ provider: "server" });
|
|
175
|
-
expect(logSpy).toHaveBeenCalledWith("Found 1 endpoints");
|
|
176
|
-
expect(logSpy).toHaveBeenCalledWith("Found 0 functions");
|
|
177
|
-
expect(logSpy).toHaveBeenCalledWith("Found 0 crons");
|
|
178
|
-
expect(logSpy).not.toHaveBeenCalledWith(expect.stringContaining("Loading functions"));
|
|
179
|
-
expect(logSpy).not.toHaveBeenCalledWith(expect.stringContaining("Loading crons"));
|
|
180
|
-
} finally {
|
|
181
|
-
process.chdir(originalCwd);
|
|
182
|
-
logSpy.mockRestore();
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
itWithDir("should parse envParser configuration correctly", async ({ dir }) => {
|
|
186
|
-
await createTestFile(dir, "gkm.config.ts", `
|
|
187
|
-
export default {
|
|
188
|
-
routes: './src/endpoints/**/*.ts',
|
|
189
|
-
functions: undefined,
|
|
190
|
-
crons: undefined,
|
|
191
|
-
envParser: './config/env#customEnvParser',
|
|
192
|
-
logger: './config/logger#customLogger',
|
|
193
|
-
};
|
|
194
|
-
`);
|
|
195
|
-
await createMockEndpointFile(dir, "src/endpoints/test.ts", "testEndpoint", "/test", "GET");
|
|
196
|
-
await createTestFile(dir, "config/env.ts", "export const customEnvParser = {}");
|
|
197
|
-
await createTestFile(dir, "config/logger.ts", "export const customLogger = {}");
|
|
198
|
-
const originalCwd = process.cwd();
|
|
199
|
-
process.chdir(dir);
|
|
200
|
-
try {
|
|
201
|
-
await buildCommand({ provider: "aws" });
|
|
202
|
-
const handlerFile = join(dir, ".gkm/aws-apigatewayv2/testEndpoint.ts");
|
|
203
|
-
const handlerContent = await readFile(handlerFile, "utf-8");
|
|
204
|
-
expect(handlerContent).toContain("{ customEnvParser as envParser }");
|
|
205
|
-
} finally {
|
|
206
|
-
process.chdir(originalCwd);
|
|
207
|
-
}
|
|
208
|
-
});
|
|
209
|
-
itWithDir("should create output directories for each provider", async ({ dir }) => {
|
|
210
|
-
await createTestFile(dir, "gkm.config.ts", `
|
|
211
|
-
export default {
|
|
212
|
-
routes: './src/endpoints/**/*.ts',
|
|
213
|
-
functions: undefined,
|
|
214
|
-
crons: undefined,
|
|
215
|
-
envParser: './config/env',
|
|
216
|
-
logger: './config/logger',
|
|
217
|
-
};
|
|
218
|
-
`);
|
|
219
|
-
await createMockEndpointFile(dir, "src/endpoints/test.ts", "testEndpoint", "/test", "GET");
|
|
220
|
-
await createTestFile(dir, "config/env.ts", "export default {}");
|
|
221
|
-
await createTestFile(dir, "config/logger.ts", "export default {}");
|
|
222
|
-
const originalCwd = process.cwd();
|
|
223
|
-
process.chdir(dir);
|
|
224
|
-
try {
|
|
225
|
-
await buildCommand({ provider: "aws" });
|
|
226
|
-
const v2HandlerFile = join(dir, ".gkm/aws-apigatewayv2/testEndpoint.ts");
|
|
227
|
-
const v2Content = await readFile(v2HandlerFile, "utf-8");
|
|
228
|
-
expect(v2Content).toContain("AmazonApiGatewayV2Endpoint");
|
|
229
|
-
} finally {
|
|
230
|
-
process.chdir(originalCwd);
|
|
231
|
-
}
|
|
232
|
-
});
|
|
233
|
-
itWithDir("should handle default import patterns for envParser and logger", async ({ dir }) => {
|
|
234
|
-
await createTestFile(dir, "gkm.config.ts", `
|
|
235
|
-
export default {
|
|
236
|
-
routes: './src/endpoints/**/*.ts',
|
|
237
|
-
functions: undefined,
|
|
238
|
-
crons: undefined,
|
|
239
|
-
envParser: './config/env',
|
|
240
|
-
logger: './config/logger',
|
|
241
|
-
};
|
|
242
|
-
`);
|
|
243
|
-
await createMockEndpointFile(dir, "src/endpoints/test.ts", "testEndpoint", "/test", "GET");
|
|
244
|
-
await createTestFile(dir, "config/env.ts", "export default {}");
|
|
245
|
-
await createTestFile(dir, "config/logger.ts", "export default {}");
|
|
246
|
-
const originalCwd = process.cwd();
|
|
247
|
-
process.chdir(dir);
|
|
248
|
-
try {
|
|
249
|
-
await buildCommand({ provider: "aws" });
|
|
250
|
-
const handlerFile = join(dir, ".gkm/aws-apigatewayv2/testEndpoint.ts");
|
|
251
|
-
const handlerContent = await readFile(handlerFile, "utf-8");
|
|
252
|
-
expect(handlerContent).toContain("import envParser");
|
|
253
|
-
expect(handlerContent).not.toContain("{ envParser }");
|
|
254
|
-
} finally {
|
|
255
|
-
process.chdir(originalCwd);
|
|
256
|
-
}
|
|
257
|
-
});
|
|
258
|
-
itWithDir("should handle envParser pattern with same name as expected", async ({ dir }) => {
|
|
259
|
-
await createTestFile(dir, "gkm.config.ts", `
|
|
260
|
-
export default {
|
|
261
|
-
routes: './src/endpoints/**/*.ts',
|
|
262
|
-
functions: undefined,
|
|
263
|
-
crons: undefined,
|
|
264
|
-
envParser: './config/env#envParser',
|
|
265
|
-
logger: './config/logger#logger',
|
|
266
|
-
};
|
|
267
|
-
`);
|
|
268
|
-
await createMockEndpointFile(dir, "src/endpoints/test.ts", "testEndpoint", "/test", "GET");
|
|
269
|
-
await createTestFile(dir, "config/env.ts", "export const envParser = {}");
|
|
270
|
-
await createTestFile(dir, "config/logger.ts", "export const logger = {}");
|
|
271
|
-
const originalCwd = process.cwd();
|
|
272
|
-
process.chdir(dir);
|
|
273
|
-
try {
|
|
274
|
-
await buildCommand({ provider: "aws" });
|
|
275
|
-
const handlerFile = join(dir, ".gkm/aws-apigatewayv2/testEndpoint.ts");
|
|
276
|
-
const handlerContent = await readFile(handlerFile, "utf-8");
|
|
277
|
-
expect(handlerContent).toContain("{ envParser }");
|
|
278
|
-
} finally {
|
|
279
|
-
process.chdir(originalCwd);
|
|
280
|
-
}
|
|
281
|
-
});
|
|
282
|
-
});
|
|
283
|
-
|
|
284
|
-
//#endregion
|
|
285
|
-
//# sourceMappingURL=index-new.spec.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-new.spec.mjs","names":[],"sources":["../../../src/build/__tests__/index-new.spec.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { itWithDir } from '@geekmidas/testkit/os';\nimport { describe, expect, vi } from 'vitest';\nimport {\n createMockCronFile,\n createMockEndpointFile,\n createMockFunctionFile,\n createTestFile,\n} from '../../__tests__/test-helpers';\nimport { buildCommand } from '../index';\n\ndescribe('buildCommand', () => {\n itWithDir(\n 'should build endpoints, functions, and crons for multiple providers',\n async ({ dir }) => {\n // Create test files that will be discovered\n await createMockEndpointFile(\n dir,\n 'src/endpoints/users.ts',\n 'getUsersEndpoint',\n '/users',\n 'GET',\n );\n await createMockEndpointFile(\n dir,\n 'src/endpoints/posts.ts',\n 'getPostsEndpoint',\n '/posts',\n 'GET',\n );\n await createMockFunctionFile(\n dir,\n 'src/functions/process.ts',\n 'processDataFunction',\n 60,\n );\n await createMockCronFile(\n dir,\n 'src/crons/cleanup.ts',\n 'cleanupCron',\n 'rate(1 day)',\n );\n\n // Create a basic config file\n await createTestFile(\n dir,\n 'gkm.config.ts',\n `\nexport default {\n routes: './src/endpoints/**/*.ts',\n functions: './src/functions/**/*.ts',\n crons: './src/crons/**/*.ts',\n envParser: './config/env',\n logger: './config/logger',\n};\n`,\n );\n\n // Create env and logger files\n await createTestFile(dir, 'config/env.ts', 'export default {}');\n await createTestFile(dir, 'config/logger.ts', 'export default {}');\n\n const originalCwd = process.cwd();\n process.chdir(dir);\n\n try {\n await buildCommand({ provider: 'server' });\n\n // Check that output directories were created\n const serverDir = join(dir, '.gkm', 'server');\n expect(await readFile(join(serverDir, 'app.ts'), 'utf-8')).toContain(\n 'HonoEndpoint',\n );\n } finally {\n process.chdir(originalCwd);\n }\n },\n );\n\n itWithDir(\n 'should perform complete build with all construct types for AWS Lambda',\n async ({ dir }) => {\n // Create comprehensive test setup with all construct types\n await createMockEndpointFile(\n dir,\n 'src/endpoints/users.ts',\n 'getUsersEndpoint',\n '/users',\n 'GET',\n );\n await createMockEndpointFile(\n dir,\n 'src/endpoints/posts.ts',\n 'getPostsEndpoint',\n '/posts',\n 'POST',\n );\n await createMockFunctionFile(\n dir,\n 'src/functions/processData.ts',\n 'processDataFunction',\n 300,\n );\n await createMockFunctionFile(\n dir,\n 'src/functions/sendEmail.ts',\n 'sendEmailFunction',\n 30,\n );\n await createMockCronFile(\n dir,\n 'src/crons/dailyCleanup.ts',\n 'dailyCleanupCron',\n 'rate(1 day)',\n );\n await createMockCronFile(\n dir,\n 'src/crons/hourlyReport.ts',\n 'hourlyReportCron',\n 'cron(0 * * * ? *)',\n );\n\n // Create config\n await createTestFile(\n dir,\n 'gkm.config.ts',\n `\nexport default {\n routes: './src/endpoints/**/*.ts',\n functions: './src/functions/**/*.ts',\n crons: './src/crons/**/*.ts',\n envParser: './config/env',\n logger: './config/logger',\n};\n`,\n );\n\n // Create env and logger files\n await createTestFile(dir, 'config/env.ts', 'export default {}');\n await createTestFile(dir, 'config/logger.ts', 'export default {}');\n\n const originalCwd = process.cwd();\n process.chdir(dir);\n\n try {\n // Build for AWS Lambda\n await buildCommand({ provider: 'aws' });\n\n const awsLambdaDir = join(dir, '.gkm', 'aws-lambda');\n const awsApiGatewayV2Dir = join(dir, '.gkm', 'aws-apigatewayv2');\n\n // Verify Lambda handlers were created\n expect(\n await readFile(\n join(awsLambdaDir, 'functions', 'processDataFunction.ts'),\n 'utf-8',\n ),\n ).toContain('AWSLambdaFunction');\n expect(\n await readFile(\n join(awsLambdaDir, 'functions', 'sendEmailFunction.ts'),\n 'utf-8',\n ),\n ).toContain('AWSLambdaFunction');\n\n // Verify Cron handlers were created\n expect(\n await readFile(\n join(awsLambdaDir, 'crons', 'dailyCleanupCron.ts'),\n 'utf-8',\n ),\n ).toContain('AWSScheduledFunction');\n expect(\n await readFile(\n join(awsLambdaDir, 'crons', 'hourlyReportCron.ts'),\n 'utf-8',\n ),\n ).toContain('AWSScheduledFunction');\n\n // Verify API Gateway handlers were created\n expect(\n await readFile(\n join(awsApiGatewayV2Dir, 'getUsersEndpoint.ts'),\n 'utf-8',\n ),\n ).toContain('AmazonApiGatewayV2Endpoint');\n expect(\n await readFile(\n join(awsApiGatewayV2Dir, 'getPostsEndpoint.ts'),\n 'utf-8',\n ),\n ).toContain('AmazonApiGatewayV2Endpoint');\n\n // Verify unified manifests were created with all construct types\n const lambdaManifestPath = join(awsLambdaDir, 'manifest.json');\n const apiGatewayManifestPath = join(awsApiGatewayV2Dir, 'manifest.json');\n\n const lambdaManifest = JSON.parse(\n await readFile(lambdaManifestPath, 'utf-8'),\n );\n const apiGatewayManifest = JSON.parse(\n await readFile(apiGatewayManifestPath, 'utf-8'),\n );\n\n // Verify Lambda manifest structure\n expect(lambdaManifest).toMatchObject({\n routes: expect.arrayContaining([\n expect.objectContaining({\n path: '/users',\n method: 'GET',\n handler: expect.stringContaining('routes/getUsersEndpoint.handler'),\n }),\n expect.objectContaining({\n path: '/posts',\n method: 'POST',\n handler: expect.stringContaining('routes/getPostsEndpoint.handler'),\n }),\n ]),\n functions: expect.arrayContaining([\n expect.objectContaining({\n name: 'processDataFunction',\n handler: expect.stringContaining(\n 'functions/processDataFunction.handler',\n ),\n timeout: 300,\n }),\n expect.objectContaining({\n name: 'sendEmailFunction',\n handler: expect.stringContaining(\n 'functions/sendEmailFunction.handler',\n ),\n timeout: 30,\n }),\n ]),\n crons: expect.arrayContaining([\n expect.objectContaining({\n name: 'dailyCleanupCron',\n handler: expect.stringContaining(\n 'crons/dailyCleanupCron.handler',\n ),\n schedule: 'rate(1 day)',\n }),\n expect.objectContaining({\n name: 'hourlyReportCron',\n handler: expect.stringContaining(\n 'crons/hourlyReportCron.handler',\n ),\n schedule: 'cron(0 * * * ? *)',\n }),\n ]),\n });\n\n // Verify API Gateway manifest structure\n expect(apiGatewayManifest).toMatchObject({\n routes: expect.arrayContaining([\n expect.objectContaining({\n path: '/users',\n method: 'GET',\n handler: expect.stringContaining('getUsersEndpoint.handler'),\n }),\n expect.objectContaining({\n path: '/posts',\n method: 'POST',\n handler: expect.stringContaining('getPostsEndpoint.handler'),\n }),\n ]),\n functions: [],\n crons: [],\n });\n\n // Verify counts\n expect(lambdaManifest.routes).toHaveLength(2);\n expect(lambdaManifest.functions).toHaveLength(2);\n expect(lambdaManifest.crons).toHaveLength(2);\n expect(apiGatewayManifest.routes).toHaveLength(2);\n expect(apiGatewayManifest.functions).toHaveLength(0);\n expect(apiGatewayManifest.crons).toHaveLength(0);\n } finally {\n process.chdir(originalCwd);\n }\n },\n );\n\n itWithDir('should handle case with no constructs found', async ({ dir }) => {\n // Create a basic config file with no actual construct files\n await createTestFile(\n dir,\n 'gkm.config.ts',\n `\nexport default {\n routes: './src/endpoints/**/*.ts',\n functions: './src/functions/**/*.ts',\n crons: './src/crons/**/*.ts',\n envParser: './config/env',\n logger: './config/logger',\n};\n`,\n );\n\n // Create env and logger files\n await createTestFile(dir, 'config/env.ts', 'export default {}');\n await createTestFile(dir, 'config/logger.ts', 'export default {}');\n\n const originalCwd = process.cwd();\n process.chdir(dir);\n\n const logSpy = vi.spyOn(console, 'log');\n\n try {\n await buildCommand({ provider: 'server' });\n\n expect(logSpy).toHaveBeenCalledWith('Found 0 endpoints');\n expect(logSpy).toHaveBeenCalledWith('Found 0 functions');\n expect(logSpy).toHaveBeenCalledWith('Found 0 crons');\n expect(logSpy).toHaveBeenCalledWith(\n 'No endpoints, functions, or crons found to process',\n );\n } finally {\n process.chdir(originalCwd);\n logSpy.mockRestore();\n }\n });\n\n itWithDir(\n 'should handle optional functions and crons config',\n async ({ dir }) => {\n // Create config with undefined functions and crons\n await createTestFile(\n dir,\n 'gkm.config.ts',\n `\nexport default {\n routes: './src/endpoints/**/*.ts',\n functions: undefined,\n crons: undefined,\n envParser: './config/env',\n logger: './config/logger',\n};\n`,\n );\n\n await createMockEndpointFile(\n dir,\n 'src/endpoints/test.ts',\n 'testEndpoint',\n '/test',\n 'GET',\n );\n\n // Create env and logger files\n await createTestFile(dir, 'config/env.ts', 'export default {}');\n await createTestFile(dir, 'config/logger.ts', 'export default {}');\n\n const originalCwd = process.cwd();\n process.chdir(dir);\n\n const logSpy = vi.spyOn(console, 'log');\n\n try {\n await buildCommand({ provider: 'server' });\n\n expect(logSpy).toHaveBeenCalledWith('Found 1 endpoints');\n expect(logSpy).toHaveBeenCalledWith('Found 0 functions');\n expect(logSpy).toHaveBeenCalledWith('Found 0 crons');\n\n // Should not log functions or crons loading messages\n expect(logSpy).not.toHaveBeenCalledWith(\n expect.stringContaining('Loading functions'),\n );\n expect(logSpy).not.toHaveBeenCalledWith(\n expect.stringContaining('Loading crons'),\n );\n } finally {\n process.chdir(originalCwd);\n logSpy.mockRestore();\n }\n },\n );\n\n itWithDir(\n 'should parse envParser configuration correctly',\n async ({ dir }) => {\n // Create config with custom named exports\n await createTestFile(\n dir,\n 'gkm.config.ts',\n `\nexport default {\n routes: './src/endpoints/**/*.ts',\n functions: undefined,\n crons: undefined,\n envParser: './config/env#customEnvParser',\n logger: './config/logger#customLogger',\n};\n`,\n );\n\n await createMockEndpointFile(\n dir,\n 'src/endpoints/test.ts',\n 'testEndpoint',\n '/test',\n 'GET',\n );\n\n // Create env and logger files with named exports\n await createTestFile(\n dir,\n 'config/env.ts',\n 'export const customEnvParser = {}',\n );\n await createTestFile(\n dir,\n 'config/logger.ts',\n 'export const customLogger = {}',\n );\n\n const originalCwd = process.cwd();\n process.chdir(dir);\n\n try {\n await buildCommand({ provider: 'aws' });\n\n // Verify that a handler file was generated with correct imports\n const handlerFile = join(dir, '.gkm/aws-apigatewayv2/testEndpoint.ts');\n const handlerContent = await readFile(handlerFile, 'utf-8');\n expect(handlerContent).toContain('{ customEnvParser as envParser }');\n } finally {\n process.chdir(originalCwd);\n }\n },\n );\n\n itWithDir(\n 'should create output directories for each provider',\n async ({ dir }) => {\n // Create config with multiple providers\n await createTestFile(\n dir,\n 'gkm.config.ts',\n `\nexport default {\n routes: './src/endpoints/**/*.ts',\n functions: undefined,\n crons: undefined,\n envParser: './config/env',\n logger: './config/logger',\n};\n`,\n );\n\n await createMockEndpointFile(\n dir,\n 'src/endpoints/test.ts',\n 'testEndpoint',\n '/test',\n 'GET',\n );\n\n // Create env and logger files\n await createTestFile(dir, 'config/env.ts', 'export default {}');\n await createTestFile(dir, 'config/logger.ts', 'export default {}');\n\n const originalCwd = process.cwd();\n process.chdir(dir);\n\n try {\n await buildCommand({ provider: 'aws' });\n\n const v2HandlerFile = join(\n dir,\n '.gkm/aws-apigatewayv2/testEndpoint.ts',\n );\n\n const v2Content = await readFile(v2HandlerFile, 'utf-8');\n\n expect(v2Content).toContain('AmazonApiGatewayV2Endpoint');\n } finally {\n process.chdir(originalCwd);\n }\n },\n );\n\n itWithDir(\n 'should handle default import patterns for envParser and logger',\n async ({ dir }) => {\n // Create config with default import patterns\n await createTestFile(\n dir,\n 'gkm.config.ts',\n `\nexport default {\n routes: './src/endpoints/**/*.ts',\n functions: undefined,\n crons: undefined,\n envParser: './config/env',\n logger: './config/logger',\n};\n`,\n );\n\n await createMockEndpointFile(\n dir,\n 'src/endpoints/test.ts',\n 'testEndpoint',\n '/test',\n 'GET',\n );\n\n // Create env and logger files with default exports\n await createTestFile(dir, 'config/env.ts', 'export default {}');\n await createTestFile(dir, 'config/logger.ts', 'export default {}');\n\n const originalCwd = process.cwd();\n process.chdir(dir);\n\n try {\n await buildCommand({ provider: 'aws' });\n\n // Verify that a handler file was generated with default imports\n const handlerFile = join(dir, '.gkm/aws-apigatewayv2/testEndpoint.ts');\n const handlerContent = await readFile(handlerFile, 'utf-8');\n expect(handlerContent).toContain('import envParser');\n expect(handlerContent).not.toContain('{ envParser }');\n } finally {\n process.chdir(originalCwd);\n }\n },\n );\n\n itWithDir(\n 'should handle envParser pattern with same name as expected',\n async ({ dir }) => {\n // Create config with named exports that match expected names\n await createTestFile(\n dir,\n 'gkm.config.ts',\n `\nexport default {\n routes: './src/endpoints/**/*.ts',\n functions: undefined,\n crons: undefined,\n envParser: './config/env#envParser',\n logger: './config/logger#logger',\n};\n`,\n );\n\n await createMockEndpointFile(\n dir,\n 'src/endpoints/test.ts',\n 'testEndpoint',\n '/test',\n 'GET',\n );\n\n // Create env and logger files with named exports\n await createTestFile(dir, 'config/env.ts', 'export const envParser = {}');\n await createTestFile(dir, 'config/logger.ts', 'export const logger = {}');\n\n const originalCwd = process.cwd();\n process.chdir(dir);\n\n try {\n await buildCommand({ provider: 'aws' });\n\n // Verify that a handler file was generated with named imports\n const handlerFile = join(dir, '.gkm/aws-apigatewayv2/testEndpoint.ts');\n const handlerContent = await readFile(handlerFile, 'utf-8');\n\n expect(handlerContent).toContain('{ envParser }');\n } finally {\n process.chdir(originalCwd);\n }\n },\n );\n});\n"],"mappings":"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"}
|
package/dist/build-BZdwxCLW.mjs
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { loadConfig } from "./config-CXxYmz_o.mjs";
|
|
2
|
-
import { CronGenerator } from "./CronGenerator-ClbRcmz_.mjs";
|
|
3
|
-
import { EndpointGenerator } from "./EndpointGenerator-uBA1ixUw.mjs";
|
|
4
|
-
import { FunctionGenerator } from "./FunctionGenerator-crAa-JC7.mjs";
|
|
5
|
-
import { generateManifests } from "./manifests-HX4z4kkz.mjs";
|
|
6
|
-
import { resolveProviders } from "./providerResolver-B_TjNF0_.mjs";
|
|
7
|
-
import { mkdir } from "node:fs/promises";
|
|
8
|
-
import { join } from "node:path";
|
|
9
|
-
|
|
10
|
-
//#region src/build/index.ts
|
|
11
|
-
const logger = console;
|
|
12
|
-
async function buildCommand(options) {
|
|
13
|
-
const config = await loadConfig();
|
|
14
|
-
const resolved = resolveProviders(config, options);
|
|
15
|
-
logger.log(`Building with providers: ${resolved.providers.join(", ")}`);
|
|
16
|
-
logger.log(`Loading routes from: ${config.routes}`);
|
|
17
|
-
if (config.functions) logger.log(`Loading functions from: ${config.functions}`);
|
|
18
|
-
if (config.crons) logger.log(`Loading crons from: ${config.crons}`);
|
|
19
|
-
logger.log(`Using envParser: ${config.envParser}`);
|
|
20
|
-
const [envParserPath, envParserName] = config.envParser.split("#");
|
|
21
|
-
const envParserImportPattern = !envParserName ? "envParser" : envParserName === "envParser" ? "{ envParser }" : `{ ${envParserName} as envParser }`;
|
|
22
|
-
const [loggerPath, loggerName] = config.logger.split("#");
|
|
23
|
-
const loggerImportPattern = !loggerName ? "logger" : loggerName === "logger" ? "{ logger }" : `{ ${loggerName} as logger }`;
|
|
24
|
-
const buildContext = {
|
|
25
|
-
envParserPath,
|
|
26
|
-
envParserImportPattern,
|
|
27
|
-
loggerPath,
|
|
28
|
-
loggerImportPattern
|
|
29
|
-
};
|
|
30
|
-
const endpointGenerator = new EndpointGenerator();
|
|
31
|
-
const functionGenerator = new FunctionGenerator();
|
|
32
|
-
const cronGenerator = new CronGenerator();
|
|
33
|
-
const [allEndpoints, allFunctions, allCrons] = await Promise.all([
|
|
34
|
-
endpointGenerator.load(config.routes),
|
|
35
|
-
config.functions ? functionGenerator.load(config.functions) : [],
|
|
36
|
-
config.crons ? cronGenerator.load(config.crons) : []
|
|
37
|
-
]);
|
|
38
|
-
logger.log(`Found ${allEndpoints.length} endpoints`);
|
|
39
|
-
logger.log(`Found ${allFunctions.length} functions`);
|
|
40
|
-
logger.log(`Found ${allCrons.length} crons`);
|
|
41
|
-
if (allEndpoints.length === 0 && allFunctions.length === 0 && allCrons.length === 0) {
|
|
42
|
-
logger.log("No endpoints, functions, or crons found to process");
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
await Promise.all(resolved.providers.map((provider) => buildForProvider(provider, buildContext, endpointGenerator, functionGenerator, cronGenerator, allEndpoints, allFunctions, allCrons, resolved.enableOpenApi)));
|
|
46
|
-
}
|
|
47
|
-
async function buildForProvider(provider, context, endpointGenerator, functionGenerator, cronGenerator, endpoints, functions, crons, enableOpenApi) {
|
|
48
|
-
const outputDir = join(process.cwd(), ".gkm", provider);
|
|
49
|
-
await mkdir(outputDir, { recursive: true });
|
|
50
|
-
logger.log(`\nGenerating handlers for provider: ${provider}`);
|
|
51
|
-
const [routes, functionInfos, cronInfos] = await Promise.all([
|
|
52
|
-
endpointGenerator.build(context, endpoints, outputDir, {
|
|
53
|
-
provider,
|
|
54
|
-
enableOpenApi
|
|
55
|
-
}),
|
|
56
|
-
functionGenerator.build(context, functions, outputDir, { provider }),
|
|
57
|
-
cronGenerator.build(context, crons, outputDir, { provider })
|
|
58
|
-
]);
|
|
59
|
-
await generateManifests(outputDir, routes, functionInfos, cronInfos);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
//#endregion
|
|
63
|
-
export { buildCommand };
|
|
64
|
-
//# sourceMappingURL=build-BZdwxCLW.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"build-BZdwxCLW.mjs","names":["options: BuildOptions","buildContext: BuildContext","provider: LegacyProvider","context: BuildContext","endpointGenerator: EndpointGenerator","functionGenerator: FunctionGenerator","cronGenerator: CronGenerator","endpoints: GeneratedConstruct<Endpoint<any, any, any, any, any, any>>[]","functions: GeneratedConstruct<Function<any, any, any, any>>[]","crons: GeneratedConstruct<Cron<any, any, any, any>>[]","enableOpenApi: boolean"],"sources":["../src/build/index.ts"],"sourcesContent":["import { mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { Cron, Function } from '@geekmidas/api/constructs';\nimport type { Endpoint } from '@geekmidas/api/server';\nimport { loadConfig } from '../config';\nimport {\n CronGenerator,\n EndpointGenerator,\n FunctionGenerator,\n type GeneratedConstruct,\n} from '../generators';\nimport type { BuildOptions, LegacyProvider } from '../types';\nimport { generateManifests } from './manifests';\nimport { resolveProviders } from './providerResolver';\nimport type { BuildContext } from './types';\n\nconst logger = console;\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n const config = await loadConfig();\n\n // Resolve providers from new config format\n const resolved = resolveProviders(config, options);\n\n logger.log(`Building with providers: ${resolved.providers.join(', ')}`);\n logger.log(`Loading routes from: ${config.routes}`);\n if (config.functions) {\n logger.log(`Loading functions from: ${config.functions}`);\n }\n if (config.crons) {\n logger.log(`Loading crons from: ${config.crons}`);\n }\n logger.log(`Using envParser: ${config.envParser}`);\n\n // Parse envParser configuration\n const [envParserPath, envParserName] = config.envParser.split('#');\n const envParserImportPattern = !envParserName\n ? 'envParser'\n : envParserName === 'envParser'\n ? '{ envParser }'\n : `{ ${envParserName} as envParser }`;\n\n // Parse logger configuration\n const [loggerPath, loggerName] = config.logger.split('#');\n const loggerImportPattern = !loggerName\n ? 'logger'\n : loggerName === 'logger'\n ? '{ logger }'\n : `{ ${loggerName} as logger }`;\n\n const buildContext: BuildContext = {\n envParserPath,\n envParserImportPattern,\n loggerPath,\n loggerImportPattern,\n };\n\n // Initialize generators\n const endpointGenerator = new EndpointGenerator();\n const functionGenerator = new FunctionGenerator();\n const cronGenerator = new CronGenerator();\n\n // Load all constructs in parallel\n const [allEndpoints, allFunctions, allCrons] = await Promise.all([\n endpointGenerator.load(config.routes),\n config.functions ? functionGenerator.load(config.functions) : [],\n config.crons ? cronGenerator.load(config.crons) : [],\n ]);\n\n logger.log(`Found ${allEndpoints.length} endpoints`);\n logger.log(`Found ${allFunctions.length} functions`);\n logger.log(`Found ${allCrons.length} crons`);\n\n if (\n allEndpoints.length === 0 &&\n allFunctions.length === 0 &&\n allCrons.length === 0\n ) {\n logger.log('No endpoints, functions, or crons found to process');\n return;\n }\n\n // Build for each provider in parallel\n await Promise.all(\n resolved.providers.map((provider) =>\n buildForProvider(\n provider,\n buildContext,\n endpointGenerator,\n functionGenerator,\n cronGenerator,\n allEndpoints,\n allFunctions,\n allCrons,\n resolved.enableOpenApi,\n ),\n ),\n );\n}\n\nasync function buildForProvider(\n provider: LegacyProvider,\n context: BuildContext,\n endpointGenerator: EndpointGenerator,\n functionGenerator: FunctionGenerator,\n cronGenerator: CronGenerator,\n endpoints: GeneratedConstruct<Endpoint<any, any, any, any, any, any>>[],\n functions: GeneratedConstruct<Function<any, any, any, any>>[],\n crons: GeneratedConstruct<Cron<any, any, any, any>>[],\n enableOpenApi: boolean,\n): Promise<void> {\n const outputDir = join(process.cwd(), '.gkm', provider);\n\n // Ensure output directory exists\n await mkdir(outputDir, { recursive: true });\n\n logger.log(`\\nGenerating handlers for provider: ${provider}`);\n\n // Build all constructs in parallel\n const [routes, functionInfos, cronInfos] = await Promise.all([\n endpointGenerator.build(context, endpoints, outputDir, {\n provider,\n enableOpenApi,\n }),\n functionGenerator.build(context, functions, outputDir, { provider }),\n cronGenerator.build(context, crons, outputDir, { provider }),\n ]);\n\n // Generate manifests\n await generateManifests(\n outputDir,\n routes,\n functionInfos,\n cronInfos,\n );\n}\n"],"mappings":";;;;;;;;;;AAgBA,MAAM,SAAS;AAEf,eAAsB,aAAaA,SAAsC;CACvE,MAAM,SAAS,MAAM,YAAY;CAGjC,MAAM,WAAW,iBAAiB,QAAQ,QAAQ;AAElD,QAAO,KAAK,2BAA2B,SAAS,UAAU,KAAK,KAAK,CAAC,EAAE;AACvE,QAAO,KAAK,uBAAuB,OAAO,OAAO,EAAE;AACnD,KAAI,OAAO,UACT,QAAO,KAAK,0BAA0B,OAAO,UAAU,EAAE;AAE3D,KAAI,OAAO,MACT,QAAO,KAAK,sBAAsB,OAAO,MAAM,EAAE;AAEnD,QAAO,KAAK,mBAAmB,OAAO,UAAU,EAAE;CAGlD,MAAM,CAAC,eAAe,cAAc,GAAG,OAAO,UAAU,MAAM,IAAI;CAClE,MAAM,0BAA0B,gBAC5B,cACA,kBAAkB,cAChB,mBACC,IAAI,cAAc;CAGzB,MAAM,CAAC,YAAY,WAAW,GAAG,OAAO,OAAO,MAAM,IAAI;CACzD,MAAM,uBAAuB,aACzB,WACA,eAAe,WACb,gBACC,IAAI,WAAW;CAEtB,MAAMC,eAA6B;EACjC;EACA;EACA;EACA;CACD;CAGD,MAAM,oBAAoB,IAAI;CAC9B,MAAM,oBAAoB,IAAI;CAC9B,MAAM,gBAAgB,IAAI;CAG1B,MAAM,CAAC,cAAc,cAAc,SAAS,GAAG,MAAM,QAAQ,IAAI;EAC/D,kBAAkB,KAAK,OAAO,OAAO;EACrC,OAAO,YAAY,kBAAkB,KAAK,OAAO,UAAU,GAAG,CAAE;EAChE,OAAO,QAAQ,cAAc,KAAK,OAAO,MAAM,GAAG,CAAE;CACrD,EAAC;AAEF,QAAO,KAAK,QAAQ,aAAa,OAAO,YAAY;AACpD,QAAO,KAAK,QAAQ,aAAa,OAAO,YAAY;AACpD,QAAO,KAAK,QAAQ,SAAS,OAAO,QAAQ;AAE5C,KACE,aAAa,WAAW,KACxB,aAAa,WAAW,KACxB,SAAS,WAAW,GACpB;AACA,SAAO,IAAI,qDAAqD;AAChE;CACD;AAGD,OAAM,QAAQ,IACZ,SAAS,UAAU,IAAI,CAAC,aACtB,iBACE,UACA,cACA,mBACA,mBACA,eACA,cACA,cACA,UACA,SAAS,cACV,CACF,CACF;AACF;AAED,eAAe,iBACbC,UACAC,SACAC,mBACAC,mBACAC,eACAC,WACAC,WACAC,OACAC,eACe;CACf,MAAM,YAAY,KAAK,QAAQ,KAAK,EAAE,QAAQ,SAAS;AAGvD,OAAM,MAAM,WAAW,EAAE,WAAW,KAAM,EAAC;AAE3C,QAAO,KAAK,sCAAsC,SAAS,EAAE;CAG7D,MAAM,CAAC,QAAQ,eAAe,UAAU,GAAG,MAAM,QAAQ,IAAI;EAC3D,kBAAkB,MAAM,SAAS,WAAW,WAAW;GACrD;GACA;EACD,EAAC;EACF,kBAAkB,MAAM,SAAS,WAAW,WAAW,EAAE,SAAU,EAAC;EACpE,cAAc,MAAM,SAAS,OAAO,WAAW,EAAE,SAAU,EAAC;CAC7D,EAAC;AAGF,OAAM,kBACJ,WACA,QACA,eACA,UACD;AACF"}
|
package/dist/build-BfQFnU5-.cjs
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
const require_chunk = require('./chunk-CsX-DzYB.cjs');
|
|
2
|
-
const require_config = require('./config-RcNESK0T.cjs');
|
|
3
|
-
const require_CronGenerator = require('./CronGenerator-Ctl4USy4.cjs');
|
|
4
|
-
const require_EndpointGenerator = require('./EndpointGenerator-Dj7AumHi.cjs');
|
|
5
|
-
const require_FunctionGenerator = require('./FunctionGenerator-DN681IUn.cjs');
|
|
6
|
-
const require_manifests = require('./manifests-BTtfDMX8.cjs');
|
|
7
|
-
const require_providerResolver = require('./providerResolver-Cs-0YCaP.cjs');
|
|
8
|
-
const node_fs_promises = require_chunk.__toESM(require("node:fs/promises"));
|
|
9
|
-
const node_path = require_chunk.__toESM(require("node:path"));
|
|
10
|
-
|
|
11
|
-
//#region src/build/index.ts
|
|
12
|
-
const logger = console;
|
|
13
|
-
async function buildCommand(options) {
|
|
14
|
-
const config = await require_config.loadConfig();
|
|
15
|
-
const resolved = require_providerResolver.resolveProviders(config, options);
|
|
16
|
-
logger.log(`Building with providers: ${resolved.providers.join(", ")}`);
|
|
17
|
-
logger.log(`Loading routes from: ${config.routes}`);
|
|
18
|
-
if (config.functions) logger.log(`Loading functions from: ${config.functions}`);
|
|
19
|
-
if (config.crons) logger.log(`Loading crons from: ${config.crons}`);
|
|
20
|
-
logger.log(`Using envParser: ${config.envParser}`);
|
|
21
|
-
const [envParserPath, envParserName] = config.envParser.split("#");
|
|
22
|
-
const envParserImportPattern = !envParserName ? "envParser" : envParserName === "envParser" ? "{ envParser }" : `{ ${envParserName} as envParser }`;
|
|
23
|
-
const [loggerPath, loggerName] = config.logger.split("#");
|
|
24
|
-
const loggerImportPattern = !loggerName ? "logger" : loggerName === "logger" ? "{ logger }" : `{ ${loggerName} as logger }`;
|
|
25
|
-
const buildContext = {
|
|
26
|
-
envParserPath,
|
|
27
|
-
envParserImportPattern,
|
|
28
|
-
loggerPath,
|
|
29
|
-
loggerImportPattern
|
|
30
|
-
};
|
|
31
|
-
const endpointGenerator = new require_EndpointGenerator.EndpointGenerator();
|
|
32
|
-
const functionGenerator = new require_FunctionGenerator.FunctionGenerator();
|
|
33
|
-
const cronGenerator = new require_CronGenerator.CronGenerator();
|
|
34
|
-
const [allEndpoints, allFunctions, allCrons] = await Promise.all([
|
|
35
|
-
endpointGenerator.load(config.routes),
|
|
36
|
-
config.functions ? functionGenerator.load(config.functions) : [],
|
|
37
|
-
config.crons ? cronGenerator.load(config.crons) : []
|
|
38
|
-
]);
|
|
39
|
-
logger.log(`Found ${allEndpoints.length} endpoints`);
|
|
40
|
-
logger.log(`Found ${allFunctions.length} functions`);
|
|
41
|
-
logger.log(`Found ${allCrons.length} crons`);
|
|
42
|
-
if (allEndpoints.length === 0 && allFunctions.length === 0 && allCrons.length === 0) {
|
|
43
|
-
logger.log("No endpoints, functions, or crons found to process");
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
await Promise.all(resolved.providers.map((provider) => buildForProvider(provider, buildContext, endpointGenerator, functionGenerator, cronGenerator, allEndpoints, allFunctions, allCrons, resolved.enableOpenApi)));
|
|
47
|
-
}
|
|
48
|
-
async function buildForProvider(provider, context, endpointGenerator, functionGenerator, cronGenerator, endpoints, functions, crons, enableOpenApi) {
|
|
49
|
-
const outputDir = (0, node_path.join)(process.cwd(), ".gkm", provider);
|
|
50
|
-
await (0, node_fs_promises.mkdir)(outputDir, { recursive: true });
|
|
51
|
-
logger.log(`\nGenerating handlers for provider: ${provider}`);
|
|
52
|
-
const [routes, functionInfos, cronInfos] = await Promise.all([
|
|
53
|
-
endpointGenerator.build(context, endpoints, outputDir, {
|
|
54
|
-
provider,
|
|
55
|
-
enableOpenApi
|
|
56
|
-
}),
|
|
57
|
-
functionGenerator.build(context, functions, outputDir, { provider }),
|
|
58
|
-
cronGenerator.build(context, crons, outputDir, { provider })
|
|
59
|
-
]);
|
|
60
|
-
await require_manifests.generateManifests(outputDir, routes, functionInfos, cronInfos);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
//#endregion
|
|
64
|
-
Object.defineProperty(exports, 'buildCommand', {
|
|
65
|
-
enumerable: true,
|
|
66
|
-
get: function () {
|
|
67
|
-
return buildCommand;
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
//# sourceMappingURL=build-BfQFnU5-.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"build-BfQFnU5-.cjs","names":["options: BuildOptions","buildContext: BuildContext","EndpointGenerator","FunctionGenerator","CronGenerator","provider: LegacyProvider","context: BuildContext","endpointGenerator: EndpointGenerator","functionGenerator: FunctionGenerator","cronGenerator: CronGenerator","endpoints: GeneratedConstruct<Endpoint<any, any, any, any, any, any>>[]","functions: GeneratedConstruct<Function<any, any, any, any>>[]","crons: GeneratedConstruct<Cron<any, any, any, any>>[]","enableOpenApi: boolean"],"sources":["../src/build/index.ts"],"sourcesContent":["import { mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { Cron, Function } from '@geekmidas/api/constructs';\nimport type { Endpoint } from '@geekmidas/api/server';\nimport { loadConfig } from '../config';\nimport {\n CronGenerator,\n EndpointGenerator,\n FunctionGenerator,\n type GeneratedConstruct,\n} from '../generators';\nimport type { BuildOptions, LegacyProvider } from '../types';\nimport { generateManifests } from './manifests';\nimport { resolveProviders } from './providerResolver';\nimport type { BuildContext } from './types';\n\nconst logger = console;\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n const config = await loadConfig();\n\n // Resolve providers from new config format\n const resolved = resolveProviders(config, options);\n\n logger.log(`Building with providers: ${resolved.providers.join(', ')}`);\n logger.log(`Loading routes from: ${config.routes}`);\n if (config.functions) {\n logger.log(`Loading functions from: ${config.functions}`);\n }\n if (config.crons) {\n logger.log(`Loading crons from: ${config.crons}`);\n }\n logger.log(`Using envParser: ${config.envParser}`);\n\n // Parse envParser configuration\n const [envParserPath, envParserName] = config.envParser.split('#');\n const envParserImportPattern = !envParserName\n ? 'envParser'\n : envParserName === 'envParser'\n ? '{ envParser }'\n : `{ ${envParserName} as envParser }`;\n\n // Parse logger configuration\n const [loggerPath, loggerName] = config.logger.split('#');\n const loggerImportPattern = !loggerName\n ? 'logger'\n : loggerName === 'logger'\n ? '{ logger }'\n : `{ ${loggerName} as logger }`;\n\n const buildContext: BuildContext = {\n envParserPath,\n envParserImportPattern,\n loggerPath,\n loggerImportPattern,\n };\n\n // Initialize generators\n const endpointGenerator = new EndpointGenerator();\n const functionGenerator = new FunctionGenerator();\n const cronGenerator = new CronGenerator();\n\n // Load all constructs in parallel\n const [allEndpoints, allFunctions, allCrons] = await Promise.all([\n endpointGenerator.load(config.routes),\n config.functions ? functionGenerator.load(config.functions) : [],\n config.crons ? cronGenerator.load(config.crons) : [],\n ]);\n\n logger.log(`Found ${allEndpoints.length} endpoints`);\n logger.log(`Found ${allFunctions.length} functions`);\n logger.log(`Found ${allCrons.length} crons`);\n\n if (\n allEndpoints.length === 0 &&\n allFunctions.length === 0 &&\n allCrons.length === 0\n ) {\n logger.log('No endpoints, functions, or crons found to process');\n return;\n }\n\n // Build for each provider in parallel\n await Promise.all(\n resolved.providers.map((provider) =>\n buildForProvider(\n provider,\n buildContext,\n endpointGenerator,\n functionGenerator,\n cronGenerator,\n allEndpoints,\n allFunctions,\n allCrons,\n resolved.enableOpenApi,\n ),\n ),\n );\n}\n\nasync function buildForProvider(\n provider: LegacyProvider,\n context: BuildContext,\n endpointGenerator: EndpointGenerator,\n functionGenerator: FunctionGenerator,\n cronGenerator: CronGenerator,\n endpoints: GeneratedConstruct<Endpoint<any, any, any, any, any, any>>[],\n functions: GeneratedConstruct<Function<any, any, any, any>>[],\n crons: GeneratedConstruct<Cron<any, any, any, any>>[],\n enableOpenApi: boolean,\n): Promise<void> {\n const outputDir = join(process.cwd(), '.gkm', provider);\n\n // Ensure output directory exists\n await mkdir(outputDir, { recursive: true });\n\n logger.log(`\\nGenerating handlers for provider: ${provider}`);\n\n // Build all constructs in parallel\n const [routes, functionInfos, cronInfos] = await Promise.all([\n endpointGenerator.build(context, endpoints, outputDir, {\n provider,\n enableOpenApi,\n }),\n functionGenerator.build(context, functions, outputDir, { provider }),\n cronGenerator.build(context, crons, outputDir, { provider }),\n ]);\n\n // Generate manifests\n await generateManifests(\n outputDir,\n routes,\n functionInfos,\n cronInfos,\n );\n}\n"],"mappings":";;;;;;;;;;;AAgBA,MAAM,SAAS;AAEf,eAAsB,aAAaA,SAAsC;CACvE,MAAM,SAAS,MAAM,2BAAY;CAGjC,MAAM,WAAW,0CAAiB,QAAQ,QAAQ;AAElD,QAAO,KAAK,2BAA2B,SAAS,UAAU,KAAK,KAAK,CAAC,EAAE;AACvE,QAAO,KAAK,uBAAuB,OAAO,OAAO,EAAE;AACnD,KAAI,OAAO,UACT,QAAO,KAAK,0BAA0B,OAAO,UAAU,EAAE;AAE3D,KAAI,OAAO,MACT,QAAO,KAAK,sBAAsB,OAAO,MAAM,EAAE;AAEnD,QAAO,KAAK,mBAAmB,OAAO,UAAU,EAAE;CAGlD,MAAM,CAAC,eAAe,cAAc,GAAG,OAAO,UAAU,MAAM,IAAI;CAClE,MAAM,0BAA0B,gBAC5B,cACA,kBAAkB,cAChB,mBACC,IAAI,cAAc;CAGzB,MAAM,CAAC,YAAY,WAAW,GAAG,OAAO,OAAO,MAAM,IAAI;CACzD,MAAM,uBAAuB,aACzB,WACA,eAAe,WACb,gBACC,IAAI,WAAW;CAEtB,MAAMC,eAA6B;EACjC;EACA;EACA;EACA;CACD;CAGD,MAAM,oBAAoB,IAAIC;CAC9B,MAAM,oBAAoB,IAAIC;CAC9B,MAAM,gBAAgB,IAAIC;CAG1B,MAAM,CAAC,cAAc,cAAc,SAAS,GAAG,MAAM,QAAQ,IAAI;EAC/D,kBAAkB,KAAK,OAAO,OAAO;EACrC,OAAO,YAAY,kBAAkB,KAAK,OAAO,UAAU,GAAG,CAAE;EAChE,OAAO,QAAQ,cAAc,KAAK,OAAO,MAAM,GAAG,CAAE;CACrD,EAAC;AAEF,QAAO,KAAK,QAAQ,aAAa,OAAO,YAAY;AACpD,QAAO,KAAK,QAAQ,aAAa,OAAO,YAAY;AACpD,QAAO,KAAK,QAAQ,SAAS,OAAO,QAAQ;AAE5C,KACE,aAAa,WAAW,KACxB,aAAa,WAAW,KACxB,SAAS,WAAW,GACpB;AACA,SAAO,IAAI,qDAAqD;AAChE;CACD;AAGD,OAAM,QAAQ,IACZ,SAAS,UAAU,IAAI,CAAC,aACtB,iBACE,UACA,cACA,mBACA,mBACA,eACA,cACA,cACA,UACA,SAAS,cACV,CACF,CACF;AACF;AAED,eAAe,iBACbC,UACAC,SACAC,mBACAC,mBACAC,eACAC,WACAC,WACAC,OACAC,eACe;CACf,MAAM,YAAY,oBAAK,QAAQ,KAAK,EAAE,QAAQ,SAAS;AAGvD,OAAM,4BAAM,WAAW,EAAE,WAAW,KAAM,EAAC;AAE3C,QAAO,KAAK,sCAAsC,SAAS,EAAE;CAG7D,MAAM,CAAC,QAAQ,eAAe,UAAU,GAAG,MAAM,QAAQ,IAAI;EAC3D,kBAAkB,MAAM,SAAS,WAAW,WAAW;GACrD;GACA;EACD,EAAC;EACF,kBAAkB,MAAM,SAAS,WAAW,WAAW,EAAE,SAAU,EAAC;EACpE,cAAc,MAAM,SAAS,OAAO,WAAW,EAAE,SAAU,EAAC;CAC7D,EAAC;AAGF,OAAM,oCACJ,WACA,QACA,eACA,UACD;AACF"}
|