@geekmidas/cli 0.1.0 → 0.2.1
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-CB-NHtZW.cjs +205 -0
- package/dist/SubscriberGenerator-CB-NHtZW.cjs.map +1 -0
- package/dist/SubscriberGenerator-Cuu4co3-.mjs +199 -0
- package/dist/SubscriberGenerator-Cuu4co3-.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-Ajg356_5.cjs +89 -0
- package/dist/build-Ajg356_5.cjs.map +1 -0
- package/dist/build-zpABVsc0.mjs +83 -0
- package/dist/build-zpABVsc0.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 +274 -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 +392 -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,133 +0,0 @@
|
|
|
1
|
-
import { numberType, objectType, stringType } from "./esm-9eeZntth.mjs";
|
|
2
|
-
import { mkdir, rm, writeFile } from "node:fs/promises";
|
|
3
|
-
import { dirname, join } from "node:path";
|
|
4
|
-
import { CronBuilder, FunctionBuilder } from "@geekmidas/api/constructs";
|
|
5
|
-
import { e } from "@geekmidas/api/server";
|
|
6
|
-
import { tmpdir } from "node:os";
|
|
7
|
-
|
|
8
|
-
//#region src/__tests__/test-helpers.ts
|
|
9
|
-
/**
|
|
10
|
-
* Creates a temporary directory for testing
|
|
11
|
-
*/
|
|
12
|
-
async function createTempDir(prefix = "cli-test-") {
|
|
13
|
-
const tempPath = join(tmpdir(), `${prefix}${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
14
|
-
await mkdir(tempPath, { recursive: true });
|
|
15
|
-
return tempPath;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Cleans up a directory
|
|
19
|
-
*/
|
|
20
|
-
async function cleanupDir(path) {
|
|
21
|
-
try {
|
|
22
|
-
await rm(path, {
|
|
23
|
-
recursive: true,
|
|
24
|
-
force: true
|
|
25
|
-
});
|
|
26
|
-
} catch (error) {}
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Creates a test file with content
|
|
30
|
-
*/
|
|
31
|
-
async function createTestFile(dir, filename, content) {
|
|
32
|
-
const filePath = join(dir, filename);
|
|
33
|
-
await mkdir(dirname(filePath), { recursive: true });
|
|
34
|
-
await writeFile(filePath, content);
|
|
35
|
-
return filePath;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Creates a mock endpoint file with real endpoint construct
|
|
39
|
-
*/
|
|
40
|
-
async function createMockEndpointFile(dir, filename, exportName, path = "/test", method = "GET") {
|
|
41
|
-
const content = `
|
|
42
|
-
import { e } from '@geekmidas/api/server';
|
|
43
|
-
import { z } from 'zod';
|
|
44
|
-
|
|
45
|
-
export const ${exportName} = e
|
|
46
|
-
.${method.toLowerCase()}('${path}')
|
|
47
|
-
.output(z.object({ message: z.string() }))
|
|
48
|
-
.handle(async () => ({ message: 'Hello from ${exportName}' }));
|
|
49
|
-
`;
|
|
50
|
-
return createTestFile(dir, filename, content);
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Creates a mock function file with real function construct
|
|
54
|
-
*/
|
|
55
|
-
async function createMockFunctionFile(dir, filename, exportName, timeout = 30) {
|
|
56
|
-
const content = `
|
|
57
|
-
import { FunctionBuilder } from '@geekmidas/api/constructs';
|
|
58
|
-
import { z } from 'zod';
|
|
59
|
-
|
|
60
|
-
export const ${exportName} = new FunctionBuilder()
|
|
61
|
-
.input(z.object({ name: z.string() }))
|
|
62
|
-
.output(z.object({ greeting: z.string() }))
|
|
63
|
-
.timeout(${timeout})
|
|
64
|
-
.handle(async ({ input }) => ({ greeting: \`Hello, \${input.name}!\` }));
|
|
65
|
-
`;
|
|
66
|
-
return createTestFile(dir, filename, content);
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Creates a mock cron file with real cron construct
|
|
70
|
-
*/
|
|
71
|
-
async function createMockCronFile(dir, filename, exportName, schedule = "rate(1 hour)") {
|
|
72
|
-
const content = `
|
|
73
|
-
import { CronBuilder } from '@geekmidas/api/constructs';
|
|
74
|
-
import { z } from 'zod';
|
|
75
|
-
|
|
76
|
-
export const ${exportName} = new CronBuilder()
|
|
77
|
-
.schedule('${schedule}')
|
|
78
|
-
.output(z.object({ processed: z.number() }))
|
|
79
|
-
.handle(async () => {
|
|
80
|
-
console.log('Running cron job: ${exportName}');
|
|
81
|
-
return { processed: 10 };
|
|
82
|
-
});
|
|
83
|
-
`;
|
|
84
|
-
return createTestFile(dir, filename, content);
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Helper functions to create real constructs for testing
|
|
88
|
-
*/
|
|
89
|
-
function createTestEndpoint(path, method = "GET") {
|
|
90
|
-
const m = method.toLowerCase();
|
|
91
|
-
const builder = e[m](path);
|
|
92
|
-
builder.output(objectType({ message: stringType() }));
|
|
93
|
-
return builder.handle(async () => ({ message: `Hello from ${path}` }));
|
|
94
|
-
}
|
|
95
|
-
function createTestFunction(timeout = 30) {
|
|
96
|
-
const builder = new FunctionBuilder();
|
|
97
|
-
builder.input(objectType({ name: stringType() }));
|
|
98
|
-
builder.output(objectType({ greeting: stringType() }));
|
|
99
|
-
builder.timeout(timeout);
|
|
100
|
-
return builder.handle(async ({ input }) => ({ greeting: `Hello, ${input.name}!` }));
|
|
101
|
-
}
|
|
102
|
-
function createTestCron(schedule = "rate(1 hour)", timeout = 30) {
|
|
103
|
-
const builder = new CronBuilder();
|
|
104
|
-
builder.schedule(schedule);
|
|
105
|
-
builder.output(objectType({ processed: numberType() }));
|
|
106
|
-
builder.timeout(timeout);
|
|
107
|
-
return builder.handle(async () => {
|
|
108
|
-
return { processed: 10 };
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Creates a mock build context
|
|
113
|
-
*/
|
|
114
|
-
function createMockBuildContext() {
|
|
115
|
-
return {
|
|
116
|
-
envParserPath: "./env",
|
|
117
|
-
envParserImportPattern: "envParser",
|
|
118
|
-
loggerPath: "./logger",
|
|
119
|
-
loggerImportPattern: "logger"
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Waits for a condition to be true
|
|
124
|
-
*/
|
|
125
|
-
async function waitFor(condition, timeout = 5e3, interval = 100) {
|
|
126
|
-
const start = Date.now();
|
|
127
|
-
while (!condition() && Date.now() - start < timeout) await new Promise((resolve) => setTimeout(resolve, interval));
|
|
128
|
-
if (!condition()) throw new Error("Timeout waiting for condition");
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
//#endregion
|
|
132
|
-
export { cleanupDir, createMockBuildContext, createMockCronFile, createMockEndpointFile, createMockFunctionFile, createTempDir, createTestCron, createTestEndpoint, createTestFile, createTestFunction, waitFor };
|
|
133
|
-
//# sourceMappingURL=test-helpers-DdVBk23F.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-helpers-DdVBk23F.mjs","names":["path: string","dir: string","filename: string","content: string","exportName: string","method: string","method: HttpMethod","timeout: number","schedule: ScheduleExpression","condition: () => boolean"],"sources":["../src/__tests__/test-helpers.ts"],"sourcesContent":["import { mkdir, rm, writeFile } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport {\n CronBuilder,\n FunctionBuilder,\n type ScheduleExpression,\n} from '@geekmidas/api/constructs';\nimport { e } from '@geekmidas/api/server';\nimport { z } from 'zod';\n\n/**\n * Creates a temporary directory for testing\n */\nexport async function createTempDir(prefix = 'cli-test-'): Promise<string> {\n const tempPath = join(\n tmpdir(),\n `${prefix}${Date.now()}-${Math.random().toString(36).slice(2)}`,\n );\n await mkdir(tempPath, { recursive: true });\n return tempPath;\n}\n\n/**\n * Cleans up a directory\n */\nexport async function cleanupDir(path: string): Promise<void> {\n try {\n await rm(path, { recursive: true, force: true });\n } catch (error) {\n // Ignore errors during cleanup\n }\n}\n\n/**\n * Creates a test file with content\n */\nexport async function createTestFile(\n dir: string,\n filename: string,\n content: string,\n): Promise<string> {\n const filePath = join(dir, filename);\n await mkdir(dirname(filePath), { recursive: true });\n await writeFile(filePath, content);\n return filePath;\n}\n\n/**\n * Creates a mock endpoint file with real endpoint construct\n */\nexport async function createMockEndpointFile(\n dir: string,\n filename: string,\n exportName: string,\n path: string = '/test',\n method: string = 'GET',\n): Promise<string> {\n const content = `\nimport { e } from '@geekmidas/api/server';\nimport { z } from 'zod';\n\nexport const ${exportName} = e\n .${method.toLowerCase()}('${path}')\n .output(z.object({ message: z.string() }))\n .handle(async () => ({ message: 'Hello from ${exportName}' }));\n`;\n return createTestFile(dir, filename, content);\n}\n\n/**\n * Creates a mock function file with real function construct\n */\nexport async function createMockFunctionFile(\n dir: string,\n filename: string,\n exportName: string,\n timeout = 30,\n): Promise<string> {\n const content = `\nimport { FunctionBuilder } from '@geekmidas/api/constructs';\nimport { z } from 'zod';\n\nexport const ${exportName} = new FunctionBuilder()\n .input(z.object({ name: z.string() }))\n .output(z.object({ greeting: z.string() }))\n .timeout(${timeout})\n .handle(async ({ input }) => ({ greeting: \\`Hello, \\${input.name}!\\` }));\n`;\n return createTestFile(dir, filename, content);\n}\n\n/**\n * Creates a mock cron file with real cron construct\n */\nexport async function createMockCronFile(\n dir: string,\n filename: string,\n exportName: string,\n schedule = 'rate(1 hour)',\n): Promise<string> {\n const content = `\nimport { CronBuilder } from '@geekmidas/api/constructs';\nimport { z } from 'zod';\n\nexport const ${exportName} = new CronBuilder()\n .schedule('${schedule}')\n .output(z.object({ processed: z.number() }))\n .handle(async () => {\n console.log('Running cron job: ${exportName}');\n return { processed: 10 };\n });\n`;\n return createTestFile(dir, filename, content);\n}\n\n/**\n * Helper functions to create real constructs for testing\n */\nexport function createTestEndpoint(path: string, method: HttpMethod = 'GET') {\n const m = method.toLowerCase() as Lowercase<HttpMethod>;\n const builder = e[m](path);\n builder.output(z.object({ message: z.string() }));\n return builder.handle(async () => ({ message: `Hello from ${path}` }));\n}\n\nexport function createTestFunction(timeout: number = 30) {\n const builder = new FunctionBuilder();\n builder.input(z.object({ name: z.string() }));\n builder.output(z.object({ greeting: z.string() }));\n builder.timeout(timeout);\n return builder.handle(async ({ input }: any) => ({ greeting: `Hello, ${input.name}!` }));\n}\n\nexport function createTestCron(\n schedule: ScheduleExpression = 'rate(1 hour)',\n timeout: number = 30,\n) {\n const builder = new CronBuilder();\n builder.schedule(schedule);\n builder.output(z.object({ processed: z.number() }));\n builder.timeout(timeout);\n return builder.handle(async () => {\n return { processed: 10 };\n });\n}\n\n/**\n * Creates a mock build context\n */\nexport function createMockBuildContext() {\n return {\n envParserPath: './env',\n envParserImportPattern: 'envParser',\n loggerPath: './logger',\n loggerImportPattern: 'logger',\n };\n}\n\n/**\n * Waits for a condition to be true\n */\nexport async function waitFor(\n condition: () => boolean,\n timeout = 5000,\n interval = 100,\n): Promise<void> {\n const start = Date.now();\n while (!condition() && Date.now() - start < timeout) {\n await new Promise((resolve) => setTimeout(resolve, interval));\n }\n if (!condition()) {\n throw new Error('Timeout waiting for condition');\n }\n}\n\nimport { dirname } from 'node:path';\nimport type { HttpMethod } from '../../../api/src/constructs/types';\n"],"mappings":";;;;;;;;;;;AAcA,eAAsB,cAAc,SAAS,aAA8B;CACzE,MAAM,WAAW,KACf,QAAQ,GACP,EAAE,OAAO,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE,CAAC,EAC/D;AACD,OAAM,MAAM,UAAU,EAAE,WAAW,KAAM,EAAC;AAC1C,QAAO;AACR;;;;AAKD,eAAsB,WAAWA,MAA6B;AAC5D,KAAI;AACF,QAAM,GAAG,MAAM;GAAE,WAAW;GAAM,OAAO;EAAM,EAAC;CACjD,SAAQ,OAAO,CAEf;AACF;;;;AAKD,eAAsB,eACpBC,KACAC,UACAC,SACiB;CACjB,MAAM,WAAW,KAAK,KAAK,SAAS;AACpC,OAAM,MAAM,QAAQ,SAAS,EAAE,EAAE,WAAW,KAAM,EAAC;AACnD,OAAM,UAAU,UAAU,QAAQ;AAClC,QAAO;AACR;;;;AAKD,eAAsB,uBACpBF,KACAC,UACAE,YACAJ,OAAe,SACfK,SAAiB,OACA;CACjB,MAAM,WAAW;;;;eAIJ,WAAW;KACrB,OAAO,aAAa,CAAC,IAAI,KAAK;;gDAEa,WAAW;;AAEzD,QAAO,eAAe,KAAK,UAAU,QAAQ;AAC9C;;;;AAKD,eAAsB,uBACpBJ,KACAC,UACAE,YACA,UAAU,IACO;CACjB,MAAM,WAAW;;;;eAIJ,WAAW;;;aAGb,QAAQ;;;AAGnB,QAAO,eAAe,KAAK,UAAU,QAAQ;AAC9C;;;;AAKD,eAAsB,mBACpBH,KACAC,UACAE,YACA,WAAW,gBACM;CACjB,MAAM,WAAW;;;;eAIJ,WAAW;eACX,SAAS;;;qCAGa,WAAW;;;;AAI9C,QAAO,eAAe,KAAK,UAAU,QAAQ;AAC9C;;;;AAKD,SAAgB,mBAAmBJ,MAAcM,SAAqB,OAAO;CAC3E,MAAM,IAAI,OAAO,aAAa;CAC9B,MAAM,UAAU,EAAE,GAAG,KAAK;AAC1B,SAAQ,OAAO,WAAS,EAAE,SAAS,YAAU,CAAE,EAAC,CAAC;AACjD,QAAO,QAAQ,OAAO,aAAa,EAAE,UAAU,aAAa,KAAK,EAAG,GAAE;AACvE;AAED,SAAgB,mBAAmBC,UAAkB,IAAI;CACvD,MAAM,UAAU,IAAI;AACpB,SAAQ,MAAM,WAAS,EAAE,MAAM,YAAU,CAAE,EAAC,CAAC;AAC7C,SAAQ,OAAO,WAAS,EAAE,UAAU,YAAU,CAAE,EAAC,CAAC;AAClD,SAAQ,QAAQ,QAAQ;AACxB,QAAO,QAAQ,OAAO,OAAO,EAAE,OAAY,MAAM,EAAE,WAAW,SAAS,MAAM,KAAK,GAAI,GAAE;AACzF;AAED,SAAgB,eACdC,WAA+B,gBAC/BD,UAAkB,IAClB;CACA,MAAM,UAAU,IAAI;AACpB,SAAQ,SAAS,SAAS;AAC1B,SAAQ,OAAO,WAAS,EAAE,WAAW,YAAU,CAAE,EAAC,CAAC;AACnD,SAAQ,QAAQ,QAAQ;AACxB,QAAO,QAAQ,OAAO,YAAY;AAChC,SAAO,EAAE,WAAW,GAAI;CACzB,EAAC;AACH;;;;AAKD,SAAgB,yBAAyB;AACvC,QAAO;EACL,eAAe;EACf,wBAAwB;EACxB,YAAY;EACZ,qBAAqB;CACtB;AACF;;;;AAKD,eAAsB,QACpBE,WACA,UAAU,KACV,WAAW,KACI;CACf,MAAM,QAAQ,KAAK,KAAK;AACxB,SAAQ,WAAW,IAAI,KAAK,KAAK,GAAG,QAAQ,QAC1C,OAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,SAAS;AAE9D,MAAK,WAAW,CACd,OAAM,IAAI,MAAM;AAEnB"}
|
|
File without changes
|