@alagoni97/cli 0.72.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/LICENSE +201 -0
- package/README.md +336 -0
- package/bin/dev.cmd +3 -0
- package/bin/dev.mjs +3 -0
- package/bin/run.cmd +3 -0
- package/bin/run.mjs +4 -0
- package/dist/LoggingInterface.d.ts +123 -0
- package/dist/LoggingInterface.js +300 -0
- package/dist/PersistedConfig.d.ts +46 -0
- package/dist/PersistedConfig.js +94 -0
- package/dist/browser/adapters/output.d.ts +69 -0
- package/dist/browser/adapters/output.js +91 -0
- package/dist/browser/config.d.ts +18 -0
- package/dist/browser/config.js +59 -0
- package/dist/browser/generate.d.ts +20 -0
- package/dist/browser/generate.js +129 -0
- package/dist/browser/index.d.ts +17 -0
- package/dist/browser/index.js +26 -0
- package/dist/browser/parser.d.ts +9 -0
- package/dist/browser/parser.js +61 -0
- package/dist/browser/shims/asyncapi-parser.d.ts +30 -0
- package/dist/browser/shims/asyncapi-parser.js +52 -0
- package/dist/browser/shims/fs.d.ts +190 -0
- package/dist/browser/shims/fs.js +188 -0
- package/dist/browser/shims/json-schema-ref-parser.d.ts +73 -0
- package/dist/browser/shims/json-schema-ref-parser.js +246 -0
- package/dist/browser/shims/swagger-parser.d.ts +20 -0
- package/dist/browser/shims/swagger-parser.js +40 -0
- package/dist/codegen/configurationSchemaBuilder.d.ts +15 -0
- package/dist/codegen/configurationSchemaBuilder.js +48 -0
- package/dist/codegen/configurations.d.ts +29 -0
- package/dist/codegen/configurations.js +260 -0
- package/dist/codegen/detection.d.ts +19 -0
- package/dist/codegen/detection.js +174 -0
- package/dist/codegen/errors.d.ts +111 -0
- package/dist/codegen/errors.js +352 -0
- package/dist/codegen/generators/generic/custom.d.ts +75 -0
- package/dist/codegen/generators/generic/custom.js +66 -0
- package/dist/codegen/generators/index.d.ts +14 -0
- package/dist/codegen/generators/index.js +42 -0
- package/dist/codegen/generators/typescript/channels/asyncapi.d.ts +10 -0
- package/dist/codegen/generators/typescript/channels/asyncapi.js +131 -0
- package/dist/codegen/generators/typescript/channels/index.d.ts +8 -0
- package/dist/codegen/generators/typescript/channels/index.js +142 -0
- package/dist/codegen/generators/typescript/channels/openapi.d.ts +9 -0
- package/dist/codegen/generators/typescript/channels/openapi.js +168 -0
- package/dist/codegen/generators/typescript/channels/protocols/amqp/index.d.ts +7 -0
- package/dist/codegen/generators/typescript/channels/protocols/amqp/index.js +149 -0
- package/dist/codegen/generators/typescript/channels/protocols/amqp/publishExchange.d.ts +5 -0
- package/dist/codegen/generators/typescript/channels/protocols/amqp/publishExchange.js +106 -0
- package/dist/codegen/generators/typescript/channels/protocols/amqp/publishQueue.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/amqp/publishQueue.js +102 -0
- package/dist/codegen/generators/typescript/channels/protocols/amqp/subscribeQueue.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/amqp/subscribeQueue.js +133 -0
- package/dist/codegen/generators/typescript/channels/protocols/eventsource/express.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/eventsource/express.js +100 -0
- package/dist/codegen/generators/typescript/channels/protocols/eventsource/fetch.d.ts +5 -0
- package/dist/codegen/generators/typescript/channels/protocols/eventsource/fetch.js +144 -0
- package/dist/codegen/generators/typescript/channels/protocols/eventsource/index.d.ts +6 -0
- package/dist/codegen/generators/typescript/channels/protocols/eventsource/index.js +132 -0
- package/dist/codegen/generators/typescript/channels/protocols/http/client.d.ts +10 -0
- package/dist/codegen/generators/typescript/channels/protocols/http/client.js +224 -0
- package/dist/codegen/generators/typescript/channels/protocols/http/common-types.d.ts +14 -0
- package/dist/codegen/generators/typescript/channels/protocols/http/common-types.js +800 -0
- package/dist/codegen/generators/typescript/channels/protocols/http/index.d.ts +8 -0
- package/dist/codegen/generators/typescript/channels/protocols/http/index.js +96 -0
- package/dist/codegen/generators/typescript/channels/protocols/http/security.d.ts +48 -0
- package/dist/codegen/generators/typescript/channels/protocols/http/security.js +491 -0
- package/dist/codegen/generators/typescript/channels/protocols/kafka/index.d.ts +6 -0
- package/dist/codegen/generators/typescript/channels/protocols/kafka/index.js +127 -0
- package/dist/codegen/generators/typescript/channels/protocols/kafka/publish.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/kafka/publish.js +108 -0
- package/dist/codegen/generators/typescript/channels/protocols/kafka/subscribe.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/kafka/subscribe.js +154 -0
- package/dist/codegen/generators/typescript/channels/protocols/kafka/utils.d.ts +11 -0
- package/dist/codegen/generators/typescript/channels/protocols/kafka/utils.js +58 -0
- package/dist/codegen/generators/typescript/channels/protocols/mqtt/index.d.ts +6 -0
- package/dist/codegen/generators/typescript/channels/protocols/mqtt/index.js +113 -0
- package/dist/codegen/generators/typescript/channels/protocols/mqtt/publish.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/mqtt/publish.js +99 -0
- package/dist/codegen/generators/typescript/channels/protocols/mqtt/subscribe.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/mqtt/subscribe.js +186 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/corePublish.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/corePublish.js +90 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/coreReply.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/coreReply.js +142 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/coreRequest.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/coreRequest.js +100 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/coreSubscribe.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/coreSubscribe.js +143 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/index.d.ts +11 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/index.js +224 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPublish.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPublish.js +89 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPullSubscribe.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPullSubscribe.js +146 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPushSubscription.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPushSubscription.js +149 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/utils.d.ts +35 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/utils.js +120 -0
- package/dist/codegen/generators/typescript/channels/protocols/websocket/index.d.ts +7 -0
- package/dist/codegen/generators/typescript/channels/protocols/websocket/index.js +152 -0
- package/dist/codegen/generators/typescript/channels/protocols/websocket/publish.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/websocket/publish.js +64 -0
- package/dist/codegen/generators/typescript/channels/protocols/websocket/register.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/websocket/register.js +115 -0
- package/dist/codegen/generators/typescript/channels/protocols/websocket/subscribe.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/websocket/subscribe.js +151 -0
- package/dist/codegen/generators/typescript/channels/types.d.ts +181 -0
- package/dist/codegen/generators/typescript/channels/types.js +131 -0
- package/dist/codegen/generators/typescript/channels/utils.d.ts +64 -0
- package/dist/codegen/generators/typescript/channels/utils.js +163 -0
- package/dist/codegen/generators/typescript/client/index.d.ts +8 -0
- package/dist/codegen/generators/typescript/client/index.js +61 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/corePublish.d.ts +6 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/corePublish.js +53 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/coreSubscribe.d.ts +6 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/coreSubscribe.js +90 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/jetStreamPullSubscription.d.ts +6 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/jetStreamPullSubscription.js +83 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPublish.d.ts +6 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPublish.js +54 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPushSubscription.d.ts +6 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPushSubscription.js +82 -0
- package/dist/codegen/generators/typescript/client/protocols/nats.d.ts +2 -0
- package/dist/codegen/generators/typescript/client/protocols/nats.js +182 -0
- package/dist/codegen/generators/typescript/client/types.d.ts +49 -0
- package/dist/codegen/generators/typescript/client/types.js +37 -0
- package/dist/codegen/generators/typescript/headers.d.ts +54 -0
- package/dist/codegen/generators/typescript/headers.js +138 -0
- package/dist/codegen/generators/typescript/index.d.ts +7 -0
- package/dist/codegen/generators/typescript/index.js +38 -0
- package/dist/codegen/generators/typescript/models.d.ts +21761 -0
- package/dist/codegen/generators/typescript/models.js +64 -0
- package/dist/codegen/generators/typescript/parameters.d.ts +37 -0
- package/dist/codegen/generators/typescript/parameters.js +101 -0
- package/dist/codegen/generators/typescript/payloads.d.ts +73 -0
- package/dist/codegen/generators/typescript/payloads.js +250 -0
- package/dist/codegen/generators/typescript/types.d.ts +34 -0
- package/dist/codegen/generators/typescript/types.js +70 -0
- package/dist/codegen/generators/typescript/utils.d.ts +38 -0
- package/dist/codegen/generators/typescript/utils.js +195 -0
- package/dist/codegen/index.d.ts +7 -0
- package/dist/codegen/index.js +38 -0
- package/dist/codegen/inputs/asyncapi/generators/headers.d.ts +3 -0
- package/dist/codegen/inputs/asyncapi/generators/headers.js +41 -0
- package/dist/codegen/inputs/asyncapi/generators/parameters.d.ts +14 -0
- package/dist/codegen/inputs/asyncapi/generators/parameters.js +120 -0
- package/dist/codegen/inputs/asyncapi/generators/payloads.d.ts +16 -0
- package/dist/codegen/inputs/asyncapi/generators/payloads.js +124 -0
- package/dist/codegen/inputs/asyncapi/generators/types.d.ts +9 -0
- package/dist/codegen/inputs/asyncapi/generators/types.js +61 -0
- package/dist/codegen/inputs/asyncapi/index.d.ts +1 -0
- package/dist/codegen/inputs/asyncapi/index.js +7 -0
- package/dist/codegen/inputs/asyncapi/parser.d.ts +4 -0
- package/dist/codegen/inputs/asyncapi/parser.js +90 -0
- package/dist/codegen/inputs/index.d.ts +3 -0
- package/dist/codegen/inputs/index.js +19 -0
- package/dist/codegen/inputs/jsonschema/generators/index.d.ts +1 -0
- package/dist/codegen/inputs/jsonschema/generators/index.js +5 -0
- package/dist/codegen/inputs/jsonschema/generators/models.d.ts +7 -0
- package/dist/codegen/inputs/jsonschema/generators/models.js +26 -0
- package/dist/codegen/inputs/jsonschema/index.d.ts +1 -0
- package/dist/codegen/inputs/jsonschema/index.js +7 -0
- package/dist/codegen/inputs/jsonschema/parser.d.ts +31 -0
- package/dist/codegen/inputs/jsonschema/parser.js +128 -0
- package/dist/codegen/inputs/openapi/generators/headers.d.ts +3 -0
- package/dist/codegen/inputs/openapi/generators/headers.js +101 -0
- package/dist/codegen/inputs/openapi/generators/parameters.d.ts +10 -0
- package/dist/codegen/inputs/openapi/generators/parameters.js +852 -0
- package/dist/codegen/inputs/openapi/generators/payloads.d.ts +3 -0
- package/dist/codegen/inputs/openapi/generators/payloads.js +231 -0
- package/dist/codegen/inputs/openapi/generators/types.d.ts +9 -0
- package/dist/codegen/inputs/openapi/generators/types.js +86 -0
- package/dist/codegen/inputs/openapi/index.d.ts +2 -0
- package/dist/codegen/inputs/openapi/index.js +8 -0
- package/dist/codegen/inputs/openapi/parser.d.ts +4 -0
- package/dist/codegen/inputs/openapi/parser.js +115 -0
- package/dist/codegen/inputs/openapi/security.d.ts +56 -0
- package/dist/codegen/inputs/openapi/security.js +193 -0
- package/dist/codegen/modelina/index.d.ts +2 -0
- package/dist/codegen/modelina/index.js +20 -0
- package/dist/codegen/modelina/presets/index.d.ts +3 -0
- package/dist/codegen/modelina/presets/index.js +14 -0
- package/dist/codegen/modelina/presets/primitives.d.ts +34 -0
- package/dist/codegen/modelina/presets/primitives.js +211 -0
- package/dist/codegen/modelina/presets/union.d.ts +33 -0
- package/dist/codegen/modelina/presets/union.js +197 -0
- package/dist/codegen/modelina/presets/validation.d.ts +66 -0
- package/dist/codegen/modelina/presets/validation.js +183 -0
- package/dist/codegen/modelina/types.d.ts +61845 -0
- package/dist/codegen/modelina/types.js +412 -0
- package/dist/codegen/output/filesystem.d.ts +30 -0
- package/dist/codegen/output/filesystem.js +61 -0
- package/dist/codegen/output/index.d.ts +16 -0
- package/dist/codegen/output/index.js +57 -0
- package/dist/codegen/output/memory.d.ts +54 -0
- package/dist/codegen/output/memory.js +81 -0
- package/dist/codegen/output/modelina.d.ts +30 -0
- package/dist/codegen/output/modelina.js +30 -0
- package/dist/codegen/output/types.d.ts +47 -0
- package/dist/codegen/output/types.js +6 -0
- package/dist/codegen/renderer.d.ts +13 -0
- package/dist/codegen/renderer.js +309 -0
- package/dist/codegen/schemaPostProcess.d.ts +25 -0
- package/dist/codegen/schemaPostProcess.js +38 -0
- package/dist/codegen/types.d.ts +285187 -0
- package/dist/codegen/types.js +177 -0
- package/dist/codegen/utils.d.ts +126 -0
- package/dist/codegen/utils.js +373 -0
- package/dist/commands/base.d.ts +18 -0
- package/dist/commands/base.js +59 -0
- package/dist/commands/generate.d.ts +46 -0
- package/dist/commands/generate.js +305 -0
- package/dist/commands/init.d.ts +55 -0
- package/dist/commands/init.js +544 -0
- package/dist/commands/telemetry.d.ts +25 -0
- package/dist/commands/telemetry.js +115 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.js +35 -0
- package/dist/telemetry/anonymize.d.ts +19 -0
- package/dist/telemetry/anonymize.js +73 -0
- package/dist/telemetry/collector.d.ts +26 -0
- package/dist/telemetry/collector.js +57 -0
- package/dist/telemetry/config.d.ts +32 -0
- package/dist/telemetry/config.js +97 -0
- package/dist/telemetry/events.d.ts +72 -0
- package/dist/telemetry/events.js +5 -0
- package/dist/telemetry/index.d.ts +46 -0
- package/dist/telemetry/index.js +91 -0
- package/dist/telemetry/notice.d.ts +8 -0
- package/dist/telemetry/notice.js +50 -0
- package/dist/telemetry/sender.d.ts +14 -0
- package/dist/telemetry/sender.js +125 -0
- package/dist/utils/gitignore.d.ts +66 -0
- package/dist/utils/gitignore.js +111 -0
- package/dist/utils/inputSource.d.ts +3 -0
- package/dist/utils/inputSource.js +26 -0
- package/dist/utils/refResolvers.d.ts +29 -0
- package/dist/utils/refResolvers.js +83 -0
- package/dist/utils/remoteFetch.d.ts +18 -0
- package/dist/utils/remoteFetch.js +64 -0
- package/oclif.manifest.json +510 -0
- package/package.json +155 -0
|
@@ -0,0 +1,544 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
/* eslint-disable sonarjs/no-duplicate-string */
|
|
7
|
+
/* eslint-disable sonarjs/no-collapsible-if */
|
|
8
|
+
/* eslint-disable prefer-const */
|
|
9
|
+
const core_1 = require("@oclif/core");
|
|
10
|
+
const promises_1 = require("node:fs/promises");
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const yaml_1 = __importDefault(require("yaml"));
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports, no-undef
|
|
14
|
+
const inquirer = require('inquirer');
|
|
15
|
+
const generators_1 = require("../codegen/generators");
|
|
16
|
+
const gitignore_1 = require("../utils/gitignore");
|
|
17
|
+
const telemetry_1 = require("../telemetry");
|
|
18
|
+
const base_1 = require("./base");
|
|
19
|
+
const ConfigOptions = ['esm', 'json', 'yaml', 'ts'];
|
|
20
|
+
const LanguageOptions = ['typescript'];
|
|
21
|
+
const map = {
|
|
22
|
+
inputFile: {
|
|
23
|
+
description: 'File path for the code generation input such as AsyncAPI document'
|
|
24
|
+
},
|
|
25
|
+
configName: {
|
|
26
|
+
description: 'The name to use for the configuration file (dont include file extension)',
|
|
27
|
+
default: 'codegen'
|
|
28
|
+
},
|
|
29
|
+
outputDirectory: {
|
|
30
|
+
description: 'Output configuration location, path to where the configuration file should be located. If relative path, the current working directory of the terminal will be used'
|
|
31
|
+
},
|
|
32
|
+
configType: {
|
|
33
|
+
description: `The type of configuration file. 'esm', 'ts' can do everything, 'json' and 'yaml' is more restrictive. Read more here: https://github.com/the-codegen-project/cli/blob/main/docs/configurations.md`,
|
|
34
|
+
options: ConfigOptions,
|
|
35
|
+
default: 'esm'
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
class Init extends base_1.BaseCommand {
|
|
39
|
+
static description = 'Initialize The Codegen Project in your project';
|
|
40
|
+
static args = {};
|
|
41
|
+
static flags = {
|
|
42
|
+
help: core_1.Flags.help(),
|
|
43
|
+
verbose: core_1.Flags.boolean({
|
|
44
|
+
char: 'v',
|
|
45
|
+
description: 'Show detailed output'
|
|
46
|
+
}),
|
|
47
|
+
quiet: core_1.Flags.boolean({
|
|
48
|
+
char: 'q',
|
|
49
|
+
description: 'Only show errors and warnings'
|
|
50
|
+
}),
|
|
51
|
+
'no-color': core_1.Flags.boolean({
|
|
52
|
+
description: 'Disable colored output'
|
|
53
|
+
}),
|
|
54
|
+
'input-file': core_1.Flags.file({
|
|
55
|
+
description: map.inputFile.description
|
|
56
|
+
}),
|
|
57
|
+
'config-name': core_1.Flags.file({
|
|
58
|
+
description: map.configName.description,
|
|
59
|
+
default: map.configName.default
|
|
60
|
+
}),
|
|
61
|
+
'input-type': core_1.Flags.string({
|
|
62
|
+
description: 'Input file type',
|
|
63
|
+
options: ['asyncapi', 'openapi']
|
|
64
|
+
}),
|
|
65
|
+
'output-directory': core_1.Flags.string({
|
|
66
|
+
description: map.outputDirectory.description,
|
|
67
|
+
default: './'
|
|
68
|
+
}),
|
|
69
|
+
'config-type': core_1.Flags.string({
|
|
70
|
+
description: map.configType.description,
|
|
71
|
+
options: map.configType.options,
|
|
72
|
+
default: map.configType.default
|
|
73
|
+
}),
|
|
74
|
+
languages: core_1.Flags.string({
|
|
75
|
+
description: 'Which languages do you wish to generate code for?',
|
|
76
|
+
options: LanguageOptions
|
|
77
|
+
}),
|
|
78
|
+
'no-tty': core_1.Flags.boolean({
|
|
79
|
+
description: 'Do not use an interactive terminal'
|
|
80
|
+
}),
|
|
81
|
+
'include-payloads': core_1.Flags.boolean({
|
|
82
|
+
description: 'Include payloads generation, available for TypeScript',
|
|
83
|
+
relationships: [
|
|
84
|
+
{
|
|
85
|
+
flags: [
|
|
86
|
+
{
|
|
87
|
+
name: 'languages',
|
|
88
|
+
when: async (flags) => flags['languages'] === 'typescript'
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'input-type',
|
|
92
|
+
when: async (flags) => flags['input-type'] === 'asyncapi'
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
type: 'all'
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
|
+
}),
|
|
99
|
+
'include-headers': core_1.Flags.boolean({
|
|
100
|
+
description: 'Include headers generation, available for TypeScript',
|
|
101
|
+
relationships: [
|
|
102
|
+
{
|
|
103
|
+
flags: [
|
|
104
|
+
{
|
|
105
|
+
name: 'languages',
|
|
106
|
+
when: async (flags) => flags['languages'] === 'typescript'
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: 'input-type',
|
|
110
|
+
when: async (flags) => flags['input-type'] === 'asyncapi'
|
|
111
|
+
}
|
|
112
|
+
],
|
|
113
|
+
type: 'all'
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
}),
|
|
117
|
+
'include-client': core_1.Flags.boolean({
|
|
118
|
+
description: 'Include client generation, available for TypeScript',
|
|
119
|
+
relationships: [
|
|
120
|
+
{
|
|
121
|
+
flags: [
|
|
122
|
+
{
|
|
123
|
+
name: 'languages',
|
|
124
|
+
when: async (flags) => flags['languages'] === 'typescript'
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: 'input-type',
|
|
128
|
+
when: async (flags) => flags['input-type'] === 'asyncapi'
|
|
129
|
+
}
|
|
130
|
+
],
|
|
131
|
+
type: 'all'
|
|
132
|
+
}
|
|
133
|
+
]
|
|
134
|
+
}),
|
|
135
|
+
'include-parameters': core_1.Flags.boolean({
|
|
136
|
+
description: 'Include parameters generation, available for TypeScript',
|
|
137
|
+
relationships: [
|
|
138
|
+
{
|
|
139
|
+
flags: [
|
|
140
|
+
{
|
|
141
|
+
name: 'languages',
|
|
142
|
+
when: async (flags) => flags['languages'] === 'typescript'
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
name: 'input-type',
|
|
146
|
+
when: async (flags) => flags['input-type'] === 'asyncapi'
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
type: 'all'
|
|
150
|
+
}
|
|
151
|
+
]
|
|
152
|
+
}),
|
|
153
|
+
'include-channels': core_1.Flags.boolean({
|
|
154
|
+
description: 'Include channels generation, available for TypeScript',
|
|
155
|
+
relationships: [
|
|
156
|
+
{
|
|
157
|
+
flags: [
|
|
158
|
+
{
|
|
159
|
+
name: 'languages',
|
|
160
|
+
when: async (flags) => flags['languages'] === 'typescript'
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
name: 'input-type',
|
|
164
|
+
when: async (flags) => flags['input-type'] === 'asyncapi'
|
|
165
|
+
}
|
|
166
|
+
],
|
|
167
|
+
type: 'all'
|
|
168
|
+
}
|
|
169
|
+
]
|
|
170
|
+
}),
|
|
171
|
+
'no-output': core_1.Flags.boolean({
|
|
172
|
+
description: 'For testing only, ignore',
|
|
173
|
+
hidden: true
|
|
174
|
+
}),
|
|
175
|
+
'gitignore-generated': core_1.Flags.boolean({
|
|
176
|
+
description: 'Add generated output directories to .gitignore'
|
|
177
|
+
})
|
|
178
|
+
};
|
|
179
|
+
async run() {
|
|
180
|
+
const { flags } = await this.parse(Init);
|
|
181
|
+
// Configure logger based on flags
|
|
182
|
+
this.setupLogger(flags);
|
|
183
|
+
// eslint-disable-next-line no-undef
|
|
184
|
+
const isTTY = process.stdout.isTTY;
|
|
185
|
+
const realizedFlags = this.realizeFlags(flags);
|
|
186
|
+
if (!flags['no-tty'] && isTTY) {
|
|
187
|
+
return this.runInteractive(realizedFlags);
|
|
188
|
+
}
|
|
189
|
+
await this.createConfiguration(realizedFlags);
|
|
190
|
+
}
|
|
191
|
+
realizeConfigFile(flags) {
|
|
192
|
+
// eslint-disable-next-line no-undef
|
|
193
|
+
const processCurrentDir = process.cwd();
|
|
194
|
+
return path_1.default.resolve(processCurrentDir, flags.outputDirectory, `${flags.configName}.${flags.configType}`);
|
|
195
|
+
}
|
|
196
|
+
realizeFlags(flags) {
|
|
197
|
+
const inputFile = flags['input-file'];
|
|
198
|
+
const inputType = flags['input-type'];
|
|
199
|
+
const configName = flags['config-name'];
|
|
200
|
+
const configType = flags['config-type'];
|
|
201
|
+
const outputDirectory = flags['output-directory'];
|
|
202
|
+
const includePayloads = flags['include-payloads'];
|
|
203
|
+
const includeHeaders = flags['include-headers'];
|
|
204
|
+
const includeClient = flags['include-client'];
|
|
205
|
+
const includeParameters = flags['include-parameters'];
|
|
206
|
+
const includeChannels = flags['include-channels'];
|
|
207
|
+
const languages = flags['languages'];
|
|
208
|
+
const noOutput = flags['no-output'];
|
|
209
|
+
const gitignoreGenerated = flags['gitignore-generated'];
|
|
210
|
+
return {
|
|
211
|
+
includeChannels,
|
|
212
|
+
includeParameters,
|
|
213
|
+
includePayloads,
|
|
214
|
+
includeHeaders,
|
|
215
|
+
includeClient,
|
|
216
|
+
outputDirectory,
|
|
217
|
+
configName,
|
|
218
|
+
inputFile,
|
|
219
|
+
inputType,
|
|
220
|
+
configType,
|
|
221
|
+
languages,
|
|
222
|
+
noOutput,
|
|
223
|
+
gitignoreGenerated
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Interactively ask the user for which configuration to create
|
|
228
|
+
*/
|
|
229
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity
|
|
230
|
+
async runInteractive(flags) {
|
|
231
|
+
let { includeChannels, includeParameters, includePayloads, includeHeaders, includeClient, configName, outputDirectory, inputFile, inputType, configType, languages, noOutput, gitignoreGenerated } = flags;
|
|
232
|
+
const questions = [];
|
|
233
|
+
questions.push({
|
|
234
|
+
name: 'configName',
|
|
235
|
+
message: map.configName.description,
|
|
236
|
+
default: map.configName.default,
|
|
237
|
+
type: 'input'
|
|
238
|
+
});
|
|
239
|
+
if (!inputFile) {
|
|
240
|
+
questions.push({
|
|
241
|
+
name: 'inputFile',
|
|
242
|
+
message: map.inputFile.description,
|
|
243
|
+
type: 'input'
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
if (!inputType) {
|
|
247
|
+
questions.push({
|
|
248
|
+
name: 'inputType',
|
|
249
|
+
message: 'Type of the input file to generate code from',
|
|
250
|
+
type: 'list',
|
|
251
|
+
choices: [
|
|
252
|
+
{
|
|
253
|
+
name: 'asyncapi',
|
|
254
|
+
checked: true,
|
|
255
|
+
value: 'asyncapi',
|
|
256
|
+
line: 'AsyncAPI document'
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
name: 'openapi',
|
|
260
|
+
checked: false,
|
|
261
|
+
value: 'openapi',
|
|
262
|
+
line: 'OpenAPI document'
|
|
263
|
+
}
|
|
264
|
+
]
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
questions.push({
|
|
268
|
+
name: 'configType',
|
|
269
|
+
message: 'Type of configuration?',
|
|
270
|
+
type: 'list',
|
|
271
|
+
choices: [
|
|
272
|
+
{
|
|
273
|
+
name: 'esm',
|
|
274
|
+
checked: true,
|
|
275
|
+
value: 'esm',
|
|
276
|
+
line: 'ESM JavaScript style configuration, enables all features'
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
name: 'json',
|
|
280
|
+
value: 'json',
|
|
281
|
+
line: 'JSON style configuration, enables most features'
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
name: 'yaml',
|
|
285
|
+
value: 'yaml',
|
|
286
|
+
line: 'YAML style configuration, enables most features'
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
name: 'ts',
|
|
290
|
+
value: 'ts',
|
|
291
|
+
line: 'TS style configuration, enables all features'
|
|
292
|
+
}
|
|
293
|
+
]
|
|
294
|
+
});
|
|
295
|
+
if (!languages) {
|
|
296
|
+
questions.push({
|
|
297
|
+
name: 'languages',
|
|
298
|
+
message: 'Which language do you wish generate for?',
|
|
299
|
+
type: 'list',
|
|
300
|
+
choices: [
|
|
301
|
+
{
|
|
302
|
+
name: 'typescript',
|
|
303
|
+
checked: true,
|
|
304
|
+
value: 'typescript',
|
|
305
|
+
line: 'Generate TypeScript'
|
|
306
|
+
}
|
|
307
|
+
]
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
if (!includeClient) {
|
|
311
|
+
questions.push({
|
|
312
|
+
name: 'includeClient',
|
|
313
|
+
message: 'Do you want to include client wrapper?',
|
|
314
|
+
type: 'confirm',
|
|
315
|
+
when: (answers) => answers.languages === 'typescript' && answers.inputType === 'asyncapi'
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
if (!includePayloads) {
|
|
319
|
+
questions.push({
|
|
320
|
+
name: 'includePayloads',
|
|
321
|
+
message: 'Do you want to include payload structures?',
|
|
322
|
+
type: 'confirm',
|
|
323
|
+
when: (answers) => answers.languages === 'typescript' && answers.inputType === 'asyncapi'
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
if (!includeHeaders) {
|
|
327
|
+
questions.push({
|
|
328
|
+
name: 'includeHeaders',
|
|
329
|
+
message: 'Do you want to include headers structures?',
|
|
330
|
+
type: 'confirm',
|
|
331
|
+
when: (answers) => answers.languages === 'typescript' && answers.inputType === 'asyncapi'
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
if (!includeParameters) {
|
|
335
|
+
questions.push({
|
|
336
|
+
name: 'includeParameters',
|
|
337
|
+
message: 'Do you want to include parameters structures?',
|
|
338
|
+
type: 'confirm',
|
|
339
|
+
when: (answers) => answers.languages === 'typescript' && answers.inputType === 'asyncapi'
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
if (!includeChannels) {
|
|
343
|
+
questions.push({
|
|
344
|
+
name: 'includeChannels',
|
|
345
|
+
message: 'Do you want to include helper functions for interacting with channels?',
|
|
346
|
+
type: 'confirm',
|
|
347
|
+
when: (answers) => answers.languages === 'typescript' && answers.inputType === 'asyncapi'
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
questions.push({
|
|
351
|
+
name: 'gitignoreGenerated',
|
|
352
|
+
message: 'GitIgnore generated files?',
|
|
353
|
+
type: 'confirm',
|
|
354
|
+
default: true
|
|
355
|
+
});
|
|
356
|
+
if (questions.length) {
|
|
357
|
+
const answers = await inquirer.prompt(questions);
|
|
358
|
+
configType = answers.configType;
|
|
359
|
+
includeChannels ??= answers.includeChannels;
|
|
360
|
+
includeParameters ??= answers.includeParameters;
|
|
361
|
+
includePayloads ??= answers.includePayloads;
|
|
362
|
+
includeHeaders ??= answers.includeHeaders;
|
|
363
|
+
includeClient ??= answers.includeClient;
|
|
364
|
+
inputFile ??= answers.inputFile;
|
|
365
|
+
inputType ??= answers.inputType;
|
|
366
|
+
configName ??= answers.configName;
|
|
367
|
+
languages ??= answers.languages;
|
|
368
|
+
gitignoreGenerated ??= answers.gitignoreGenerated;
|
|
369
|
+
}
|
|
370
|
+
await this.createConfiguration({
|
|
371
|
+
configType,
|
|
372
|
+
includeChannels,
|
|
373
|
+
includeParameters,
|
|
374
|
+
includePayloads,
|
|
375
|
+
includeHeaders,
|
|
376
|
+
includeClient,
|
|
377
|
+
inputFile,
|
|
378
|
+
inputType,
|
|
379
|
+
languages,
|
|
380
|
+
noOutput,
|
|
381
|
+
configName,
|
|
382
|
+
outputDirectory,
|
|
383
|
+
gitignoreGenerated
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Based on the flags, create the appropriate configuration file
|
|
388
|
+
*/
|
|
389
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity
|
|
390
|
+
async createConfiguration(flags) {
|
|
391
|
+
const configuration = {
|
|
392
|
+
inputType: flags.inputType,
|
|
393
|
+
inputPath: flags.inputFile,
|
|
394
|
+
language: flags.languages,
|
|
395
|
+
generators: []
|
|
396
|
+
};
|
|
397
|
+
if (flags.includeChannels) {
|
|
398
|
+
if (flags.languages === 'typescript' && flags.inputType === 'asyncapi') {
|
|
399
|
+
const generator = { ...generators_1.defaultTypeScriptChannelsGenerator };
|
|
400
|
+
delete generator.dependencies;
|
|
401
|
+
delete generator.id;
|
|
402
|
+
delete generator.language;
|
|
403
|
+
delete generator.parameterGeneratorId;
|
|
404
|
+
delete generator.payloadGeneratorId;
|
|
405
|
+
configuration.generators.push(generator);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
if (flags.includePayloads) {
|
|
409
|
+
if (flags.languages === 'typescript' && flags.inputType === 'asyncapi') {
|
|
410
|
+
const generator = { ...generators_1.defaultTypeScriptPayloadGenerator };
|
|
411
|
+
delete generator.dependencies;
|
|
412
|
+
delete generator.id;
|
|
413
|
+
delete generator.language;
|
|
414
|
+
configuration.generators.push(generator);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
if (flags.includeHeaders) {
|
|
418
|
+
if (flags.languages === 'typescript' && flags.inputType === 'asyncapi') {
|
|
419
|
+
const generator = { ...generators_1.defaultTypeScriptHeadersOptions };
|
|
420
|
+
delete generator.dependencies;
|
|
421
|
+
delete generator.id;
|
|
422
|
+
delete generator.language;
|
|
423
|
+
configuration.generators.push(generator);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
if (flags.includeClient) {
|
|
427
|
+
if (flags.languages === 'typescript' && flags.inputType === 'asyncapi') {
|
|
428
|
+
const generator = { ...generators_1.defaultTypeScriptClientGenerator };
|
|
429
|
+
delete generator.dependencies;
|
|
430
|
+
delete generator.id;
|
|
431
|
+
delete generator.language;
|
|
432
|
+
delete generator.channelsGeneratorId;
|
|
433
|
+
configuration.generators.push(generator);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
// eslint-disable-next-line sonarjs/no-collapsible-if
|
|
437
|
+
if (flags.includeParameters) {
|
|
438
|
+
if (flags.languages === 'typescript' && flags.inputType === 'asyncapi') {
|
|
439
|
+
const generator = { ...generators_1.defaultTypeScriptParametersOptions };
|
|
440
|
+
delete generator.dependencies;
|
|
441
|
+
delete generator.id;
|
|
442
|
+
delete generator.language;
|
|
443
|
+
configuration.generators.push(generator);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
let fileOutput = '';
|
|
447
|
+
let fileExtension = 'mjs';
|
|
448
|
+
if (flags.configType === 'json') {
|
|
449
|
+
fileExtension = 'json';
|
|
450
|
+
fileOutput = JSON.stringify({
|
|
451
|
+
$schema: 'https://raw.githubusercontent.com/the-codegen-project/cli/main/schemas/configuration-schema-0.json',
|
|
452
|
+
...configuration
|
|
453
|
+
}, null, 2);
|
|
454
|
+
}
|
|
455
|
+
else if (flags.configType === 'yaml') {
|
|
456
|
+
fileExtension = 'yaml';
|
|
457
|
+
fileOutput = `# yaml-language-server: $schema=https://raw.githubusercontent.com/the-codegen-project/cli/main/schemas/configuration-schema-0.json
|
|
458
|
+
${yaml_1.default.stringify(configuration)}`;
|
|
459
|
+
}
|
|
460
|
+
else if (flags.configType === 'esm') {
|
|
461
|
+
const stringifiedConfiguration = JSON.stringify(configuration, null, 2);
|
|
462
|
+
const unquotedConfiguration = stringifiedConfiguration.replace(/"([^"]+)":/g, '$1:');
|
|
463
|
+
fileOutput = `/** @type {import("@the-codegen-project/cli").TheCodegenConfiguration} **/
|
|
464
|
+
export default ${unquotedConfiguration};`;
|
|
465
|
+
}
|
|
466
|
+
else if (flags.configType === 'ts') {
|
|
467
|
+
fileExtension = 'ts';
|
|
468
|
+
const stringifiedConfiguration = JSON.stringify(configuration, null, 2);
|
|
469
|
+
const unquotedConfiguration = stringifiedConfiguration.replace(/"([^"]+)":/g, '$1:');
|
|
470
|
+
fileOutput = `import { TheCodegenConfiguration } from '@the-codegen-project/cli';
|
|
471
|
+
const config: TheCodegenConfiguration = ${unquotedConfiguration};
|
|
472
|
+
export default config;`;
|
|
473
|
+
}
|
|
474
|
+
const outputPath = this.realizeConfigFile(flags);
|
|
475
|
+
let outputFilePath = path_1.default.parse(outputPath);
|
|
476
|
+
outputFilePath = path_1.default.resolve(outputFilePath.dir, `${outputFilePath.name}.${fileExtension}`);
|
|
477
|
+
if (flags.noOutput) {
|
|
478
|
+
this.log(`${outputFilePath}: ${fileOutput}`);
|
|
479
|
+
}
|
|
480
|
+
else {
|
|
481
|
+
await (0, promises_1.writeFile)(outputFilePath, fileOutput);
|
|
482
|
+
}
|
|
483
|
+
this.log(`Successfully created your sparkling new generation file at ${outputFilePath}`);
|
|
484
|
+
// Handle .gitignore updates
|
|
485
|
+
if (flags.gitignoreGenerated && !flags.noOutput) {
|
|
486
|
+
const outputPaths = [];
|
|
487
|
+
// Collect all output paths from enabled generators
|
|
488
|
+
if (flags.includeChannels) {
|
|
489
|
+
outputPaths.push(generators_1.defaultTypeScriptChannelsGenerator.outputPath);
|
|
490
|
+
}
|
|
491
|
+
if (flags.includePayloads) {
|
|
492
|
+
outputPaths.push(generators_1.defaultTypeScriptPayloadGenerator.outputPath);
|
|
493
|
+
}
|
|
494
|
+
if (flags.includeHeaders) {
|
|
495
|
+
outputPaths.push(generators_1.defaultTypeScriptHeadersOptions.outputPath);
|
|
496
|
+
}
|
|
497
|
+
if (flags.includeClient) {
|
|
498
|
+
outputPaths.push(generators_1.defaultTypeScriptClientGenerator.outputPath);
|
|
499
|
+
}
|
|
500
|
+
if (flags.includeParameters) {
|
|
501
|
+
outputPaths.push(generators_1.defaultTypeScriptParametersOptions.outputPath);
|
|
502
|
+
}
|
|
503
|
+
if (outputPaths.length > 0) {
|
|
504
|
+
const result = await (0, gitignore_1.updateGitignore)(outputPaths);
|
|
505
|
+
if (result.success) {
|
|
506
|
+
this.log(result.message);
|
|
507
|
+
}
|
|
508
|
+
else {
|
|
509
|
+
this.log(`Warning: ${result.message}`);
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
await this.handleSuccessfulInitTelemetry(flags);
|
|
514
|
+
}
|
|
515
|
+
async handleSuccessfulInitTelemetry(flags) {
|
|
516
|
+
// Track init completion (non-blocking, never throws)
|
|
517
|
+
const enabledGenerators = [];
|
|
518
|
+
if (flags.includePayloads) {
|
|
519
|
+
enabledGenerators.push('payloads');
|
|
520
|
+
}
|
|
521
|
+
if (flags.includeParameters) {
|
|
522
|
+
enabledGenerators.push('parameters');
|
|
523
|
+
}
|
|
524
|
+
if (flags.includeHeaders) {
|
|
525
|
+
enabledGenerators.push('headers');
|
|
526
|
+
}
|
|
527
|
+
if (flags.includeChannels) {
|
|
528
|
+
enabledGenerators.push('channels');
|
|
529
|
+
}
|
|
530
|
+
if (flags.includeClient) {
|
|
531
|
+
enabledGenerators.push('client');
|
|
532
|
+
}
|
|
533
|
+
// Track init completion (fire and forget, never throws)
|
|
534
|
+
(0, telemetry_1.trackEvent)({
|
|
535
|
+
event: 'init_executed',
|
|
536
|
+
config_type: flags.configType,
|
|
537
|
+
input_type: flags.inputType,
|
|
538
|
+
generators: enabledGenerators.length > 0 ? enabledGenerators.join(',') : 'none',
|
|
539
|
+
language: flags.languages,
|
|
540
|
+
completed: true
|
|
541
|
+
});
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
exports.default = Init;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { BaseCommand } from './base';
|
|
2
|
+
export default class Telemetry extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
action: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static flags: {
|
|
8
|
+
help: import("@oclif/core/lib/interfaces").BooleanFlag<void>;
|
|
9
|
+
'no-color': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
};
|
|
11
|
+
static examples: string[];
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Show telemetry status
|
|
15
|
+
*/
|
|
16
|
+
private showStatus;
|
|
17
|
+
/**
|
|
18
|
+
* Enable telemetry
|
|
19
|
+
*/
|
|
20
|
+
private enableTelemetry;
|
|
21
|
+
/**
|
|
22
|
+
* Disable telemetry
|
|
23
|
+
*/
|
|
24
|
+
private disableTelemetry;
|
|
25
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
/* eslint-disable no-undef */
|
|
7
|
+
const core_1 = require("@oclif/core");
|
|
8
|
+
const LoggingInterface_1 = require("../LoggingInterface");
|
|
9
|
+
const config_1 = require("../telemetry/config");
|
|
10
|
+
const PersistedConfig_1 = require("../PersistedConfig");
|
|
11
|
+
const base_1 = require("./base");
|
|
12
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
13
|
+
class Telemetry extends base_1.BaseCommand {
|
|
14
|
+
static description = 'Manage telemetry settings';
|
|
15
|
+
static args = {
|
|
16
|
+
action: core_1.Args.string({
|
|
17
|
+
description: 'Action to perform: status, enable, or disable',
|
|
18
|
+
required: true,
|
|
19
|
+
options: ['status', 'enable', 'disable']
|
|
20
|
+
})
|
|
21
|
+
};
|
|
22
|
+
static flags = {
|
|
23
|
+
help: core_1.Flags.help(),
|
|
24
|
+
'no-color': core_1.Flags.boolean({
|
|
25
|
+
description: 'Disable colored output'
|
|
26
|
+
})
|
|
27
|
+
};
|
|
28
|
+
static examples = [
|
|
29
|
+
'<%= config.bin %> <%= command.id %> status',
|
|
30
|
+
'<%= config.bin %> <%= command.id %> enable',
|
|
31
|
+
'<%= config.bin %> <%= command.id %> disable'
|
|
32
|
+
];
|
|
33
|
+
async run() {
|
|
34
|
+
const { args, flags } = await this.parse(Telemetry);
|
|
35
|
+
// Configure logger based on flags
|
|
36
|
+
this.setupLogger(flags);
|
|
37
|
+
const { action } = args;
|
|
38
|
+
const useColors = !flags['no-color'];
|
|
39
|
+
try {
|
|
40
|
+
switch (action) {
|
|
41
|
+
case 'status':
|
|
42
|
+
await this.showStatus(useColors);
|
|
43
|
+
break;
|
|
44
|
+
case 'enable':
|
|
45
|
+
await this.enableTelemetry(useColors);
|
|
46
|
+
break;
|
|
47
|
+
case 'disable':
|
|
48
|
+
await this.disableTelemetry(useColors);
|
|
49
|
+
break;
|
|
50
|
+
default:
|
|
51
|
+
this.error(`Unknown action: ${action}. Use status, enable, or disable.`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
56
|
+
this.error(`Failed to ${action} telemetry: ${message}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Show telemetry status
|
|
61
|
+
*/
|
|
62
|
+
async showStatus(useColors) {
|
|
63
|
+
const enabled = await (0, config_1.isTelemetryEnabled)();
|
|
64
|
+
const config = await (0, config_1.getTelemetryConfig)();
|
|
65
|
+
const configPath = (0, PersistedConfig_1.getConfigFilePath)();
|
|
66
|
+
const c = useColors
|
|
67
|
+
? picocolors_1.default
|
|
68
|
+
: {
|
|
69
|
+
cyan: (s) => s,
|
|
70
|
+
green: (s) => s,
|
|
71
|
+
red: (s) => s,
|
|
72
|
+
dim: (s) => s
|
|
73
|
+
};
|
|
74
|
+
LoggingInterface_1.Logger.info(`\n${c.cyan('┌─────────────────────────────────────────────┐')}`);
|
|
75
|
+
LoggingInterface_1.Logger.info(`${c.cyan('│')} Telemetry Status ${c.cyan('│')}`);
|
|
76
|
+
LoggingInterface_1.Logger.info(`${c.cyan('└─────────────────────────────────────────────┘')}\n`);
|
|
77
|
+
LoggingInterface_1.Logger.info(`Status: ${enabled ? c.green('ENABLED') : c.red('DISABLED')}`);
|
|
78
|
+
LoggingInterface_1.Logger.info(`\nConfig file: ${c.dim(configPath)}`);
|
|
79
|
+
LoggingInterface_1.Logger.info(`Anonymous ID: ${c.dim(config.anonymousId)}`);
|
|
80
|
+
LoggingInterface_1.Logger.info(`Endpoint: ${c.dim(config.endpoint)}`);
|
|
81
|
+
LoggingInterface_1.Logger.info('\nWhat we collect:');
|
|
82
|
+
LoggingInterface_1.Logger.info(` ${c.green('✓')} Command usage and flags`);
|
|
83
|
+
LoggingInterface_1.Logger.info(` ${c.green('✓')} Generator types used`);
|
|
84
|
+
LoggingInterface_1.Logger.info(` ${c.green('✓')} Input source types (remote/local)`);
|
|
85
|
+
LoggingInterface_1.Logger.info(` ${c.green('✓')} CLI version and Node.js version`);
|
|
86
|
+
LoggingInterface_1.Logger.info(` ${c.green('✓')} Error categories (not error messages)`);
|
|
87
|
+
LoggingInterface_1.Logger.info("\nWhat we DON'T collect:");
|
|
88
|
+
LoggingInterface_1.Logger.info(` ${c.red('✗')} File paths or file names`);
|
|
89
|
+
LoggingInterface_1.Logger.info(` ${c.red('✗')} File contents`);
|
|
90
|
+
LoggingInterface_1.Logger.info(` ${c.red('✗')} Personal information`);
|
|
91
|
+
LoggingInterface_1.Logger.info(` ${c.red('✗')} Project names`);
|
|
92
|
+
LoggingInterface_1.Logger.info(`\nLearn more: ${c.cyan('https://the-codegen-project.org/docs/telemetry')}\n`);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Enable telemetry
|
|
96
|
+
*/
|
|
97
|
+
async enableTelemetry(useColors) {
|
|
98
|
+
await (0, config_1.setTelemetryEnabled)(true);
|
|
99
|
+
const c = useColors ? picocolors_1.default : { cyan: (s) => s };
|
|
100
|
+
LoggingInterface_1.Logger.info('✅ Telemetry enabled');
|
|
101
|
+
LoggingInterface_1.Logger.info('\nThank you for helping us improve The Codegen Project!');
|
|
102
|
+
LoggingInterface_1.Logger.info(`Learn more: ${c.cyan('https://the-codegen-project.org/docs/telemetry')}\n`);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Disable telemetry
|
|
106
|
+
*/
|
|
107
|
+
async disableTelemetry(useColors) {
|
|
108
|
+
await (0, config_1.setTelemetryEnabled)(false);
|
|
109
|
+
const c = useColors ? picocolors_1.default : { dim: (s) => s };
|
|
110
|
+
LoggingInterface_1.Logger.info('✅ Telemetry disabled');
|
|
111
|
+
LoggingInterface_1.Logger.info('\nYou can re-enable telemetry anytime with:');
|
|
112
|
+
LoggingInterface_1.Logger.info(` ${c.dim('codegen telemetry enable')}\n`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.default = Telemetry;
|