@contentful/experience-design-system-cli 2.35.1-dev-build-c11bca17.0 → 2.35.1-dev-build-657a08f3.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/app.d.ts +1 -1
- package/dist/app.js +182 -20
- package/dist/index.js +198 -30
- package/dist/package.json +1 -1
- package/dist/src/tui/import/steps/01-welcome/screen.d.ts +2 -1
- package/dist/src/tui/import/steps/02-token-input/screen.d.ts +2 -1
- package/dist/src/tui/settings/import-defaults/defaults-store.d.ts +6 -0
- package/dist/src/tui/settings/import-defaults/screen.d.ts +4 -0
- package/legacy/dist/src/analyze/extract-command.d.ts +7 -0
- package/legacy/dist/src/apply/command.d.ts +41 -3
- package/legacy/dist/src/generate/command.d.ts +0 -18
- package/legacy/dist/src/index.js +6950 -7239
- package/legacy/package.json +1 -1
- package/package.json +2 -2
- package/dist/src/legacy/forwarded-import-args.d.ts +0 -1
- package/legacy/dist/src/analyze/controller/create-analyze-extract-endpoint.d.ts +0 -13
- package/legacy/dist/src/analyze/helpers/resolve-composition-agent.d.ts +0 -9
- package/legacy/dist/src/analyze/helpers/resolve-no-cache.d.ts +0 -4
- package/legacy/dist/src/analyze/helpers/resolve-unreachable-mode.d.ts +0 -1
- package/legacy/dist/src/analyze/helpers/retry-db-write.d.ts +0 -1
- package/legacy/dist/src/analyze/orchestrator/execute-analyze-extract.d.ts +0 -21
- package/legacy/dist/src/analyze/services/collect-source-files.d.ts +0 -1
- package/legacy/dist/src/analyze/services/extract-with-cache.d.ts +0 -17
- package/legacy/dist/src/analyze/services/persist-extract-results.d.ts +0 -11
- package/legacy/dist/src/analyze/services/resolve-composition-mapping.d.ts +0 -22
- package/legacy/dist/src/analyze/services/resolve-source-directory.d.ts +0 -1
- package/legacy/dist/src/apply/controller/run-apply.d.ts +0 -1
- package/legacy/dist/src/apply/helpers/build-apply-output.d.ts +0 -55
- package/legacy/dist/src/apply/helpers/has-breaking-changes.d.ts +0 -2
- package/legacy/dist/src/apply/helpers/poll-apply-operation.d.ts +0 -9
- package/legacy/dist/src/apply/helpers/read-token-files.d.ts +0 -7
- package/legacy/dist/src/apply/helpers/slot-validation.d.ts +0 -20
- package/legacy/dist/src/apply/services/apply-interactive.d.ts +0 -13
- package/legacy/dist/src/apply/services/apply-non-interactive.d.ts +0 -10
- package/legacy/dist/src/apply/services/resolve-apply-inputs.d.ts +0 -14
- package/legacy/dist/src/generate/controller/run-generate-components.d.ts +0 -2
- package/legacy/dist/src/generate/controller/run-generate-tokens.d.ts +0 -2
- package/legacy/dist/src/generate/helpers/assert-file-exists.d.ts +0 -1
- package/legacy/dist/src/generate/helpers/normalize-component-for-cache.d.ts +0 -6
- package/legacy/dist/src/generate/helpers/parse-precomputed-cached-names.d.ts +0 -1
- package/legacy/dist/src/generate/helpers/print-fallback-instructions.d.ts +0 -6
- package/legacy/dist/src/generate/helpers/read-file-inline.d.ts +0 -1
- package/legacy/dist/src/generate/services/invoke-all-component-agents.d.ts +0 -6
- package/legacy/dist/src/generate/services/invoke-component-agent.d.ts +0 -36
- package/legacy/dist/src/generate/services/load-accepted-names.d.ts +0 -1
- package/legacy/dist/src/generate/services/resolve-component-cache.d.ts +0 -13
- package/legacy/dist/src/generate/services/resolve-generate-agent.d.ts +0 -9
- package/legacy/dist/src/generate/services/show-generate-view.d.ts +0 -2
- package/legacy/dist/src/generate/services/verify-agent-binary.d.ts +0 -2
- package/legacy/dist/src/lib/pluralize.d.ts +0 -1
- package/legacy/dist/src/map-tokens/controller/run-map-tokens.d.ts +0 -12
- package/legacy/dist/src/map-tokens/services/render-map-tokens-result.d.ts +0 -2
- package/legacy/dist/src/map-tokens/services/resolve-token-name-paths.d.ts +0 -8
package/dist/app.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
export type Screen = 'start' | 'import' | 'help' | 'settings' | 'settings-configuration' | 'settings-opt-in-analytics' | 'settings-debug-mode' | 'upgrade';
|
|
2
|
+
export type Screen = 'start' | 'import' | 'help' | 'settings' | 'settings-configuration' | 'settings-opt-in-analytics' | 'settings-debug-mode' | 'settings-import-defaults' | 'upgrade';
|
|
3
3
|
interface AppInstance {
|
|
4
4
|
unmount: () => void;
|
|
5
5
|
waitUntilExit: () => Promise<unknown>;
|
package/dist/app.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// packages/experience-design-system-cli/app.tsx
|
|
2
|
-
import { useState as
|
|
2
|
+
import { useEffect as useEffect9, useState as useState11 } from "react";
|
|
3
3
|
|
|
4
4
|
// packages/experience-design-system-cli/src/tui/home/home.tsx
|
|
5
5
|
import { useEffect as useEffect2, useState as useState2 } from "react";
|
|
@@ -269,8 +269,8 @@ var OVERVIEW = [
|
|
|
269
269
|
{ label: "Step 4", description: "Review generated definitions" },
|
|
270
270
|
{ label: "Step 5", description: "Push to Contentful" }
|
|
271
271
|
];
|
|
272
|
-
function WelcomeScreen({ onContinue, onQuit }) {
|
|
273
|
-
const [projectPath, setProjectPath] = useState3(
|
|
272
|
+
function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
|
|
273
|
+
const [projectPath, setProjectPath] = useState3(initialPath);
|
|
274
274
|
useWelcomeControls(projectPath, onQuit);
|
|
275
275
|
const submit = (value) => {
|
|
276
276
|
const path = toProjectPath(value);
|
|
@@ -374,8 +374,13 @@ function validateTokenPath(rawPath) {
|
|
|
374
374
|
|
|
375
375
|
// packages/experience-design-system-cli/src/tui/import/steps/02-token-input/screen.tsx
|
|
376
376
|
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
377
|
-
function TokenInputScreen({
|
|
378
|
-
|
|
377
|
+
function TokenInputScreen({
|
|
378
|
+
onConfirm,
|
|
379
|
+
onSkip,
|
|
380
|
+
onBack,
|
|
381
|
+
initialPath = ""
|
|
382
|
+
}) {
|
|
383
|
+
const [tokenPath, setTokenPath] = useState4(initialPath);
|
|
379
384
|
const [failure, setFailure] = useState4(null);
|
|
380
385
|
useTokenInputControls(tokenPath, onSkip, onBack);
|
|
381
386
|
const change = (value) => {
|
|
@@ -713,6 +718,7 @@ function SettingsScreen({
|
|
|
713
718
|
const [focusIdx, setFocusIdx] = useState5(0);
|
|
714
719
|
const items = [
|
|
715
720
|
{ label: "Configuration", screen: "settings-configuration" },
|
|
721
|
+
{ label: "Import Defaults", screen: "settings-import-defaults" },
|
|
716
722
|
{ label: "Opt-in Analytics", screen: "settings-opt-in-analytics" },
|
|
717
723
|
{ label: "Debug Mode", screen: "settings-debug-mode" }
|
|
718
724
|
];
|
|
@@ -1110,13 +1116,163 @@ function DebugModeScreen({ onDone }) {
|
|
|
1110
1116
|
] });
|
|
1111
1117
|
}
|
|
1112
1118
|
|
|
1119
|
+
// packages/experience-design-system-cli/src/tui/settings/import-defaults/screen.tsx
|
|
1120
|
+
import { useEffect as useEffect8, useState as useState10 } from "react";
|
|
1121
|
+
import { Box as Box11, Text as Text11, useInput as useInput11 } from "ink";
|
|
1122
|
+
|
|
1123
|
+
// packages/experience-design-system-cli/src/tui/settings/import-defaults/defaults-store.ts
|
|
1124
|
+
async function readImportDefaults() {
|
|
1125
|
+
const { defaultComponentDir, defaultTokenFile } = await readSettings();
|
|
1126
|
+
return {
|
|
1127
|
+
componentDir: typeof defaultComponentDir === "string" ? defaultComponentDir : "",
|
|
1128
|
+
tokenFile: typeof defaultTokenFile === "string" ? defaultTokenFile : ""
|
|
1129
|
+
};
|
|
1130
|
+
}
|
|
1131
|
+
async function writeImportDefaults(defaults) {
|
|
1132
|
+
const current = await readSettings();
|
|
1133
|
+
const { defaultComponentDir: _dir, defaultTokenFile: _file, ...rest } = current;
|
|
1134
|
+
const componentDir = defaults.componentDir.trim();
|
|
1135
|
+
const tokenFile = defaults.tokenFile.trim();
|
|
1136
|
+
await writeSettings({
|
|
1137
|
+
...rest,
|
|
1138
|
+
...componentDir ? { defaultComponentDir: componentDir } : {},
|
|
1139
|
+
...tokenFile ? { defaultTokenFile: tokenFile } : {}
|
|
1140
|
+
});
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
// packages/experience-design-system-cli/src/tui/settings/import-defaults/screen.tsx
|
|
1144
|
+
import { Fragment as Fragment3, jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1145
|
+
var FIELD_ORDER2 = ["componentDir", "tokenFile"];
|
|
1146
|
+
var FIELD_LABELS2 = {
|
|
1147
|
+
componentDir: "Component directory",
|
|
1148
|
+
tokenFile: "Token file"
|
|
1149
|
+
};
|
|
1150
|
+
function ImportDefaultsScreen({ onDone }) {
|
|
1151
|
+
const [stage, setStage] = useState10("loading");
|
|
1152
|
+
const [defaults, setDefaults] = useState10({ componentDir: "", tokenFile: "" });
|
|
1153
|
+
const [activeField, setActiveField] = useState10("componentDir");
|
|
1154
|
+
const [message, setMessage] = useState10(null);
|
|
1155
|
+
useEffect8(() => {
|
|
1156
|
+
readImportDefaults().then((saved) => {
|
|
1157
|
+
setDefaults(saved);
|
|
1158
|
+
setStage("form");
|
|
1159
|
+
startDebugRun({
|
|
1160
|
+
flow: "settings/import-defaults",
|
|
1161
|
+
step: "01-import-defaults",
|
|
1162
|
+
menuOption: "Import Defaults",
|
|
1163
|
+
inputs: { ...saved }
|
|
1164
|
+
});
|
|
1165
|
+
});
|
|
1166
|
+
}, []);
|
|
1167
|
+
function handleSave() {
|
|
1168
|
+
setStage("saving");
|
|
1169
|
+
setMessage(null);
|
|
1170
|
+
writeImportDefaults(defaults).then(() => {
|
|
1171
|
+
setStage("saved");
|
|
1172
|
+
setMessage("Import defaults saved");
|
|
1173
|
+
}).catch((err) => {
|
|
1174
|
+
setMessage(err instanceof Error ? err.message : "Failed to save");
|
|
1175
|
+
setStage("form");
|
|
1176
|
+
});
|
|
1177
|
+
}
|
|
1178
|
+
useInput11((input, key) => {
|
|
1179
|
+
if (stage === "loading" || stage === "saving") return;
|
|
1180
|
+
if (stage === "saved") {
|
|
1181
|
+
if (key.return || key.escape || input === "q") {
|
|
1182
|
+
void finishDebugRun({ outputs: { ...defaults }, status: "success", exitMethod: "saved" });
|
|
1183
|
+
onDone();
|
|
1184
|
+
}
|
|
1185
|
+
return;
|
|
1186
|
+
}
|
|
1187
|
+
if (key.escape) {
|
|
1188
|
+
void finishDebugRun({ outputs: {}, status: "success", exitMethod: "discarded" });
|
|
1189
|
+
onDone();
|
|
1190
|
+
return;
|
|
1191
|
+
}
|
|
1192
|
+
const idx = FIELD_ORDER2.indexOf(activeField);
|
|
1193
|
+
if (key.tab || key.downArrow) {
|
|
1194
|
+
setActiveField(FIELD_ORDER2[(idx + 1) % FIELD_ORDER2.length]);
|
|
1195
|
+
return;
|
|
1196
|
+
}
|
|
1197
|
+
if (key.upArrow) {
|
|
1198
|
+
setActiveField(FIELD_ORDER2[(idx - 1 + FIELD_ORDER2.length) % FIELD_ORDER2.length]);
|
|
1199
|
+
return;
|
|
1200
|
+
}
|
|
1201
|
+
if (key.return) {
|
|
1202
|
+
if (idx < FIELD_ORDER2.length - 1) setActiveField(FIELD_ORDER2[idx + 1]);
|
|
1203
|
+
else handleSave();
|
|
1204
|
+
return;
|
|
1205
|
+
}
|
|
1206
|
+
if (key.backspace || key.delete) {
|
|
1207
|
+
setDefaults((d) => ({ ...d, [activeField]: d[activeField].slice(0, -1) }));
|
|
1208
|
+
return;
|
|
1209
|
+
}
|
|
1210
|
+
if (input && !key.ctrl && !key.meta) {
|
|
1211
|
+
setDefaults((d) => ({ ...d, [activeField]: d[activeField] + input }));
|
|
1212
|
+
}
|
|
1213
|
+
});
|
|
1214
|
+
if (stage === "loading") {
|
|
1215
|
+
return /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
|
|
1216
|
+
/* @__PURE__ */ jsx11(Text11, { bold: true, children: "Import Defaults" }),
|
|
1217
|
+
/* @__PURE__ */ jsx11(Text11, { children: " " }),
|
|
1218
|
+
/* @__PURE__ */ jsx11(Text11, { color: PALETTE.accent, children: "Loading..." })
|
|
1219
|
+
] });
|
|
1220
|
+
}
|
|
1221
|
+
if (stage === "saved") {
|
|
1222
|
+
return /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
|
|
1223
|
+
/* @__PURE__ */ jsx11(Text11, { bold: true, children: "Import Defaults" }),
|
|
1224
|
+
/* @__PURE__ */ jsx11(Text11, { children: " " }),
|
|
1225
|
+
/* @__PURE__ */ jsxs11(Text11, { color: PALETTE.success, children: [
|
|
1226
|
+
"\u2713 ",
|
|
1227
|
+
message
|
|
1228
|
+
] }),
|
|
1229
|
+
/* @__PURE__ */ jsx11(Text11, { children: " " }),
|
|
1230
|
+
/* @__PURE__ */ jsx11(Text11, { dimColor: true, children: "[Enter/Esc] Back" })
|
|
1231
|
+
] });
|
|
1232
|
+
}
|
|
1233
|
+
return /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
|
|
1234
|
+
/* @__PURE__ */ jsx11(Text11, { bold: true, children: "Import Defaults" }),
|
|
1235
|
+
/* @__PURE__ */ jsx11(Text11, { dimColor: true, children: "Pre-filled when you start an import. Leave a field empty for no default." }),
|
|
1236
|
+
/* @__PURE__ */ jsx11(Text11, { children: " " }),
|
|
1237
|
+
/* @__PURE__ */ jsx11(Box11, { flexDirection: "column", children: FIELD_ORDER2.map((field) => {
|
|
1238
|
+
const isActive = activeField === field;
|
|
1239
|
+
const value = defaults[field];
|
|
1240
|
+
return /* @__PURE__ */ jsxs11(Box11, { gap: 1, children: [
|
|
1241
|
+
/* @__PURE__ */ jsx11(Text11, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " }),
|
|
1242
|
+
/* @__PURE__ */ jsxs11(Text11, { bold: isActive, children: [
|
|
1243
|
+
FIELD_LABELS2[field],
|
|
1244
|
+
":"
|
|
1245
|
+
] }),
|
|
1246
|
+
/* @__PURE__ */ jsx11(Text11, { children: value || /* @__PURE__ */ jsx11(Text11, { dimColor: true, children: "(empty)" }) })
|
|
1247
|
+
] }, field);
|
|
1248
|
+
}) }),
|
|
1249
|
+
message && /* @__PURE__ */ jsxs11(Fragment3, { children: [
|
|
1250
|
+
/* @__PURE__ */ jsx11(Text11, { children: " " }),
|
|
1251
|
+
/* @__PURE__ */ jsxs11(Text11, { color: PALETTE.error, children: [
|
|
1252
|
+
"\u2717 ",
|
|
1253
|
+
message
|
|
1254
|
+
] })
|
|
1255
|
+
] }),
|
|
1256
|
+
/* @__PURE__ */ jsx11(Text11, { children: " " }),
|
|
1257
|
+
/* @__PURE__ */ jsx11(Text11, { dimColor: true, children: "[\u2191/\u2193] Switch field \xB7 [Enter] Save/Next \xB7 [Esc] Back" })
|
|
1258
|
+
] });
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1113
1261
|
// packages/experience-design-system-cli/app.tsx
|
|
1114
|
-
import { jsx as
|
|
1262
|
+
import { Fragment as Fragment4, jsx as jsx12 } from "react/jsx-runtime";
|
|
1115
1263
|
function App({ onLaunchImport, importExitCode }) {
|
|
1116
1264
|
const returnedFromImport = importExitCode !== void 0;
|
|
1117
|
-
const [screen, setScreen] =
|
|
1118
|
-
const [showImportResult, setShowImportResult] =
|
|
1119
|
-
const [projectPath, setProjectPath] =
|
|
1265
|
+
const [screen, setScreen] = useState11(returnedFromImport ? "import" : "start");
|
|
1266
|
+
const [showImportResult, setShowImportResult] = useState11(returnedFromImport);
|
|
1267
|
+
const [projectPath, setProjectPath] = useState11();
|
|
1268
|
+
const [importDefaults, setImportDefaults] = useState11();
|
|
1269
|
+
useEffect9(() => {
|
|
1270
|
+
if (screen !== "import") {
|
|
1271
|
+
setImportDefaults(void 0);
|
|
1272
|
+
return;
|
|
1273
|
+
}
|
|
1274
|
+
void readImportDefaults().then(setImportDefaults);
|
|
1275
|
+
}, [screen]);
|
|
1120
1276
|
const goToStart = () => setScreen("start");
|
|
1121
1277
|
const goToSettings = () => setScreen("settings");
|
|
1122
1278
|
const finishImportResult = () => {
|
|
@@ -1130,36 +1286,42 @@ function App({ onLaunchImport, importExitCode }) {
|
|
|
1130
1286
|
};
|
|
1131
1287
|
switch (screen) {
|
|
1132
1288
|
case "import":
|
|
1133
|
-
if (showImportResult) return /* @__PURE__ */
|
|
1134
|
-
if (
|
|
1135
|
-
|
|
1289
|
+
if (showImportResult) return /* @__PURE__ */ jsx12(ImportScreen, { exitCode: importExitCode, onDone: finishImportResult });
|
|
1290
|
+
if (importDefaults === void 0) return /* @__PURE__ */ jsx12(Fragment4, {});
|
|
1291
|
+
if (projectPath === void 0) {
|
|
1292
|
+
return /* @__PURE__ */ jsx12(WelcomeScreen, { onContinue: setProjectPath, onQuit: leaveImport, initialPath: importDefaults.componentDir });
|
|
1293
|
+
}
|
|
1294
|
+
return /* @__PURE__ */ jsx12(
|
|
1136
1295
|
TokenInputScreen,
|
|
1137
1296
|
{
|
|
1297
|
+
initialPath: importDefaults.tokenFile,
|
|
1138
1298
|
onConfirm: (tokens) => onLaunchImport?.({ project: projectPath, tokens }),
|
|
1139
1299
|
onSkip: () => onLaunchImport?.({ project: projectPath }),
|
|
1140
1300
|
onBack: () => setProjectPath(void 0)
|
|
1141
1301
|
}
|
|
1142
1302
|
);
|
|
1143
1303
|
case "help":
|
|
1144
|
-
return /* @__PURE__ */
|
|
1304
|
+
return /* @__PURE__ */ jsx12(HelpScreen, { onDone: goToStart });
|
|
1145
1305
|
case "upgrade":
|
|
1146
|
-
return /* @__PURE__ */
|
|
1306
|
+
return /* @__PURE__ */ jsx12(UpgradeScreen, { onDone: goToStart });
|
|
1147
1307
|
case "settings":
|
|
1148
|
-
return /* @__PURE__ */
|
|
1308
|
+
return /* @__PURE__ */ jsx12(SettingsScreen, { onNavigate: setScreen, onBack: goToStart });
|
|
1149
1309
|
case "settings-configuration":
|
|
1150
|
-
return /* @__PURE__ */
|
|
1310
|
+
return /* @__PURE__ */ jsx12(ConfigurationScreen, { onDone: goToSettings });
|
|
1151
1311
|
case "settings-opt-in-analytics":
|
|
1152
|
-
return /* @__PURE__ */
|
|
1312
|
+
return /* @__PURE__ */ jsx12(OptInAnalyticsScreen, { onDone: goToSettings });
|
|
1153
1313
|
case "settings-debug-mode":
|
|
1154
|
-
return /* @__PURE__ */
|
|
1314
|
+
return /* @__PURE__ */ jsx12(DebugModeScreen, { onDone: goToSettings });
|
|
1315
|
+
case "settings-import-defaults":
|
|
1316
|
+
return /* @__PURE__ */ jsx12(ImportDefaultsScreen, { onDone: goToSettings });
|
|
1155
1317
|
case "start":
|
|
1156
|
-
return /* @__PURE__ */
|
|
1318
|
+
return /* @__PURE__ */ jsx12(HomeScreen, { onNavigate: setScreen });
|
|
1157
1319
|
}
|
|
1158
1320
|
}
|
|
1159
1321
|
async function renderUntilImportRequestedOrExit(renderApp, importExitCode) {
|
|
1160
1322
|
let requestedImport;
|
|
1161
1323
|
const instance = renderApp(
|
|
1162
|
-
/* @__PURE__ */
|
|
1324
|
+
/* @__PURE__ */ jsx12(
|
|
1163
1325
|
App,
|
|
1164
1326
|
{
|
|
1165
1327
|
importExitCode,
|
package/dist/index.js
CHANGED
|
@@ -336,8 +336,8 @@ import { useState as useState3 } from "react";
|
|
|
336
336
|
import { Box as Box3, Text as Text3 } from "ink";
|
|
337
337
|
import TextInput from "ink-text-input";
|
|
338
338
|
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
339
|
-
function WelcomeScreen({ onContinue, onQuit }) {
|
|
340
|
-
const [projectPath, setProjectPath] = useState3(
|
|
339
|
+
function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
|
|
340
|
+
const [projectPath, setProjectPath] = useState3(initialPath);
|
|
341
341
|
useWelcomeControls(projectPath, onQuit);
|
|
342
342
|
const submit = (value) => {
|
|
343
343
|
const path = toProjectPath(value);
|
|
@@ -471,8 +471,13 @@ import { useState as useState4 } from "react";
|
|
|
471
471
|
import { Box as Box4, Text as Text4 } from "ink";
|
|
472
472
|
import TextInput2 from "ink-text-input";
|
|
473
473
|
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
474
|
-
function TokenInputScreen({
|
|
475
|
-
|
|
474
|
+
function TokenInputScreen({
|
|
475
|
+
onConfirm,
|
|
476
|
+
onSkip,
|
|
477
|
+
onBack,
|
|
478
|
+
initialPath = ""
|
|
479
|
+
}) {
|
|
480
|
+
const [tokenPath, setTokenPath] = useState4(initialPath);
|
|
476
481
|
const [failure, setFailure] = useState4(null);
|
|
477
482
|
useTokenInputControls(tokenPath, onSkip, onBack);
|
|
478
483
|
const change = (value) => {
|
|
@@ -844,6 +849,7 @@ function SettingsScreen({
|
|
|
844
849
|
const [focusIdx, setFocusIdx] = useState5(0);
|
|
845
850
|
const items = [
|
|
846
851
|
{ label: "Configuration", screen: "settings-configuration" },
|
|
852
|
+
{ label: "Import Defaults", screen: "settings-import-defaults" },
|
|
847
853
|
{ label: "Opt-in Analytics", screen: "settings-opt-in-analytics" },
|
|
848
854
|
{ label: "Debug Mode", screen: "settings-debug-mode" }
|
|
849
855
|
];
|
|
@@ -1295,18 +1301,181 @@ var init_screen4 = __esm({
|
|
|
1295
1301
|
}
|
|
1296
1302
|
});
|
|
1297
1303
|
|
|
1304
|
+
// packages/experience-design-system-cli/src/tui/settings/import-defaults/defaults-store.ts
|
|
1305
|
+
async function readImportDefaults() {
|
|
1306
|
+
const { defaultComponentDir, defaultTokenFile } = await readSettings();
|
|
1307
|
+
return {
|
|
1308
|
+
componentDir: typeof defaultComponentDir === "string" ? defaultComponentDir : "",
|
|
1309
|
+
tokenFile: typeof defaultTokenFile === "string" ? defaultTokenFile : ""
|
|
1310
|
+
};
|
|
1311
|
+
}
|
|
1312
|
+
async function writeImportDefaults(defaults) {
|
|
1313
|
+
const current = await readSettings();
|
|
1314
|
+
const { defaultComponentDir: _dir, defaultTokenFile: _file, ...rest } = current;
|
|
1315
|
+
const componentDir = defaults.componentDir.trim();
|
|
1316
|
+
const tokenFile = defaults.tokenFile.trim();
|
|
1317
|
+
await writeSettings({
|
|
1318
|
+
...rest,
|
|
1319
|
+
...componentDir ? { defaultComponentDir: componentDir } : {},
|
|
1320
|
+
...tokenFile ? { defaultTokenFile: tokenFile } : {}
|
|
1321
|
+
});
|
|
1322
|
+
}
|
|
1323
|
+
var init_defaults_store = __esm({
|
|
1324
|
+
"packages/experience-design-system-cli/src/tui/settings/import-defaults/defaults-store.ts"() {
|
|
1325
|
+
"use strict";
|
|
1326
|
+
init_config();
|
|
1327
|
+
}
|
|
1328
|
+
});
|
|
1329
|
+
|
|
1330
|
+
// packages/experience-design-system-cli/src/tui/settings/import-defaults/screen.tsx
|
|
1331
|
+
import { useEffect as useEffect8, useState as useState10 } from "react";
|
|
1332
|
+
import { Box as Box11, Text as Text11, useInput as useInput11 } from "ink";
|
|
1333
|
+
import { Fragment as Fragment3, jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1334
|
+
function ImportDefaultsScreen({ onDone }) {
|
|
1335
|
+
const [stage, setStage] = useState10("loading");
|
|
1336
|
+
const [defaults, setDefaults] = useState10({ componentDir: "", tokenFile: "" });
|
|
1337
|
+
const [activeField, setActiveField] = useState10("componentDir");
|
|
1338
|
+
const [message, setMessage] = useState10(null);
|
|
1339
|
+
useEffect8(() => {
|
|
1340
|
+
readImportDefaults().then((saved) => {
|
|
1341
|
+
setDefaults(saved);
|
|
1342
|
+
setStage("form");
|
|
1343
|
+
startDebugRun({
|
|
1344
|
+
flow: "settings/import-defaults",
|
|
1345
|
+
step: "01-import-defaults",
|
|
1346
|
+
menuOption: "Import Defaults",
|
|
1347
|
+
inputs: { ...saved }
|
|
1348
|
+
});
|
|
1349
|
+
});
|
|
1350
|
+
}, []);
|
|
1351
|
+
function handleSave() {
|
|
1352
|
+
setStage("saving");
|
|
1353
|
+
setMessage(null);
|
|
1354
|
+
writeImportDefaults(defaults).then(() => {
|
|
1355
|
+
setStage("saved");
|
|
1356
|
+
setMessage("Import defaults saved");
|
|
1357
|
+
}).catch((err) => {
|
|
1358
|
+
setMessage(err instanceof Error ? err.message : "Failed to save");
|
|
1359
|
+
setStage("form");
|
|
1360
|
+
});
|
|
1361
|
+
}
|
|
1362
|
+
useInput11((input, key) => {
|
|
1363
|
+
if (stage === "loading" || stage === "saving") return;
|
|
1364
|
+
if (stage === "saved") {
|
|
1365
|
+
if (key.return || key.escape || input === "q") {
|
|
1366
|
+
void finishDebugRun({ outputs: { ...defaults }, status: "success", exitMethod: "saved" });
|
|
1367
|
+
onDone();
|
|
1368
|
+
}
|
|
1369
|
+
return;
|
|
1370
|
+
}
|
|
1371
|
+
if (key.escape) {
|
|
1372
|
+
void finishDebugRun({ outputs: {}, status: "success", exitMethod: "discarded" });
|
|
1373
|
+
onDone();
|
|
1374
|
+
return;
|
|
1375
|
+
}
|
|
1376
|
+
const idx = FIELD_ORDER2.indexOf(activeField);
|
|
1377
|
+
if (key.tab || key.downArrow) {
|
|
1378
|
+
setActiveField(FIELD_ORDER2[(idx + 1) % FIELD_ORDER2.length]);
|
|
1379
|
+
return;
|
|
1380
|
+
}
|
|
1381
|
+
if (key.upArrow) {
|
|
1382
|
+
setActiveField(FIELD_ORDER2[(idx - 1 + FIELD_ORDER2.length) % FIELD_ORDER2.length]);
|
|
1383
|
+
return;
|
|
1384
|
+
}
|
|
1385
|
+
if (key.return) {
|
|
1386
|
+
if (idx < FIELD_ORDER2.length - 1) setActiveField(FIELD_ORDER2[idx + 1]);
|
|
1387
|
+
else handleSave();
|
|
1388
|
+
return;
|
|
1389
|
+
}
|
|
1390
|
+
if (key.backspace || key.delete) {
|
|
1391
|
+
setDefaults((d) => ({ ...d, [activeField]: d[activeField].slice(0, -1) }));
|
|
1392
|
+
return;
|
|
1393
|
+
}
|
|
1394
|
+
if (input && !key.ctrl && !key.meta) {
|
|
1395
|
+
setDefaults((d) => ({ ...d, [activeField]: d[activeField] + input }));
|
|
1396
|
+
}
|
|
1397
|
+
});
|
|
1398
|
+
if (stage === "loading") {
|
|
1399
|
+
return /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
|
|
1400
|
+
/* @__PURE__ */ jsx11(Text11, { bold: true, children: "Import Defaults" }),
|
|
1401
|
+
/* @__PURE__ */ jsx11(Text11, { children: " " }),
|
|
1402
|
+
/* @__PURE__ */ jsx11(Text11, { color: PALETTE.accent, children: "Loading..." })
|
|
1403
|
+
] });
|
|
1404
|
+
}
|
|
1405
|
+
if (stage === "saved") {
|
|
1406
|
+
return /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
|
|
1407
|
+
/* @__PURE__ */ jsx11(Text11, { bold: true, children: "Import Defaults" }),
|
|
1408
|
+
/* @__PURE__ */ jsx11(Text11, { children: " " }),
|
|
1409
|
+
/* @__PURE__ */ jsxs11(Text11, { color: PALETTE.success, children: [
|
|
1410
|
+
"\u2713 ",
|
|
1411
|
+
message
|
|
1412
|
+
] }),
|
|
1413
|
+
/* @__PURE__ */ jsx11(Text11, { children: " " }),
|
|
1414
|
+
/* @__PURE__ */ jsx11(Text11, { dimColor: true, children: "[Enter/Esc] Back" })
|
|
1415
|
+
] });
|
|
1416
|
+
}
|
|
1417
|
+
return /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
|
|
1418
|
+
/* @__PURE__ */ jsx11(Text11, { bold: true, children: "Import Defaults" }),
|
|
1419
|
+
/* @__PURE__ */ jsx11(Text11, { dimColor: true, children: "Pre-filled when you start an import. Leave a field empty for no default." }),
|
|
1420
|
+
/* @__PURE__ */ jsx11(Text11, { children: " " }),
|
|
1421
|
+
/* @__PURE__ */ jsx11(Box11, { flexDirection: "column", children: FIELD_ORDER2.map((field) => {
|
|
1422
|
+
const isActive = activeField === field;
|
|
1423
|
+
const value = defaults[field];
|
|
1424
|
+
return /* @__PURE__ */ jsxs11(Box11, { gap: 1, children: [
|
|
1425
|
+
/* @__PURE__ */ jsx11(Text11, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " }),
|
|
1426
|
+
/* @__PURE__ */ jsxs11(Text11, { bold: isActive, children: [
|
|
1427
|
+
FIELD_LABELS2[field],
|
|
1428
|
+
":"
|
|
1429
|
+
] }),
|
|
1430
|
+
/* @__PURE__ */ jsx11(Text11, { children: value || /* @__PURE__ */ jsx11(Text11, { dimColor: true, children: "(empty)" }) })
|
|
1431
|
+
] }, field);
|
|
1432
|
+
}) }),
|
|
1433
|
+
message && /* @__PURE__ */ jsxs11(Fragment3, { children: [
|
|
1434
|
+
/* @__PURE__ */ jsx11(Text11, { children: " " }),
|
|
1435
|
+
/* @__PURE__ */ jsxs11(Text11, { color: PALETTE.error, children: [
|
|
1436
|
+
"\u2717 ",
|
|
1437
|
+
message
|
|
1438
|
+
] })
|
|
1439
|
+
] }),
|
|
1440
|
+
/* @__PURE__ */ jsx11(Text11, { children: " " }),
|
|
1441
|
+
/* @__PURE__ */ jsx11(Text11, { dimColor: true, children: "[\u2191/\u2193] Switch field \xB7 [Enter] Save/Next \xB7 [Esc] Back" })
|
|
1442
|
+
] });
|
|
1443
|
+
}
|
|
1444
|
+
var FIELD_ORDER2, FIELD_LABELS2;
|
|
1445
|
+
var init_screen5 = __esm({
|
|
1446
|
+
"packages/experience-design-system-cli/src/tui/settings/import-defaults/screen.tsx"() {
|
|
1447
|
+
"use strict";
|
|
1448
|
+
init_home_theme();
|
|
1449
|
+
init_debug_store();
|
|
1450
|
+
init_defaults_store();
|
|
1451
|
+
FIELD_ORDER2 = ["componentDir", "tokenFile"];
|
|
1452
|
+
FIELD_LABELS2 = {
|
|
1453
|
+
componentDir: "Component directory",
|
|
1454
|
+
tokenFile: "Token file"
|
|
1455
|
+
};
|
|
1456
|
+
}
|
|
1457
|
+
});
|
|
1458
|
+
|
|
1298
1459
|
// packages/experience-design-system-cli/app.tsx
|
|
1299
1460
|
var app_exports = {};
|
|
1300
1461
|
__export(app_exports, {
|
|
1301
1462
|
runApp: () => runApp
|
|
1302
1463
|
});
|
|
1303
|
-
import { useState as
|
|
1304
|
-
import { jsx as
|
|
1464
|
+
import { useEffect as useEffect9, useState as useState11 } from "react";
|
|
1465
|
+
import { Fragment as Fragment4, jsx as jsx12 } from "react/jsx-runtime";
|
|
1305
1466
|
function App({ onLaunchImport, importExitCode }) {
|
|
1306
1467
|
const returnedFromImport = importExitCode !== void 0;
|
|
1307
|
-
const [screen, setScreen] =
|
|
1308
|
-
const [showImportResult, setShowImportResult] =
|
|
1309
|
-
const [projectPath, setProjectPath] =
|
|
1468
|
+
const [screen, setScreen] = useState11(returnedFromImport ? "import" : "start");
|
|
1469
|
+
const [showImportResult, setShowImportResult] = useState11(returnedFromImport);
|
|
1470
|
+
const [projectPath, setProjectPath] = useState11();
|
|
1471
|
+
const [importDefaults, setImportDefaults] = useState11();
|
|
1472
|
+
useEffect9(() => {
|
|
1473
|
+
if (screen !== "import") {
|
|
1474
|
+
setImportDefaults(void 0);
|
|
1475
|
+
return;
|
|
1476
|
+
}
|
|
1477
|
+
void readImportDefaults().then(setImportDefaults);
|
|
1478
|
+
}, [screen]);
|
|
1310
1479
|
const goToStart = () => setScreen("start");
|
|
1311
1480
|
const goToSettings = () => setScreen("settings");
|
|
1312
1481
|
const finishImportResult = () => {
|
|
@@ -1320,36 +1489,42 @@ function App({ onLaunchImport, importExitCode }) {
|
|
|
1320
1489
|
};
|
|
1321
1490
|
switch (screen) {
|
|
1322
1491
|
case "import":
|
|
1323
|
-
if (showImportResult) return /* @__PURE__ */
|
|
1324
|
-
if (
|
|
1325
|
-
|
|
1492
|
+
if (showImportResult) return /* @__PURE__ */ jsx12(ImportScreen, { exitCode: importExitCode, onDone: finishImportResult });
|
|
1493
|
+
if (importDefaults === void 0) return /* @__PURE__ */ jsx12(Fragment4, {});
|
|
1494
|
+
if (projectPath === void 0) {
|
|
1495
|
+
return /* @__PURE__ */ jsx12(WelcomeScreen, { onContinue: setProjectPath, onQuit: leaveImport, initialPath: importDefaults.componentDir });
|
|
1496
|
+
}
|
|
1497
|
+
return /* @__PURE__ */ jsx12(
|
|
1326
1498
|
TokenInputScreen,
|
|
1327
1499
|
{
|
|
1500
|
+
initialPath: importDefaults.tokenFile,
|
|
1328
1501
|
onConfirm: (tokens) => onLaunchImport?.({ project: projectPath, tokens }),
|
|
1329
1502
|
onSkip: () => onLaunchImport?.({ project: projectPath }),
|
|
1330
1503
|
onBack: () => setProjectPath(void 0)
|
|
1331
1504
|
}
|
|
1332
1505
|
);
|
|
1333
1506
|
case "help":
|
|
1334
|
-
return /* @__PURE__ */
|
|
1507
|
+
return /* @__PURE__ */ jsx12(HelpScreen, { onDone: goToStart });
|
|
1335
1508
|
case "upgrade":
|
|
1336
|
-
return /* @__PURE__ */
|
|
1509
|
+
return /* @__PURE__ */ jsx12(UpgradeScreen, { onDone: goToStart });
|
|
1337
1510
|
case "settings":
|
|
1338
|
-
return /* @__PURE__ */
|
|
1511
|
+
return /* @__PURE__ */ jsx12(SettingsScreen, { onNavigate: setScreen, onBack: goToStart });
|
|
1339
1512
|
case "settings-configuration":
|
|
1340
|
-
return /* @__PURE__ */
|
|
1513
|
+
return /* @__PURE__ */ jsx12(ConfigurationScreen, { onDone: goToSettings });
|
|
1341
1514
|
case "settings-opt-in-analytics":
|
|
1342
|
-
return /* @__PURE__ */
|
|
1515
|
+
return /* @__PURE__ */ jsx12(OptInAnalyticsScreen, { onDone: goToSettings });
|
|
1343
1516
|
case "settings-debug-mode":
|
|
1344
|
-
return /* @__PURE__ */
|
|
1517
|
+
return /* @__PURE__ */ jsx12(DebugModeScreen, { onDone: goToSettings });
|
|
1518
|
+
case "settings-import-defaults":
|
|
1519
|
+
return /* @__PURE__ */ jsx12(ImportDefaultsScreen, { onDone: goToSettings });
|
|
1345
1520
|
case "start":
|
|
1346
|
-
return /* @__PURE__ */
|
|
1521
|
+
return /* @__PURE__ */ jsx12(HomeScreen, { onNavigate: setScreen });
|
|
1347
1522
|
}
|
|
1348
1523
|
}
|
|
1349
1524
|
async function renderUntilImportRequestedOrExit(renderApp, importExitCode) {
|
|
1350
1525
|
let requestedImport;
|
|
1351
1526
|
const instance = renderApp(
|
|
1352
|
-
/* @__PURE__ */
|
|
1527
|
+
/* @__PURE__ */ jsx12(
|
|
1353
1528
|
App,
|
|
1354
1529
|
{
|
|
1355
1530
|
importExitCode,
|
|
@@ -1387,6 +1562,8 @@ var init_app = __esm({
|
|
|
1387
1562
|
init_screen3();
|
|
1388
1563
|
init_PageContainer4();
|
|
1389
1564
|
init_screen4();
|
|
1565
|
+
init_screen5();
|
|
1566
|
+
init_defaults_store();
|
|
1390
1567
|
}
|
|
1391
1568
|
});
|
|
1392
1569
|
|
|
@@ -1394,11 +1571,6 @@ var init_app = __esm({
|
|
|
1394
1571
|
import { readFileSync as readFileSync3 } from "node:fs";
|
|
1395
1572
|
import { Command } from "commander";
|
|
1396
1573
|
|
|
1397
|
-
// packages/experience-design-system-cli/src/legacy/forwarded-import-args.ts
|
|
1398
|
-
function forwardedImportArgs(argv) {
|
|
1399
|
-
return argv[0] === "import" ? argv.slice(1) : argv;
|
|
1400
|
-
}
|
|
1401
|
-
|
|
1402
1574
|
// packages/experience-design-system-cli/src/legacy/run-legacy.ts
|
|
1403
1575
|
init_legacy_cli_path();
|
|
1404
1576
|
import { spawn } from "node:child_process";
|
|
@@ -1452,11 +1624,7 @@ function registerForwardedCommands(program) {
|
|
|
1452
1624
|
}
|
|
1453
1625
|
function createProgram() {
|
|
1454
1626
|
const program = new Command().name("experiences").description("Contentful Experiences design system import CLI").version(pkg.version, "--version", "Print version number");
|
|
1455
|
-
program.command("import", { isDefault: true }).description("Launch the Experiences CLI").
|
|
1456
|
-
const forwarded = forwardedImportArgs(process.argv.slice(2));
|
|
1457
|
-
if (forwarded.length > 0) {
|
|
1458
|
-
process.exit(await runLegacy(["import", ...forwarded]));
|
|
1459
|
-
}
|
|
1627
|
+
program.command("import", { isDefault: true }).description("Launch the Experiences CLI").action(async () => {
|
|
1460
1628
|
const { render } = await import("ink");
|
|
1461
1629
|
const { runApp: runApp2 } = await Promise.resolve().then(() => (init_app(), app_exports));
|
|
1462
1630
|
await runApp2(render);
|
package/dist/package.json
CHANGED
|
@@ -2,6 +2,7 @@ import React from 'react';
|
|
|
2
2
|
interface WelcomeScreenProps {
|
|
3
3
|
onContinue: (projectPath: string) => void;
|
|
4
4
|
onQuit: () => void;
|
|
5
|
+
initialPath?: string;
|
|
5
6
|
}
|
|
6
|
-
export declare function WelcomeScreen({ onContinue, onQuit }: WelcomeScreenProps): React.ReactElement;
|
|
7
|
+
export declare function WelcomeScreen({ onContinue, onQuit, initialPath }: WelcomeScreenProps): React.ReactElement;
|
|
7
8
|
export {};
|
|
@@ -3,6 +3,7 @@ interface TokenInputScreenProps {
|
|
|
3
3
|
onConfirm: (tokensPath: string) => void;
|
|
4
4
|
onSkip: () => void;
|
|
5
5
|
onBack: () => void;
|
|
6
|
+
initialPath?: string;
|
|
6
7
|
}
|
|
7
|
-
export declare function TokenInputScreen({ onConfirm, onSkip, onBack }: TokenInputScreenProps): React.ReactElement;
|
|
8
|
+
export declare function TokenInputScreen({ onConfirm, onSkip, onBack, initialPath, }: TokenInputScreenProps): React.ReactElement;
|
|
8
9
|
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
export declare function resolveExtractNoCache(opts: {
|
|
3
|
+
cache?: boolean;
|
|
4
|
+
noCache?: boolean;
|
|
5
|
+
}): boolean;
|
|
6
|
+
export declare function collectSourceFiles(directory: string, onProgress?: (scannedCount: number) => void): Promise<string[]>;
|
|
7
|
+
export declare function registerInternalExtractCommand(program: Command): void;
|