wgc 0.95.0 → 0.96.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/dist/package.json +4 -1
- package/dist/src/commands/grpc-service/commands/generate.js +6 -1
- package/dist/src/commands/grpc-service/commands/generate.js.map +1 -1
- package/dist/src/commands/router/commands/plugin/commands/build.js +44 -19
- package/dist/src/commands/router/commands/plugin/commands/build.js.map +1 -1
- package/dist/src/commands/router/commands/plugin/commands/generate.js +32 -10
- package/dist/src/commands/router/commands/plugin/commands/generate.js.map +1 -1
- package/dist/src/commands/router/commands/plugin/commands/init.js +79 -48
- package/dist/src/commands/router/commands/plugin/commands/init.js.map +1 -1
- package/dist/src/commands/router/commands/plugin/commands/test.js +36 -7
- package/dist/src/commands/router/commands/plugin/commands/test.js.map +1 -1
- package/dist/src/commands/router/commands/plugin/templates/go.d.ts +9 -0
- package/dist/src/commands/router/commands/plugin/templates/go.js +18 -0
- package/dist/src/commands/router/commands/plugin/templates/go.js.map +1 -0
- package/dist/src/commands/router/commands/plugin/templates/plugin.d.ts +3 -8
- package/dist/src/commands/router/commands/plugin/templates/plugin.js +11 -424
- package/dist/src/commands/router/commands/plugin/templates/plugin.js.map +1 -1
- package/dist/src/commands/router/commands/plugin/templates/project.d.ts +5 -5
- package/dist/src/commands/router/commands/plugin/templates/project.js +14 -200
- package/dist/src/commands/router/commands/plugin/templates/project.js.map +1 -1
- package/dist/src/commands/router/commands/plugin/templates/typescript.d.ts +14 -0
- package/dist/src/commands/router/commands/plugin/templates/typescript.js +28 -0
- package/dist/src/commands/router/commands/plugin/templates/typescript.js.map +1 -0
- package/dist/src/commands/router/commands/plugin/toolchain.d.ts +25 -6
- package/dist/src/commands/router/commands/plugin/toolchain.js +334 -78
- package/dist/src/commands/router/commands/plugin/toolchain.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -3
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wgc",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.96.0",
|
|
4
4
|
"description": "The official CLI tool to manage the GraphQL Federation Platform Cosmo",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
"url": "https://github.com/wundergraph/cosmo"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
|
+
"compile-templates": "tsx scripts/compile-templates.ts && prettier --write src/commands/router/commands/plugin/templates/*.ts",
|
|
23
|
+
"prebuild": "npm run compile-templates",
|
|
24
|
+
"prebuild:bun": "bun run compile-templates",
|
|
22
25
|
"build": "rm -rf dist && tsc",
|
|
23
26
|
"build:bun": "bun build --compile --production --outfile wgc src/index.ts",
|
|
24
27
|
"wgc": "tsx --env-file .env src/index.ts",
|
|
@@ -5,6 +5,7 @@ import { camelCase, upperFirst } from 'lodash-es';
|
|
|
5
5
|
import Spinner from 'ora';
|
|
6
6
|
import { resolve } from 'pathe';
|
|
7
7
|
import { renderResultTree, renderValidationResults } from '../../router/commands/plugin/helper.js';
|
|
8
|
+
import { getGoModulePathProtoOption } from '../../router/commands/plugin/toolchain.js';
|
|
8
9
|
export default (opts) => {
|
|
9
10
|
const command = new Command('generate');
|
|
10
11
|
command.description('Generate a protobuf schema for a remote gRPC service.');
|
|
@@ -79,11 +80,15 @@ async function generateProtoAndMapping({ name, outdir, schemaFile, spinner, pack
|
|
|
79
80
|
// Continue with generation if validation passed (no errors)
|
|
80
81
|
spinner.text = 'Generating mapping and proto files...';
|
|
81
82
|
const mapping = compileGraphQLToMapping(schema, serviceName);
|
|
83
|
+
const protoOptions = [];
|
|
84
|
+
if (goPackage) {
|
|
85
|
+
protoOptions.push(getGoModulePathProtoOption(goPackage));
|
|
86
|
+
}
|
|
82
87
|
const proto = compileGraphQLToProto(schema, {
|
|
83
88
|
serviceName,
|
|
84
89
|
packageName,
|
|
85
|
-
goPackage,
|
|
86
90
|
lockData,
|
|
91
|
+
protoOptions,
|
|
87
92
|
});
|
|
88
93
|
return {
|
|
89
94
|
mapping: JSON.stringify(mapping, null, 2),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../../src/commands/grpc-service/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,EACL,uBAAuB,EACvB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../../src/commands/grpc-service/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,45 +4,69 @@ import { Command, program } from 'commander';
|
|
|
4
4
|
import { resolve } from 'pathe';
|
|
5
5
|
import Spinner from 'ora';
|
|
6
6
|
import { renderResultTree } from '../helper.js';
|
|
7
|
-
import {
|
|
7
|
+
import { buildGoBinaries, checkAndInstallTools, generateGRPCCode, generateProtoAndMapping, getLanguage, installGoDependencies, installTsDependencies, typeCheckTs, buildTsBinaries, normalizePlatforms, validateAndGetGoModulePath, getGoModulePathProtoOption, } from '../toolchain.js';
|
|
8
8
|
export default (opts) => {
|
|
9
9
|
const command = new Command('build');
|
|
10
10
|
command.description('Build a gRPC router plugin');
|
|
11
11
|
command.argument('[directory]', 'Directory of the plugin', '.');
|
|
12
12
|
command.option('--generate-only', 'Generate only the proto and mapping files, do not compile the plugin');
|
|
13
13
|
command.option('--debug', 'Build the binary with debug information', false);
|
|
14
|
-
command.option('--platform [platforms...]', 'Platform-architecture combinations (e.g., darwin-arm64 linux-amd64)', [
|
|
15
|
-
HOST_PLATFORM,
|
|
16
|
-
]);
|
|
14
|
+
command.option('--platform [platforms...]', 'Platform-architecture combinations (e.g., darwin-arm64 linux-amd64)', []);
|
|
17
15
|
command.option('--all-platforms', 'Build for all supported platforms', false);
|
|
18
16
|
command.option('--skip-tools-installation', 'Skip tool installation', false);
|
|
19
17
|
command.option('--force-tools-installation', 'Force tools installation regardless of version check or confirmation', false);
|
|
20
|
-
command.option('--go-module-path <path>', 'Go module path to use for the plugin'
|
|
18
|
+
command.option('--go-module-path <path>', 'Go module path to use for the plugin');
|
|
21
19
|
command.action(async (directory, options) => {
|
|
22
20
|
const startTime = performance.now();
|
|
23
21
|
const pluginDir = resolve(directory);
|
|
24
22
|
const spinner = Spinner();
|
|
25
23
|
const pluginName = path.basename(pluginDir);
|
|
26
|
-
const
|
|
24
|
+
const language = getLanguage(pluginDir);
|
|
25
|
+
if (!language) {
|
|
26
|
+
renderResultTree(spinner, 'Plugin language detection failed!', false, pluginName, {
|
|
27
|
+
output: pluginDir,
|
|
28
|
+
});
|
|
29
|
+
program.error('');
|
|
30
|
+
}
|
|
31
|
+
const protoOptions = [];
|
|
27
32
|
let platforms = [];
|
|
28
33
|
try {
|
|
29
34
|
// Check and install tools if needed
|
|
30
35
|
if (!options.skipToolsInstallation) {
|
|
31
|
-
await checkAndInstallTools(options.forceToolsInstallation);
|
|
36
|
+
await checkAndInstallTools(options.forceToolsInstallation, language);
|
|
32
37
|
}
|
|
33
|
-
// Normalize platform list
|
|
34
|
-
platforms = normalizePlatforms(options.platform, options.allPlatforms);
|
|
35
38
|
// Start the main build process
|
|
36
39
|
spinner.start('Building plugin...');
|
|
40
|
+
const goModulePath = validateAndGetGoModulePath(language, options.goModulePath);
|
|
41
|
+
switch (language) {
|
|
42
|
+
case 'ts': {
|
|
43
|
+
await installTsDependencies(pluginDir, spinner);
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
case 'go': {
|
|
47
|
+
protoOptions.push(getGoModulePathProtoOption(goModulePath));
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Normalize platform list
|
|
52
|
+
platforms = normalizePlatforms(options.platform, options.allPlatforms, language);
|
|
37
53
|
// Generate proto and mapping files
|
|
38
|
-
await generateProtoAndMapping(pluginDir,
|
|
54
|
+
await generateProtoAndMapping(pluginDir, protoOptions, spinner);
|
|
39
55
|
// Generate gRPC code
|
|
40
|
-
await generateGRPCCode(pluginDir, spinner);
|
|
56
|
+
await generateGRPCCode(pluginDir, spinner, language);
|
|
41
57
|
if (!options.generateOnly) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
58
|
+
switch (language) {
|
|
59
|
+
case 'go': {
|
|
60
|
+
await installGoDependencies(pluginDir, spinner);
|
|
61
|
+
await buildGoBinaries(pluginDir, platforms, options.debug, spinner);
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
case 'ts': {
|
|
65
|
+
await typeCheckTs(pluginDir, spinner);
|
|
66
|
+
await buildTsBinaries(pluginDir, platforms, options.debug, spinner);
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
46
70
|
}
|
|
47
71
|
// Calculate and format elapsed time
|
|
48
72
|
const endTime = performance.now();
|
|
@@ -50,24 +74,25 @@ export default (opts) => {
|
|
|
50
74
|
const formattedTime = elapsedTimeMs > 1000 ? `${(elapsedTimeMs / 1000).toFixed(2)}s` : `${Math.round(elapsedTimeMs)}ms`;
|
|
51
75
|
renderResultTree(spinner, 'Plugin built successfully!', true, pluginName, {
|
|
52
76
|
output: pluginDir,
|
|
53
|
-
'go module': goModulePath,
|
|
54
77
|
platforms: platforms.join(', '),
|
|
55
78
|
env: `${os.platform()} ${os.arch()}`,
|
|
56
79
|
build: options.debug ? 'debug' : 'release',
|
|
57
80
|
type: options.generateOnly ? 'generate-only' : 'full',
|
|
58
81
|
time: formattedTime,
|
|
82
|
+
protoOptions: protoOptions.map(({ name, constant }) => `${name}=${constant}`).join(','),
|
|
59
83
|
});
|
|
60
84
|
}
|
|
61
85
|
catch (error) {
|
|
62
|
-
|
|
86
|
+
const details = {
|
|
63
87
|
output: pluginDir,
|
|
64
|
-
'go module': goModulePath,
|
|
65
88
|
platforms: platforms.join(', '),
|
|
66
89
|
env: `${os.platform()} ${os.arch()}`,
|
|
67
90
|
build: options.debug ? 'debug' : 'release',
|
|
68
91
|
type: options.generateOnly ? 'generate-only' : 'full',
|
|
69
92
|
error: error.message,
|
|
70
|
-
|
|
93
|
+
protoOptions: protoOptions.map(({ name, constant }) => `${name}=${constant}`).join(','),
|
|
94
|
+
};
|
|
95
|
+
renderResultTree(spinner, 'Plugin build failed!', false, pluginName, details);
|
|
71
96
|
program.error('');
|
|
72
97
|
}
|
|
73
98
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../../../../../src/commands/router/commands/plugin/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,OAAO,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../../../../../src/commands/router/commands/plugin/commands/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,41 +4,63 @@ import Spinner from 'ora';
|
|
|
4
4
|
import { resolve } from 'pathe';
|
|
5
5
|
import pc from 'picocolors';
|
|
6
6
|
import { renderResultTree } from '../helper.js';
|
|
7
|
-
import { checkAndInstallTools, generateGRPCCode, generateProtoAndMapping, installGoDependencies, } from '../toolchain.js';
|
|
7
|
+
import { checkAndInstallTools, generateGRPCCode, generateProtoAndMapping, getGoModulePathProtoOption, getLanguage, installGoDependencies, installTsDependencies, validateAndGetGoModulePath, } from '../toolchain.js';
|
|
8
8
|
export default (opts) => {
|
|
9
9
|
const command = new Command('generate');
|
|
10
10
|
command.description('Generate proto and gRPC code for a router plugin');
|
|
11
11
|
command.argument('[directory]', 'Directory of the plugin', '.');
|
|
12
12
|
command.option('--skip-tools-installation', 'Skip tool installation', false);
|
|
13
13
|
command.option('--force-tools-installation', 'Force tools installation regardless of version check or confirmation', false);
|
|
14
|
-
command.option('--go-module-path <path>', 'Go module path to use for the plugin'
|
|
14
|
+
command.option('--go-module-path <path>', 'Go module path to use for the plugin');
|
|
15
15
|
command.action(async (directory, options) => {
|
|
16
16
|
const startTime = performance.now();
|
|
17
17
|
const pluginDir = resolve(directory);
|
|
18
18
|
const spinner = Spinner();
|
|
19
19
|
const pluginName = path.basename(pluginDir);
|
|
20
|
-
const
|
|
20
|
+
const language = getLanguage(pluginDir);
|
|
21
|
+
if (!language) {
|
|
22
|
+
renderResultTree(spinner, 'Plugin language detection failed!', false, pluginName, {
|
|
23
|
+
output: pluginDir,
|
|
24
|
+
});
|
|
25
|
+
program.error('');
|
|
26
|
+
}
|
|
27
|
+
const protoOptions = [];
|
|
21
28
|
try {
|
|
22
29
|
// Check and install tools if needed
|
|
23
30
|
if (!options.skipToolsInstallation) {
|
|
24
|
-
await checkAndInstallTools(options.forceToolsInstallation);
|
|
31
|
+
await checkAndInstallTools(options.forceToolsInstallation, language);
|
|
25
32
|
}
|
|
26
33
|
// Start the generation process
|
|
27
34
|
spinner.start('Generating plugin code...');
|
|
35
|
+
const goModulePath = validateAndGetGoModulePath(language, options.goModulePath);
|
|
36
|
+
switch (language) {
|
|
37
|
+
case 'ts': {
|
|
38
|
+
await installTsDependencies(pluginDir, spinner);
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
case 'go': {
|
|
42
|
+
protoOptions.push(getGoModulePathProtoOption(goModulePath));
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
28
46
|
// Generate proto and mapping files
|
|
29
|
-
await generateProtoAndMapping(pluginDir,
|
|
47
|
+
await generateProtoAndMapping(pluginDir, protoOptions, spinner);
|
|
30
48
|
// Generate gRPC code
|
|
31
|
-
await generateGRPCCode(pluginDir, spinner);
|
|
32
|
-
|
|
33
|
-
|
|
49
|
+
await generateGRPCCode(pluginDir, spinner, language);
|
|
50
|
+
switch (language) {
|
|
51
|
+
case 'go': {
|
|
52
|
+
await installGoDependencies(pluginDir, spinner);
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
34
56
|
// Calculate and format elapsed time
|
|
35
57
|
const endTime = performance.now();
|
|
36
58
|
const elapsedTimeMs = endTime - startTime;
|
|
37
59
|
const formattedTime = elapsedTimeMs > 1000 ? `${(elapsedTimeMs / 1000).toFixed(2)}s` : `${Math.round(elapsedTimeMs)}ms`;
|
|
38
60
|
renderResultTree(spinner, 'Plugin code generated successfully!', true, pluginName, {
|
|
39
61
|
output: pluginDir,
|
|
40
|
-
'go module': goModulePath,
|
|
41
62
|
time: formattedTime,
|
|
63
|
+
protoOptions: protoOptions.map(({ name, constant }) => `${name}=${constant}`).join(','),
|
|
42
64
|
});
|
|
43
65
|
console.log('');
|
|
44
66
|
console.log(` Now you can modify your implementation in src/main.go, then when you're ready to publish, run ${pc.bold('wgc router plugin publish')}.`);
|
|
@@ -46,8 +68,8 @@ export default (opts) => {
|
|
|
46
68
|
catch (error) {
|
|
47
69
|
renderResultTree(spinner, 'Plugin code generation failed!', false, pluginName, {
|
|
48
70
|
output: pluginDir,
|
|
49
|
-
'go module': goModulePath,
|
|
50
71
|
error: error.message,
|
|
72
|
+
protoOptions: protoOptions.map(({ name, constant }) => `${name}=${constant}`).join(','),
|
|
51
73
|
});
|
|
52
74
|
program.error('');
|
|
53
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../../../../src/commands/router/commands/plugin/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,OAAO,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../../../../src/commands/router/commands/plugin/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,OAAO,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EACvB,0BAA0B,EAC1B,WAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AAEzB,eAAe,CAAC,IAAwB,EAAE,EAAE;IAC1C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IACxC,OAAO,CAAC,WAAW,CAAC,kDAAkD,CAAC,CAAC;IACxE,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,yBAAyB,EAAE,GAAG,CAAC,CAAC;IAChE,OAAO,CAAC,MAAM,CAAC,2BAA2B,EAAE,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAC7E,OAAO,CAAC,MAAM,CACZ,4BAA4B,EAC5B,sEAAsE,EACtE,KAAK,CACN,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,yBAAyB,EAAE,sCAAsC,CAAC,CAAC;IAElF,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QAC1C,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAE5C,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,gBAAgB,CAAC,OAAO,EAAE,mCAAmC,EAAE,KAAK,EAAE,UAAU,EAAE;gBAChF,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QAED,MAAM,YAAY,GAAkB,EAAE,CAAC;QAEvC,IAAI,CAAC;YACH,oCAAoC;YACpC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;gBACnC,MAAM,oBAAoB,CAAC,OAAO,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;YACvE,CAAC;YAED,+BAA+B;YAC/B,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAE3C,MAAM,YAAY,GAAG,0BAA0B,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;YAEhF,QAAQ,QAAQ,EAAE,CAAC;gBACjB,KAAK,IAAI,CAAC,CAAC,CAAC;oBACV,MAAM,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBAChD,MAAM;gBACR,CAAC;gBACD,KAAK,IAAI,CAAC,CAAC,CAAC;oBACV,YAAY,CAAC,IAAI,CAAC,0BAA0B,CAAC,YAAa,CAAC,CAAC,CAAC;oBAC7D,MAAM;gBACR,CAAC;YACH,CAAC;YAED,mCAAmC;YACnC,MAAM,uBAAuB,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;YAEhE,qBAAqB;YACrB,MAAM,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAErD,QAAQ,QAAQ,EAAE,CAAC;gBACjB,KAAK,IAAI,CAAC,CAAC,CAAC;oBACV,MAAM,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBAChD,MAAM;gBACR,CAAC;YACH,CAAC;YAED,oCAAoC;YACpC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAClC,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;YAC1C,MAAM,aAAa,GACjB,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;YAEpG,gBAAgB,CAAC,OAAO,EAAE,qCAAqC,EAAE,IAAI,EAAE,UAAU,EAAE;gBACjF,MAAM,EAAE,SAAS;gBACjB,IAAI,EAAE,aAAa;gBACnB,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;aACxF,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CACT,mGAAmG,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAC3I,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,gBAAgB,CAAC,OAAO,EAAE,gCAAgC,EAAE,KAAK,EAAE,UAAU,EAAE;gBAC7E,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;aACxF,CAAC,CAAC;YAEH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|
|
@@ -11,7 +11,10 @@ import { compileGraphQLToMapping, compileGraphQLToProto } from '@wundergraph/pro
|
|
|
11
11
|
import { camelCase, upperFirst } from 'lodash-es';
|
|
12
12
|
import PluginTemplates from '../templates/plugin.js';
|
|
13
13
|
import ProjectTemplates from '../templates/project.js';
|
|
14
|
+
import GoTemplates from '../templates/go.js';
|
|
15
|
+
import TsTemplates from '../templates/typescript.js';
|
|
14
16
|
import { renderResultTree } from '../helper.js';
|
|
17
|
+
import { getGoModulePathProtoOption } from '../toolchain.js';
|
|
15
18
|
export default (opts) => {
|
|
16
19
|
const command = new Command('init');
|
|
17
20
|
command.description('Scaffold a new gRPC router plugin');
|
|
@@ -47,70 +50,98 @@ export default (opts) => {
|
|
|
47
50
|
const generatedDir = resolve(tempDir, 'generated');
|
|
48
51
|
await mkdir(generatedDir, { recursive: true });
|
|
49
52
|
spinner.text = 'Checkout templates...';
|
|
50
|
-
|
|
53
|
+
options.language = options.language.toLowerCase();
|
|
54
|
+
if (options.language !== 'go' && options.language !== 'ts') {
|
|
51
55
|
spinner.fail(pc.yellow(`Language '${options.language}' is not supported yet. Using 'go' instead.`));
|
|
52
56
|
options.language = 'go';
|
|
53
57
|
}
|
|
54
58
|
const goModulePath = 'github.com/wundergraph/cosmo/plugin';
|
|
55
59
|
spinner.text = 'Generating mapping and proto files...';
|
|
60
|
+
await writeFile(resolve(srcDir, 'schema.graphql'), pupa(PluginTemplates.schemaGraphql, { name }));
|
|
61
|
+
const mapping = compileGraphQLToMapping(PluginTemplates.schemaGraphql, serviceName);
|
|
62
|
+
await writeFile(resolve(generatedDir, 'mapping.json'), JSON.stringify(mapping, null, 2));
|
|
63
|
+
await writeFile(resolve(tempDir, 'Makefile'), pupa(PluginTemplates.makefile, { originalPluginName }));
|
|
64
|
+
await writeFile(resolve(tempDir, '.gitignore'), PluginTemplates.gitignore);
|
|
65
|
+
await writeFile(resolve(tempDir, '.cursorignore'), PluginTemplates.cursorignore);
|
|
66
|
+
const protoOptions = [];
|
|
67
|
+
switch (options.language) {
|
|
68
|
+
case 'go': {
|
|
69
|
+
protoOptions.push(getGoModulePathProtoOption(goModulePath));
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const proto = compileGraphQLToProto(PluginTemplates.schemaGraphql, {
|
|
74
|
+
serviceName,
|
|
75
|
+
packageName: 'service',
|
|
76
|
+
protoOptions,
|
|
77
|
+
});
|
|
78
|
+
await writeFile(resolve(generatedDir, 'service.proto'), proto.proto);
|
|
79
|
+
await writeFile(resolve(generatedDir, 'service.proto.lock.json'), JSON.stringify(proto.lockData, null, 2));
|
|
80
|
+
let readmeTemplate = '';
|
|
81
|
+
let mainFileName = '';
|
|
82
|
+
// Create cursor rules in .cursor/rules
|
|
83
|
+
await mkdir(resolve(tempDir, '.cursor', 'rules'), { recursive: true });
|
|
84
|
+
// Language Specific
|
|
85
|
+
switch (options.language) {
|
|
86
|
+
case 'go': {
|
|
87
|
+
await writeFile(resolve(srcDir, 'main.go'), pupa(GoTemplates.mainGo, { serviceName }));
|
|
88
|
+
await writeFile(resolve(srcDir, 'main_test.go'), pupa(GoTemplates.mainTestGo, { serviceName }));
|
|
89
|
+
await writeFile(resolve(tempDir, 'go.mod'), pupa(GoTemplates.goMod, { modulePath: goModulePath }));
|
|
90
|
+
await writeFile(resolve(tempDir, 'Dockerfile'), pupa(GoTemplates.dockerfile, { originalPluginName }));
|
|
91
|
+
await writeFile(resolve(tempDir, '.cursor', 'rules', 'plugin-development.mdc'), pupa(GoTemplates.cursorRules, { name, originalPluginName, pluginDir }));
|
|
92
|
+
readmeTemplate = pupa(GoTemplates.readmePartialMd, { originalPluginName });
|
|
93
|
+
mainFileName = 'main.go';
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
case 'ts': {
|
|
97
|
+
await writeFile(resolve(srcDir, 'plugin.ts'), pupa(TsTemplates.pluginTs, { serviceName }));
|
|
98
|
+
await writeFile(resolve(srcDir, 'plugin-server.ts'), pupa(TsTemplates.pluginServerTs, {}));
|
|
99
|
+
await writeFile(resolve(tempDir, 'package.json'), pupa(TsTemplates.packageJson, { serviceName }));
|
|
100
|
+
await writeFile(resolve(tempDir, 'Dockerfile'), pupa(TsTemplates.dockerfile, { originalPluginName }));
|
|
101
|
+
await writeFile(resolve(srcDir, 'plugin.test.ts'), pupa(TsTemplates.pluginTestTs, { serviceName }));
|
|
102
|
+
await writeFile(resolve(tempDir, 'tsconfig.json'), pupa(TsTemplates.tsconfig, {}));
|
|
103
|
+
await writeFile(resolve(tempDir, '.cursor', 'rules', 'plugin-development.mdc'), pupa(TsTemplates.cursorRules, { name, originalPluginName, pluginDir, serviceName }));
|
|
104
|
+
const patchDir = resolve(tempDir, 'patches');
|
|
105
|
+
await mkdir(patchDir, { recursive: true });
|
|
106
|
+
// Additionally grpc-node-health-check uses __dirname, which means that when we compile a bun binary
|
|
107
|
+
// the __dirname is hardcoded to the path of the compiled binary upon compilation, thus
|
|
108
|
+
// we need to modify the grpc-health-check package to not use __dirname unless explicitly requested
|
|
109
|
+
await writeFile(resolve(patchDir, 'grpc-health-check@2.1.0.patch'), TsTemplates.grpcHealthCheckFilePatch);
|
|
110
|
+
// This has been merged in to the repo https://github.com/protobufjs/protobuf.js/blob/master/lib/inquire/index.js
|
|
111
|
+
// However due to a build step fault there has been no releases to npm for years.
|
|
112
|
+
await writeFile(resolve(patchDir, '@protobufjs_inquire@1.1.0.patch'), TsTemplates.protobufjsInquirePatch);
|
|
113
|
+
readmeTemplate = pupa(TsTemplates.readmePartialMd, { originalPluginName });
|
|
114
|
+
mainFileName = 'plugin.ts';
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
56
118
|
if (options.project) {
|
|
57
|
-
await writeFile(resolve(tempDir, 'README.md'), pupa(ProjectTemplates.
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
packageName: 'service',
|
|
64
|
-
goPackage: goModulePath,
|
|
65
|
-
});
|
|
66
|
-
await writeFile(resolve(generatedDir, 'service.proto'), proto.proto);
|
|
67
|
-
await writeFile(resolve(generatedDir, 'service.proto.lock.json'), JSON.stringify(proto.lockData, null, 2));
|
|
68
|
-
await writeFile(resolve(srcDir, 'main.go'), pupa(PluginTemplates.mainGo, { serviceName }));
|
|
69
|
-
await writeFile(resolve(srcDir, 'main_test.go'), pupa(PluginTemplates.mainGoTest, { serviceName }));
|
|
70
|
-
await writeFile(resolve(tempDir, 'go.mod'), pupa(PluginTemplates.goMod, { modulePath: goModulePath }));
|
|
71
|
-
await writeFile(resolve(tempDir, 'Makefile'), pupa(PluginTemplates.makefile, { originalPluginName }));
|
|
72
|
-
await writeFile(resolve(tempDir, '.gitignore'), PluginTemplates.gitignore);
|
|
73
|
-
await writeFile(resolve(tempDir, '.cursorignore'), PluginTemplates.cursorIgnore);
|
|
74
|
-
// Create cursor rules in .cursor/rules
|
|
75
|
-
await mkdir(resolve(tempDir, '.cursor', 'rules'), { recursive: true });
|
|
76
|
-
await writeFile(resolve(tempDir, '.cursor', 'rules', 'plugin-development.mdc'), pupa(PluginTemplates.cursorRules, { name, originalPluginName, pluginDir }));
|
|
119
|
+
await writeFile(resolve(tempDir, 'README.md'), pupa(ProjectTemplates.readmePluginMd, {
|
|
120
|
+
name,
|
|
121
|
+
originalPluginName,
|
|
122
|
+
mainFile: mainFileName,
|
|
123
|
+
readmeText: readmeTemplate,
|
|
124
|
+
}));
|
|
77
125
|
// Create a project directory structure
|
|
78
126
|
await mkdir(projectDir, { recursive: true });
|
|
79
127
|
await mkdir(resolve(projectDir, 'plugins'), { recursive: true });
|
|
80
128
|
// Write router config to the project root
|
|
81
|
-
await writeFile(resolve(projectDir, 'config.yaml'), ProjectTemplates.
|
|
82
|
-
await writeFile(resolve(projectDir, 'graph.yaml'), pupa(ProjectTemplates.
|
|
129
|
+
await writeFile(resolve(projectDir, 'config.yaml'), ProjectTemplates.routerConfigYaml);
|
|
130
|
+
await writeFile(resolve(projectDir, 'graph.yaml'), pupa(ProjectTemplates.graphYaml, { originalPluginName }));
|
|
83
131
|
await writeFile(resolve(projectDir, 'Makefile'), pupa(ProjectTemplates.makefile, { originalPluginName }));
|
|
84
132
|
await writeFile(resolve(projectDir, '.gitignore'), ProjectTemplates.gitignore);
|
|
85
|
-
await writeFile(resolve(projectDir, 'README.md'), pupa(ProjectTemplates.
|
|
86
|
-
// Move plugin from temp directory to project plugins directory
|
|
87
|
-
await rename(tempDir, pluginDir);
|
|
133
|
+
await writeFile(resolve(projectDir, 'README.md'), pupa(ProjectTemplates.readmeProjectMd, { name, originalPluginName }));
|
|
88
134
|
}
|
|
89
135
|
else {
|
|
90
|
-
await writeFile(resolve(tempDir, 'README.md'), pupa(PluginTemplates.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
await mkdir(resolve(tempDir, '.cursor', 'rules'), { recursive: true });
|
|
97
|
-
await writeFile(resolve(tempDir, '.cursor', 'rules', 'plugin-development.mdc'), pupa(PluginTemplates.cursorRules, { name, originalPluginName, pluginDir }));
|
|
98
|
-
const proto = compileGraphQLToProto(PluginTemplates.schema, {
|
|
99
|
-
serviceName,
|
|
100
|
-
packageName: 'service',
|
|
101
|
-
goPackage: goModulePath,
|
|
102
|
-
});
|
|
103
|
-
await writeFile(resolve(generatedDir, 'service.proto'), proto.proto);
|
|
104
|
-
await writeFile(resolve(generatedDir, 'service.proto.lock.json'), JSON.stringify(proto.lockData, null, 2));
|
|
105
|
-
await writeFile(resolve(srcDir, 'main.go'), pupa(PluginTemplates.mainGo, { serviceName }));
|
|
106
|
-
await writeFile(resolve(srcDir, 'main_test.go'), pupa(PluginTemplates.mainGoTest, { serviceName }));
|
|
107
|
-
await writeFile(resolve(tempDir, 'go.mod'), pupa(PluginTemplates.goMod, { modulePath: goModulePath }));
|
|
108
|
-
await writeFile(resolve(tempDir, '.gitignore'), PluginTemplates.gitignore);
|
|
109
|
-
await writeFile(resolve(tempDir, '.cursorignore'), PluginTemplates.cursorIgnore);
|
|
136
|
+
await writeFile(resolve(tempDir, 'README.md'), pupa(PluginTemplates.readmePluginMd, {
|
|
137
|
+
name,
|
|
138
|
+
originalPluginName,
|
|
139
|
+
mainFile: mainFileName,
|
|
140
|
+
readmeText: readmeTemplate,
|
|
141
|
+
}));
|
|
110
142
|
await mkdir(projectDir, { recursive: true });
|
|
111
|
-
await rename(tempDir, pluginDir);
|
|
112
143
|
}
|
|
113
|
-
await
|
|
144
|
+
await rename(tempDir, pluginDir);
|
|
114
145
|
const endTime = performance.now();
|
|
115
146
|
const elapsedTimeMs = endTime - startTime;
|
|
116
147
|
const formattedTime = elapsedTimeMs > 1000 ? `${(elapsedTimeMs / 1000).toFixed(2)}s` : `${Math.round(elapsedTimeMs)}ms`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../../src/commands/router/commands/plugin/commands/init.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAO,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAElD,OAAO,eAAe,MAAM,wBAAwB,CAAC;AACrD,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../../src/commands/router/commands/plugin/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import os from 'node:os';
|
|
3
|
-
import { Command } from 'commander';
|
|
3
|
+
import { Command, program } from 'commander';
|
|
4
4
|
import { resolve } from 'pathe';
|
|
5
5
|
import Spinner from 'ora';
|
|
6
|
-
import { checkAndInstallTools, installGoDependencies, runGoTests } from '../toolchain.js';
|
|
6
|
+
import { checkAndInstallTools, getLanguage, installGoDependencies, installTsDependencies, runGoTests, runTsTests, } from '../toolchain.js';
|
|
7
7
|
import { renderResultTree } from '../helper.js';
|
|
8
8
|
export default (opts) => {
|
|
9
9
|
const command = new Command('test');
|
|
@@ -16,18 +16,47 @@ export default (opts) => {
|
|
|
16
16
|
const pluginDir = resolve(directory);
|
|
17
17
|
const spinner = Spinner({ text: 'Running tests...' });
|
|
18
18
|
const pluginName = path.basename(pluginDir);
|
|
19
|
+
const language = getLanguage(pluginDir);
|
|
20
|
+
if (!language) {
|
|
21
|
+
renderResultTree(spinner, 'Plugin language detection failed!', false, pluginName, {
|
|
22
|
+
output: pluginDir,
|
|
23
|
+
});
|
|
24
|
+
program.error('');
|
|
25
|
+
}
|
|
19
26
|
try {
|
|
20
|
-
spinner.start();
|
|
21
27
|
// Check and install tools if needed
|
|
22
28
|
if (!options.skipToolsInstallation) {
|
|
23
|
-
await checkAndInstallTools(options.forceToolsInstallation);
|
|
29
|
+
await checkAndInstallTools(options.forceToolsInstallation, language);
|
|
30
|
+
}
|
|
31
|
+
spinner.start();
|
|
32
|
+
switch (language) {
|
|
33
|
+
case 'go': {
|
|
34
|
+
spinner.text = 'Installing Go dependencies...';
|
|
35
|
+
await installGoDependencies(pluginDir, spinner);
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
case 'ts': {
|
|
39
|
+
spinner.text = 'Installing Ts dependencies...';
|
|
40
|
+
await installTsDependencies(pluginDir, spinner);
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
24
43
|
}
|
|
25
|
-
spinner.text = 'Installing Go dependencies...';
|
|
26
|
-
await installGoDependencies(pluginDir, spinner);
|
|
27
44
|
const srcDir = resolve(pluginDir, 'src');
|
|
28
45
|
spinner.text = 'Running tests...';
|
|
29
46
|
try {
|
|
30
|
-
|
|
47
|
+
let failed = false;
|
|
48
|
+
switch (language) {
|
|
49
|
+
case 'go': {
|
|
50
|
+
const result = await runGoTests(srcDir, spinner, false);
|
|
51
|
+
failed = result.failed;
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
case 'ts': {
|
|
55
|
+
const result = await runTsTests(pluginDir, spinner);
|
|
56
|
+
failed = result.failed;
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
31
60
|
// Calculate elapsed time
|
|
32
61
|
const endTime = performance.now();
|
|
33
62
|
const elapsedTimeMs = endTime - startTime;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../../../../../src/commands/router/commands/plugin/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../../../../../src/commands/router/commands/plugin/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,OAAO,MAAM,KAAK,CAAC;AAE1B,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,UAAU,EACV,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,eAAe,CAAC,IAAwB,EAAE,EAAE;IAC1C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC;IAC1D,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,yBAAyB,EAAE,GAAG,CAAC,CAAC;IAChE,OAAO,CAAC,MAAM,CAAC,2BAA2B,EAAE,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAC7E,OAAO,CAAC,MAAM,CACZ,4BAA4B,EAC5B,sEAAsE,EACtE,KAAK,CACN,CAAC;IAEF,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QAC1C,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAE5C,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,gBAAgB,CAAC,OAAO,EAAE,mCAAmC,EAAE,KAAK,EAAE,UAAU,EAAE;gBAChF,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QAED,IAAI,CAAC;YACH,oCAAoC;YACpC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;gBACnC,MAAM,oBAAoB,CAAC,OAAO,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;YACvE,CAAC;YAED,OAAO,CAAC,KAAK,EAAE,CAAC;YAEhB,QAAQ,QAAQ,EAAE,CAAC;gBACjB,KAAK,IAAI,CAAC,CAAC,CAAC;oBACV,OAAO,CAAC,IAAI,GAAG,+BAA+B,CAAC;oBAC/C,MAAM,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBAChD,MAAM;gBACR,CAAC;gBACD,KAAK,IAAI,CAAC,CAAC,CAAC;oBACV,OAAO,CAAC,IAAI,GAAG,+BAA+B,CAAC;oBAC/C,MAAM,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBAChD,MAAM;gBACR,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,OAAO,CAAC,IAAI,GAAG,kBAAkB,CAAC;YAElC,IAAI,CAAC;gBACH,IAAI,MAAM,GAAG,KAAK,CAAC;gBACnB,QAAQ,QAAQ,EAAE,CAAC;oBACjB,KAAK,IAAI,CAAC,CAAC,CAAC;wBACV,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;wBACxD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;wBACvB,MAAM;oBACR,CAAC;oBACD,KAAK,IAAI,CAAC,CAAC,CAAC;wBACV,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;wBACpD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;wBACvB,MAAM;oBACR,CAAC;gBACH,CAAC;gBAED,yBAAyB;gBACzB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;gBAClC,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;gBAC1C,MAAM,aAAa,GACjB,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;gBAEpG,8CAA8C;gBAC9C,MAAM,OAAO,GAAG;oBACd,MAAM,EAAE,MAAM;oBACd,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;oBACpC,IAAI,EAAE,aAAa;iBACpB,CAAC;gBAEF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,+BAA+B,CAAC;gBACzE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YACjE,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE;oBAC5D,MAAM,EAAE,MAAM;oBACd,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;oBACpC,KAAK,EAAE,KAAK,CAAC,OAAO;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,UAAU,EAAE;gBACnE,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;gBACpC,KAAK,EAAE,KAAK,CAAC,OAAO;aACrB,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|