@vendure/cli 3.3.8 → 3.4.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/cli.js +3 -49
- package/dist/cli.js.map +1 -1
- package/dist/commands/add/add-operations.d.ts +24 -0
- package/dist/commands/add/add-operations.js +179 -0
- package/dist/commands/add/add-operations.js.map +1 -0
- package/dist/commands/add/add.d.ts +4 -1
- package/dist/commands/add/add.js +48 -7
- package/dist/commands/add/add.js.map +1 -1
- package/dist/commands/add/api-extension/add-api-extension.d.ts +6 -0
- package/dist/commands/add/api-extension/add-api-extension.js +90 -18
- package/dist/commands/add/api-extension/add-api-extension.js.map +1 -1
- package/dist/commands/add/codegen/add-codegen.d.ts +6 -0
- package/dist/commands/add/codegen/add-codegen.js +12 -5
- package/dist/commands/add/codegen/add-codegen.js.map +1 -1
- package/dist/commands/add/entity/add-entity.d.ts +5 -0
- package/dist/commands/add/entity/add-entity.js +52 -18
- package/dist/commands/add/entity/add-entity.js.map +1 -1
- package/dist/commands/add/job-queue/add-job-queue.d.ts +5 -0
- package/dist/commands/add/job-queue/add-job-queue.js +65 -14
- package/dist/commands/add/job-queue/add-job-queue.js.map +1 -1
- package/dist/commands/add/plugin/create-new-plugin.d.ts +2 -2
- package/dist/commands/add/plugin/create-new-plugin.js +51 -29
- package/dist/commands/add/plugin/create-new-plugin.js.map +1 -1
- package/dist/commands/add/plugin/types.d.ts +1 -0
- package/dist/commands/add/service/add-service.js +76 -39
- package/dist/commands/add/service/add-service.js.map +1 -1
- package/dist/commands/add/ui-extensions/add-ui-extensions.d.ts +3 -0
- package/dist/commands/add/ui-extensions/add-ui-extensions.js +19 -3
- package/dist/commands/add/ui-extensions/add-ui-extensions.js.map +1 -1
- package/dist/commands/command-declarations.d.ts +2 -0
- package/dist/commands/command-declarations.js +194 -0
- package/dist/commands/command-declarations.js.map +1 -0
- package/dist/commands/migrate/generate-migration/generate-migration.js +31 -24
- package/dist/commands/migrate/generate-migration/generate-migration.js.map +1 -1
- package/dist/commands/migrate/migrate.d.ts +7 -1
- package/dist/commands/migrate/migrate.js +104 -14
- package/dist/commands/migrate/migrate.js.map +1 -1
- package/dist/commands/migrate/migration-operations.d.ts +13 -0
- package/dist/commands/migrate/migration-operations.js +125 -0
- package/dist/commands/migrate/migration-operations.js.map +1 -0
- package/dist/shared/cli-command-definition.d.ts +17 -0
- package/dist/shared/cli-command-definition.js +3 -0
- package/dist/shared/cli-command-definition.js.map +1 -0
- package/dist/shared/command-registry.d.ts +3 -0
- package/dist/shared/command-registry.js +37 -0
- package/dist/shared/command-registry.js.map +1 -0
- package/dist/shared/plugin-resolution.d.ts +12 -0
- package/dist/shared/plugin-resolution.js +26 -0
- package/dist/shared/plugin-resolution.js.map +1 -0
- package/dist/shared/project-validation.d.ts +2 -0
- package/dist/shared/project-validation.js +68 -0
- package/dist/shared/project-validation.js.map +1 -0
- package/dist/shared/shared-prompts.d.ts +2 -0
- package/dist/shared/shared-prompts.js +73 -59
- package/dist/shared/shared-prompts.js.map +1 -1
- package/dist/shared/vendure-config-ref.d.ts +2 -3
- package/dist/shared/vendure-config-ref.js +28 -28
- package/dist/shared/vendure-config-ref.js.map +1 -1
- package/dist/utilities/ast-utils.d.ts +1 -1
- package/dist/utilities/ast-utils.js +6 -17
- package/dist/utilities/ast-utils.js.map +1 -1
- package/dist/utilities/utils.d.ts +1 -0
- package/dist/utilities/utils.js +32 -0
- package/dist/utilities/utils.js.map +1 -1
- package/package.json +6 -6
package/dist/cli.js
CHANGED
|
@@ -1,44 +1,13 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
-
if (k2 === undefined) k2 = k;
|
|
5
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
-
}
|
|
9
|
-
Object.defineProperty(o, k2, desc);
|
|
10
|
-
}) : (function(o, m, k, k2) {
|
|
11
|
-
if (k2 === undefined) k2 = k;
|
|
12
|
-
o[k2] = m[k];
|
|
13
|
-
}));
|
|
14
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
-
}) : function(o, v) {
|
|
17
|
-
o["default"] = v;
|
|
18
|
-
});
|
|
19
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
-
var ownKeys = function(o) {
|
|
21
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
-
var ar = [];
|
|
23
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
-
return ar;
|
|
25
|
-
};
|
|
26
|
-
return ownKeys(o);
|
|
27
|
-
};
|
|
28
|
-
return function (mod) {
|
|
29
|
-
if (mod && mod.__esModule) return mod;
|
|
30
|
-
var result = {};
|
|
31
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
-
__setModuleDefault(result, mod);
|
|
33
|
-
return result;
|
|
34
|
-
};
|
|
35
|
-
})();
|
|
36
3
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
4
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
5
|
};
|
|
39
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
7
|
const commander_1 = require("commander");
|
|
41
8
|
const picocolors_1 = __importDefault(require("picocolors"));
|
|
9
|
+
const command_declarations_1 = require("./commands/command-declarations");
|
|
10
|
+
const command_registry_1 = require("./shared/command-registry");
|
|
42
11
|
const program = new commander_1.Command();
|
|
43
12
|
const version = require('../package.json').version;
|
|
44
13
|
program
|
|
@@ -54,21 +23,6 @@ Y88 88P 88888888 888 888 888 888 888 888 888 88888888
|
|
|
54
23
|
Y8bd8P Y8b. 888 888 Y88b 888 Y88b 888 888 Y8b.
|
|
55
24
|
Y88P "Y8888 888 888 "Y88888 "Y88888 888 "Y8888
|
|
56
25
|
`));
|
|
57
|
-
program
|
|
58
|
-
.command('add')
|
|
59
|
-
.description('Add a feature to your Vendure project')
|
|
60
|
-
.action(async () => {
|
|
61
|
-
const { addCommand } = await Promise.resolve().then(() => __importStar(require('./commands/add/add')));
|
|
62
|
-
await addCommand();
|
|
63
|
-
process.exit(0);
|
|
64
|
-
});
|
|
65
|
-
program
|
|
66
|
-
.command('migrate')
|
|
67
|
-
.description('Generate, run or revert a database migration')
|
|
68
|
-
.action(async () => {
|
|
69
|
-
const { migrateCommand } = await Promise.resolve().then(() => __importStar(require('./commands/migrate/migrate')));
|
|
70
|
-
await migrateCommand();
|
|
71
|
-
process.exit(0);
|
|
72
|
-
});
|
|
26
|
+
(0, command_registry_1.registerCommands)(program, command_declarations_1.cliCommands);
|
|
73
27
|
void program.parseAsync(process.argv);
|
|
74
28
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,4DAA4B;AAE5B,0EAA8D;AAC9D,gEAA6D;AAE7D,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAG9B,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC;AAEnD,OAAO;KACF,OAAO,CAAC,OAAO,CAAC;KAChB,KAAK,CAAC,mBAAmB,CAAC;KAC1B,WAAW,CACR,oBAAE,CAAC,IAAI,CAAC;;;;;;;;;CASf,CAAC,CACG,CAAC;AAGN,IAAA,mCAAgB,EAAC,OAAO,EAAE,kCAAW,CAAC,CAAC;AAEvC,KAAK,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface AddOperationOptions {
|
|
2
|
+
plugin?: string;
|
|
3
|
+
entity?: string;
|
|
4
|
+
service?: string;
|
|
5
|
+
jobQueue?: string | boolean;
|
|
6
|
+
codegen?: string | boolean;
|
|
7
|
+
apiExtension?: string | boolean;
|
|
8
|
+
uiExtensions?: string | boolean;
|
|
9
|
+
config?: string;
|
|
10
|
+
name?: string;
|
|
11
|
+
queryName?: string;
|
|
12
|
+
mutationName?: string;
|
|
13
|
+
selectedService?: string;
|
|
14
|
+
selectedPlugin?: string;
|
|
15
|
+
customFields?: boolean;
|
|
16
|
+
translatable?: boolean;
|
|
17
|
+
type?: string;
|
|
18
|
+
selectedEntity?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface AddOperationResult {
|
|
21
|
+
success: boolean;
|
|
22
|
+
message: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function performAddOperation(options: AddOperationOptions): Promise<AddOperationResult>;
|
|
@@ -0,0 +1,179 @@
|
|
|
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
|
+
exports.performAddOperation = performAddOperation;
|
|
7
|
+
const prompts_1 = require("@clack/prompts");
|
|
8
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
9
|
+
const add_api_extension_1 = require("./api-extension/add-api-extension");
|
|
10
|
+
const add_codegen_1 = require("./codegen/add-codegen");
|
|
11
|
+
const add_entity_1 = require("./entity/add-entity");
|
|
12
|
+
const add_job_queue_1 = require("./job-queue/add-job-queue");
|
|
13
|
+
const create_new_plugin_1 = require("./plugin/create-new-plugin");
|
|
14
|
+
const add_service_1 = require("./service/add-service");
|
|
15
|
+
const add_ui_extensions_1 = require("./ui-extensions/add-ui-extensions");
|
|
16
|
+
async function performAddOperation(options) {
|
|
17
|
+
try {
|
|
18
|
+
if (options.plugin) {
|
|
19
|
+
if (typeof options.plugin !== 'string' || !options.plugin.trim()) {
|
|
20
|
+
throw new Error('Plugin name is required. Usage: vendure add -p <plugin-name>');
|
|
21
|
+
}
|
|
22
|
+
await create_new_plugin_1.createNewPluginCommand.run({ name: options.plugin, config: options.config });
|
|
23
|
+
return {
|
|
24
|
+
success: true,
|
|
25
|
+
message: `Plugin "${options.plugin}" created successfully`,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
if (options.entity) {
|
|
29
|
+
if (typeof options.entity !== 'string' || !options.entity.trim()) {
|
|
30
|
+
throw new Error('Entity name is required. Usage: vendure add -e <entity-name> --selected-plugin <plugin-name>');
|
|
31
|
+
}
|
|
32
|
+
if (!options.selectedPlugin ||
|
|
33
|
+
typeof options.selectedPlugin !== 'string' ||
|
|
34
|
+
!options.selectedPlugin.trim()) {
|
|
35
|
+
throw new Error('Plugin name is required when running in non-interactive mode. Usage: vendure add -e <entity-name> --selected-plugin <plugin-name>');
|
|
36
|
+
}
|
|
37
|
+
await add_entity_1.addEntityCommand.run({
|
|
38
|
+
className: options.entity,
|
|
39
|
+
isNonInteractive: true,
|
|
40
|
+
config: options.config,
|
|
41
|
+
pluginName: options.selectedPlugin,
|
|
42
|
+
customFields: options.customFields,
|
|
43
|
+
translatable: options.translatable,
|
|
44
|
+
});
|
|
45
|
+
return {
|
|
46
|
+
success: true,
|
|
47
|
+
message: `Entity "${options.entity}" added successfully to plugin "${options.selectedPlugin}"`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (options.service) {
|
|
51
|
+
if (typeof options.service !== 'string' || !options.service.trim()) {
|
|
52
|
+
throw new Error('Service name is required. Usage: vendure add -s <service-name> --selected-plugin <plugin-name>');
|
|
53
|
+
}
|
|
54
|
+
if (!options.selectedPlugin ||
|
|
55
|
+
typeof options.selectedPlugin !== 'string' ||
|
|
56
|
+
!options.selectedPlugin.trim()) {
|
|
57
|
+
throw new Error('Plugin name is required when running in non-interactive mode. Usage: vendure add -s <service-name> --selected-plugin <plugin-name>');
|
|
58
|
+
}
|
|
59
|
+
await add_service_1.addServiceCommand.run({
|
|
60
|
+
serviceName: options.service,
|
|
61
|
+
isNonInteractive: true,
|
|
62
|
+
config: options.config,
|
|
63
|
+
pluginName: options.selectedPlugin,
|
|
64
|
+
serviceType: options.selectedEntity ? 'entity' : options.type || 'basic',
|
|
65
|
+
selectedEntityName: options.selectedEntity,
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
success: true,
|
|
69
|
+
message: `Service "${options.service}" added successfully to plugin "${options.selectedPlugin}"`,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
if (options.jobQueue) {
|
|
73
|
+
const pluginName = typeof options.jobQueue === 'string' ? options.jobQueue : undefined;
|
|
74
|
+
if (!options.name || typeof options.name !== 'string' || !options.name.trim()) {
|
|
75
|
+
throw new Error('Job queue name is required. Usage: vendure add -j [plugin-name] --name <job-name>');
|
|
76
|
+
}
|
|
77
|
+
if (!options.selectedService ||
|
|
78
|
+
typeof options.selectedService !== 'string' ||
|
|
79
|
+
!options.selectedService.trim()) {
|
|
80
|
+
throw new Error('Service name is required for job queue. Usage: vendure add -j [plugin-name] --name <job-name> --selected-service <service-name>');
|
|
81
|
+
}
|
|
82
|
+
await add_job_queue_1.addJobQueueCommand.run({
|
|
83
|
+
isNonInteractive: true,
|
|
84
|
+
config: options.config,
|
|
85
|
+
pluginName,
|
|
86
|
+
name: options.name,
|
|
87
|
+
selectedService: options.selectedService,
|
|
88
|
+
});
|
|
89
|
+
return {
|
|
90
|
+
success: true,
|
|
91
|
+
message: 'Job-queue feature added successfully',
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
if (options.codegen) {
|
|
95
|
+
const pluginName = typeof options.codegen === 'string' ? options.codegen : undefined;
|
|
96
|
+
if (typeof options.codegen === 'string' && !options.codegen.trim()) {
|
|
97
|
+
throw new Error('Plugin name cannot be empty when specified. Usage: vendure add --codegen [plugin-name]');
|
|
98
|
+
}
|
|
99
|
+
await add_codegen_1.addCodegenCommand.run({
|
|
100
|
+
isNonInteractive: true,
|
|
101
|
+
config: options.config,
|
|
102
|
+
pluginName,
|
|
103
|
+
});
|
|
104
|
+
return {
|
|
105
|
+
success: true,
|
|
106
|
+
message: 'Codegen configuration added successfully',
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
if (options.apiExtension) {
|
|
110
|
+
const pluginName = typeof options.apiExtension === 'string' ? options.apiExtension : undefined;
|
|
111
|
+
const hasValidQueryName = options.queryName && typeof options.queryName === 'string' && options.queryName.trim() !== '';
|
|
112
|
+
const hasValidMutationName = options.mutationName &&
|
|
113
|
+
typeof options.mutationName === 'string' &&
|
|
114
|
+
options.mutationName.trim() !== '';
|
|
115
|
+
if (!hasValidQueryName && !hasValidMutationName) {
|
|
116
|
+
throw new Error('At least one of query-name or mutation-name must be specified as a non-empty string. ' +
|
|
117
|
+
'Usage: vendure add -a [plugin-name] --query-name <name> --mutation-name <name>');
|
|
118
|
+
}
|
|
119
|
+
if (typeof options.apiExtension === 'string' && !options.apiExtension.trim()) {
|
|
120
|
+
throw new Error('Plugin name cannot be empty when specified. ' +
|
|
121
|
+
'Usage: vendure add -a [plugin-name] --query-name <name> --mutation-name <name>');
|
|
122
|
+
}
|
|
123
|
+
await add_api_extension_1.addApiExtensionCommand.run({
|
|
124
|
+
isNonInteractive: true,
|
|
125
|
+
config: options.config,
|
|
126
|
+
pluginName,
|
|
127
|
+
queryName: options.queryName,
|
|
128
|
+
mutationName: options.mutationName,
|
|
129
|
+
selectedService: options.selectedService,
|
|
130
|
+
});
|
|
131
|
+
return {
|
|
132
|
+
success: true,
|
|
133
|
+
message: 'API extension scaffold added successfully',
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
if (options.uiExtensions) {
|
|
137
|
+
const pluginName = typeof options.uiExtensions === 'string' ? options.uiExtensions : undefined;
|
|
138
|
+
if (typeof options.uiExtensions === 'string' && !options.uiExtensions.trim()) {
|
|
139
|
+
throw new Error('Plugin name cannot be empty when specified. Usage: vendure add --ui-extensions [plugin-name]');
|
|
140
|
+
}
|
|
141
|
+
await add_ui_extensions_1.addUiExtensionsCommand.run({
|
|
142
|
+
isNonInteractive: true,
|
|
143
|
+
config: options.config,
|
|
144
|
+
pluginName,
|
|
145
|
+
});
|
|
146
|
+
return {
|
|
147
|
+
success: true,
|
|
148
|
+
message: 'UI extensions added successfully',
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
success: false,
|
|
153
|
+
message: 'No valid add operation specified',
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
if (error.message.includes('is required') ||
|
|
158
|
+
error.message.includes('cannot be empty') ||
|
|
159
|
+
error.message.includes('must be specified')) {
|
|
160
|
+
throw error;
|
|
161
|
+
}
|
|
162
|
+
if (error.message.includes('Plugin name is required')) {
|
|
163
|
+
const errorMessage = error.message;
|
|
164
|
+
const stackLines = error.stack.split('\n');
|
|
165
|
+
const stackTrace = stackLines.slice(1).join('\n');
|
|
166
|
+
prompts_1.log.error(stackTrace);
|
|
167
|
+
prompts_1.log.error('');
|
|
168
|
+
prompts_1.log.error(picocolors_1.default.red('Error:') + ' ' + String(errorMessage));
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
prompts_1.log.error(error.message);
|
|
172
|
+
if (error.stack) {
|
|
173
|
+
prompts_1.log.error(error.stack);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
process.exit(1);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=add-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-operations.js","sourceRoot":"","sources":["../../../src/commands/add/add-operations.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/add/add.js
CHANGED
|
@@ -8,6 +8,7 @@ const prompts_1 = require("@clack/prompts");
|
|
|
8
8
|
const picocolors_1 = __importDefault(require("picocolors"));
|
|
9
9
|
const constants_1 = require("../../constants");
|
|
10
10
|
const utils_1 = require("../../utilities/utils");
|
|
11
|
+
const add_operations_1 = require("./add-operations");
|
|
11
12
|
const add_api_extension_1 = require("./api-extension/add-api-extension");
|
|
12
13
|
const add_codegen_1 = require("./codegen/add-codegen");
|
|
13
14
|
const add_entity_1 = require("./entity/add-entity");
|
|
@@ -16,7 +17,45 @@ const create_new_plugin_1 = require("./plugin/create-new-plugin");
|
|
|
16
17
|
const add_service_1 = require("./service/add-service");
|
|
17
18
|
const add_ui_extensions_1 = require("./ui-extensions/add-ui-extensions");
|
|
18
19
|
const cancelledMessage = 'Add feature cancelled.';
|
|
19
|
-
async function addCommand() {
|
|
20
|
+
async function addCommand(options) {
|
|
21
|
+
const nonInteractive = options && Object.values(options).some(v => v !== undefined && v !== false);
|
|
22
|
+
if (nonInteractive) {
|
|
23
|
+
await handleNonInteractiveMode(options);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
await handleInteractiveMode();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async function handleNonInteractiveMode(options) {
|
|
30
|
+
try {
|
|
31
|
+
const result = await (0, add_operations_1.performAddOperation)(options);
|
|
32
|
+
if (result.success) {
|
|
33
|
+
prompts_1.log.success(result.message);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
prompts_1.log.error(result.message);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
if (e.message.includes('Plugin name is required')) {
|
|
42
|
+
const errorMessage = e.message;
|
|
43
|
+
const stackLines = e.stack.split('\n');
|
|
44
|
+
const stackTrace = stackLines.slice(1).join('\n');
|
|
45
|
+
prompts_1.log.error(stackTrace);
|
|
46
|
+
prompts_1.log.error('');
|
|
47
|
+
prompts_1.log.error(picocolors_1.default.red('Error:') + ' ' + String(errorMessage));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
prompts_1.log.error(e.message);
|
|
51
|
+
if (e.stack) {
|
|
52
|
+
prompts_1.log.error(e.stack);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async function handleInteractiveMode() {
|
|
20
59
|
console.log(`\n`);
|
|
21
60
|
(0, prompts_1.intro)(picocolors_1.default.blue("✨ Let's add a new feature to your Vendure project!"));
|
|
22
61
|
const addCommands = [
|
|
@@ -28,12 +67,14 @@ async function addCommand() {
|
|
|
28
67
|
add_ui_extensions_1.addUiExtensionsCommand,
|
|
29
68
|
add_codegen_1.addCodegenCommand,
|
|
30
69
|
];
|
|
31
|
-
const featureType = await (0,
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
70
|
+
const featureType = await (0, utils_1.withInteractiveTimeout)(async () => {
|
|
71
|
+
return await (0, prompts_1.select)({
|
|
72
|
+
message: 'Which feature would you like to add?',
|
|
73
|
+
options: addCommands.map(c => ({
|
|
74
|
+
value: c.id,
|
|
75
|
+
label: `${picocolors_1.default.blue(`${c.category}`)} ${c.description}`,
|
|
76
|
+
})),
|
|
77
|
+
});
|
|
37
78
|
});
|
|
38
79
|
if ((0, prompts_1.isCancel)(featureType)) {
|
|
39
80
|
(0, prompts_1.cancel)(cancelledMessage);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/add/add.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/add/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,12 @@ import { ServiceRef } from '../../../shared/service-ref';
|
|
|
3
3
|
import { VendurePluginRef } from '../../../shared/vendure-plugin-ref';
|
|
4
4
|
export interface AddApiExtensionOptions {
|
|
5
5
|
plugin?: VendurePluginRef;
|
|
6
|
+
pluginName?: string;
|
|
7
|
+
queryName?: string;
|
|
8
|
+
mutationName?: string;
|
|
9
|
+
config?: string;
|
|
10
|
+
isNonInteractive?: boolean;
|
|
11
|
+
selectedService?: string;
|
|
6
12
|
}
|
|
7
13
|
export declare const addApiExtensionCommand: CliCommand<Record<string, any>, CliCommandReturnVal<{
|
|
8
14
|
serviceRef: ServiceRef;
|
|
@@ -9,9 +9,11 @@ const change_case_1 = require("change-case");
|
|
|
9
9
|
const path_1 = __importDefault(require("path"));
|
|
10
10
|
const ts_morph_1 = require("ts-morph");
|
|
11
11
|
const cli_command_1 = require("../../../shared/cli-command");
|
|
12
|
+
const plugin_resolution_1 = require("../../../shared/plugin-resolution");
|
|
12
13
|
const shared_prompts_1 = require("../../../shared/shared-prompts");
|
|
13
14
|
const ast_utils_1 = require("../../../utilities/ast-utils");
|
|
14
15
|
const utils_1 = require("../../../utilities/utils");
|
|
16
|
+
const add_service_1 = require("../service/add-service");
|
|
15
17
|
const cancelledMessage = 'Add API extension cancelled';
|
|
16
18
|
exports.addApiExtensionCommand = new cli_command_1.CliCommand({
|
|
17
19
|
id: 'add-api-extension',
|
|
@@ -20,31 +22,101 @@ exports.addApiExtensionCommand = new cli_command_1.CliCommand({
|
|
|
20
22
|
run: options => addApiExtension(options),
|
|
21
23
|
});
|
|
22
24
|
async function addApiExtension(options) {
|
|
25
|
+
var _a, _b;
|
|
23
26
|
const providedVendurePlugin = options === null || options === void 0 ? void 0 : options.plugin;
|
|
24
|
-
const { project } = await (0, shared_prompts_1.analyzeProject)({
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
const { project } = await (0, shared_prompts_1.analyzeProject)({
|
|
28
|
+
providedVendurePlugin,
|
|
29
|
+
cancelledMessage,
|
|
30
|
+
config: options === null || options === void 0 ? void 0 : options.config,
|
|
31
|
+
});
|
|
32
|
+
const { plugin: resolvedPlugin, shouldPromptForSelection } = (0, plugin_resolution_1.resolvePluginFromOptions)(project, {
|
|
33
|
+
providedPlugin: providedVendurePlugin,
|
|
34
|
+
pluginName: options === null || options === void 0 ? void 0 : options.pluginName,
|
|
35
|
+
isNonInteractive: (options === null || options === void 0 ? void 0 : options.isNonInteractive) === true,
|
|
36
|
+
});
|
|
37
|
+
if (options === null || options === void 0 ? void 0 : options.isNonInteractive) {
|
|
38
|
+
const hasValidQueryName = (options === null || options === void 0 ? void 0 : options.queryName) && options.queryName.trim() !== '';
|
|
39
|
+
const hasValidMutationName = (options === null || options === void 0 ? void 0 : options.mutationName) && options.mutationName.trim() !== '';
|
|
40
|
+
if (!hasValidQueryName && !hasValidMutationName) {
|
|
41
|
+
throw new Error('At least one of query-name or mutation-name must be specified as a non-empty string in non-interactive mode.\n' +
|
|
42
|
+
'Usage: npx vendure add -a <PluginName> --query-name <name> --mutation-name <name>');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const plugin = resolvedPlugin !== null && resolvedPlugin !== void 0 ? resolvedPlugin : (await (0, shared_prompts_1.selectPlugin)(project, cancelledMessage));
|
|
46
|
+
const services = (0, shared_prompts_1.getServices)(project).filter(sr => {
|
|
47
|
+
return sr.classDeclaration
|
|
48
|
+
.getSourceFile()
|
|
49
|
+
.getDirectoryPath()
|
|
50
|
+
.includes(plugin.getSourceFile().getDirectoryPath());
|
|
51
|
+
});
|
|
52
|
+
let serviceRef;
|
|
53
|
+
let serviceEntityRef;
|
|
54
|
+
const scaffoldSpinner = (0, prompts_1.spinner)();
|
|
55
|
+
if (options === null || options === void 0 ? void 0 : options.isNonInteractive) {
|
|
56
|
+
if (!options.selectedService || options.selectedService.trim() === '') {
|
|
57
|
+
throw new Error('Service must be specified in non-interactive mode.\n' +
|
|
58
|
+
'Usage: npx vendure add -a <PluginName> --query-name <name> --mutation-name <name> --selected-service <service-name>');
|
|
59
|
+
}
|
|
60
|
+
const selectedService = services.find(sr => sr.name === options.selectedService);
|
|
61
|
+
if (!selectedService) {
|
|
62
|
+
const availableServices = services.map(sr => sr.name);
|
|
63
|
+
if (availableServices.length === 0) {
|
|
64
|
+
throw new Error(`No services found in plugin "${plugin.name}".\n` +
|
|
65
|
+
'Please first create a service using: npx vendure add -s <ServiceName>');
|
|
66
|
+
}
|
|
67
|
+
throw new Error(`Service "${options.selectedService}" not found in plugin "${plugin.name}". Available services:\n` +
|
|
68
|
+
availableServices.map(name => ` - ${name}`).join('\n'));
|
|
69
|
+
}
|
|
70
|
+
serviceRef = selectedService;
|
|
71
|
+
prompts_1.log.info(`Using service: ${serviceRef.name}`);
|
|
72
|
+
}
|
|
73
|
+
if (!(options === null || options === void 0 ? void 0 : options.isNonInteractive)) {
|
|
74
|
+
if (services.length === 0) {
|
|
75
|
+
prompts_1.log.info("No services found in the selected plugin. Let's create one first!");
|
|
76
|
+
const result = await add_service_1.addServiceCommand.run({
|
|
77
|
+
plugin,
|
|
78
|
+
});
|
|
79
|
+
serviceRef = result.serviceRef;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
serviceRef = await (0, shared_prompts_1.selectServiceRef)(project, plugin);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (!serviceRef) {
|
|
86
|
+
(0, prompts_1.cancel)(cancelledMessage);
|
|
87
|
+
process.exit(0);
|
|
88
|
+
}
|
|
28
89
|
const modifiedSourceFiles = [];
|
|
90
|
+
if (serviceRef.crudEntityRef) {
|
|
91
|
+
serviceEntityRef = serviceRef.crudEntityRef;
|
|
92
|
+
}
|
|
29
93
|
let resolver;
|
|
30
94
|
let apiExtensions;
|
|
31
|
-
const scaffoldSpinner = (0, prompts_1.spinner)();
|
|
32
95
|
let queryName = '';
|
|
33
96
|
let mutationName = '';
|
|
34
97
|
if (!serviceEntityRef) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
98
|
+
if (options === null || options === void 0 ? void 0 : options.isNonInteractive) {
|
|
99
|
+
queryName = (options === null || options === void 0 ? void 0 : options.queryName) && options.queryName.trim() !== '' ? options.queryName.trim() : '';
|
|
100
|
+
mutationName =
|
|
101
|
+
(options === null || options === void 0 ? void 0 : options.mutationName) && options.mutationName.trim() !== ''
|
|
102
|
+
? options.mutationName.trim()
|
|
103
|
+
: '';
|
|
41
104
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
105
|
+
else {
|
|
106
|
+
const queryNameResult = (_a = options === null || options === void 0 ? void 0 : options.queryName) !== null && _a !== void 0 ? _a : (await (0, prompts_1.text)({
|
|
107
|
+
message: 'Enter a name for the new query',
|
|
108
|
+
initialValue: 'myNewQuery',
|
|
109
|
+
}));
|
|
110
|
+
if (!(0, prompts_1.isCancel)(queryNameResult)) {
|
|
111
|
+
queryName = queryNameResult;
|
|
112
|
+
}
|
|
113
|
+
const mutationNameResult = (_b = options === null || options === void 0 ? void 0 : options.mutationName) !== null && _b !== void 0 ? _b : (await (0, prompts_1.text)({
|
|
114
|
+
message: 'Enter a new name for the new mutation',
|
|
115
|
+
initialValue: 'myNewMutation',
|
|
116
|
+
}));
|
|
117
|
+
if (!(0, prompts_1.isCancel)(mutationNameResult)) {
|
|
118
|
+
mutationName = mutationNameResult;
|
|
119
|
+
}
|
|
48
120
|
}
|
|
49
121
|
}
|
|
50
122
|
scaffoldSpinner.start('Generating resolver file...');
|
|
@@ -54,7 +126,7 @@ async function addApiExtension(options) {
|
|
|
54
126
|
modifiedSourceFiles.push(resolver.getSourceFile());
|
|
55
127
|
}
|
|
56
128
|
else {
|
|
57
|
-
if ((0, prompts_1.isCancel)(queryName)) {
|
|
129
|
+
if (!(options === null || options === void 0 ? void 0 : options.isNonInteractive) && (0, prompts_1.isCancel)(queryName)) {
|
|
58
130
|
(0, prompts_1.cancel)(cancelledMessage);
|
|
59
131
|
process.exit(0);
|
|
60
132
|
}
|