@depup/vercel 50.32.5-depup.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/LICENSE +202 -0
- package/README.md +38 -0
- package/changes.json +38 -0
- package/dist/chunks/chunk-2DLBVZWU.js +197 -0
- package/dist/chunks/chunk-2HSQ7YUK.js +93 -0
- package/dist/chunks/chunk-2IQTNMUG.js +86 -0
- package/dist/chunks/chunk-3FRG2XGZ.js +466 -0
- package/dist/chunks/chunk-3KMKI2FP.js +34 -0
- package/dist/chunks/chunk-3XFFP2BA.js +110 -0
- package/dist/chunks/chunk-4S3Y3ATR.js +5383 -0
- package/dist/chunks/chunk-7EHTK7LP.js +359 -0
- package/dist/chunks/chunk-7YHZDJ4G.js +116 -0
- package/dist/chunks/chunk-A3NYPUKZ.js +17 -0
- package/dist/chunks/chunk-AA7QEJFB.js +5204 -0
- package/dist/chunks/chunk-AHU7WNL2.js +24 -0
- package/dist/chunks/chunk-AKQZ7KG3.js +4172 -0
- package/dist/chunks/chunk-AQLVWVEN.js +39155 -0
- package/dist/chunks/chunk-BQ3DXZNT.js +968 -0
- package/dist/chunks/chunk-E65JE2CC.js +102 -0
- package/dist/chunks/chunk-EKPSCRJZ.js +26 -0
- package/dist/chunks/chunk-EOZFDJSY.js +18 -0
- package/dist/chunks/chunk-FDJURQMQ.js +4676 -0
- package/dist/chunks/chunk-FLKHKWZV.js +1854 -0
- package/dist/chunks/chunk-G6BUEBF5.js +192 -0
- package/dist/chunks/chunk-GBNIO3KP.js +771 -0
- package/dist/chunks/chunk-GGP5R3FU.js +129 -0
- package/dist/chunks/chunk-H5XJSH37.js +91 -0
- package/dist/chunks/chunk-IB5L4LKZ.js +1082 -0
- package/dist/chunks/chunk-IE7MNZ56.js +149 -0
- package/dist/chunks/chunk-IK7DLK2T.js +16112 -0
- package/dist/chunks/chunk-IUGPWINM.js +104 -0
- package/dist/chunks/chunk-J7HDA5GH.js +54 -0
- package/dist/chunks/chunk-JLYZNGYY.js +293 -0
- package/dist/chunks/chunk-JQ4NA5MX.js +250 -0
- package/dist/chunks/chunk-LL26LVRR.js +81 -0
- package/dist/chunks/chunk-LW5ZNGW7.js +127 -0
- package/dist/chunks/chunk-LWBSOTJP.js +1772 -0
- package/dist/chunks/chunk-MBGJBHYD.js +388 -0
- package/dist/chunks/chunk-NUKAG3YM.js +168 -0
- package/dist/chunks/chunk-O7I4ZOCC.js +58 -0
- package/dist/chunks/chunk-OWR3XNE3.js +48 -0
- package/dist/chunks/chunk-P3SKP5WM.js +27 -0
- package/dist/chunks/chunk-P4I4DMEU.js +342 -0
- package/dist/chunks/chunk-P5Q6F5IA.js +107 -0
- package/dist/chunks/chunk-PMSMUMUO.js +30 -0
- package/dist/chunks/chunk-QXRJ52T4.js +2977 -0
- package/dist/chunks/chunk-RQXPRFRM.js +90 -0
- package/dist/chunks/chunk-S7KYDPEM.js +1564 -0
- package/dist/chunks/chunk-SGGLJFUZ.js +68 -0
- package/dist/chunks/chunk-SOTR4CXR.js +34 -0
- package/dist/chunks/chunk-TEVP63TU.js +1717 -0
- package/dist/chunks/chunk-TNBMKNET.js +323 -0
- package/dist/chunks/chunk-TZ2YI2VH.js +87 -0
- package/dist/chunks/chunk-U6XOC6E4.js +903 -0
- package/dist/chunks/chunk-V5P25P7F.js +22 -0
- package/dist/chunks/chunk-WQ5CUZWR.js +333 -0
- package/dist/chunks/chunk-WU2BPWRP.js +12237 -0
- package/dist/chunks/chunk-XPKWKPWA.js +44 -0
- package/dist/chunks/chunk-XR53KVJD.js +33 -0
- package/dist/chunks/chunk-Y4JJYHUG.js +16 -0
- package/dist/chunks/chunk-YPQSDAEW.js +29 -0
- package/dist/chunks/chunk-ZB2UO4V2.js +135 -0
- package/dist/chunks/chunk-ZLCMHY2G.js +1528 -0
- package/dist/chunks/compile-vercel-config-XU3YY2CZ.js +32 -0
- package/dist/chunks/delete-EJ2V7KQO.js +144 -0
- package/dist/chunks/disable-BKRFMX4U.js +122 -0
- package/dist/chunks/discard-4WF34DXK.js +118 -0
- package/dist/chunks/edit-FQE7JGU3.js +509 -0
- package/dist/chunks/emit-flags-datafiles-QYKPNWPX.js +17 -0
- package/dist/chunks/enable-VCNMX63U.js +122 -0
- package/dist/chunks/export-3KNVJCQR.js +133 -0
- package/dist/chunks/list-43XQCGKH.js +382 -0
- package/dist/chunks/list-DUL6PHUR.js +394 -0
- package/dist/chunks/publish-CF7GVZK3.js +128 -0
- package/dist/chunks/query-KWKO7VWO.js +954 -0
- package/dist/chunks/reorder-GU65YMIN.js +259 -0
- package/dist/chunks/restore-Q7ENGWVJ.js +158 -0
- package/dist/chunks/routes-Q5CWG44T.js +20 -0
- package/dist/chunks/schema-PJKLO2K2.js +176 -0
- package/dist/chunks/stamp-RTPE2EBB.js +15 -0
- package/dist/chunks/types-563KUQRV.js +108 -0
- package/dist/chunks/update-route-version-E3V47KNI.js +13 -0
- package/dist/commands/build/index.js +1597 -0
- package/dist/commands/deploy/index.js +1711 -0
- package/dist/commands/dev/builder-worker.cjs +95 -0
- package/dist/commands/dev/index.js +20810 -0
- package/dist/commands/env/index.js +2154 -0
- package/dist/commands/link/index.js +225 -0
- package/dist/commands/list/index.js +528 -0
- package/dist/commands-bulk.js +29627 -0
- package/dist/get-latest-worker.cjs +272 -0
- package/dist/help.js +14 -0
- package/dist/index.js +24274 -0
- package/dist/vc.js +36 -0
- package/dist/version.mjs +1 -0
- package/package.json +254 -0
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
import { createRequire as __createRequire } from 'node:module';
|
|
2
|
+
import { fileURLToPath as __fileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname as __dirname_ } from 'node:path';
|
|
4
|
+
const require = __createRequire(import.meta.url);
|
|
5
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = __dirname_(__filename);
|
|
7
|
+
import {
|
|
8
|
+
editRoute
|
|
9
|
+
} from "./chunk-P3SKP5WM.js";
|
|
10
|
+
import {
|
|
11
|
+
applyFlagMutations,
|
|
12
|
+
cloneRoute,
|
|
13
|
+
convertRouteToCurrentRoute,
|
|
14
|
+
generateRoute,
|
|
15
|
+
generatedRouteToAddInput,
|
|
16
|
+
hasAnyTransformFlags,
|
|
17
|
+
populateRouteEnv,
|
|
18
|
+
printGeneratedRoutePreview,
|
|
19
|
+
printRouteConfig,
|
|
20
|
+
routingRuleToCurrentRoute,
|
|
21
|
+
runInteractiveEditLoop
|
|
22
|
+
} from "./chunk-TEVP63TU.js";
|
|
23
|
+
import {
|
|
24
|
+
getRouteVersions
|
|
25
|
+
} from "./chunk-AHU7WNL2.js";
|
|
26
|
+
import {
|
|
27
|
+
ensureProjectLink,
|
|
28
|
+
getRoutes,
|
|
29
|
+
offerAutoPromote,
|
|
30
|
+
parseSubcommandArgs,
|
|
31
|
+
resolveRoute
|
|
32
|
+
} from "./chunk-TNBMKNET.js";
|
|
33
|
+
import {
|
|
34
|
+
editSubcommand
|
|
35
|
+
} from "./chunk-U6XOC6E4.js";
|
|
36
|
+
import "./chunk-AQLVWVEN.js";
|
|
37
|
+
import "./chunk-P4I4DMEU.js";
|
|
38
|
+
import {
|
|
39
|
+
stamp_default
|
|
40
|
+
} from "./chunk-SOTR4CXR.js";
|
|
41
|
+
import "./chunk-7EHTK7LP.js";
|
|
42
|
+
import "./chunk-GGP5R3FU.js";
|
|
43
|
+
import {
|
|
44
|
+
getCommandName
|
|
45
|
+
} from "./chunk-ZLCMHY2G.js";
|
|
46
|
+
import "./chunk-3XFFP2BA.js";
|
|
47
|
+
import {
|
|
48
|
+
output_manager_default
|
|
49
|
+
} from "./chunk-FDJURQMQ.js";
|
|
50
|
+
import {
|
|
51
|
+
require_source
|
|
52
|
+
} from "./chunk-S7KYDPEM.js";
|
|
53
|
+
import {
|
|
54
|
+
__toESM
|
|
55
|
+
} from "./chunk-TZ2YI2VH.js";
|
|
56
|
+
|
|
57
|
+
// src/commands/routes/edit.ts
|
|
58
|
+
var import_chalk = __toESM(require_source(), 1);
|
|
59
|
+
async function edit(client, argv) {
|
|
60
|
+
const parsed = await parseSubcommandArgs(argv, editSubcommand);
|
|
61
|
+
if (typeof parsed === "number")
|
|
62
|
+
return parsed;
|
|
63
|
+
const link = await ensureProjectLink(client);
|
|
64
|
+
if (typeof link === "number")
|
|
65
|
+
return link;
|
|
66
|
+
const { project, org } = link;
|
|
67
|
+
const teamId = org.type === "team" ? org.id : void 0;
|
|
68
|
+
const { args, flags } = parsed;
|
|
69
|
+
const skipConfirmation = flags["--yes"];
|
|
70
|
+
const identifier = args[0];
|
|
71
|
+
const { RoutesEditTelemetryClient } = await import("./routes-Q5CWG44T.js");
|
|
72
|
+
const telemetry = new RoutesEditTelemetryClient({
|
|
73
|
+
opts: { store: client.telemetryEventStore }
|
|
74
|
+
});
|
|
75
|
+
telemetry.trackCliArgumentNameOrId(identifier);
|
|
76
|
+
telemetry.trackCliFlagYes(skipConfirmation);
|
|
77
|
+
telemetry.trackCliOptionName(flags["--name"]);
|
|
78
|
+
telemetry.trackCliOptionDescription(
|
|
79
|
+
flags["--description"]
|
|
80
|
+
);
|
|
81
|
+
telemetry.trackCliOptionSrc(flags["--src"]);
|
|
82
|
+
telemetry.trackCliOptionSrcSyntax(
|
|
83
|
+
flags["--src-syntax"]
|
|
84
|
+
);
|
|
85
|
+
telemetry.trackCliOptionAction(flags["--action"]);
|
|
86
|
+
telemetry.trackCliOptionDest(flags["--dest"]);
|
|
87
|
+
telemetry.trackCliOptionStatus(flags["--status"]);
|
|
88
|
+
telemetry.trackCliFlagNoDest(flags["--no-dest"]);
|
|
89
|
+
telemetry.trackCliFlagNoStatus(flags["--no-status"]);
|
|
90
|
+
telemetry.trackCliFlagClearConditions(
|
|
91
|
+
flags["--clear-conditions"]
|
|
92
|
+
);
|
|
93
|
+
telemetry.trackCliFlagClearHeaders(
|
|
94
|
+
flags["--clear-headers"]
|
|
95
|
+
);
|
|
96
|
+
telemetry.trackCliFlagClearTransforms(
|
|
97
|
+
flags["--clear-transforms"]
|
|
98
|
+
);
|
|
99
|
+
telemetry.trackCliOptionSetResponseHeader(
|
|
100
|
+
flags["--set-response-header"]
|
|
101
|
+
);
|
|
102
|
+
telemetry.trackCliOptionAppendResponseHeader(
|
|
103
|
+
flags["--append-response-header"]
|
|
104
|
+
);
|
|
105
|
+
telemetry.trackCliOptionDeleteResponseHeader(
|
|
106
|
+
flags["--delete-response-header"]
|
|
107
|
+
);
|
|
108
|
+
telemetry.trackCliOptionSetRequestHeader(
|
|
109
|
+
flags["--set-request-header"]
|
|
110
|
+
);
|
|
111
|
+
telemetry.trackCliOptionAppendRequestHeader(
|
|
112
|
+
flags["--append-request-header"]
|
|
113
|
+
);
|
|
114
|
+
telemetry.trackCliOptionDeleteRequestHeader(
|
|
115
|
+
flags["--delete-request-header"]
|
|
116
|
+
);
|
|
117
|
+
telemetry.trackCliOptionSetRequestQuery(
|
|
118
|
+
flags["--set-request-query"]
|
|
119
|
+
);
|
|
120
|
+
telemetry.trackCliOptionAppendRequestQuery(
|
|
121
|
+
flags["--append-request-query"]
|
|
122
|
+
);
|
|
123
|
+
telemetry.trackCliOptionDeleteRequestQuery(
|
|
124
|
+
flags["--delete-request-query"]
|
|
125
|
+
);
|
|
126
|
+
telemetry.trackCliOptionHas(flags["--has"]);
|
|
127
|
+
telemetry.trackCliOptionMissing(flags["--missing"]);
|
|
128
|
+
telemetry.trackCliOptionAi(flags["--ai"]);
|
|
129
|
+
if (!identifier) {
|
|
130
|
+
output_manager_default.error(
|
|
131
|
+
`Route name or ID is required. Usage: ${getCommandName("routes edit <name-or-id>")}`
|
|
132
|
+
);
|
|
133
|
+
return 1;
|
|
134
|
+
}
|
|
135
|
+
const { versions } = await getRouteVersions(client, project.id, { teamId });
|
|
136
|
+
const existingStagingVersion = versions.find((v) => v.isStaging);
|
|
137
|
+
output_manager_default.spinner("Fetching routes");
|
|
138
|
+
const { routes } = await getRoutes(client, project.id, { teamId });
|
|
139
|
+
output_manager_default.stopSpinner();
|
|
140
|
+
if (routes.length === 0) {
|
|
141
|
+
output_manager_default.error("No routes found in this project.");
|
|
142
|
+
return 1;
|
|
143
|
+
}
|
|
144
|
+
const originalRoute = await resolveRoute(client, routes, identifier);
|
|
145
|
+
if (!originalRoute) {
|
|
146
|
+
output_manager_default.error(
|
|
147
|
+
`No route found matching "${identifier}". Run ${import_chalk.default.cyan(
|
|
148
|
+
getCommandName("routes list")
|
|
149
|
+
)} to see all routes.`
|
|
150
|
+
);
|
|
151
|
+
return 1;
|
|
152
|
+
}
|
|
153
|
+
const aiPrompt = flags["--ai"];
|
|
154
|
+
if (aiPrompt) {
|
|
155
|
+
const conflictingFlags = [
|
|
156
|
+
"--name",
|
|
157
|
+
"--description",
|
|
158
|
+
"--src",
|
|
159
|
+
"--src-syntax",
|
|
160
|
+
"--action",
|
|
161
|
+
"--dest",
|
|
162
|
+
"--status",
|
|
163
|
+
"--no-dest",
|
|
164
|
+
"--no-status",
|
|
165
|
+
"--has",
|
|
166
|
+
"--missing",
|
|
167
|
+
"--set-response-header",
|
|
168
|
+
"--append-response-header",
|
|
169
|
+
"--delete-response-header",
|
|
170
|
+
"--set-request-header",
|
|
171
|
+
"--append-request-header",
|
|
172
|
+
"--delete-request-header",
|
|
173
|
+
"--set-request-query",
|
|
174
|
+
"--append-request-query",
|
|
175
|
+
"--delete-request-query",
|
|
176
|
+
"--clear-conditions",
|
|
177
|
+
"--clear-headers",
|
|
178
|
+
"--clear-transforms"
|
|
179
|
+
];
|
|
180
|
+
const usedConflicts = conflictingFlags.filter((f) => flags[f] !== void 0);
|
|
181
|
+
if (usedConflicts.length > 0) {
|
|
182
|
+
output_manager_default.error(
|
|
183
|
+
`Cannot use --ai with ${usedConflicts.join(", ")}. Use --ai alone to describe changes.`
|
|
184
|
+
);
|
|
185
|
+
return 1;
|
|
186
|
+
}
|
|
187
|
+
return await handleAIEdit(
|
|
188
|
+
client,
|
|
189
|
+
project.id,
|
|
190
|
+
teamId,
|
|
191
|
+
originalRoute,
|
|
192
|
+
aiPrompt,
|
|
193
|
+
skipConfirmation,
|
|
194
|
+
existingStagingVersion
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
const route = cloneRoute(originalRoute);
|
|
198
|
+
const hasEditFlags = flags["--name"] !== void 0 || flags["--description"] !== void 0 || flags["--src"] !== void 0 || flags["--src-syntax"] !== void 0 || flags["--action"] !== void 0 || flags["--dest"] !== void 0 || flags["--status"] !== void 0 || flags["--no-dest"] !== void 0 || flags["--no-status"] !== void 0 || flags["--has"] !== void 0 || flags["--missing"] !== void 0 || flags["--clear-conditions"] !== void 0 || flags["--clear-headers"] !== void 0 || flags["--clear-transforms"] !== void 0 || hasAnyTransformFlags(flags);
|
|
199
|
+
if (hasEditFlags) {
|
|
200
|
+
const error = applyFlagMutations(route, flags);
|
|
201
|
+
if (error) {
|
|
202
|
+
output_manager_default.error(error);
|
|
203
|
+
return 1;
|
|
204
|
+
}
|
|
205
|
+
} else {
|
|
206
|
+
if (!client.stdin.isTTY) {
|
|
207
|
+
output_manager_default.error(
|
|
208
|
+
`No edit flags provided. When running non-interactively, use flags like --name, --dest, --src, etc. Run ${getCommandName("routes edit --help")} for all options.`
|
|
209
|
+
);
|
|
210
|
+
return 1;
|
|
211
|
+
}
|
|
212
|
+
output_manager_default.log(`
|
|
213
|
+
Editing route "${originalRoute.name}"`);
|
|
214
|
+
printRouteConfig(route);
|
|
215
|
+
const editMode = await client.input.select({
|
|
216
|
+
message: "How would you like to edit this route?",
|
|
217
|
+
choices: [
|
|
218
|
+
{ name: "Describe changes (AI-powered)", value: "ai" },
|
|
219
|
+
{ name: "Edit manually (field by field)", value: "manual" }
|
|
220
|
+
]
|
|
221
|
+
});
|
|
222
|
+
if (editMode === "ai") {
|
|
223
|
+
telemetry.trackCliOptionAi("interactive");
|
|
224
|
+
return await handleAIEdit(
|
|
225
|
+
client,
|
|
226
|
+
project.id,
|
|
227
|
+
teamId,
|
|
228
|
+
originalRoute,
|
|
229
|
+
void 0,
|
|
230
|
+
skipConfirmation,
|
|
231
|
+
existingStagingVersion
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
await runInteractiveEditLoop(client, route);
|
|
235
|
+
}
|
|
236
|
+
populateRouteEnv(route.route);
|
|
237
|
+
if (JSON.stringify(route) === JSON.stringify(originalRoute)) {
|
|
238
|
+
output_manager_default.log("No changes made.");
|
|
239
|
+
return 0;
|
|
240
|
+
}
|
|
241
|
+
const editStamp = stamp_default();
|
|
242
|
+
output_manager_default.spinner(`Updating route "${route.name}"`);
|
|
243
|
+
try {
|
|
244
|
+
const { version } = await editRoute(
|
|
245
|
+
client,
|
|
246
|
+
project.id,
|
|
247
|
+
originalRoute.id,
|
|
248
|
+
{
|
|
249
|
+
route: {
|
|
250
|
+
name: route.name,
|
|
251
|
+
description: route.description,
|
|
252
|
+
enabled: route.enabled,
|
|
253
|
+
srcSyntax: route.srcSyntax,
|
|
254
|
+
route: route.route
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
{ teamId }
|
|
258
|
+
);
|
|
259
|
+
output_manager_default.log(
|
|
260
|
+
`${import_chalk.default.cyan("Updated")} route "${route.name}" ${import_chalk.default.gray(editStamp())}`
|
|
261
|
+
);
|
|
262
|
+
await offerAutoPromote(
|
|
263
|
+
client,
|
|
264
|
+
project.id,
|
|
265
|
+
version,
|
|
266
|
+
!!existingStagingVersion,
|
|
267
|
+
{ teamId, skipPrompts: skipConfirmation }
|
|
268
|
+
);
|
|
269
|
+
return 0;
|
|
270
|
+
} catch (e) {
|
|
271
|
+
const error = e;
|
|
272
|
+
output_manager_default.error(error.message || "Failed to update route");
|
|
273
|
+
return 1;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
async function handleAIEdit(client, projectId, teamId, originalRoute, aiPrompt, skipConfirmation, existingStagingVersion) {
|
|
277
|
+
const currentRoute = routingRuleToCurrentRoute(originalRoute);
|
|
278
|
+
let prompt = aiPrompt;
|
|
279
|
+
let currentGenerated;
|
|
280
|
+
for (; ; ) {
|
|
281
|
+
if (!prompt) {
|
|
282
|
+
prompt = await client.input.text({
|
|
283
|
+
message: "Describe what you'd like to change:",
|
|
284
|
+
validate: (val) => {
|
|
285
|
+
if (!val)
|
|
286
|
+
return "A description is required";
|
|
287
|
+
if (val.length > 2e3)
|
|
288
|
+
return "Description must be 2000 characters or less";
|
|
289
|
+
return true;
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
output_manager_default.spinner("Generating updated route...");
|
|
294
|
+
let errorMessage;
|
|
295
|
+
try {
|
|
296
|
+
const result = await generateRoute(
|
|
297
|
+
client,
|
|
298
|
+
projectId,
|
|
299
|
+
{ prompt, currentRoute },
|
|
300
|
+
{ teamId }
|
|
301
|
+
);
|
|
302
|
+
if (result.error) {
|
|
303
|
+
errorMessage = result.error;
|
|
304
|
+
} else if (!result.route) {
|
|
305
|
+
errorMessage = "Could not apply changes. Try rephrasing.";
|
|
306
|
+
} else {
|
|
307
|
+
currentGenerated = result.route;
|
|
308
|
+
}
|
|
309
|
+
} catch (e) {
|
|
310
|
+
const error = e;
|
|
311
|
+
errorMessage = error.message || "Failed to generate updated route";
|
|
312
|
+
}
|
|
313
|
+
if (currentGenerated) {
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
316
|
+
output_manager_default.error(errorMessage);
|
|
317
|
+
if (skipConfirmation || !client.stdin.isTTY) {
|
|
318
|
+
return 1;
|
|
319
|
+
}
|
|
320
|
+
const retry = await client.input.select({
|
|
321
|
+
message: "What would you like to do?",
|
|
322
|
+
choices: [
|
|
323
|
+
{ name: "Try again with a different description", value: "retry" },
|
|
324
|
+
{ name: "Cancel", value: "cancel" }
|
|
325
|
+
]
|
|
326
|
+
});
|
|
327
|
+
if (retry === "cancel") {
|
|
328
|
+
output_manager_default.log("No changes made.");
|
|
329
|
+
return 0;
|
|
330
|
+
}
|
|
331
|
+
prompt = void 0;
|
|
332
|
+
}
|
|
333
|
+
printGeneratedRoutePreview(currentGenerated);
|
|
334
|
+
if (skipConfirmation) {
|
|
335
|
+
return await applyAIEdit(
|
|
336
|
+
client,
|
|
337
|
+
projectId,
|
|
338
|
+
teamId,
|
|
339
|
+
originalRoute,
|
|
340
|
+
currentGenerated,
|
|
341
|
+
existingStagingVersion,
|
|
342
|
+
skipConfirmation
|
|
343
|
+
);
|
|
344
|
+
}
|
|
345
|
+
if (!client.stdin.isTTY) {
|
|
346
|
+
output_manager_default.error(
|
|
347
|
+
`Cannot interactively confirm route changes in a non-TTY environment. Use ${getCommandName('routes edit <name-or-id> --ai "..." --yes')} to skip confirmation.`
|
|
348
|
+
);
|
|
349
|
+
return 1;
|
|
350
|
+
}
|
|
351
|
+
for (; ; ) {
|
|
352
|
+
const choice = await client.input.select({
|
|
353
|
+
message: "What would you like to do?",
|
|
354
|
+
choices: [
|
|
355
|
+
{ name: "Confirm changes", value: "confirm" },
|
|
356
|
+
{ name: "Edit again with AI", value: "ai-edit" },
|
|
357
|
+
{ name: "Edit manually", value: "manual" },
|
|
358
|
+
{ name: "Discard", value: "discard" }
|
|
359
|
+
],
|
|
360
|
+
pageSize: 4,
|
|
361
|
+
loop: false
|
|
362
|
+
});
|
|
363
|
+
if (choice === "confirm") {
|
|
364
|
+
return await applyAIEdit(
|
|
365
|
+
client,
|
|
366
|
+
projectId,
|
|
367
|
+
teamId,
|
|
368
|
+
originalRoute,
|
|
369
|
+
currentGenerated,
|
|
370
|
+
existingStagingVersion,
|
|
371
|
+
skipConfirmation
|
|
372
|
+
);
|
|
373
|
+
}
|
|
374
|
+
if (choice === "ai-edit") {
|
|
375
|
+
const editPrompt = await client.input.text({
|
|
376
|
+
message: "Describe what you'd like to change:",
|
|
377
|
+
validate: (val) => {
|
|
378
|
+
if (!val)
|
|
379
|
+
return "A description is required";
|
|
380
|
+
if (val.length > 2e3)
|
|
381
|
+
return "Description must be 2000 characters or less";
|
|
382
|
+
return true;
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
output_manager_default.spinner("Updating route...");
|
|
386
|
+
try {
|
|
387
|
+
const editResult = await generateRoute(
|
|
388
|
+
client,
|
|
389
|
+
projectId,
|
|
390
|
+
{
|
|
391
|
+
prompt: editPrompt,
|
|
392
|
+
currentRoute: convertRouteToCurrentRoute(currentGenerated)
|
|
393
|
+
},
|
|
394
|
+
{ teamId }
|
|
395
|
+
);
|
|
396
|
+
if (editResult.error) {
|
|
397
|
+
output_manager_default.error(editResult.error);
|
|
398
|
+
output_manager_default.log("Keeping previous route:");
|
|
399
|
+
printGeneratedRoutePreview(currentGenerated);
|
|
400
|
+
continue;
|
|
401
|
+
}
|
|
402
|
+
if (!editResult.route) {
|
|
403
|
+
output_manager_default.error("Could not apply changes. Try rephrasing.");
|
|
404
|
+
output_manager_default.log("Keeping previous route:");
|
|
405
|
+
printGeneratedRoutePreview(currentGenerated);
|
|
406
|
+
continue;
|
|
407
|
+
}
|
|
408
|
+
currentGenerated = editResult.route;
|
|
409
|
+
printGeneratedRoutePreview(currentGenerated);
|
|
410
|
+
} catch (e) {
|
|
411
|
+
const error = e;
|
|
412
|
+
output_manager_default.error(error.message || "Failed to update route");
|
|
413
|
+
output_manager_default.log("Keeping previous route:");
|
|
414
|
+
printGeneratedRoutePreview(currentGenerated);
|
|
415
|
+
}
|
|
416
|
+
continue;
|
|
417
|
+
}
|
|
418
|
+
if (choice === "manual") {
|
|
419
|
+
const routeInput = generatedRouteToAddInput(currentGenerated);
|
|
420
|
+
const manualRoute = cloneRoute(originalRoute);
|
|
421
|
+
manualRoute.name = routeInput.name;
|
|
422
|
+
manualRoute.description = routeInput.description;
|
|
423
|
+
manualRoute.srcSyntax = routeInput.srcSyntax;
|
|
424
|
+
manualRoute.route = routeInput.route;
|
|
425
|
+
await runInteractiveEditLoop(client, manualRoute);
|
|
426
|
+
populateRouteEnv(manualRoute.route);
|
|
427
|
+
const editStamp = stamp_default();
|
|
428
|
+
output_manager_default.spinner(`Updating route "${manualRoute.name}"`);
|
|
429
|
+
try {
|
|
430
|
+
const { version } = await editRoute(
|
|
431
|
+
client,
|
|
432
|
+
projectId,
|
|
433
|
+
originalRoute.id,
|
|
434
|
+
{
|
|
435
|
+
route: {
|
|
436
|
+
name: manualRoute.name,
|
|
437
|
+
description: manualRoute.description,
|
|
438
|
+
enabled: manualRoute.enabled,
|
|
439
|
+
srcSyntax: manualRoute.srcSyntax,
|
|
440
|
+
route: manualRoute.route
|
|
441
|
+
}
|
|
442
|
+
},
|
|
443
|
+
{ teamId }
|
|
444
|
+
);
|
|
445
|
+
output_manager_default.log(
|
|
446
|
+
`${import_chalk.default.cyan("Updated")} route "${manualRoute.name}" ${import_chalk.default.gray(editStamp())}`
|
|
447
|
+
);
|
|
448
|
+
await offerAutoPromote(
|
|
449
|
+
client,
|
|
450
|
+
projectId,
|
|
451
|
+
version,
|
|
452
|
+
!!existingStagingVersion,
|
|
453
|
+
{ teamId, skipPrompts: skipConfirmation }
|
|
454
|
+
);
|
|
455
|
+
return 0;
|
|
456
|
+
} catch (e) {
|
|
457
|
+
const error = e;
|
|
458
|
+
output_manager_default.error(error.message || "Failed to update route");
|
|
459
|
+
return 1;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
output_manager_default.log("No changes made.");
|
|
463
|
+
return 0;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
async function applyAIEdit(client, projectId, teamId, originalRoute, generated, existingStagingVersion, skipConfirmation) {
|
|
467
|
+
const routeInput = generatedRouteToAddInput(generated);
|
|
468
|
+
populateRouteEnv(routeInput.route);
|
|
469
|
+
const editStamp = stamp_default();
|
|
470
|
+
output_manager_default.spinner(`Updating route "${routeInput.name}"`);
|
|
471
|
+
try {
|
|
472
|
+
const { version } = await editRoute(
|
|
473
|
+
client,
|
|
474
|
+
projectId,
|
|
475
|
+
originalRoute.id,
|
|
476
|
+
{
|
|
477
|
+
route: {
|
|
478
|
+
name: routeInput.name,
|
|
479
|
+
description: routeInput.description,
|
|
480
|
+
enabled: originalRoute.enabled,
|
|
481
|
+
srcSyntax: routeInput.srcSyntax,
|
|
482
|
+
route: routeInput.route
|
|
483
|
+
}
|
|
484
|
+
},
|
|
485
|
+
{ teamId }
|
|
486
|
+
);
|
|
487
|
+
output_manager_default.log(
|
|
488
|
+
`${import_chalk.default.cyan("Updated")} route "${routeInput.name}" ${import_chalk.default.gray(editStamp())}`
|
|
489
|
+
);
|
|
490
|
+
await offerAutoPromote(
|
|
491
|
+
client,
|
|
492
|
+
projectId,
|
|
493
|
+
version,
|
|
494
|
+
!!existingStagingVersion,
|
|
495
|
+
{
|
|
496
|
+
teamId,
|
|
497
|
+
skipPrompts: skipConfirmation
|
|
498
|
+
}
|
|
499
|
+
);
|
|
500
|
+
return 0;
|
|
501
|
+
} catch (e) {
|
|
502
|
+
const error = e;
|
|
503
|
+
output_manager_default.error(error.message || "Failed to update route");
|
|
504
|
+
return 1;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
export {
|
|
508
|
+
edit as default
|
|
509
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createRequire as __createRequire } from 'node:module';
|
|
2
|
+
import { fileURLToPath as __fileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname as __dirname_ } from 'node:path';
|
|
4
|
+
const require = __createRequire(import.meta.url);
|
|
5
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = __dirname_(__filename);
|
|
7
|
+
import {
|
|
8
|
+
emitFlagsDatafiles
|
|
9
|
+
} from "./chunk-NUKAG3YM.js";
|
|
10
|
+
import "./chunk-QXRJ52T4.js";
|
|
11
|
+
import "./chunk-3XFFP2BA.js";
|
|
12
|
+
import "./chunk-FDJURQMQ.js";
|
|
13
|
+
import "./chunk-S7KYDPEM.js";
|
|
14
|
+
import "./chunk-TZ2YI2VH.js";
|
|
15
|
+
export {
|
|
16
|
+
emitFlagsDatafiles
|
|
17
|
+
};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { createRequire as __createRequire } from 'node:module';
|
|
2
|
+
import { fileURLToPath as __fileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname as __dirname_ } from 'node:path';
|
|
4
|
+
const require = __createRequire(import.meta.url);
|
|
5
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = __dirname_(__filename);
|
|
7
|
+
import {
|
|
8
|
+
editRoute
|
|
9
|
+
} from "./chunk-P3SKP5WM.js";
|
|
10
|
+
import {
|
|
11
|
+
getRouteVersions
|
|
12
|
+
} from "./chunk-AHU7WNL2.js";
|
|
13
|
+
import {
|
|
14
|
+
ensureProjectLink,
|
|
15
|
+
getRoutes,
|
|
16
|
+
offerAutoPromote,
|
|
17
|
+
parseSubcommandArgs,
|
|
18
|
+
resolveRoute
|
|
19
|
+
} from "./chunk-TNBMKNET.js";
|
|
20
|
+
import {
|
|
21
|
+
enableSubcommand
|
|
22
|
+
} from "./chunk-U6XOC6E4.js";
|
|
23
|
+
import "./chunk-AQLVWVEN.js";
|
|
24
|
+
import "./chunk-P4I4DMEU.js";
|
|
25
|
+
import {
|
|
26
|
+
stamp_default
|
|
27
|
+
} from "./chunk-SOTR4CXR.js";
|
|
28
|
+
import "./chunk-7EHTK7LP.js";
|
|
29
|
+
import "./chunk-GGP5R3FU.js";
|
|
30
|
+
import {
|
|
31
|
+
getCommandName
|
|
32
|
+
} from "./chunk-ZLCMHY2G.js";
|
|
33
|
+
import "./chunk-3XFFP2BA.js";
|
|
34
|
+
import {
|
|
35
|
+
output_manager_default
|
|
36
|
+
} from "./chunk-FDJURQMQ.js";
|
|
37
|
+
import {
|
|
38
|
+
require_source
|
|
39
|
+
} from "./chunk-S7KYDPEM.js";
|
|
40
|
+
import {
|
|
41
|
+
__toESM
|
|
42
|
+
} from "./chunk-TZ2YI2VH.js";
|
|
43
|
+
|
|
44
|
+
// src/commands/routes/enable.ts
|
|
45
|
+
var import_chalk = __toESM(require_source(), 1);
|
|
46
|
+
async function enable(client, argv) {
|
|
47
|
+
const parsed = await parseSubcommandArgs(argv, enableSubcommand);
|
|
48
|
+
if (typeof parsed === "number")
|
|
49
|
+
return parsed;
|
|
50
|
+
const link = await ensureProjectLink(client);
|
|
51
|
+
if (typeof link === "number")
|
|
52
|
+
return link;
|
|
53
|
+
const { project, org } = link;
|
|
54
|
+
const teamId = org.type === "team" ? org.id : void 0;
|
|
55
|
+
const { args } = parsed;
|
|
56
|
+
const identifier = args[0];
|
|
57
|
+
if (!identifier) {
|
|
58
|
+
output_manager_default.error(
|
|
59
|
+
`Route name or ID is required. Usage: ${getCommandName("routes enable <name-or-id>")}`
|
|
60
|
+
);
|
|
61
|
+
return 1;
|
|
62
|
+
}
|
|
63
|
+
const { versions } = await getRouteVersions(client, project.id, { teamId });
|
|
64
|
+
const existingStagingVersion = versions.find((v) => v.isStaging);
|
|
65
|
+
output_manager_default.spinner("Fetching routes");
|
|
66
|
+
const { routes } = await getRoutes(client, project.id, { teamId });
|
|
67
|
+
output_manager_default.stopSpinner();
|
|
68
|
+
if (routes.length === 0) {
|
|
69
|
+
output_manager_default.error("No routes found in this project.");
|
|
70
|
+
return 1;
|
|
71
|
+
}
|
|
72
|
+
const route = await resolveRoute(client, routes, identifier);
|
|
73
|
+
if (!route) {
|
|
74
|
+
output_manager_default.error(
|
|
75
|
+
`No route found matching "${identifier}". Run ${import_chalk.default.cyan(
|
|
76
|
+
getCommandName("routes list")
|
|
77
|
+
)} to see all routes.`
|
|
78
|
+
);
|
|
79
|
+
return 1;
|
|
80
|
+
}
|
|
81
|
+
if (route.enabled !== false) {
|
|
82
|
+
output_manager_default.log(`Route "${route.name}" is already enabled.`);
|
|
83
|
+
return 0;
|
|
84
|
+
}
|
|
85
|
+
const enableStamp = stamp_default();
|
|
86
|
+
output_manager_default.spinner(`Enabling route "${route.name}"`);
|
|
87
|
+
try {
|
|
88
|
+
const { version } = await editRoute(
|
|
89
|
+
client,
|
|
90
|
+
project.id,
|
|
91
|
+
route.id,
|
|
92
|
+
{
|
|
93
|
+
route: {
|
|
94
|
+
name: route.name,
|
|
95
|
+
description: route.description,
|
|
96
|
+
enabled: true,
|
|
97
|
+
srcSyntax: route.srcSyntax,
|
|
98
|
+
route: route.route
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
{ teamId }
|
|
102
|
+
);
|
|
103
|
+
output_manager_default.log(
|
|
104
|
+
`${import_chalk.default.cyan("Enabled")} route "${route.name}" ${import_chalk.default.gray(enableStamp())}`
|
|
105
|
+
);
|
|
106
|
+
await offerAutoPromote(
|
|
107
|
+
client,
|
|
108
|
+
project.id,
|
|
109
|
+
version,
|
|
110
|
+
!!existingStagingVersion,
|
|
111
|
+
{ teamId }
|
|
112
|
+
);
|
|
113
|
+
return 0;
|
|
114
|
+
} catch (e) {
|
|
115
|
+
const error = e;
|
|
116
|
+
output_manager_default.error(error.message || "Failed to enable route");
|
|
117
|
+
return 1;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export {
|
|
121
|
+
enable as default
|
|
122
|
+
};
|