@contentful/experience-design-system-cli 2.37.1-dev-build-200af99b.0 → 2.37.1-dev-build-eeb53912.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.js
CHANGED
|
@@ -1,311 +1,1578 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
// packages/experience-design-system-cli/src/tui/home/home.tsx
|
|
5
|
-
import { useEffect as useEffect2, useState as useState2 } from "react";
|
|
6
|
-
import { Box, Text as Text2, useApp, useInput } from "ink";
|
|
7
|
-
|
|
8
|
-
// packages/experience-design-system-cli/src/tui/home/home.theme.ts
|
|
9
|
-
var BRAND = {
|
|
10
|
-
blue: "#1773EB",
|
|
11
|
-
green: "#00C459",
|
|
12
|
-
orange: "#E44F20",
|
|
13
|
-
yellow: "#FFDA00",
|
|
14
|
-
white: "#FFFFFF",
|
|
15
|
-
slate: "#8B8D91",
|
|
16
|
-
steel: "#C4D1DE"
|
|
1
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
2
|
+
var __esm = (fn, res) => function __init() {
|
|
3
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
17
4
|
};
|
|
18
|
-
var PALETTE = {
|
|
19
|
-
accent: BRAND.blue,
|
|
20
|
-
success: BRAND.green,
|
|
21
|
-
error: BRAND.orange,
|
|
22
|
-
warning: BRAND.yellow,
|
|
23
|
-
muted: BRAND.slate,
|
|
24
|
-
border: BRAND.steel
|
|
25
|
-
};
|
|
26
|
-
var BRAND_RAMP = [BRAND.blue, BRAND.orange, BRAND.yellow];
|
|
27
|
-
var BAR_CELL = "\u2501";
|
|
28
|
-
function brandBar(width, ramp = BRAND_RAMP) {
|
|
29
|
-
if (width <= 0 || ramp.length === 0) return [];
|
|
30
|
-
const base = Math.floor(width / ramp.length);
|
|
31
|
-
const remainder = width % ramp.length;
|
|
32
|
-
return ramp.map((color, i) => ({
|
|
33
|
-
text: BAR_CELL.repeat(base + (i < remainder ? 1 : 0)),
|
|
34
|
-
color
|
|
35
|
-
})).filter((segment) => segment.text.length > 0);
|
|
36
|
-
}
|
|
37
|
-
var FOCUS_MARKER = "\u276F";
|
|
38
|
-
|
|
39
|
-
// packages/experience-design-system-cli/src/tui/upgrade/version.ts
|
|
40
|
-
import { readFileSync as readFileSync2 } from "node:fs";
|
|
41
|
-
import { join as join2 } from "node:path";
|
|
42
|
-
import semver from "semver";
|
|
43
5
|
|
|
44
|
-
// packages/experience-design-system-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
6
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/constants/vocabularies.js
|
|
7
|
+
var CDF_PROPERTY_TYPES, CDF_PROPERTY_CATEGORIES;
|
|
8
|
+
var init_vocabularies = __esm({
|
|
9
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/constants/vocabularies.js"() {
|
|
10
|
+
"use strict";
|
|
11
|
+
CDF_PROPERTY_TYPES = [
|
|
12
|
+
"string",
|
|
13
|
+
"richtext",
|
|
14
|
+
"number",
|
|
15
|
+
"media",
|
|
16
|
+
"link",
|
|
17
|
+
"enum",
|
|
18
|
+
"token",
|
|
19
|
+
"boolean"
|
|
20
|
+
];
|
|
21
|
+
CDF_PROPERTY_CATEGORIES = ["content", "design", "state", "unattached"];
|
|
60
22
|
}
|
|
61
|
-
}
|
|
23
|
+
});
|
|
62
24
|
|
|
63
|
-
// packages/experience-design-system-
|
|
64
|
-
var
|
|
65
|
-
var
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const latest = versions.reduce((best, v) => semver.gt(v, best) ? v : best);
|
|
84
|
-
if (!semver.valid(current)) return { status: "error" };
|
|
85
|
-
if (semver.gt(latest, current)) {
|
|
86
|
-
return { status: "update-available", current, latest };
|
|
87
|
-
}
|
|
88
|
-
return { status: "up-to-date", current };
|
|
89
|
-
} catch {
|
|
90
|
-
return { status: "error" };
|
|
25
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/dtcg/constants/token-types.js
|
|
26
|
+
var DESIGN_TOKEN_TYPES;
|
|
27
|
+
var init_token_types = __esm({
|
|
28
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/dtcg/constants/token-types.js"() {
|
|
29
|
+
"use strict";
|
|
30
|
+
DESIGN_TOKEN_TYPES = [
|
|
31
|
+
"color",
|
|
32
|
+
"dimension",
|
|
33
|
+
"fontFamily",
|
|
34
|
+
"fontWeight",
|
|
35
|
+
"duration",
|
|
36
|
+
"cubicBezier",
|
|
37
|
+
"number",
|
|
38
|
+
"strokeStyle",
|
|
39
|
+
"border",
|
|
40
|
+
"transition",
|
|
41
|
+
"shadow",
|
|
42
|
+
"gradient",
|
|
43
|
+
"typography"
|
|
44
|
+
];
|
|
91
45
|
}
|
|
92
|
-
}
|
|
46
|
+
});
|
|
93
47
|
|
|
94
|
-
// packages/experience-design-system-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
48
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/constants/schema.js
|
|
49
|
+
var CDF_SCHEMA_URL, cdfJsonSchema;
|
|
50
|
+
var init_schema = __esm({
|
|
51
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/constants/schema.js"() {
|
|
52
|
+
"use strict";
|
|
53
|
+
init_vocabularies();
|
|
54
|
+
init_token_types();
|
|
55
|
+
CDF_SCHEMA_URL = "https://contentful.com/schemas/cdf";
|
|
56
|
+
cdfJsonSchema = {
|
|
57
|
+
$schema: "http://json-schema.org/draft-07/schema#",
|
|
58
|
+
$id: CDF_SCHEMA_URL,
|
|
59
|
+
title: "CDF Component + Design Token Definition Format",
|
|
60
|
+
type: "object",
|
|
61
|
+
required: ["$schema"],
|
|
62
|
+
properties: {
|
|
63
|
+
$schema: { type: "string", const: CDF_SCHEMA_URL }
|
|
64
|
+
},
|
|
65
|
+
additionalProperties: { $ref: "#/definitions/groupOrEntry" },
|
|
66
|
+
definitions: {
|
|
67
|
+
groupOrEntry: {
|
|
68
|
+
oneOf: [{ $ref: "#/definitions/component" }, { $ref: "#/definitions/token" }, { $ref: "#/definitions/group" }]
|
|
69
|
+
},
|
|
70
|
+
component: {
|
|
71
|
+
type: "object",
|
|
72
|
+
required: ["$type", "$properties"],
|
|
73
|
+
properties: {
|
|
74
|
+
$type: { type: "string", const: "component" },
|
|
75
|
+
$description: { type: "string" },
|
|
76
|
+
$properties: {
|
|
77
|
+
type: "object",
|
|
78
|
+
additionalProperties: { $ref: "#/definitions/property" }
|
|
79
|
+
},
|
|
80
|
+
$slots: {
|
|
81
|
+
type: "object",
|
|
82
|
+
additionalProperties: { $ref: "#/definitions/slot" }
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
additionalProperties: false
|
|
86
|
+
},
|
|
87
|
+
property: {
|
|
88
|
+
type: "object",
|
|
89
|
+
required: ["$type", "$category"],
|
|
90
|
+
properties: {
|
|
91
|
+
$type: { type: "string", enum: [...CDF_PROPERTY_TYPES] },
|
|
92
|
+
$category: { type: "string", enum: [...CDF_PROPERTY_CATEGORIES] },
|
|
93
|
+
$description: { type: "string" },
|
|
94
|
+
$required: { type: "boolean" },
|
|
95
|
+
$default: {},
|
|
96
|
+
$values: { type: "array", items: { type: "string" } },
|
|
97
|
+
"$token.kind": { type: "string" },
|
|
98
|
+
"$token.allowed": { type: "array", items: { type: "string" } }
|
|
99
|
+
},
|
|
100
|
+
additionalProperties: false
|
|
101
|
+
},
|
|
102
|
+
slot: {
|
|
103
|
+
type: "object",
|
|
104
|
+
properties: {
|
|
105
|
+
$description: { type: "string" },
|
|
106
|
+
$required: { type: "boolean" },
|
|
107
|
+
$allowedComponents: { type: "array", items: { type: "string" } }
|
|
108
|
+
},
|
|
109
|
+
additionalProperties: false
|
|
110
|
+
},
|
|
111
|
+
token: {
|
|
112
|
+
type: "object",
|
|
113
|
+
required: ["$type", "$value"],
|
|
114
|
+
properties: {
|
|
115
|
+
$type: { type: "string", enum: [...DESIGN_TOKEN_TYPES] },
|
|
116
|
+
$value: {},
|
|
117
|
+
$description: { type: "string" }
|
|
118
|
+
},
|
|
119
|
+
additionalProperties: false
|
|
120
|
+
},
|
|
121
|
+
group: {
|
|
122
|
+
type: "object",
|
|
123
|
+
properties: { $description: { type: "string" } },
|
|
124
|
+
additionalProperties: { $ref: "#/definitions/groupOrEntry" }
|
|
125
|
+
}
|
|
126
|
+
}
|
|
112
127
|
};
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
}
|
|
128
|
+
}
|
|
129
|
+
});
|
|
116
130
|
|
|
117
|
-
// packages/experience-design-system-
|
|
118
|
-
import {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
131
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/helpers/validate.js
|
|
132
|
+
import { Ajv } from "ajv";
|
|
133
|
+
var ajv, validate, TOKEN_TYPE_SET;
|
|
134
|
+
var init_validate = __esm({
|
|
135
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/helpers/validate.js"() {
|
|
136
|
+
"use strict";
|
|
137
|
+
init_schema();
|
|
138
|
+
init_token_types();
|
|
139
|
+
ajv = new Ajv({ allErrors: true });
|
|
140
|
+
validate = ajv.compile(cdfJsonSchema);
|
|
141
|
+
TOKEN_TYPE_SET = new Set(DESIGN_TOKEN_TYPES);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
123
144
|
|
|
124
|
-
// packages/experience-design-system-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
var SUBTITLE = "Let's import your design system into Contentful";
|
|
129
|
-
var MIN_TERMINAL_WIDTH = 164;
|
|
130
|
-
var START_ITEMS = [
|
|
131
|
-
{ label: "Import", screen: "import" },
|
|
132
|
-
{ label: "Upgrade Version", screen: "upgrade" },
|
|
133
|
-
{ label: "Settings", screen: "settings" },
|
|
134
|
-
{ label: "Help", screen: "help" }
|
|
135
|
-
];
|
|
136
|
-
function upgradeItemDisplay(upgradeCheck) {
|
|
137
|
-
if (upgradeCheck?.status === "update-available") {
|
|
138
|
-
return { label: `Upgrade Version (v${upgradeCheck.latest} available)`, color: PALETTE.warning };
|
|
145
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/types/agent-name.js
|
|
146
|
+
var init_agent_name = __esm({
|
|
147
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/types/agent-name.js"() {
|
|
148
|
+
"use strict";
|
|
139
149
|
}
|
|
140
|
-
|
|
141
|
-
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/types/agent-run.js
|
|
153
|
+
var init_agent_run = __esm({
|
|
154
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/types/agent-run.js"() {
|
|
155
|
+
"use strict";
|
|
142
156
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
const terminalWidth = useTerminalWidth();
|
|
150
|
-
const tooNarrow = terminalWidth < MIN_TERMINAL_WIDTH;
|
|
151
|
-
const upgradeDisabled = upgradeCheck?.status === "up-to-date";
|
|
152
|
-
useEffect2(() => {
|
|
153
|
-
checkForUpgrade().then(setUpgradeCheck).catch(() => setUpgradeCheck({ status: "error" }));
|
|
154
|
-
}, []);
|
|
155
|
-
useInput((input, key) => {
|
|
156
|
-
if (input === "q" || key.escape) {
|
|
157
|
-
exit();
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
if (tooNarrow) return;
|
|
161
|
-
if (key.upArrow) {
|
|
162
|
-
setFocusIdx((i) => (i - 1 + START_ITEMS.length) % START_ITEMS.length);
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
if (key.downArrow) {
|
|
166
|
-
setFocusIdx((i) => (i + 1) % START_ITEMS.length);
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
if (key.return) {
|
|
170
|
-
const item = START_ITEMS[focusIdx];
|
|
171
|
-
if (item.screen === "upgrade" && upgradeDisabled) return;
|
|
172
|
-
onNavigate(item.screen);
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
if (tooNarrow) {
|
|
177
|
-
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
|
|
178
|
-
/* @__PURE__ */ jsx2(Text2, { bold: true, color: PALETTE.warning, children: "Terminal too small" }),
|
|
179
|
-
/* @__PURE__ */ jsx2(Text2, { color: PALETTE.muted, children: "Press q to quit, make your terminal full screen, then run experiences import again." })
|
|
180
|
-
] });
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/types/invoker.js
|
|
160
|
+
var init_invoker = __esm({
|
|
161
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/types/invoker.js"() {
|
|
162
|
+
"use strict";
|
|
181
163
|
}
|
|
182
|
-
|
|
183
|
-
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", alignItems: "center", children: [
|
|
184
|
-
/* @__PURE__ */ jsx2(Text2, { bold: true, children: HEADING }),
|
|
185
|
-
/* @__PURE__ */ jsx2(Text2, { children: brandBar(HEADING.length).map((segment, i) => /* @__PURE__ */ jsx2(Text2, { color: segment.color, children: segment.text }, i)) }),
|
|
186
|
-
/* @__PURE__ */ jsx2(Text2, { color: PALETTE.muted, children: SUBTITLE }),
|
|
187
|
-
/* @__PURE__ */ jsxs(Text2, { color: PALETTE.muted, children: [
|
|
188
|
-
"v",
|
|
189
|
-
VERSION
|
|
190
|
-
] })
|
|
191
|
-
] }),
|
|
192
|
-
/* @__PURE__ */ jsx2(Box, { marginTop: 1, justifyContent: "center", children: /* @__PURE__ */ jsx2(Box, { flexDirection: "column", children: START_ITEMS.map((item, i) => {
|
|
193
|
-
const focused = i === focusIdx;
|
|
194
|
-
const isUpgradeItem = item.screen === "upgrade";
|
|
195
|
-
const display = isUpgradeItem ? upgradeItemDisplay(upgradeCheck) : { label: item.label };
|
|
196
|
-
const dimmed = isUpgradeItem && upgradeDisabled;
|
|
197
|
-
return /* @__PURE__ */ jsxs(
|
|
198
|
-
Text2,
|
|
199
|
-
{
|
|
200
|
-
bold: focused && !dimmed,
|
|
201
|
-
color: dimmed ? PALETTE.muted : focused ? PALETTE.accent : display.color,
|
|
202
|
-
children: [
|
|
203
|
-
focused ? `${FOCUS_MARKER} ` : " ",
|
|
204
|
-
display.label
|
|
205
|
-
]
|
|
206
|
-
},
|
|
207
|
-
item.label
|
|
208
|
-
);
|
|
209
|
-
}) }) }),
|
|
210
|
-
/* @__PURE__ */ jsx2(Box, { marginTop: 1, justifyContent: "center", children: /* @__PURE__ */ jsx2(
|
|
211
|
-
ControlHints,
|
|
212
|
-
{
|
|
213
|
-
hints: [
|
|
214
|
-
{ keys: "\u2191/\u2193", label: "move" },
|
|
215
|
-
{ keys: "\u23CE", label: "select" },
|
|
216
|
-
{ keys: "q", label: "quit" }
|
|
217
|
-
]
|
|
218
|
-
}
|
|
219
|
-
) })
|
|
220
|
-
] });
|
|
221
|
-
}
|
|
164
|
+
});
|
|
222
165
|
|
|
223
|
-
// packages/experience-design-system-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
onDone();
|
|
230
|
-
}
|
|
231
|
-
});
|
|
232
|
-
const isSuccess = exitCode === 0;
|
|
233
|
-
return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
|
|
234
|
-
/* @__PURE__ */ jsx3(Text3, { children: " " }),
|
|
235
|
-
isSuccess ? /* @__PURE__ */ jsx3(Text3, { color: PALETTE.success, children: "\u2713 Import complete" }) : /* @__PURE__ */ jsxs2(Text3, { color: PALETTE.error, children: [
|
|
236
|
-
"\u2717 Import failed: process exited with code ",
|
|
237
|
-
exitCode ?? "unknown"
|
|
238
|
-
] }),
|
|
239
|
-
/* @__PURE__ */ jsx3(Text3, { children: " " }),
|
|
240
|
-
/* @__PURE__ */ jsx3(Text3, { children: "[Enter] Back to Start" })
|
|
241
|
-
] });
|
|
242
|
-
}
|
|
166
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/types/prompts.js
|
|
167
|
+
var init_prompts = __esm({
|
|
168
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/types/prompts.js"() {
|
|
169
|
+
"use strict";
|
|
170
|
+
}
|
|
171
|
+
});
|
|
243
172
|
|
|
244
|
-
// packages/experience-design-system-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
173
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/types/tool-calls.js
|
|
174
|
+
var init_tool_calls = __esm({
|
|
175
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/types/tool-calls.js"() {
|
|
176
|
+
"use strict";
|
|
177
|
+
}
|
|
178
|
+
});
|
|
248
179
|
|
|
249
|
-
// packages/experience-design-system-
|
|
180
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/types/index.js
|
|
181
|
+
var init_types = __esm({
|
|
182
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/types/index.js"() {
|
|
183
|
+
"use strict";
|
|
184
|
+
init_agent_name();
|
|
185
|
+
init_agent_run();
|
|
186
|
+
init_invoker();
|
|
187
|
+
init_prompts();
|
|
188
|
+
init_tool_calls();
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/constants/models.js
|
|
193
|
+
var init_models = __esm({
|
|
194
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/constants/models.js"() {
|
|
195
|
+
"use strict";
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/resolution/is-agent-name.js
|
|
200
|
+
var init_is_agent_name = __esm({
|
|
201
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/resolution/is-agent-name.js"() {
|
|
202
|
+
"use strict";
|
|
203
|
+
init_agent_name();
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/constants/binaries.js
|
|
208
|
+
var init_binaries = __esm({
|
|
209
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/constants/binaries.js"() {
|
|
210
|
+
"use strict";
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/resolution/resolve-binary.js
|
|
215
|
+
var init_resolve_binary = __esm({
|
|
216
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/resolution/resolve-binary.js"() {
|
|
217
|
+
"use strict";
|
|
218
|
+
init_binaries();
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/constants/bedrock.js
|
|
223
|
+
var init_bedrock = __esm({
|
|
224
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/constants/bedrock.js"() {
|
|
225
|
+
"use strict";
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/bedrock/with-bedrock-provider-prefix.js
|
|
230
|
+
var init_with_bedrock_provider_prefix = __esm({
|
|
231
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/bedrock/with-bedrock-provider-prefix.js"() {
|
|
232
|
+
"use strict";
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/resolution/resolve-agent-model.js
|
|
237
|
+
var init_resolve_agent_model = __esm({
|
|
238
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/resolution/resolve-agent-model.js"() {
|
|
239
|
+
"use strict";
|
|
240
|
+
init_bedrock();
|
|
241
|
+
init_models();
|
|
242
|
+
init_with_bedrock_provider_prefix();
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/bedrock/agent-supports-bedrock.js
|
|
247
|
+
var init_agent_supports_bedrock = __esm({
|
|
248
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/bedrock/agent-supports-bedrock.js"() {
|
|
249
|
+
"use strict";
|
|
250
|
+
init_bedrock();
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/build-args/build-claude-args.js
|
|
255
|
+
var init_build_claude_args = __esm({
|
|
256
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/build-args/build-claude-args.js"() {
|
|
257
|
+
"use strict";
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/bedrock/codex-bedrock-config-args.js
|
|
262
|
+
var init_codex_bedrock_config_args = __esm({
|
|
263
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/bedrock/codex-bedrock-config-args.js"() {
|
|
264
|
+
"use strict";
|
|
265
|
+
init_bedrock();
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/build-args/build-codex-args.js
|
|
270
|
+
var init_build_codex_args = __esm({
|
|
271
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/build-args/build-codex-args.js"() {
|
|
272
|
+
"use strict";
|
|
273
|
+
init_codex_bedrock_config_args();
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/build-args/build-copilot-args.js
|
|
278
|
+
var init_build_copilot_args = __esm({
|
|
279
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/build-args/build-copilot-args.js"() {
|
|
280
|
+
"use strict";
|
|
281
|
+
init_resolve_agent_model();
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/build-args/build-cursor-args.js
|
|
286
|
+
var init_build_cursor_args = __esm({
|
|
287
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/build-args/build-cursor-args.js"() {
|
|
288
|
+
"use strict";
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/build-args/build-opencode-args.js
|
|
293
|
+
var init_build_opencode_args = __esm({
|
|
294
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/build-args/build-opencode-args.js"() {
|
|
295
|
+
"use strict";
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/build-agent-args.js
|
|
300
|
+
var init_build_agent_args = __esm({
|
|
301
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/build-agent-args.js"() {
|
|
302
|
+
"use strict";
|
|
303
|
+
init_build_claude_args();
|
|
304
|
+
init_build_codex_args();
|
|
305
|
+
init_build_copilot_args();
|
|
306
|
+
init_build_cursor_args();
|
|
307
|
+
init_build_opencode_args();
|
|
308
|
+
init_resolve_agent_model();
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/metadata/describe-agent-failure.js
|
|
313
|
+
var init_describe_agent_failure = __esm({
|
|
314
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/metadata/describe-agent-failure.js"() {
|
|
315
|
+
"use strict";
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/metadata/extract-sentinel-output.js
|
|
320
|
+
var init_extract_sentinel_output = __esm({
|
|
321
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/metadata/extract-sentinel-output.js"() {
|
|
322
|
+
"use strict";
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/metadata/format-generate-progress-line.js
|
|
327
|
+
var init_format_generate_progress_line = __esm({
|
|
328
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/metadata/format-generate-progress-line.js"() {
|
|
329
|
+
"use strict";
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/resolution/parse-agent-model.js
|
|
334
|
+
var init_parse_agent_model = __esm({
|
|
335
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/resolution/parse-agent-model.js"() {
|
|
336
|
+
"use strict";
|
|
337
|
+
}
|
|
338
|
+
});
|
|
339
|
+
|
|
340
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/resolution/resolve-agent.js
|
|
341
|
+
var init_resolve_agent = __esm({
|
|
342
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/resolution/resolve-agent.js"() {
|
|
343
|
+
"use strict";
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/resolution/resolve-model.js
|
|
348
|
+
var init_resolve_model = __esm({
|
|
349
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/resolution/resolve-model.js"() {
|
|
350
|
+
"use strict";
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/prompt-overrides/looks-like-path.js
|
|
355
|
+
var init_looks_like_path = __esm({
|
|
356
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/prompt-overrides/looks-like-path.js"() {
|
|
357
|
+
"use strict";
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/prompt-overrides/parse-prompt-overrides.js
|
|
362
|
+
var init_parse_prompt_overrides = __esm({
|
|
363
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/prompt-overrides/parse-prompt-overrides.js"() {
|
|
364
|
+
"use strict";
|
|
365
|
+
init_looks_like_path();
|
|
366
|
+
}
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/prompt-overrides/resolve-prompt-override.js
|
|
370
|
+
var init_resolve_prompt_override = __esm({
|
|
371
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/prompt-overrides/resolve-prompt-override.js"() {
|
|
372
|
+
"use strict";
|
|
373
|
+
}
|
|
374
|
+
});
|
|
375
|
+
|
|
376
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/metadata/build-user-agent.js
|
|
377
|
+
var init_build_user_agent = __esm({
|
|
378
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/metadata/build-user-agent.js"() {
|
|
379
|
+
"use strict";
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
|
|
383
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/constants/tool-names.js
|
|
384
|
+
var init_tool_names = __esm({
|
|
385
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/constants/tool-names.js"() {
|
|
386
|
+
"use strict";
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
|
|
390
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/parsers/helpers/find-json-object-end.js
|
|
391
|
+
var init_find_json_object_end = __esm({
|
|
392
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/parsers/helpers/find-json-object-end.js"() {
|
|
393
|
+
"use strict";
|
|
394
|
+
}
|
|
395
|
+
});
|
|
396
|
+
|
|
397
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/parsers/helpers/read-tool-call-objects.js
|
|
398
|
+
var init_read_tool_call_objects = __esm({
|
|
399
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/parsers/helpers/read-tool-call-objects.js"() {
|
|
400
|
+
"use strict";
|
|
401
|
+
init_find_json_object_end();
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
|
|
405
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/parsers/parse-select-tool-calls.js
|
|
406
|
+
var init_parse_select_tool_calls = __esm({
|
|
407
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/parsers/parse-select-tool-calls.js"() {
|
|
408
|
+
"use strict";
|
|
409
|
+
init_tool_names();
|
|
410
|
+
init_read_tool_call_objects();
|
|
411
|
+
}
|
|
412
|
+
});
|
|
413
|
+
|
|
414
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/parsers/parse-tool-calls.js
|
|
415
|
+
var init_parse_tool_calls = __esm({
|
|
416
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/parsers/parse-tool-calls.js"() {
|
|
417
|
+
"use strict";
|
|
418
|
+
init_tool_names();
|
|
419
|
+
init_read_tool_call_objects();
|
|
420
|
+
}
|
|
421
|
+
});
|
|
422
|
+
|
|
423
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/parsers/parse-token-tool-calls.js
|
|
424
|
+
var init_parse_token_tool_calls = __esm({
|
|
425
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/parsers/parse-token-tool-calls.js"() {
|
|
426
|
+
"use strict";
|
|
427
|
+
init_tool_names();
|
|
428
|
+
init_read_tool_call_objects();
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
|
|
432
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/parsers/helpers/is-string-array.js
|
|
433
|
+
var init_is_string_array = __esm({
|
|
434
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/parsers/helpers/is-string-array.js"() {
|
|
435
|
+
"use strict";
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
|
|
439
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/parsers/parse-map-token-prop-tool-calls.js
|
|
440
|
+
var init_parse_map_token_prop_tool_calls = __esm({
|
|
441
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/parsers/parse-map-token-prop-tool-calls.js"() {
|
|
442
|
+
"use strict";
|
|
443
|
+
init_is_string_array();
|
|
444
|
+
init_read_tool_call_objects();
|
|
445
|
+
}
|
|
446
|
+
});
|
|
447
|
+
|
|
448
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/services/run-agent.js
|
|
449
|
+
var init_run_agent = __esm({
|
|
450
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/services/run-agent.js"() {
|
|
451
|
+
"use strict";
|
|
452
|
+
init_bedrock();
|
|
453
|
+
init_build_agent_args();
|
|
454
|
+
init_resolve_binary();
|
|
455
|
+
}
|
|
456
|
+
});
|
|
457
|
+
|
|
458
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/services/check-agent-auth.js
|
|
459
|
+
var init_check_agent_auth = __esm({
|
|
460
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/services/check-agent-auth.js"() {
|
|
461
|
+
"use strict";
|
|
462
|
+
init_resolve_binary();
|
|
463
|
+
}
|
|
464
|
+
});
|
|
465
|
+
|
|
466
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/output-formatter/colors.js
|
|
467
|
+
function detectColorSupport() {
|
|
468
|
+
if (process.env["NO_COLOR"] !== void 0)
|
|
469
|
+
return false;
|
|
470
|
+
if (process.env["FORCE_COLOR"] !== void 0)
|
|
471
|
+
return true;
|
|
472
|
+
return process.stderr.isTTY === true;
|
|
473
|
+
}
|
|
474
|
+
var colorsEnabled, wrap, ansi;
|
|
475
|
+
var init_colors = __esm({
|
|
476
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/output-formatter/colors.js"() {
|
|
477
|
+
"use strict";
|
|
478
|
+
colorsEnabled = detectColorSupport();
|
|
479
|
+
wrap = (code) => (text) => colorsEnabled ? `\x1B[${code}m${text}\x1B[0m` : text;
|
|
480
|
+
ansi = {
|
|
481
|
+
green: wrap(32),
|
|
482
|
+
red: wrap(31),
|
|
483
|
+
cyan: wrap(36),
|
|
484
|
+
yellow: wrap(33),
|
|
485
|
+
dim: wrap(2),
|
|
486
|
+
bold: wrap(1)
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
});
|
|
490
|
+
|
|
491
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/output-formatter/format-tool-call.js
|
|
492
|
+
var init_format_tool_call = __esm({
|
|
493
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/output-formatter/format-tool-call.js"() {
|
|
494
|
+
"use strict";
|
|
495
|
+
init_colors();
|
|
496
|
+
}
|
|
497
|
+
});
|
|
498
|
+
|
|
499
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/output-formatter/output-formatter.js
|
|
500
|
+
var init_output_formatter = __esm({
|
|
501
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/output-formatter/output-formatter.js"() {
|
|
502
|
+
"use strict";
|
|
503
|
+
init_colors();
|
|
504
|
+
init_format_tool_call();
|
|
505
|
+
}
|
|
506
|
+
});
|
|
507
|
+
|
|
508
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/output-formatter/index.js
|
|
509
|
+
var init_output_formatter2 = __esm({
|
|
510
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/output-formatter/index.js"() {
|
|
511
|
+
"use strict";
|
|
512
|
+
init_output_formatter();
|
|
513
|
+
init_colors();
|
|
514
|
+
init_format_tool_call();
|
|
515
|
+
}
|
|
516
|
+
});
|
|
517
|
+
|
|
518
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/services/invoke-agent-with-output.js
|
|
519
|
+
var init_invoke_agent_with_output = __esm({
|
|
520
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/services/invoke-agent-with-output.js"() {
|
|
521
|
+
"use strict";
|
|
522
|
+
init_output_formatter2();
|
|
523
|
+
}
|
|
524
|
+
});
|
|
525
|
+
|
|
526
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/invoker/create-local-cli-agent-invoker.js
|
|
527
|
+
var init_create_local_cli_agent_invoker = __esm({
|
|
528
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/invoker/create-local-cli-agent-invoker.js"() {
|
|
529
|
+
"use strict";
|
|
530
|
+
init_check_agent_auth();
|
|
531
|
+
init_run_agent();
|
|
532
|
+
}
|
|
533
|
+
});
|
|
534
|
+
|
|
535
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/candidate-file.js
|
|
536
|
+
var init_candidate_file = __esm({
|
|
537
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/candidate-file.js"() {
|
|
538
|
+
"use strict";
|
|
539
|
+
}
|
|
540
|
+
});
|
|
541
|
+
|
|
542
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/types/types.js
|
|
543
|
+
import * as z from "zod/mini";
|
|
544
|
+
var CDFPropertySchema, CDFSlotSchema, CDFComponentSchema, CDFTokenSchema;
|
|
545
|
+
var init_types2 = __esm({
|
|
546
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/types/types.js"() {
|
|
547
|
+
"use strict";
|
|
548
|
+
init_vocabularies();
|
|
549
|
+
init_token_types();
|
|
550
|
+
CDFPropertySchema = z.strictObject({
|
|
551
|
+
$type: z.enum(CDF_PROPERTY_TYPES),
|
|
552
|
+
$category: z.enum(CDF_PROPERTY_CATEGORIES),
|
|
553
|
+
$description: z.optional(z.string()),
|
|
554
|
+
$required: z.optional(z.boolean()),
|
|
555
|
+
$default: z.optional(z.any()),
|
|
556
|
+
$values: z.optional(z.array(z.string())),
|
|
557
|
+
"$token.kind": z.optional(z.string()),
|
|
558
|
+
"$token.allowed": z.optional(z.array(z.string()))
|
|
559
|
+
});
|
|
560
|
+
CDFSlotSchema = z.strictObject({
|
|
561
|
+
$description: z.optional(z.string()),
|
|
562
|
+
$allowedComponents: z.optional(z.array(z.string())),
|
|
563
|
+
$required: z.optional(z.boolean())
|
|
564
|
+
});
|
|
565
|
+
CDFComponentSchema = z.strictObject({
|
|
566
|
+
$type: z.literal("component"),
|
|
567
|
+
$description: z.optional(z.string()),
|
|
568
|
+
$properties: z.record(z.string(), CDFPropertySchema),
|
|
569
|
+
$slots: z.optional(z.record(z.string(), CDFSlotSchema))
|
|
570
|
+
});
|
|
571
|
+
CDFTokenSchema = z.strictObject({
|
|
572
|
+
$type: z.enum(DESIGN_TOKEN_TYPES),
|
|
573
|
+
$value: z.unknown(),
|
|
574
|
+
$description: z.optional(z.string())
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
});
|
|
578
|
+
|
|
579
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/types/index.js
|
|
580
|
+
var init_types3 = __esm({
|
|
581
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/types/index.js"() {
|
|
582
|
+
"use strict";
|
|
583
|
+
init_types2();
|
|
584
|
+
}
|
|
585
|
+
});
|
|
586
|
+
|
|
587
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/constants/index.js
|
|
588
|
+
var init_constants = __esm({
|
|
589
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/constants/index.js"() {
|
|
590
|
+
"use strict";
|
|
591
|
+
init_schema();
|
|
592
|
+
init_vocabularies();
|
|
593
|
+
}
|
|
594
|
+
});
|
|
595
|
+
|
|
596
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/helpers/build.js
|
|
597
|
+
var init_build = __esm({
|
|
598
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/helpers/build.js"() {
|
|
599
|
+
"use strict";
|
|
600
|
+
init_schema();
|
|
601
|
+
}
|
|
602
|
+
});
|
|
603
|
+
|
|
604
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/helpers/index.js
|
|
605
|
+
var init_helpers = __esm({
|
|
606
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/helpers/index.js"() {
|
|
607
|
+
"use strict";
|
|
608
|
+
init_build();
|
|
609
|
+
init_validate();
|
|
610
|
+
}
|
|
611
|
+
});
|
|
612
|
+
|
|
613
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/index.js
|
|
614
|
+
var init_cdf = __esm({
|
|
615
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/index.js"() {
|
|
616
|
+
"use strict";
|
|
617
|
+
init_types3();
|
|
618
|
+
init_constants();
|
|
619
|
+
init_helpers();
|
|
620
|
+
}
|
|
621
|
+
});
|
|
622
|
+
|
|
623
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/dtcg/types/types.js
|
|
624
|
+
import * as z2 from "zod/mini";
|
|
625
|
+
var DTCGTokenSchema;
|
|
626
|
+
var init_types4 = __esm({
|
|
627
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/dtcg/types/types.js"() {
|
|
628
|
+
"use strict";
|
|
629
|
+
init_token_types();
|
|
630
|
+
DTCGTokenSchema = z2.strictObject({
|
|
631
|
+
path: z2.string(),
|
|
632
|
+
$type: z2.enum(DESIGN_TOKEN_TYPES),
|
|
633
|
+
$value: z2.unknown(),
|
|
634
|
+
$description: z2.optional(z2.string())
|
|
635
|
+
});
|
|
636
|
+
}
|
|
637
|
+
});
|
|
638
|
+
|
|
639
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/dtcg/types/index.js
|
|
640
|
+
var init_types5 = __esm({
|
|
641
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/dtcg/types/index.js"() {
|
|
642
|
+
"use strict";
|
|
643
|
+
init_types4();
|
|
644
|
+
}
|
|
645
|
+
});
|
|
646
|
+
|
|
647
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/dtcg/constants/index.js
|
|
648
|
+
var init_constants2 = __esm({
|
|
649
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/dtcg/constants/index.js"() {
|
|
650
|
+
"use strict";
|
|
651
|
+
init_token_types();
|
|
652
|
+
}
|
|
653
|
+
});
|
|
654
|
+
|
|
655
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/dtcg/helpers/flatten.js
|
|
656
|
+
var init_flatten = __esm({
|
|
657
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/dtcg/helpers/flatten.js"() {
|
|
658
|
+
"use strict";
|
|
659
|
+
}
|
|
660
|
+
});
|
|
661
|
+
|
|
662
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/dtcg/helpers/validate.js
|
|
663
|
+
var TOKEN_TYPE_SET2;
|
|
664
|
+
var init_validate2 = __esm({
|
|
665
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/dtcg/helpers/validate.js"() {
|
|
666
|
+
"use strict";
|
|
667
|
+
init_token_types();
|
|
668
|
+
init_flatten();
|
|
669
|
+
TOKEN_TYPE_SET2 = new Set(DESIGN_TOKEN_TYPES);
|
|
670
|
+
}
|
|
671
|
+
});
|
|
672
|
+
|
|
673
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/dtcg/helpers/index.js
|
|
674
|
+
var init_helpers2 = __esm({
|
|
675
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/dtcg/helpers/index.js"() {
|
|
676
|
+
"use strict";
|
|
677
|
+
init_flatten();
|
|
678
|
+
init_validate2();
|
|
679
|
+
}
|
|
680
|
+
});
|
|
681
|
+
|
|
682
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/dtcg/index.js
|
|
683
|
+
var init_dtcg = __esm({
|
|
684
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/dtcg/index.js"() {
|
|
685
|
+
"use strict";
|
|
686
|
+
init_types5();
|
|
687
|
+
init_constants2();
|
|
688
|
+
init_helpers2();
|
|
689
|
+
}
|
|
690
|
+
});
|
|
691
|
+
|
|
692
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/sources-api/types/apply.js
|
|
693
|
+
var init_apply = __esm({
|
|
694
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/sources-api/types/apply.js"() {
|
|
695
|
+
"use strict";
|
|
696
|
+
}
|
|
697
|
+
});
|
|
698
|
+
|
|
699
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/sources-api/types/preview.js
|
|
700
|
+
var init_preview = __esm({
|
|
701
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/sources-api/types/preview.js"() {
|
|
702
|
+
"use strict";
|
|
703
|
+
}
|
|
704
|
+
});
|
|
705
|
+
|
|
706
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/sources-api/types/index.js
|
|
707
|
+
var init_types6 = __esm({
|
|
708
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/sources-api/types/index.js"() {
|
|
709
|
+
"use strict";
|
|
710
|
+
init_apply();
|
|
711
|
+
init_preview();
|
|
712
|
+
}
|
|
713
|
+
});
|
|
714
|
+
|
|
715
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/sources-api/index.js
|
|
716
|
+
var init_sources_api = __esm({
|
|
717
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/sources-api/index.js"() {
|
|
718
|
+
"use strict";
|
|
719
|
+
init_types6();
|
|
720
|
+
}
|
|
721
|
+
});
|
|
722
|
+
|
|
723
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/index.js
|
|
724
|
+
var init_shared = __esm({
|
|
725
|
+
"packages/experience-design-system-backend-pipeline/dist/src/steps/shared/index.js"() {
|
|
726
|
+
"use strict";
|
|
727
|
+
init_candidate_file();
|
|
728
|
+
init_cdf();
|
|
729
|
+
init_dtcg();
|
|
730
|
+
init_sources_api();
|
|
731
|
+
}
|
|
732
|
+
});
|
|
733
|
+
|
|
734
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/helpers/filter-design-token-props.js
|
|
735
|
+
var init_filter_design_token_props = __esm({
|
|
736
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/helpers/filter-design-token-props.js"() {
|
|
737
|
+
"use strict";
|
|
738
|
+
}
|
|
739
|
+
});
|
|
740
|
+
|
|
741
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/helpers/format-token-candidates.js
|
|
742
|
+
var init_format_token_candidates = __esm({
|
|
743
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/helpers/format-token-candidates.js"() {
|
|
744
|
+
"use strict";
|
|
745
|
+
}
|
|
746
|
+
});
|
|
747
|
+
|
|
748
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/helpers/infer-fence-lang.js
|
|
749
|
+
var init_infer_fence_lang = __esm({
|
|
750
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/helpers/infer-fence-lang.js"() {
|
|
751
|
+
"use strict";
|
|
752
|
+
}
|
|
753
|
+
});
|
|
754
|
+
|
|
755
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/helpers/build-input-sections.js
|
|
756
|
+
var init_build_input_sections = __esm({
|
|
757
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/helpers/build-input-sections.js"() {
|
|
758
|
+
"use strict";
|
|
759
|
+
init_shared();
|
|
760
|
+
init_filter_design_token_props();
|
|
761
|
+
init_format_token_candidates();
|
|
762
|
+
init_infer_fence_lang();
|
|
763
|
+
}
|
|
764
|
+
});
|
|
765
|
+
|
|
766
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/constants/skill-files.js
|
|
767
|
+
var init_skill_files = __esm({
|
|
768
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/constants/skill-files.js"() {
|
|
769
|
+
"use strict";
|
|
770
|
+
}
|
|
771
|
+
});
|
|
772
|
+
|
|
773
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/resolve-skill-path.js
|
|
774
|
+
var init_resolve_skill_path = __esm({
|
|
775
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/resolve-skill-path.js"() {
|
|
776
|
+
"use strict";
|
|
777
|
+
init_skill_files();
|
|
778
|
+
}
|
|
779
|
+
});
|
|
780
|
+
|
|
781
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/helpers/read-skill-file.js
|
|
782
|
+
var init_read_skill_file = __esm({
|
|
783
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/helpers/read-skill-file.js"() {
|
|
784
|
+
"use strict";
|
|
785
|
+
init_resolve_skill_path();
|
|
786
|
+
}
|
|
787
|
+
});
|
|
788
|
+
|
|
789
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/preambles/build-components-preamble.js
|
|
790
|
+
var init_build_components_preamble = __esm({
|
|
791
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/preambles/build-components-preamble.js"() {
|
|
792
|
+
"use strict";
|
|
793
|
+
}
|
|
794
|
+
});
|
|
795
|
+
|
|
796
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/preambles/build-map-tokens-preamble.js
|
|
797
|
+
var init_build_map_tokens_preamble = __esm({
|
|
798
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/preambles/build-map-tokens-preamble.js"() {
|
|
799
|
+
"use strict";
|
|
800
|
+
}
|
|
801
|
+
});
|
|
802
|
+
|
|
803
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/preambles/build-select-preamble.js
|
|
804
|
+
var init_build_select_preamble = __esm({
|
|
805
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/preambles/build-select-preamble.js"() {
|
|
806
|
+
"use strict";
|
|
807
|
+
}
|
|
808
|
+
});
|
|
809
|
+
|
|
810
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/preambles/build-tokens-preamble.js
|
|
811
|
+
var init_build_tokens_preamble = __esm({
|
|
812
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/preambles/build-tokens-preamble.js"() {
|
|
813
|
+
"use strict";
|
|
814
|
+
}
|
|
815
|
+
});
|
|
816
|
+
|
|
817
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/build-prompt.js
|
|
818
|
+
var init_build_prompt = __esm({
|
|
819
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/build-prompt.js"() {
|
|
820
|
+
"use strict";
|
|
821
|
+
init_build_input_sections();
|
|
822
|
+
init_read_skill_file();
|
|
823
|
+
init_build_components_preamble();
|
|
824
|
+
init_build_map_tokens_preamble();
|
|
825
|
+
init_build_select_preamble();
|
|
826
|
+
init_build_tokens_preamble();
|
|
827
|
+
}
|
|
828
|
+
});
|
|
829
|
+
|
|
830
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/format-custom-prompt-banner.js
|
|
831
|
+
var init_format_custom_prompt_banner = __esm({
|
|
832
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/prompts/format-custom-prompt-banner.js"() {
|
|
833
|
+
"use strict";
|
|
834
|
+
}
|
|
835
|
+
});
|
|
836
|
+
|
|
837
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/index.js
|
|
838
|
+
var init_agents = __esm({
|
|
839
|
+
"packages/experience-design-system-backend-pipeline/dist/src/agents/index.js"() {
|
|
840
|
+
"use strict";
|
|
841
|
+
init_types();
|
|
842
|
+
init_models();
|
|
843
|
+
init_is_agent_name();
|
|
844
|
+
init_resolve_binary();
|
|
845
|
+
init_resolve_agent_model();
|
|
846
|
+
init_agent_supports_bedrock();
|
|
847
|
+
init_build_agent_args();
|
|
848
|
+
init_describe_agent_failure();
|
|
849
|
+
init_extract_sentinel_output();
|
|
850
|
+
init_format_generate_progress_line();
|
|
851
|
+
init_parse_agent_model();
|
|
852
|
+
init_resolve_agent();
|
|
853
|
+
init_resolve_model();
|
|
854
|
+
init_looks_like_path();
|
|
855
|
+
init_parse_prompt_overrides();
|
|
856
|
+
init_resolve_prompt_override();
|
|
857
|
+
init_build_user_agent();
|
|
858
|
+
init_parse_select_tool_calls();
|
|
859
|
+
init_parse_tool_calls();
|
|
860
|
+
init_parse_token_tool_calls();
|
|
861
|
+
init_parse_map_token_prop_tool_calls();
|
|
862
|
+
init_parse_map_token_prop_tool_calls();
|
|
863
|
+
init_run_agent();
|
|
864
|
+
init_check_agent_auth();
|
|
865
|
+
init_invoke_agent_with_output();
|
|
866
|
+
init_output_formatter2();
|
|
867
|
+
init_create_local_cli_agent_invoker();
|
|
868
|
+
init_build_prompt();
|
|
869
|
+
init_resolve_skill_path();
|
|
870
|
+
init_format_custom_prompt_banner();
|
|
871
|
+
}
|
|
872
|
+
});
|
|
873
|
+
|
|
874
|
+
// packages/experience-design-system-backend-pipeline/dist/src/persistence/src/session/helpers/cache-keys.js
|
|
875
|
+
var init_cache_keys = __esm({
|
|
876
|
+
"packages/experience-design-system-backend-pipeline/dist/src/persistence/src/session/helpers/cache-keys.js"() {
|
|
877
|
+
"use strict";
|
|
878
|
+
init_agents();
|
|
879
|
+
}
|
|
880
|
+
});
|
|
881
|
+
|
|
882
|
+
// packages/experience-design-system-cli/app.tsx
|
|
883
|
+
import { useEffect as useEffect9, useState as useState13 } from "react";
|
|
884
|
+
|
|
885
|
+
// packages/experience-design-system-cli/src/tui/home/home.tsx
|
|
886
|
+
import { useEffect as useEffect2, useState as useState2 } from "react";
|
|
887
|
+
import { Box, Text as Text2, useApp, useInput } from "ink";
|
|
888
|
+
|
|
889
|
+
// packages/experience-design-system-cli/src/tui/home/home.theme.ts
|
|
890
|
+
var BRAND = {
|
|
891
|
+
blue: "#1773EB",
|
|
892
|
+
green: "#00C459",
|
|
893
|
+
orange: "#E44F20",
|
|
894
|
+
yellow: "#FFDA00",
|
|
895
|
+
white: "#FFFFFF",
|
|
896
|
+
slate: "#8B8D91",
|
|
897
|
+
steel: "#C4D1DE"
|
|
898
|
+
};
|
|
899
|
+
var PALETTE = {
|
|
900
|
+
accent: BRAND.blue,
|
|
901
|
+
success: BRAND.green,
|
|
902
|
+
error: BRAND.orange,
|
|
903
|
+
warning: BRAND.yellow,
|
|
904
|
+
muted: BRAND.slate,
|
|
905
|
+
border: BRAND.steel
|
|
906
|
+
};
|
|
907
|
+
var BRAND_RAMP = [BRAND.blue, BRAND.orange, BRAND.yellow];
|
|
908
|
+
var BAR_CELL = "\u2501";
|
|
909
|
+
function brandBar(width, ramp = BRAND_RAMP) {
|
|
910
|
+
if (width <= 0 || ramp.length === 0) return [];
|
|
911
|
+
const base = Math.floor(width / ramp.length);
|
|
912
|
+
const remainder = width % ramp.length;
|
|
913
|
+
return ramp.map((color, i) => ({
|
|
914
|
+
text: BAR_CELL.repeat(base + (i < remainder ? 1 : 0)),
|
|
915
|
+
color
|
|
916
|
+
})).filter((segment) => segment.text.length > 0);
|
|
917
|
+
}
|
|
918
|
+
var FOCUS_MARKER = "\u276F";
|
|
919
|
+
|
|
920
|
+
// packages/experience-design-system-cli/src/tui/upgrade/version.ts
|
|
921
|
+
import { readFileSync as readFileSync2 } from "node:fs";
|
|
922
|
+
import { join as join2 } from "node:path";
|
|
923
|
+
import semver from "semver";
|
|
924
|
+
|
|
925
|
+
// packages/experience-design-system-cli/src/tui/package-root.ts
|
|
926
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
927
|
+
import { dirname, join } from "node:path";
|
|
928
|
+
import { fileURLToPath } from "node:url";
|
|
929
|
+
function findPackageRoot(startUrl, packageName) {
|
|
930
|
+
let dir = dirname(fileURLToPath(startUrl));
|
|
931
|
+
let found;
|
|
932
|
+
while (true) {
|
|
933
|
+
const manifestPath = join(dir, "package.json");
|
|
934
|
+
if (existsSync(manifestPath)) {
|
|
935
|
+
const pkg = JSON.parse(readFileSync(manifestPath, "utf8"));
|
|
936
|
+
if (pkg.name === packageName) found = dir;
|
|
937
|
+
}
|
|
938
|
+
const parent = dirname(dir);
|
|
939
|
+
if (parent === dir) return found ?? dir;
|
|
940
|
+
dir = parent;
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
// packages/experience-design-system-cli/src/tui/upgrade/version.ts
|
|
945
|
+
var PACKAGE_NAME = "@contentful/experience-design-system-cli";
|
|
946
|
+
var TAGS_URL = "https://api.github.com/repos/contentful/experience-design-system-sdk-public/tags?per_page=10";
|
|
947
|
+
function readPackageVersion() {
|
|
948
|
+
const root = findPackageRoot(import.meta.url, PACKAGE_NAME);
|
|
949
|
+
const pkg = JSON.parse(readFileSync2(join2(root, "package.json"), "utf8"));
|
|
950
|
+
return pkg.version ?? "unknown";
|
|
951
|
+
}
|
|
952
|
+
function parseVersionTag(tag) {
|
|
953
|
+
const match = /^v(\d+\.\d+\.\d+)$/.exec(tag);
|
|
954
|
+
return match ? match[1] : void 0;
|
|
955
|
+
}
|
|
956
|
+
async function checkForUpgrade() {
|
|
957
|
+
const current = readPackageVersion();
|
|
958
|
+
try {
|
|
959
|
+
const response = await fetch(TAGS_URL);
|
|
960
|
+
if (!response.ok) return { status: "error" };
|
|
961
|
+
const tags = await response.json();
|
|
962
|
+
const versions = tags.map((tag) => tag.name ? parseVersionTag(tag.name) : void 0).filter((v) => v !== void 0);
|
|
963
|
+
if (versions.length === 0) return { status: "error" };
|
|
964
|
+
const latest = versions.reduce((best, v) => semver.gt(v, best) ? v : best);
|
|
965
|
+
if (!semver.valid(current)) return { status: "error" };
|
|
966
|
+
if (semver.gt(latest, current)) {
|
|
967
|
+
return { status: "update-available", current, latest };
|
|
968
|
+
}
|
|
969
|
+
return { status: "up-to-date", current };
|
|
970
|
+
} catch {
|
|
971
|
+
return { status: "error" };
|
|
972
|
+
}
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
// packages/experience-design-system-cli/src/tui/use-terminal-width.ts
|
|
976
|
+
import { useEffect, useState } from "react";
|
|
977
|
+
import { useStdout } from "ink";
|
|
978
|
+
var FALLBACK_COLUMNS = 80;
|
|
979
|
+
function readColumns(stdout) {
|
|
980
|
+
const columns = stdout?.columns ?? 0;
|
|
981
|
+
return columns > 0 ? columns : FALLBACK_COLUMNS;
|
|
982
|
+
}
|
|
983
|
+
function useTerminalWidth() {
|
|
984
|
+
const { stdout } = useStdout();
|
|
985
|
+
const [columns, setColumns] = useState(() => readColumns(stdout));
|
|
986
|
+
useEffect(() => {
|
|
987
|
+
if (!stdout) return;
|
|
988
|
+
const onResize = () => setColumns(readColumns(stdout));
|
|
989
|
+
onResize();
|
|
990
|
+
stdout.on("resize", onResize);
|
|
991
|
+
return () => {
|
|
992
|
+
stdout.off("resize", onResize);
|
|
993
|
+
};
|
|
994
|
+
}, [stdout]);
|
|
995
|
+
return columns;
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
// packages/experience-design-system-cli/src/tui/control-hints.tsx
|
|
999
|
+
import { Text } from "ink";
|
|
1000
|
+
import { jsx } from "react/jsx-runtime";
|
|
1001
|
+
function ControlHints({ hints }) {
|
|
1002
|
+
return /* @__PURE__ */ jsx(Text, { children: hints.map((hint) => `[${hint.keys}] ${hint.label}`).join(" \xB7 ") });
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
// packages/experience-design-system-cli/src/tui/home/home.tsx
|
|
1006
|
+
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
1007
|
+
var VERSION = readPackageVersion();
|
|
1008
|
+
var HEADING = "Contentful Experiences";
|
|
1009
|
+
var SUBTITLE = "Let's import your design system into Contentful";
|
|
1010
|
+
var MIN_TERMINAL_WIDTH = 164;
|
|
1011
|
+
var START_ITEMS = [
|
|
1012
|
+
{ label: "Import", screen: "import" },
|
|
1013
|
+
{ label: "Upgrade Version", screen: "upgrade" },
|
|
1014
|
+
{ label: "Settings", screen: "settings" },
|
|
1015
|
+
{ label: "Help", screen: "help" }
|
|
1016
|
+
];
|
|
1017
|
+
function upgradeItemDisplay(upgradeCheck) {
|
|
1018
|
+
if (upgradeCheck?.status === "update-available") {
|
|
1019
|
+
return { label: `Upgrade Version (v${upgradeCheck.latest} available)`, color: PALETTE.warning };
|
|
1020
|
+
}
|
|
1021
|
+
if (upgradeCheck?.status === "up-to-date") {
|
|
1022
|
+
return { label: "Upgrade Version (up to date)", color: PALETTE.muted };
|
|
1023
|
+
}
|
|
1024
|
+
return { label: "Upgrade Version" };
|
|
1025
|
+
}
|
|
1026
|
+
function HomeScreen({ onNavigate }) {
|
|
1027
|
+
const [focusIdx, setFocusIdx] = useState2(0);
|
|
1028
|
+
const [upgradeCheck, setUpgradeCheck] = useState2();
|
|
1029
|
+
const { exit } = useApp();
|
|
1030
|
+
const terminalWidth = useTerminalWidth();
|
|
1031
|
+
const tooNarrow = terminalWidth < MIN_TERMINAL_WIDTH;
|
|
1032
|
+
const upgradeDisabled = upgradeCheck?.status === "up-to-date";
|
|
1033
|
+
useEffect2(() => {
|
|
1034
|
+
checkForUpgrade().then(setUpgradeCheck).catch(() => setUpgradeCheck({ status: "error" }));
|
|
1035
|
+
}, []);
|
|
1036
|
+
useInput((input, key) => {
|
|
1037
|
+
if (input === "q" || key.escape) {
|
|
1038
|
+
exit();
|
|
1039
|
+
return;
|
|
1040
|
+
}
|
|
1041
|
+
if (tooNarrow) return;
|
|
1042
|
+
if (key.upArrow) {
|
|
1043
|
+
setFocusIdx((i) => (i - 1 + START_ITEMS.length) % START_ITEMS.length);
|
|
1044
|
+
return;
|
|
1045
|
+
}
|
|
1046
|
+
if (key.downArrow) {
|
|
1047
|
+
setFocusIdx((i) => (i + 1) % START_ITEMS.length);
|
|
1048
|
+
return;
|
|
1049
|
+
}
|
|
1050
|
+
if (key.return) {
|
|
1051
|
+
const item = START_ITEMS[focusIdx];
|
|
1052
|
+
if (item.screen === "upgrade" && upgradeDisabled) return;
|
|
1053
|
+
onNavigate(item.screen);
|
|
1054
|
+
return;
|
|
1055
|
+
}
|
|
1056
|
+
});
|
|
1057
|
+
if (tooNarrow) {
|
|
1058
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
|
|
1059
|
+
/* @__PURE__ */ jsx2(Text2, { bold: true, color: PALETTE.warning, children: "Terminal too small" }),
|
|
1060
|
+
/* @__PURE__ */ jsx2(Text2, { color: PALETTE.muted, children: "Press q to quit, make your terminal full screen, then run experiences import again." })
|
|
1061
|
+
] });
|
|
1062
|
+
}
|
|
1063
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
|
|
1064
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", alignItems: "center", children: [
|
|
1065
|
+
/* @__PURE__ */ jsx2(Text2, { bold: true, children: HEADING }),
|
|
1066
|
+
/* @__PURE__ */ jsx2(Text2, { children: brandBar(HEADING.length).map((segment, i) => /* @__PURE__ */ jsx2(Text2, { color: segment.color, children: segment.text }, i)) }),
|
|
1067
|
+
/* @__PURE__ */ jsx2(Text2, { color: PALETTE.muted, children: SUBTITLE }),
|
|
1068
|
+
/* @__PURE__ */ jsxs(Text2, { color: PALETTE.muted, children: [
|
|
1069
|
+
"v",
|
|
1070
|
+
VERSION
|
|
1071
|
+
] })
|
|
1072
|
+
] }),
|
|
1073
|
+
/* @__PURE__ */ jsx2(Box, { marginTop: 1, justifyContent: "center", children: /* @__PURE__ */ jsx2(Box, { flexDirection: "column", children: START_ITEMS.map((item, i) => {
|
|
1074
|
+
const focused = i === focusIdx;
|
|
1075
|
+
const isUpgradeItem = item.screen === "upgrade";
|
|
1076
|
+
const display = isUpgradeItem ? upgradeItemDisplay(upgradeCheck) : { label: item.label };
|
|
1077
|
+
const dimmed = isUpgradeItem && upgradeDisabled;
|
|
1078
|
+
return /* @__PURE__ */ jsxs(
|
|
1079
|
+
Text2,
|
|
1080
|
+
{
|
|
1081
|
+
bold: focused && !dimmed,
|
|
1082
|
+
color: dimmed ? PALETTE.muted : focused ? PALETTE.accent : display.color,
|
|
1083
|
+
children: [
|
|
1084
|
+
focused ? `${FOCUS_MARKER} ` : " ",
|
|
1085
|
+
display.label
|
|
1086
|
+
]
|
|
1087
|
+
},
|
|
1088
|
+
item.label
|
|
1089
|
+
);
|
|
1090
|
+
}) }) }),
|
|
1091
|
+
/* @__PURE__ */ jsx2(Box, { marginTop: 1, justifyContent: "center", children: /* @__PURE__ */ jsx2(
|
|
1092
|
+
ControlHints,
|
|
1093
|
+
{
|
|
1094
|
+
hints: [
|
|
1095
|
+
{ keys: "\u2191/\u2193", label: "move" },
|
|
1096
|
+
{ keys: "\u23CE", label: "select" },
|
|
1097
|
+
{ keys: "q", label: "quit" }
|
|
1098
|
+
]
|
|
1099
|
+
}
|
|
1100
|
+
) })
|
|
1101
|
+
] });
|
|
1102
|
+
}
|
|
1103
|
+
|
|
1104
|
+
// packages/experience-design-system-cli/src/tui/import/PageContainer.tsx
|
|
1105
|
+
import { Box as Box2, Text as Text3, useInput as useInput2 } from "ink";
|
|
1106
|
+
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
1107
|
+
function ImportScreen({ exitCode, onDone }) {
|
|
1108
|
+
useInput2((input, key) => {
|
|
1109
|
+
if (key.return || key.escape || input === "q") {
|
|
1110
|
+
onDone();
|
|
1111
|
+
}
|
|
1112
|
+
});
|
|
1113
|
+
const isSuccess = exitCode === 0;
|
|
1114
|
+
return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
|
|
1115
|
+
/* @__PURE__ */ jsx3(Text3, { children: " " }),
|
|
1116
|
+
isSuccess ? /* @__PURE__ */ jsx3(Text3, { color: PALETTE.success, children: "\u2713 Import complete" }) : /* @__PURE__ */ jsxs2(Text3, { color: PALETTE.error, children: [
|
|
1117
|
+
"\u2717 Import failed: process exited with code ",
|
|
1118
|
+
exitCode ?? "unknown"
|
|
1119
|
+
] }),
|
|
1120
|
+
/* @__PURE__ */ jsx3(Text3, { children: " " }),
|
|
1121
|
+
/* @__PURE__ */ jsx3(Text3, { children: "[Enter] Back to Start" })
|
|
1122
|
+
] });
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
// packages/experience-design-system-cli/src/tui/import/steps/01-welcome/screen.tsx
|
|
1126
|
+
import { useState as useState3 } from "react";
|
|
1127
|
+
import { Box as Box3, Text as Text4 } from "ink";
|
|
1128
|
+
import TextInput from "ink-text-input";
|
|
1129
|
+
|
|
1130
|
+
// packages/experience-design-system-cli/src/tui/import/steps/01-welcome/controls.ts
|
|
250
1131
|
import { useInput as useInput3 } from "ink";
|
|
251
1132
|
|
|
252
|
-
// packages/experience-design-system-cli/src/tui/import/steps/01-welcome/logic.ts
|
|
253
|
-
function shouldQuit(key) {
|
|
254
|
-
return key.escape;
|
|
1133
|
+
// packages/experience-design-system-cli/src/tui/import/steps/01-welcome/logic.ts
|
|
1134
|
+
function shouldQuit(key) {
|
|
1135
|
+
return key.escape;
|
|
1136
|
+
}
|
|
1137
|
+
function toProjectPath(value) {
|
|
1138
|
+
const projectPath = value.trim();
|
|
1139
|
+
return projectPath === "" ? null : projectPath;
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
// packages/experience-design-system-cli/src/tui/import/steps/01-welcome/controls.ts
|
|
1143
|
+
var WELCOME_CONTROLS = [
|
|
1144
|
+
{ keys: "Enter", label: "Continue" },
|
|
1145
|
+
{ keys: "Esc", label: "Back to menu" }
|
|
1146
|
+
];
|
|
1147
|
+
function useWelcomeControls(onQuit) {
|
|
1148
|
+
useInput3((_input, key) => {
|
|
1149
|
+
if (shouldQuit(key)) onQuit();
|
|
1150
|
+
});
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
// packages/experience-design-system-cli/src/tui/import/steps/01-welcome/screen.tsx
|
|
1154
|
+
import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
1155
|
+
var RULE = "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500";
|
|
1156
|
+
var OVERVIEW = [
|
|
1157
|
+
{ label: "Step 1", description: "Extract components from your codebase" },
|
|
1158
|
+
{ label: "Step 2", description: "Review what was extracted" },
|
|
1159
|
+
{ label: "Step 3", description: "Generate CDF definitions with Claude" },
|
|
1160
|
+
{ label: "Step 4", description: "Review generated definitions" },
|
|
1161
|
+
{ label: "Step 5", description: "Push to Contentful" }
|
|
1162
|
+
];
|
|
1163
|
+
function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
|
|
1164
|
+
const [projectPath, setProjectPath] = useState3(initialPath);
|
|
1165
|
+
useWelcomeControls(onQuit);
|
|
1166
|
+
const submit = (value) => {
|
|
1167
|
+
const path = toProjectPath(value);
|
|
1168
|
+
if (path) onContinue(path);
|
|
1169
|
+
};
|
|
1170
|
+
return /* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
|
|
1171
|
+
/* @__PURE__ */ jsx4(Text4, { bold: true, color: PALETTE.success, children: "\u{1F44B} Hey! Let's import your design system into Contentful." }),
|
|
1172
|
+
/* @__PURE__ */ jsx4(Text4, { color: PALETTE.muted, children: "I'll walk you through 5 steps to get your components into Contentful ExO." }),
|
|
1173
|
+
/* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", children: [
|
|
1174
|
+
/* @__PURE__ */ jsx4(Text4, { dimColor: true, children: RULE }),
|
|
1175
|
+
OVERVIEW.map((item) => /* @__PURE__ */ jsxs3(Box3, { gap: 1, children: [
|
|
1176
|
+
/* @__PURE__ */ jsx4(Text4, { bold: true, children: item.label }),
|
|
1177
|
+
/* @__PURE__ */ jsx4(Text4, { color: PALETTE.muted, children: item.description })
|
|
1178
|
+
] }, item.label)),
|
|
1179
|
+
/* @__PURE__ */ jsx4(Text4, { dimColor: true, children: RULE })
|
|
1180
|
+
] }),
|
|
1181
|
+
/* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", gap: 1, children: [
|
|
1182
|
+
/* @__PURE__ */ jsx4(Text4, { children: "Where is your component library?" }),
|
|
1183
|
+
/* @__PURE__ */ jsxs3(Box3, { gap: 1, children: [
|
|
1184
|
+
/* @__PURE__ */ jsx4(Text4, { color: PALETTE.accent, children: "?" }),
|
|
1185
|
+
/* @__PURE__ */ jsx4(Text4, { children: "Project path:" }),
|
|
1186
|
+
/* @__PURE__ */ jsx4(TextInput, { value: projectPath, onChange: setProjectPath, onSubmit: submit })
|
|
1187
|
+
] })
|
|
1188
|
+
] }),
|
|
1189
|
+
/* @__PURE__ */ jsx4(Box3, { gap: 3, children: WELCOME_CONTROLS.map((control) => /* @__PURE__ */ jsxs3(Text4, { children: [
|
|
1190
|
+
"[",
|
|
1191
|
+
control.keys,
|
|
1192
|
+
"] ",
|
|
1193
|
+
control.label
|
|
1194
|
+
] }, control.keys)) })
|
|
1195
|
+
] });
|
|
1196
|
+
}
|
|
1197
|
+
|
|
1198
|
+
// packages/experience-design-system-cli/src/tui/import/steps/02-token-input/screen.tsx
|
|
1199
|
+
import { useState as useState4 } from "react";
|
|
1200
|
+
import { Box as Box4, Text as Text5 } from "ink";
|
|
1201
|
+
import TextInput2 from "ink-text-input";
|
|
1202
|
+
|
|
1203
|
+
// packages/experience-design-system-cli/src/tui/import/steps/02-token-input/controls.ts
|
|
1204
|
+
import { useInput as useInput4 } from "ink";
|
|
1205
|
+
|
|
1206
|
+
// packages/experience-design-system-cli/src/tui/import/steps/02-token-input/logic.ts
|
|
1207
|
+
function shouldGoBack(key) {
|
|
1208
|
+
return key.escape;
|
|
1209
|
+
}
|
|
1210
|
+
function toTokenPath(value) {
|
|
1211
|
+
const tokenPath = value.trim();
|
|
1212
|
+
return tokenPath === "" ? null : tokenPath;
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
// packages/experience-design-system-cli/src/tui/import/steps/02-token-input/controls.ts
|
|
1216
|
+
var TOKEN_INPUT_CONTROLS = [
|
|
1217
|
+
{ keys: "Enter", label: "Continue" },
|
|
1218
|
+
{ keys: "Esc", label: "Back" }
|
|
1219
|
+
];
|
|
1220
|
+
function useTokenInputControls(onBack) {
|
|
1221
|
+
useInput4((_input, key) => {
|
|
1222
|
+
if (shouldGoBack(key)) onBack();
|
|
1223
|
+
});
|
|
1224
|
+
}
|
|
1225
|
+
|
|
1226
|
+
// packages/experience-design-system-cli/src/tui/import/steps/02-token-input/validate-path.ts
|
|
1227
|
+
import { statSync } from "node:fs";
|
|
1228
|
+
|
|
1229
|
+
// packages/experience-design-system-cli/src/tui/import/resolve-user-path.ts
|
|
1230
|
+
import { homedir } from "node:os";
|
|
1231
|
+
import { resolve } from "node:path";
|
|
1232
|
+
function stripQuotes(value) {
|
|
1233
|
+
const quoted = value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'");
|
|
1234
|
+
return value.length >= 2 && quoted ? value.slice(1, -1) : value;
|
|
1235
|
+
}
|
|
1236
|
+
function expandHome(value) {
|
|
1237
|
+
return value === "~" || value.startsWith("~/") || value.startsWith("~\\") ? homedir() + value.slice(1) : value;
|
|
1238
|
+
}
|
|
1239
|
+
function resolveUserPath(raw) {
|
|
1240
|
+
return resolve(expandHome(stripQuotes(raw.trim())));
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1243
|
+
// packages/experience-design-system-cli/src/tui/import/steps/02-token-input/validate-path.ts
|
|
1244
|
+
function validateTokenPath(rawPath) {
|
|
1245
|
+
const path = resolveUserPath(rawPath);
|
|
1246
|
+
let stats;
|
|
1247
|
+
try {
|
|
1248
|
+
stats = statSync(path);
|
|
1249
|
+
} catch {
|
|
1250
|
+
return { ok: false, error: `Path not found: ${path}`, resolvedPath: path };
|
|
1251
|
+
}
|
|
1252
|
+
if (stats.isDirectory()) {
|
|
1253
|
+
return {
|
|
1254
|
+
ok: false,
|
|
1255
|
+
error: "That's a directory \u2014 provide a path to a token file (e.g. tokens.json), not a folder.",
|
|
1256
|
+
resolvedPath: path
|
|
1257
|
+
};
|
|
1258
|
+
}
|
|
1259
|
+
if (!stats.isFile()) {
|
|
1260
|
+
return { ok: false, error: `Not a regular file: ${path}`, resolvedPath: path };
|
|
1261
|
+
}
|
|
1262
|
+
return { ok: true, path };
|
|
1263
|
+
}
|
|
1264
|
+
|
|
1265
|
+
// packages/experience-design-system-cli/src/tui/import/steps/02-token-input/screen.tsx
|
|
1266
|
+
import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
1267
|
+
function TokenInputScreen({ onConfirm, onBack, initialPath = "" }) {
|
|
1268
|
+
const [tokenPath, setTokenPath] = useState4(initialPath);
|
|
1269
|
+
const [failure, setFailure] = useState4(null);
|
|
1270
|
+
useTokenInputControls(onBack);
|
|
1271
|
+
const change = (value) => {
|
|
1272
|
+
setTokenPath(value);
|
|
1273
|
+
setFailure(null);
|
|
1274
|
+
};
|
|
1275
|
+
const submit = (value) => {
|
|
1276
|
+
const rawPath = toTokenPath(value);
|
|
1277
|
+
if (!rawPath) {
|
|
1278
|
+
setFailure({ error: "Enter the path to your token file." });
|
|
1279
|
+
return;
|
|
1280
|
+
}
|
|
1281
|
+
const check = validateTokenPath(rawPath);
|
|
1282
|
+
if (check.ok) onConfirm(check.path);
|
|
1283
|
+
else setFailure({ error: check.error, resolvedPath: check.resolvedPath });
|
|
1284
|
+
};
|
|
1285
|
+
return /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
|
|
1286
|
+
/* @__PURE__ */ jsx5(Text5, { bold: true, children: "Design tokens" }),
|
|
1287
|
+
/* @__PURE__ */ jsx5(Text5, { color: PALETTE.muted, children: "Point me to your raw token file (e.g. ~/design-tokens/tokens.json). You can use ~, relative, or absolute paths. Claude will map it to Design Token Group Format (DTCG)." }),
|
|
1288
|
+
/* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", children: [
|
|
1289
|
+
/* @__PURE__ */ jsxs4(Box4, { gap: 1, children: [
|
|
1290
|
+
/* @__PURE__ */ jsx5(Text5, { color: PALETTE.accent, children: "?" }),
|
|
1291
|
+
/* @__PURE__ */ jsx5(Text5, { children: "Token path:" }),
|
|
1292
|
+
/* @__PURE__ */ jsx5(TextInput2, { value: tokenPath, onChange: change, onSubmit: submit })
|
|
1293
|
+
] }),
|
|
1294
|
+
failure && /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", children: [
|
|
1295
|
+
/* @__PURE__ */ jsxs4(Text5, { color: PALETTE.error, children: [
|
|
1296
|
+
"\u2717 ",
|
|
1297
|
+
failure.error
|
|
1298
|
+
] }),
|
|
1299
|
+
failure.resolvedPath && /* @__PURE__ */ jsxs4(Text5, { color: PALETTE.muted, children: [
|
|
1300
|
+
" Resolved to: ",
|
|
1301
|
+
failure.resolvedPath
|
|
1302
|
+
] })
|
|
1303
|
+
] })
|
|
1304
|
+
] }),
|
|
1305
|
+
/* @__PURE__ */ jsx5(Box4, { marginTop: 1, gap: 3, children: TOKEN_INPUT_CONTROLS.map((control) => /* @__PURE__ */ jsxs4(Text5, { children: [
|
|
1306
|
+
"[",
|
|
1307
|
+
control.keys,
|
|
1308
|
+
"] ",
|
|
1309
|
+
control.label
|
|
1310
|
+
] }, control.keys)) })
|
|
1311
|
+
] });
|
|
1312
|
+
}
|
|
1313
|
+
|
|
1314
|
+
// packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/screen.tsx
|
|
1315
|
+
import { useEffect as useEffect3, useMemo, useState as useState5 } from "react";
|
|
1316
|
+
import { Box as Box5, Text as Text6 } from "ink";
|
|
1317
|
+
|
|
1318
|
+
// packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/controls.ts
|
|
1319
|
+
import { useInput as useInput5 } from "ink";
|
|
1320
|
+
|
|
1321
|
+
// packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/logic.ts
|
|
1322
|
+
var IGNORED_DIRECTORIES = /* @__PURE__ */ new Set([
|
|
1323
|
+
"node_modules",
|
|
1324
|
+
"dist",
|
|
1325
|
+
"build",
|
|
1326
|
+
".next",
|
|
1327
|
+
".nuxt",
|
|
1328
|
+
"coverage",
|
|
1329
|
+
"storybook-static",
|
|
1330
|
+
"out",
|
|
1331
|
+
".git"
|
|
1332
|
+
]);
|
|
1333
|
+
var CATEGORY_BY_EXTENSION = /* @__PURE__ */ new Map([
|
|
1334
|
+
["tsx", "tsx"],
|
|
1335
|
+
["ts", "ts"],
|
|
1336
|
+
["vue", "vue"],
|
|
1337
|
+
["astro", "astro"],
|
|
1338
|
+
["jsx", "jsx"],
|
|
1339
|
+
["js", "js"],
|
|
1340
|
+
["json", "json"]
|
|
1341
|
+
]);
|
|
1342
|
+
var COMPONENT_CATEGORIES = ["tsx", "ts", "vue", "astro", "jsx", "js"];
|
|
1343
|
+
var ROW_LABELS = {
|
|
1344
|
+
tsx: ".tsx files",
|
|
1345
|
+
ts: ".ts files",
|
|
1346
|
+
vue: ".vue files",
|
|
1347
|
+
astro: ".astro files",
|
|
1348
|
+
jsx: ".jsx files",
|
|
1349
|
+
js: ".js files",
|
|
1350
|
+
json: ".json files (design tokens)",
|
|
1351
|
+
other: "other (ignored)"
|
|
1352
|
+
};
|
|
1353
|
+
var ROW_ORDER = ["tsx", "ts", "vue", "astro", "jsx", "js", "json", "other"];
|
|
1354
|
+
function categorize(fileName) {
|
|
1355
|
+
if (fileName.endsWith(".d.ts")) return "other";
|
|
1356
|
+
const dot = fileName.lastIndexOf(".");
|
|
1357
|
+
const extension = dot === -1 ? "" : fileName.slice(dot + 1);
|
|
1358
|
+
return CATEGORY_BY_EXTENSION.get(extension) ?? "other";
|
|
1359
|
+
}
|
|
1360
|
+
function emptyCounts() {
|
|
1361
|
+
return { tsx: 0, ts: 0, vue: 0, astro: 0, jsx: 0, js: 0, json: 0, other: 0, total: 0 };
|
|
1362
|
+
}
|
|
1363
|
+
function addFile(counts, fileName) {
|
|
1364
|
+
const category = categorize(fileName);
|
|
1365
|
+
return { ...counts, [category]: counts[category] + 1, total: counts.total + 1 };
|
|
1366
|
+
}
|
|
1367
|
+
function mergeCounts(a, b) {
|
|
1368
|
+
return {
|
|
1369
|
+
tsx: a.tsx + b.tsx,
|
|
1370
|
+
ts: a.ts + b.ts,
|
|
1371
|
+
vue: a.vue + b.vue,
|
|
1372
|
+
astro: a.astro + b.astro,
|
|
1373
|
+
jsx: a.jsx + b.jsx,
|
|
1374
|
+
js: a.js + b.js,
|
|
1375
|
+
json: a.json + b.json,
|
|
1376
|
+
other: a.other + b.other,
|
|
1377
|
+
total: a.total + b.total
|
|
1378
|
+
};
|
|
1379
|
+
}
|
|
1380
|
+
function failureFromErrorCode(code) {
|
|
1381
|
+
if (code === "ENOENT") return "not-found";
|
|
1382
|
+
if (code === "EACCES") return "permission-denied";
|
|
1383
|
+
return "unreadable";
|
|
1384
|
+
}
|
|
1385
|
+
function describeFailure(failure, path) {
|
|
1386
|
+
switch (failure) {
|
|
1387
|
+
case "is-file":
|
|
1388
|
+
return {
|
|
1389
|
+
headline: "That's a file, not a directory.",
|
|
1390
|
+
hints: [
|
|
1391
|
+
"Provide the path to your component library's root folder, not a specific file.",
|
|
1392
|
+
"Example: ~/projects/my-design-system"
|
|
1393
|
+
]
|
|
1394
|
+
};
|
|
1395
|
+
case "not-found":
|
|
1396
|
+
return {
|
|
1397
|
+
headline: `Directory not found: ${path}`,
|
|
1398
|
+
hints: ["Double-check the path and try again. Tip: you can use ~, relative, or absolute paths."]
|
|
1399
|
+
};
|
|
1400
|
+
case "permission-denied":
|
|
1401
|
+
return {
|
|
1402
|
+
headline: `Permission denied: ${path}`,
|
|
1403
|
+
hints: ["You don't have read access to this directory."]
|
|
1404
|
+
};
|
|
1405
|
+
case "not-directory":
|
|
1406
|
+
return { headline: `Not a directory: ${path}`, hints: [] };
|
|
1407
|
+
case "unreadable":
|
|
1408
|
+
return { headline: `Cannot access: ${path}`, hints: [] };
|
|
1409
|
+
}
|
|
1410
|
+
}
|
|
1411
|
+
function summarize(counts) {
|
|
1412
|
+
const rows = ROW_ORDER.filter((category) => counts[category] > 0).map((category) => {
|
|
1413
|
+
const tone = category === "json" ? "accent" : category === "other" ? "muted" : "default";
|
|
1414
|
+
return { label: ROW_LABELS[category], count: counts[category], tone };
|
|
1415
|
+
});
|
|
1416
|
+
const componentFiles = COMPONENT_CATEGORIES.reduce((sum, category) => sum + counts[category], 0);
|
|
1417
|
+
if (componentFiles > 0) return { total: counts.total, rows };
|
|
1418
|
+
if (counts.json > 0) {
|
|
1419
|
+
return { total: counts.total, rows, warning: "No component files found \u2014 only token files detected." };
|
|
1420
|
+
}
|
|
1421
|
+
return {
|
|
1422
|
+
total: counts.total,
|
|
1423
|
+
rows,
|
|
1424
|
+
warning: "No component or token files found. Try a different path."
|
|
1425
|
+
};
|
|
1426
|
+
}
|
|
1427
|
+
function phaseOf(scan) {
|
|
1428
|
+
if (scan === void 0) return "scanning";
|
|
1429
|
+
return scan.ok ? "ready" : "failed";
|
|
1430
|
+
}
|
|
1431
|
+
function keyAction(phase, input, key) {
|
|
1432
|
+
if (key.escape) return "back";
|
|
1433
|
+
if (phase === "ready") {
|
|
1434
|
+
if (key.return) return "confirm";
|
|
1435
|
+
if (input === "e") return "change-path";
|
|
1436
|
+
}
|
|
1437
|
+
if (phase === "failed" && (key.return || input === "e")) return "change-path";
|
|
1438
|
+
return void 0;
|
|
1439
|
+
}
|
|
1440
|
+
|
|
1441
|
+
// packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/controls.ts
|
|
1442
|
+
var CONTROLS = {
|
|
1443
|
+
scanning: [{ keys: "Esc", label: "Back" }],
|
|
1444
|
+
ready: [
|
|
1445
|
+
{ keys: "Enter", label: "Yes, continue" },
|
|
1446
|
+
{ keys: "e", label: "Change path" },
|
|
1447
|
+
{ keys: "Esc", label: "Back" }
|
|
1448
|
+
],
|
|
1449
|
+
failed: [
|
|
1450
|
+
{ keys: "Enter/e", label: "Try a different path" },
|
|
1451
|
+
{ keys: "Esc", label: "Back" }
|
|
1452
|
+
]
|
|
1453
|
+
};
|
|
1454
|
+
function controlsFor(phase) {
|
|
1455
|
+
return CONTROLS[phase];
|
|
1456
|
+
}
|
|
1457
|
+
function usePathValidationControls(phase, handlers) {
|
|
1458
|
+
useInput5((input, key) => {
|
|
1459
|
+
const action = keyAction(phase, input, key);
|
|
1460
|
+
if (action === "confirm") handlers.onConfirm();
|
|
1461
|
+
else if (action === "change-path") handlers.onChangePath();
|
|
1462
|
+
else if (action === "back") handlers.onBack();
|
|
1463
|
+
});
|
|
1464
|
+
}
|
|
1465
|
+
|
|
1466
|
+
// packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/loader.ts
|
|
1467
|
+
import { readdir, stat } from "node:fs/promises";
|
|
1468
|
+
import { join as join3 } from "node:path";
|
|
1469
|
+
async function isFile(path) {
|
|
1470
|
+
try {
|
|
1471
|
+
return (await stat(path)).isFile();
|
|
1472
|
+
} catch {
|
|
1473
|
+
return false;
|
|
1474
|
+
}
|
|
1475
|
+
}
|
|
1476
|
+
async function countEntry(directory, entry) {
|
|
1477
|
+
const path = join3(directory, entry.name);
|
|
1478
|
+
if (entry.isDirectory()) return countFiles(path);
|
|
1479
|
+
if (entry.isFile() || entry.isSymbolicLink() && await isFile(path)) return addFile(emptyCounts(), entry.name);
|
|
1480
|
+
return emptyCounts();
|
|
1481
|
+
}
|
|
1482
|
+
async function countFiles(directory) {
|
|
1483
|
+
let entries;
|
|
1484
|
+
try {
|
|
1485
|
+
entries = await readdir(directory, { withFileTypes: true });
|
|
1486
|
+
} catch {
|
|
1487
|
+
return emptyCounts();
|
|
1488
|
+
}
|
|
1489
|
+
const counts = await Promise.all(
|
|
1490
|
+
entries.filter((entry) => !IGNORED_DIRECTORIES.has(entry.name)).map((entry) => countEntry(directory, entry))
|
|
1491
|
+
);
|
|
1492
|
+
return counts.reduce(mergeCounts, emptyCounts());
|
|
255
1493
|
}
|
|
256
|
-
function
|
|
257
|
-
|
|
258
|
-
|
|
1494
|
+
async function scanProject(directory) {
|
|
1495
|
+
try {
|
|
1496
|
+
const stats = await stat(directory);
|
|
1497
|
+
if (stats.isFile()) return { ok: false, failure: "is-file" };
|
|
1498
|
+
if (!stats.isDirectory()) return { ok: false, failure: "not-directory" };
|
|
1499
|
+
} catch (error) {
|
|
1500
|
+
return { ok: false, failure: failureFromErrorCode(error.code) };
|
|
1501
|
+
}
|
|
1502
|
+
return { ok: true, counts: await countFiles(directory) };
|
|
259
1503
|
}
|
|
260
1504
|
|
|
261
|
-
// packages/experience-design-system-cli/src/tui/import/steps/
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
{
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
});
|
|
1505
|
+
// packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/screen.tsx
|
|
1506
|
+
import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
1507
|
+
function Row({ row }) {
|
|
1508
|
+
return /* @__PURE__ */ jsxs5(Text6, { color: row.tone === "accent" ? PALETTE.accent : void 0, dimColor: row.tone === "muted", children: [
|
|
1509
|
+
" \u2022 ",
|
|
1510
|
+
String(row.count).padStart(3),
|
|
1511
|
+
" ",
|
|
1512
|
+
row.label
|
|
1513
|
+
] });
|
|
270
1514
|
}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
{ label: "Step 2", description: "Review what was extracted" },
|
|
278
|
-
{ label: "Step 3", description: "Generate CDF definitions with Claude" },
|
|
279
|
-
{ label: "Step 4", description: "Review generated definitions" },
|
|
280
|
-
{ label: "Step 5", description: "Push to Contentful" }
|
|
281
|
-
];
|
|
282
|
-
function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
|
|
283
|
-
const [projectPath, setProjectPath] = useState3(initialPath);
|
|
284
|
-
useWelcomeControls(onQuit);
|
|
285
|
-
const submit = (value) => {
|
|
286
|
-
const path = toProjectPath(value);
|
|
287
|
-
if (path) onContinue(path);
|
|
288
|
-
};
|
|
289
|
-
return /* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
|
|
290
|
-
/* @__PURE__ */ jsx4(Text4, { bold: true, color: PALETTE.success, children: "\u{1F44B} Hey! Let's import your design system into Contentful." }),
|
|
291
|
-
/* @__PURE__ */ jsx4(Text4, { color: PALETTE.muted, children: "I'll walk you through 5 steps to get your components into Contentful ExO." }),
|
|
292
|
-
/* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", children: [
|
|
293
|
-
/* @__PURE__ */ jsx4(Text4, { dimColor: true, children: RULE }),
|
|
294
|
-
OVERVIEW.map((item) => /* @__PURE__ */ jsxs3(Box3, { gap: 1, children: [
|
|
295
|
-
/* @__PURE__ */ jsx4(Text4, { bold: true, children: item.label }),
|
|
296
|
-
/* @__PURE__ */ jsx4(Text4, { color: PALETTE.muted, children: item.description })
|
|
297
|
-
] }, item.label)),
|
|
298
|
-
/* @__PURE__ */ jsx4(Text4, { dimColor: true, children: RULE })
|
|
1515
|
+
function Failure({ scan, path }) {
|
|
1516
|
+
const { headline, hints } = describeFailure(scan.failure, path);
|
|
1517
|
+
return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", children: [
|
|
1518
|
+
/* @__PURE__ */ jsxs5(Text6, { color: PALETTE.error, children: [
|
|
1519
|
+
"\u2717 ",
|
|
1520
|
+
headline
|
|
299
1521
|
] }),
|
|
300
|
-
/* @__PURE__ */
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
1522
|
+
hints.map((hint) => /* @__PURE__ */ jsx6(Text6, { dimColor: true, children: hint }, hint))
|
|
1523
|
+
] });
|
|
1524
|
+
}
|
|
1525
|
+
function Summary({ scan, path }) {
|
|
1526
|
+
const { total, rows, warning } = summarize(scan.counts);
|
|
1527
|
+
return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", gap: 1, children: [
|
|
1528
|
+
/* @__PURE__ */ jsxs5(Text6, { children: [
|
|
1529
|
+
"Scanned ",
|
|
1530
|
+
/* @__PURE__ */ jsx6(Text6, { bold: true, children: path })
|
|
307
1531
|
] }),
|
|
308
|
-
/* @__PURE__ */
|
|
1532
|
+
/* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", children: [
|
|
1533
|
+
/* @__PURE__ */ jsxs5(Text6, { color: PALETTE.success, children: [
|
|
1534
|
+
"\u2713 Found ",
|
|
1535
|
+
total,
|
|
1536
|
+
" files:"
|
|
1537
|
+
] }),
|
|
1538
|
+
rows.map((row) => /* @__PURE__ */ jsx6(Row, { row }, row.label))
|
|
1539
|
+
] }),
|
|
1540
|
+
warning && /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.warning, children: [
|
|
1541
|
+
"\u26A0 ",
|
|
1542
|
+
warning
|
|
1543
|
+
] }),
|
|
1544
|
+
/* @__PURE__ */ jsx6(Text6, { children: "Does this look right?" })
|
|
1545
|
+
] });
|
|
1546
|
+
}
|
|
1547
|
+
function PathValidationScreen({
|
|
1548
|
+
projectPath,
|
|
1549
|
+
onConfirm,
|
|
1550
|
+
onChangePath,
|
|
1551
|
+
onBack
|
|
1552
|
+
}) {
|
|
1553
|
+
const resolvedPath = useMemo(() => resolveUserPath(projectPath), [projectPath]);
|
|
1554
|
+
const [scan, setScan] = useState5();
|
|
1555
|
+
useEffect3(() => {
|
|
1556
|
+
let cancelled = false;
|
|
1557
|
+
setScan(void 0);
|
|
1558
|
+
void scanProject(resolvedPath).then((result) => {
|
|
1559
|
+
if (!cancelled) setScan(result);
|
|
1560
|
+
});
|
|
1561
|
+
return () => {
|
|
1562
|
+
cancelled = true;
|
|
1563
|
+
};
|
|
1564
|
+
}, [resolvedPath]);
|
|
1565
|
+
const phase = phaseOf(scan);
|
|
1566
|
+
usePathValidationControls(phase, { onConfirm: () => onConfirm(resolvedPath), onChangePath, onBack });
|
|
1567
|
+
return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
|
|
1568
|
+
scan === void 0 && /* @__PURE__ */ jsxs5(Text6, { dimColor: true, children: [
|
|
1569
|
+
"Scanning ",
|
|
1570
|
+
/* @__PURE__ */ jsx6(Text6, { bold: true, children: resolvedPath }),
|
|
1571
|
+
"..."
|
|
1572
|
+
] }),
|
|
1573
|
+
scan?.ok === false && /* @__PURE__ */ jsx6(Failure, { scan, path: resolvedPath }),
|
|
1574
|
+
scan?.ok === true && /* @__PURE__ */ jsx6(Summary, { scan, path: resolvedPath }),
|
|
1575
|
+
/* @__PURE__ */ jsx6(Box5, { marginTop: 1, gap: 3, children: controlsFor(phase).map((control) => /* @__PURE__ */ jsxs5(Text6, { dimColor: true, children: [
|
|
309
1576
|
"[",
|
|
310
1577
|
control.keys,
|
|
311
1578
|
"] ",
|
|
@@ -314,403 +1581,1401 @@ function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
|
|
|
314
1581
|
] });
|
|
315
1582
|
}
|
|
316
1583
|
|
|
317
|
-
// packages/experience-design-system-cli/src/tui/import/steps/
|
|
318
|
-
import { useState as
|
|
319
|
-
import { Box as
|
|
320
|
-
import
|
|
1584
|
+
// packages/experience-design-system-cli/src/tui/import/steps/04-credentials/screen.tsx
|
|
1585
|
+
import { useRef, useState as useState6 } from "react";
|
|
1586
|
+
import { Box as Box6, Text as Text7 } from "ink";
|
|
1587
|
+
import TextInput3 from "ink-text-input";
|
|
321
1588
|
|
|
322
|
-
// packages/experience-design-system-cli/src/tui/import/steps/
|
|
323
|
-
import { useInput as
|
|
1589
|
+
// packages/experience-design-system-cli/src/tui/import/steps/04-credentials/controls.ts
|
|
1590
|
+
import { useInput as useInput6 } from "ink";
|
|
324
1591
|
|
|
325
|
-
// packages/experience-design-system-
|
|
326
|
-
|
|
327
|
-
return key.escape;
|
|
328
|
-
}
|
|
329
|
-
function toTokenPath(value) {
|
|
330
|
-
const tokenPath = value.trim();
|
|
331
|
-
return tokenPath === "" ? null : tokenPath;
|
|
332
|
-
}
|
|
1592
|
+
// packages/experience-design-system-backend-pipeline/dist/src/persistence/src/session/repositories/db.js
|
|
1593
|
+
import { DatabaseSync } from "node:sqlite";
|
|
333
1594
|
|
|
334
|
-
// packages/experience-design-system-
|
|
335
|
-
|
|
336
|
-
{ keys: "Enter", label: "Continue" },
|
|
337
|
-
{ keys: "Esc", label: "Back" }
|
|
338
|
-
];
|
|
339
|
-
function useTokenInputControls(onBack) {
|
|
340
|
-
useInput4((_input, key) => {
|
|
341
|
-
if (shouldGoBack(key)) onBack();
|
|
342
|
-
});
|
|
343
|
-
}
|
|
1595
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/generation/src/controller/export/export-cdf-document.js
|
|
1596
|
+
init_schema();
|
|
344
1597
|
|
|
345
|
-
// packages/experience-design-system-
|
|
346
|
-
|
|
1598
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/cdf/validators/validate-cdf-file.js
|
|
1599
|
+
init_validate();
|
|
347
1600
|
|
|
348
|
-
// packages/experience-design-system-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
1601
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/shared/dtcg/validators/helpers/walk-dtcg.js
|
|
1602
|
+
init_token_types();
|
|
1603
|
+
|
|
1604
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/framework-adapters/stencil/extract-stencil-components.js
|
|
1605
|
+
import { Project as Project2, Node as Node2, SyntaxKind as SyntaxKind2 } from "ts-morph";
|
|
1606
|
+
|
|
1607
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/framework-adapters/shared/extract-tsx-components.js
|
|
1608
|
+
import { Node, Project, SyntaxKind } from "ts-morph";
|
|
1609
|
+
import ts from "typescript";
|
|
1610
|
+
|
|
1611
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/framework-adapters/react/extract-react-components.js
|
|
1612
|
+
import { Node as Node4, SyntaxKind as SyntaxKind4 } from "ts-morph";
|
|
1613
|
+
|
|
1614
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/helpers/evidence/structural-slot-evidence.js
|
|
1615
|
+
import { Node as Node3, SyntaxKind as SyntaxKind3 } from "ts-morph";
|
|
1616
|
+
|
|
1617
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/framework-adapters/react/extract-react-components.js
|
|
1618
|
+
function createTextControlSurface(onChangeType, specificProps) {
|
|
1619
|
+
return [
|
|
1620
|
+
{ name: "autoComplete", type: "string", required: false },
|
|
1621
|
+
...specificProps,
|
|
1622
|
+
{ name: "disabled", type: "boolean", required: false },
|
|
1623
|
+
{ name: "name", type: "string", required: false },
|
|
1624
|
+
{ name: "onChange", type: onChangeType, required: false },
|
|
1625
|
+
{ name: "placeholder", type: "string", required: false },
|
|
1626
|
+
{ name: "readOnly", type: "boolean", required: false },
|
|
1627
|
+
{ name: "required", type: "boolean", required: false },
|
|
1628
|
+
{
|
|
1629
|
+
name: "value",
|
|
1630
|
+
type: "string | number | readonly string[]",
|
|
1631
|
+
required: false
|
|
1632
|
+
}
|
|
1633
|
+
];
|
|
360
1634
|
}
|
|
1635
|
+
var DOM_ATTRIBUTE_PROP_SURFACES = {
|
|
1636
|
+
HTMLProps: [],
|
|
1637
|
+
HTMLAttributes: [
|
|
1638
|
+
{ name: "className", type: "string", required: false },
|
|
1639
|
+
{ name: "hidden", type: "boolean", required: false },
|
|
1640
|
+
{ name: "id", type: "string", required: false },
|
|
1641
|
+
{
|
|
1642
|
+
name: "onClick",
|
|
1643
|
+
type: "MouseEventHandler<HTMLElement>",
|
|
1644
|
+
required: false
|
|
1645
|
+
},
|
|
1646
|
+
{ name: "style", type: "CSSProperties", required: false },
|
|
1647
|
+
{ name: "tabIndex", type: "number", required: false },
|
|
1648
|
+
{ name: "title", type: "string", required: false }
|
|
1649
|
+
],
|
|
1650
|
+
ImgHTMLAttributes: [
|
|
1651
|
+
{ name: "alt", type: "string", required: false },
|
|
1652
|
+
{ name: "crossOrigin", type: "string", required: false },
|
|
1653
|
+
{ name: "height", type: "number | string", required: false },
|
|
1654
|
+
{
|
|
1655
|
+
name: "loading",
|
|
1656
|
+
type: "string",
|
|
1657
|
+
required: false,
|
|
1658
|
+
allowedValues: ["eager", "lazy"]
|
|
1659
|
+
},
|
|
1660
|
+
{ name: "sizes", type: "string", required: false },
|
|
1661
|
+
{ name: "src", type: "string", required: false },
|
|
1662
|
+
{ name: "srcSet", type: "string", required: false },
|
|
1663
|
+
{ name: "width", type: "number | string", required: false }
|
|
1664
|
+
],
|
|
1665
|
+
LiHTMLAttributes: [],
|
|
1666
|
+
AnchorHTMLAttributes: [
|
|
1667
|
+
{ name: "download", type: "boolean | string", required: false },
|
|
1668
|
+
{ name: "href", type: "string", required: false },
|
|
1669
|
+
{ name: "hrefLang", type: "string", required: false },
|
|
1670
|
+
{ name: "referrerPolicy", type: "string", required: false },
|
|
1671
|
+
{ name: "rel", type: "string", required: false },
|
|
1672
|
+
{
|
|
1673
|
+
name: "target",
|
|
1674
|
+
type: "string",
|
|
1675
|
+
required: false,
|
|
1676
|
+
allowedValues: ["_blank", "_parent", "_self", "_top"]
|
|
1677
|
+
}
|
|
1678
|
+
],
|
|
1679
|
+
ButtonHTMLAttributes: [
|
|
1680
|
+
{ name: "autoFocus", type: "boolean", required: false },
|
|
1681
|
+
{ name: "disabled", type: "boolean", required: false },
|
|
1682
|
+
{ name: "form", type: "string", required: false },
|
|
1683
|
+
{ name: "formAction", type: "string", required: false },
|
|
1684
|
+
{ name: "formMethod", type: "string", required: false },
|
|
1685
|
+
{ name: "formNoValidate", type: "boolean", required: false },
|
|
1686
|
+
{ name: "formTarget", type: "string", required: false },
|
|
1687
|
+
{ name: "name", type: "string", required: false },
|
|
1688
|
+
{
|
|
1689
|
+
name: "type",
|
|
1690
|
+
type: "string",
|
|
1691
|
+
required: false,
|
|
1692
|
+
allowedValues: ["button", "reset", "submit"]
|
|
1693
|
+
},
|
|
1694
|
+
{
|
|
1695
|
+
name: "value",
|
|
1696
|
+
type: "string | number | readonly string[]",
|
|
1697
|
+
required: false
|
|
1698
|
+
}
|
|
1699
|
+
],
|
|
1700
|
+
InputHTMLAttributes: createTextControlSurface("ChangeEventHandler<HTMLInputElement>", [
|
|
1701
|
+
{ name: "checked", type: "boolean", required: false },
|
|
1702
|
+
{ name: "max", type: "number | string", required: false },
|
|
1703
|
+
{ name: "maxLength", type: "number", required: false },
|
|
1704
|
+
{ name: "min", type: "number | string", required: false },
|
|
1705
|
+
{ name: "minLength", type: "number", required: false },
|
|
1706
|
+
{ name: "type", type: "string", required: false }
|
|
1707
|
+
]),
|
|
1708
|
+
FieldsetHTMLAttributes: [
|
|
1709
|
+
{ name: "disabled", type: "boolean", required: false },
|
|
1710
|
+
{ name: "form", type: "string", required: false },
|
|
1711
|
+
{ name: "name", type: "string", required: false }
|
|
1712
|
+
],
|
|
1713
|
+
LabelHTMLAttributes: [
|
|
1714
|
+
{ name: "form", type: "string", required: false },
|
|
1715
|
+
{ name: "htmlFor", type: "string", required: false }
|
|
1716
|
+
],
|
|
1717
|
+
SelectHTMLAttributes: [
|
|
1718
|
+
{ name: "autoComplete", type: "string", required: false },
|
|
1719
|
+
{ name: "disabled", type: "boolean", required: false },
|
|
1720
|
+
{ name: "form", type: "string", required: false },
|
|
1721
|
+
{ name: "multiple", type: "boolean", required: false },
|
|
1722
|
+
{ name: "name", type: "string", required: false },
|
|
1723
|
+
{
|
|
1724
|
+
name: "onChange",
|
|
1725
|
+
type: "ChangeEventHandler<HTMLSelectElement>",
|
|
1726
|
+
required: false
|
|
1727
|
+
},
|
|
1728
|
+
{ name: "required", type: "boolean", required: false },
|
|
1729
|
+
{ name: "size", type: "number", required: false },
|
|
1730
|
+
{
|
|
1731
|
+
name: "value",
|
|
1732
|
+
type: "string | number | readonly string[]",
|
|
1733
|
+
required: false
|
|
1734
|
+
}
|
|
1735
|
+
],
|
|
1736
|
+
SVGAttributes: [
|
|
1737
|
+
{
|
|
1738
|
+
name: "focusable",
|
|
1739
|
+
type: 'boolean | "auto"',
|
|
1740
|
+
required: false,
|
|
1741
|
+
allowedValues: ["auto"]
|
|
1742
|
+
},
|
|
1743
|
+
{ name: "height", type: "number | string", required: false },
|
|
1744
|
+
{ name: "viewBox", type: "string", required: false },
|
|
1745
|
+
{ name: "width", type: "number | string", required: false }
|
|
1746
|
+
],
|
|
1747
|
+
SVGProps: [],
|
|
1748
|
+
TextareaHTMLAttributes: createTextControlSurface("ChangeEventHandler<HTMLTextAreaElement>", [
|
|
1749
|
+
{ name: "cols", type: "number", required: false },
|
|
1750
|
+
{ name: "rows", type: "number", required: false },
|
|
1751
|
+
{ name: "wrap", type: "string", required: false }
|
|
1752
|
+
]),
|
|
1753
|
+
TdHTMLAttributes: [
|
|
1754
|
+
{
|
|
1755
|
+
name: "align",
|
|
1756
|
+
type: "string",
|
|
1757
|
+
required: false,
|
|
1758
|
+
allowedValues: ["center", "char", "justify", "left", "right"]
|
|
1759
|
+
},
|
|
1760
|
+
{ name: "colSpan", type: "number", required: false },
|
|
1761
|
+
{ name: "headers", type: "string", required: false },
|
|
1762
|
+
{ name: "rowSpan", type: "number", required: false },
|
|
1763
|
+
{ name: "scope", type: "string", required: false }
|
|
1764
|
+
]
|
|
1765
|
+
};
|
|
361
1766
|
|
|
362
|
-
// packages/experience-design-system-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
1767
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/framework-adapters/vue-tsx/extract-vue-tsx-components.js
|
|
1768
|
+
import { Node as Node5, SyntaxKind as SyntaxKind5 } from "ts-morph";
|
|
1769
|
+
|
|
1770
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/framework-adapters/vue/extract-vue-components.js
|
|
1771
|
+
import { parse as parseSFC } from "@vue/compiler-sfc";
|
|
1772
|
+
import { Project as Project3, Node as Node6 } from "ts-morph";
|
|
1773
|
+
|
|
1774
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/framework-adapters/astro/extract-astro-components.js
|
|
1775
|
+
import { Project as Project4, Node as Node7 } from "ts-morph";
|
|
1776
|
+
|
|
1777
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/framework-adapters/web-components/extract-web-components.js
|
|
1778
|
+
import { Project as Project5, Node as Node8, SyntaxKind as SyntaxKind6 } from "ts-morph";
|
|
1779
|
+
|
|
1780
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/framework-adapters/svelte/extract-svelte-components.js
|
|
1781
|
+
import { parse as parseSvelte } from "svelte/compiler";
|
|
1782
|
+
import { Project as Project6, Node as Node9, ScriptTarget, ModuleKind, ts as ts2 } from "ts-morph";
|
|
1783
|
+
|
|
1784
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/composition/src/controller/endpoint/compose-components-endpoint.js
|
|
1785
|
+
init_agents();
|
|
1786
|
+
|
|
1787
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/composition/src/services/run-composition-service.js
|
|
1788
|
+
init_agents();
|
|
1789
|
+
|
|
1790
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/selection/src/controller/select-components-endpoint.js
|
|
1791
|
+
init_agents();
|
|
1792
|
+
|
|
1793
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/selection/src/services/run-selection-service.js
|
|
1794
|
+
init_agents();
|
|
1795
|
+
var DEFAULT_TIMEOUT_MS = Number(process.env.EDS_AGENT_TIMEOUT_MS ?? 5 * 60 * 1e3);
|
|
1796
|
+
|
|
1797
|
+
// packages/experience-design-system-backend-pipeline/dist/src/persistence/src/session/index.js
|
|
1798
|
+
import { DatabaseSync as DatabaseSync2 } from "node:sqlite";
|
|
1799
|
+
|
|
1800
|
+
// packages/experience-design-system-backend-pipeline/dist/src/persistence/src/session/repositories/migration.js
|
|
1801
|
+
import { DatabaseSync as DatabaseSync3 } from "node:sqlite";
|
|
1802
|
+
|
|
1803
|
+
// packages/experience-design-system-backend-pipeline/dist/src/persistence/src/credentials/helpers/host-utils.js
|
|
1804
|
+
var DEFAULT_CONFIGURED_HOST = "api.contentful.com";
|
|
1805
|
+
|
|
1806
|
+
// packages/experience-design-system-backend-pipeline/dist/src/persistence/src/index.js
|
|
1807
|
+
init_cache_keys();
|
|
1808
|
+
|
|
1809
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/generation/src/controller/generate-cdf-components-endpoint.js
|
|
1810
|
+
init_agents();
|
|
1811
|
+
|
|
1812
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/generation/src/services/run-cdf-generation-service.js
|
|
1813
|
+
init_agents();
|
|
1814
|
+
|
|
1815
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/services/run-apply-service.js
|
|
1816
|
+
init_shared();
|
|
1817
|
+
|
|
1818
|
+
// packages/experience-design-system-client/dist/src/generated/core/bodySerializer.gen.js
|
|
1819
|
+
var jsonBodySerializer = {
|
|
1820
|
+
bodySerializer: (body) => JSON.stringify(body, (_key, value) => typeof value === "bigint" ? value.toString() : value)
|
|
1821
|
+
};
|
|
1822
|
+
|
|
1823
|
+
// packages/experience-design-system-client/dist/src/generated/core/params.gen.js
|
|
1824
|
+
var extraPrefixesMap = {
|
|
1825
|
+
$body_: "body",
|
|
1826
|
+
$headers_: "headers",
|
|
1827
|
+
$path_: "path",
|
|
1828
|
+
$query_: "query"
|
|
1829
|
+
};
|
|
1830
|
+
var extraPrefixes = Object.entries(extraPrefixesMap);
|
|
1831
|
+
|
|
1832
|
+
// packages/experience-design-system-client/dist/src/generated/core/auth.gen.js
|
|
1833
|
+
var getAuthToken = async (auth, callback) => {
|
|
1834
|
+
const token = typeof callback === "function" ? await callback(auth) : callback;
|
|
1835
|
+
if (!token) {
|
|
1836
|
+
return;
|
|
1837
|
+
}
|
|
1838
|
+
if (auth.scheme === "bearer") {
|
|
1839
|
+
return `Bearer ${token}`;
|
|
1840
|
+
}
|
|
1841
|
+
if (auth.scheme === "basic") {
|
|
1842
|
+
return `Basic ${btoa(token)}`;
|
|
1843
|
+
}
|
|
1844
|
+
return token;
|
|
1845
|
+
};
|
|
1846
|
+
|
|
1847
|
+
// packages/experience-design-system-client/dist/src/generated/core/pathSerializer.gen.js
|
|
1848
|
+
var separatorArrayExplode = (style) => {
|
|
1849
|
+
switch (style) {
|
|
1850
|
+
case "label":
|
|
1851
|
+
return ".";
|
|
1852
|
+
case "matrix":
|
|
1853
|
+
return ";";
|
|
1854
|
+
case "simple":
|
|
1855
|
+
return ",";
|
|
1856
|
+
default:
|
|
1857
|
+
return "&";
|
|
1858
|
+
}
|
|
1859
|
+
};
|
|
1860
|
+
var separatorArrayNoExplode = (style) => {
|
|
1861
|
+
switch (style) {
|
|
1862
|
+
case "form":
|
|
1863
|
+
return ",";
|
|
1864
|
+
case "pipeDelimited":
|
|
1865
|
+
return "|";
|
|
1866
|
+
case "spaceDelimited":
|
|
1867
|
+
return "%20";
|
|
1868
|
+
default:
|
|
1869
|
+
return ",";
|
|
1870
|
+
}
|
|
1871
|
+
};
|
|
1872
|
+
var separatorObjectExplode = (style) => {
|
|
1873
|
+
switch (style) {
|
|
1874
|
+
case "label":
|
|
1875
|
+
return ".";
|
|
1876
|
+
case "matrix":
|
|
1877
|
+
return ";";
|
|
1878
|
+
case "simple":
|
|
1879
|
+
return ",";
|
|
1880
|
+
default:
|
|
1881
|
+
return "&";
|
|
1882
|
+
}
|
|
1883
|
+
};
|
|
1884
|
+
var serializeArrayParam = ({ allowReserved, explode, name, style, value }) => {
|
|
1885
|
+
if (!explode) {
|
|
1886
|
+
const joinedValues2 = (allowReserved ? value : value.map((v) => encodeURIComponent(v))).join(separatorArrayNoExplode(style));
|
|
1887
|
+
switch (style) {
|
|
1888
|
+
case "label":
|
|
1889
|
+
return `.${joinedValues2}`;
|
|
1890
|
+
case "matrix":
|
|
1891
|
+
return `;${name}=${joinedValues2}`;
|
|
1892
|
+
case "simple":
|
|
1893
|
+
return joinedValues2;
|
|
1894
|
+
default:
|
|
1895
|
+
return `${name}=${joinedValues2}`;
|
|
1896
|
+
}
|
|
1897
|
+
}
|
|
1898
|
+
const separator = separatorArrayExplode(style);
|
|
1899
|
+
const joinedValues = value.map((v) => {
|
|
1900
|
+
if (style === "label" || style === "simple") {
|
|
1901
|
+
return allowReserved ? v : encodeURIComponent(v);
|
|
1902
|
+
}
|
|
1903
|
+
return serializePrimitiveParam({
|
|
1904
|
+
allowReserved,
|
|
1905
|
+
name,
|
|
1906
|
+
value: v
|
|
1907
|
+
});
|
|
1908
|
+
}).join(separator);
|
|
1909
|
+
return style === "label" || style === "matrix" ? separator + joinedValues : joinedValues;
|
|
1910
|
+
};
|
|
1911
|
+
var serializePrimitiveParam = ({ allowReserved, name, value }) => {
|
|
1912
|
+
if (value === void 0 || value === null) {
|
|
1913
|
+
return "";
|
|
1914
|
+
}
|
|
1915
|
+
if (typeof value === "object") {
|
|
1916
|
+
throw new Error("Deeply-nested arrays/objects aren\u2019t supported. Provide your own `querySerializer()` to handle these.");
|
|
1917
|
+
}
|
|
1918
|
+
return `${name}=${allowReserved ? value : encodeURIComponent(value)}`;
|
|
1919
|
+
};
|
|
1920
|
+
var serializeObjectParam = ({ allowReserved, explode, name, style, value, valueOnly }) => {
|
|
1921
|
+
if (value instanceof Date) {
|
|
1922
|
+
return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`;
|
|
1923
|
+
}
|
|
1924
|
+
if (style !== "deepObject" && !explode) {
|
|
1925
|
+
let values = [];
|
|
1926
|
+
Object.entries(value).forEach(([key, v]) => {
|
|
1927
|
+
values = [
|
|
1928
|
+
...values,
|
|
1929
|
+
key,
|
|
1930
|
+
allowReserved ? v : encodeURIComponent(v)
|
|
1931
|
+
];
|
|
1932
|
+
});
|
|
1933
|
+
const joinedValues2 = values.join(",");
|
|
1934
|
+
switch (style) {
|
|
1935
|
+
case "form":
|
|
1936
|
+
return `${name}=${joinedValues2}`;
|
|
1937
|
+
case "label":
|
|
1938
|
+
return `.${joinedValues2}`;
|
|
1939
|
+
case "matrix":
|
|
1940
|
+
return `;${name}=${joinedValues2}`;
|
|
1941
|
+
default:
|
|
1942
|
+
return joinedValues2;
|
|
1943
|
+
}
|
|
1944
|
+
}
|
|
1945
|
+
const separator = separatorObjectExplode(style);
|
|
1946
|
+
const joinedValues = Object.entries(value).map(([key, v]) => serializePrimitiveParam({
|
|
1947
|
+
allowReserved,
|
|
1948
|
+
name: style === "deepObject" ? `${name}[${key}]` : key,
|
|
1949
|
+
value: v
|
|
1950
|
+
})).join(separator);
|
|
1951
|
+
return style === "label" || style === "matrix" ? separator + joinedValues : joinedValues;
|
|
1952
|
+
};
|
|
1953
|
+
|
|
1954
|
+
// packages/experience-design-system-client/dist/src/generated/client/utils.gen.js
|
|
1955
|
+
var PATH_PARAM_RE = /\{[^{}]+\}/g;
|
|
1956
|
+
var defaultPathSerializer = ({ path, url: _url }) => {
|
|
1957
|
+
let url = _url;
|
|
1958
|
+
const matches = _url.match(PATH_PARAM_RE);
|
|
1959
|
+
if (matches) {
|
|
1960
|
+
for (const match of matches) {
|
|
1961
|
+
let explode = false;
|
|
1962
|
+
let name = match.substring(1, match.length - 1);
|
|
1963
|
+
let style = "simple";
|
|
1964
|
+
if (name.endsWith("*")) {
|
|
1965
|
+
explode = true;
|
|
1966
|
+
name = name.substring(0, name.length - 1);
|
|
1967
|
+
}
|
|
1968
|
+
if (name.startsWith(".")) {
|
|
1969
|
+
name = name.substring(1);
|
|
1970
|
+
style = "label";
|
|
1971
|
+
} else if (name.startsWith(";")) {
|
|
1972
|
+
name = name.substring(1);
|
|
1973
|
+
style = "matrix";
|
|
1974
|
+
}
|
|
1975
|
+
const value = path[name];
|
|
1976
|
+
if (value === void 0 || value === null) {
|
|
1977
|
+
continue;
|
|
1978
|
+
}
|
|
1979
|
+
if (Array.isArray(value)) {
|
|
1980
|
+
url = url.replace(match, serializeArrayParam({ explode, name, style, value }));
|
|
1981
|
+
continue;
|
|
1982
|
+
}
|
|
1983
|
+
if (typeof value === "object") {
|
|
1984
|
+
url = url.replace(match, serializeObjectParam({
|
|
1985
|
+
explode,
|
|
1986
|
+
name,
|
|
1987
|
+
style,
|
|
1988
|
+
value,
|
|
1989
|
+
valueOnly: true
|
|
1990
|
+
}));
|
|
1991
|
+
continue;
|
|
1992
|
+
}
|
|
1993
|
+
if (style === "matrix") {
|
|
1994
|
+
url = url.replace(match, `;${serializePrimitiveParam({
|
|
1995
|
+
name,
|
|
1996
|
+
value
|
|
1997
|
+
})}`);
|
|
1998
|
+
continue;
|
|
1999
|
+
}
|
|
2000
|
+
const replaceValue = encodeURIComponent(style === "label" ? `.${value}` : value);
|
|
2001
|
+
url = url.replace(match, replaceValue);
|
|
2002
|
+
}
|
|
2003
|
+
}
|
|
2004
|
+
return url;
|
|
2005
|
+
};
|
|
2006
|
+
var createQuerySerializer = ({ allowReserved, array: array2, object } = {}) => {
|
|
2007
|
+
const querySerializer = (queryParams) => {
|
|
2008
|
+
const search = [];
|
|
2009
|
+
if (queryParams && typeof queryParams === "object") {
|
|
2010
|
+
for (const name in queryParams) {
|
|
2011
|
+
const value = queryParams[name];
|
|
2012
|
+
if (value === void 0 || value === null) {
|
|
2013
|
+
continue;
|
|
2014
|
+
}
|
|
2015
|
+
if (Array.isArray(value)) {
|
|
2016
|
+
const serializedArray = serializeArrayParam({
|
|
2017
|
+
allowReserved,
|
|
2018
|
+
explode: true,
|
|
2019
|
+
name,
|
|
2020
|
+
style: "form",
|
|
2021
|
+
value,
|
|
2022
|
+
...array2
|
|
2023
|
+
});
|
|
2024
|
+
if (serializedArray)
|
|
2025
|
+
search.push(serializedArray);
|
|
2026
|
+
} else if (typeof value === "object") {
|
|
2027
|
+
const serializedObject = serializeObjectParam({
|
|
2028
|
+
allowReserved,
|
|
2029
|
+
explode: true,
|
|
2030
|
+
name,
|
|
2031
|
+
style: "deepObject",
|
|
2032
|
+
value,
|
|
2033
|
+
...object
|
|
2034
|
+
});
|
|
2035
|
+
if (serializedObject)
|
|
2036
|
+
search.push(serializedObject);
|
|
2037
|
+
} else {
|
|
2038
|
+
const serializedPrimitive = serializePrimitiveParam({
|
|
2039
|
+
allowReserved,
|
|
2040
|
+
name,
|
|
2041
|
+
value
|
|
2042
|
+
});
|
|
2043
|
+
if (serializedPrimitive)
|
|
2044
|
+
search.push(serializedPrimitive);
|
|
2045
|
+
}
|
|
2046
|
+
}
|
|
2047
|
+
}
|
|
2048
|
+
return search.join("&");
|
|
2049
|
+
};
|
|
2050
|
+
return querySerializer;
|
|
2051
|
+
};
|
|
2052
|
+
var getParseAs = (contentType) => {
|
|
2053
|
+
if (!contentType) {
|
|
2054
|
+
return "stream";
|
|
370
2055
|
}
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
error: "That's a directory \u2014 provide a path to a token file (e.g. tokens.json), not a folder.",
|
|
375
|
-
resolvedPath: path
|
|
376
|
-
};
|
|
2056
|
+
const cleanContent = contentType.split(";")[0]?.trim();
|
|
2057
|
+
if (!cleanContent) {
|
|
2058
|
+
return;
|
|
377
2059
|
}
|
|
378
|
-
if (
|
|
379
|
-
return
|
|
2060
|
+
if (cleanContent.startsWith("application/json") || cleanContent.endsWith("+json")) {
|
|
2061
|
+
return "json";
|
|
380
2062
|
}
|
|
381
|
-
|
|
382
|
-
|
|
2063
|
+
if (cleanContent === "multipart/form-data") {
|
|
2064
|
+
return "formData";
|
|
2065
|
+
}
|
|
2066
|
+
if (["application/", "audio/", "image/", "video/"].some((type) => cleanContent.startsWith(type))) {
|
|
2067
|
+
return "blob";
|
|
2068
|
+
}
|
|
2069
|
+
if (cleanContent.startsWith("text/")) {
|
|
2070
|
+
return "text";
|
|
2071
|
+
}
|
|
2072
|
+
return;
|
|
2073
|
+
};
|
|
2074
|
+
var checkForExistence = (options, name) => {
|
|
2075
|
+
if (!name) {
|
|
2076
|
+
return false;
|
|
2077
|
+
}
|
|
2078
|
+
if (options.headers.has(name) || options.query?.[name] || options.headers.get("Cookie")?.includes(`${name}=`)) {
|
|
2079
|
+
return true;
|
|
2080
|
+
}
|
|
2081
|
+
return false;
|
|
2082
|
+
};
|
|
2083
|
+
var setAuthParams = async ({ security, ...options }) => {
|
|
2084
|
+
for (const auth of security) {
|
|
2085
|
+
if (checkForExistence(options, auth.name)) {
|
|
2086
|
+
continue;
|
|
2087
|
+
}
|
|
2088
|
+
const token = await getAuthToken(auth, options.auth);
|
|
2089
|
+
if (!token) {
|
|
2090
|
+
continue;
|
|
2091
|
+
}
|
|
2092
|
+
const name = auth.name ?? "Authorization";
|
|
2093
|
+
switch (auth.in) {
|
|
2094
|
+
case "query":
|
|
2095
|
+
if (!options.query) {
|
|
2096
|
+
options.query = {};
|
|
2097
|
+
}
|
|
2098
|
+
options.query[name] = token;
|
|
2099
|
+
break;
|
|
2100
|
+
case "cookie":
|
|
2101
|
+
options.headers.append("Cookie", `${name}=${token}`);
|
|
2102
|
+
break;
|
|
2103
|
+
case "header":
|
|
2104
|
+
default:
|
|
2105
|
+
options.headers.set(name, token);
|
|
2106
|
+
break;
|
|
2107
|
+
}
|
|
2108
|
+
}
|
|
2109
|
+
};
|
|
2110
|
+
var buildUrl = (options) => {
|
|
2111
|
+
const url = getUrl({
|
|
2112
|
+
baseUrl: options.baseUrl,
|
|
2113
|
+
path: options.path,
|
|
2114
|
+
query: options.query,
|
|
2115
|
+
querySerializer: typeof options.querySerializer === "function" ? options.querySerializer : createQuerySerializer(options.querySerializer),
|
|
2116
|
+
url: options.url
|
|
2117
|
+
});
|
|
2118
|
+
return url;
|
|
2119
|
+
};
|
|
2120
|
+
var getUrl = ({ baseUrl, path, query, querySerializer, url: _url }) => {
|
|
2121
|
+
const pathUrl = _url.startsWith("/") ? _url : `/${_url}`;
|
|
2122
|
+
let url = (baseUrl ?? "") + pathUrl;
|
|
2123
|
+
if (path) {
|
|
2124
|
+
url = defaultPathSerializer({ path, url });
|
|
2125
|
+
}
|
|
2126
|
+
let search = query ? querySerializer(query) : "";
|
|
2127
|
+
if (search.startsWith("?")) {
|
|
2128
|
+
search = search.substring(1);
|
|
2129
|
+
}
|
|
2130
|
+
if (search) {
|
|
2131
|
+
url += `?${search}`;
|
|
2132
|
+
}
|
|
2133
|
+
return url;
|
|
2134
|
+
};
|
|
2135
|
+
var mergeConfigs = (a, b) => {
|
|
2136
|
+
const config = { ...a, ...b };
|
|
2137
|
+
if (config.baseUrl?.endsWith("/")) {
|
|
2138
|
+
config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);
|
|
2139
|
+
}
|
|
2140
|
+
config.headers = mergeHeaders(a.headers, b.headers);
|
|
2141
|
+
return config;
|
|
2142
|
+
};
|
|
2143
|
+
var mergeHeaders = (...headers) => {
|
|
2144
|
+
const mergedHeaders = new Headers();
|
|
2145
|
+
for (const header of headers) {
|
|
2146
|
+
if (!header || typeof header !== "object") {
|
|
2147
|
+
continue;
|
|
2148
|
+
}
|
|
2149
|
+
const iterator = header instanceof Headers ? header.entries() : Object.entries(header);
|
|
2150
|
+
for (const [key, value] of iterator) {
|
|
2151
|
+
if (value === null) {
|
|
2152
|
+
mergedHeaders.delete(key);
|
|
2153
|
+
} else if (Array.isArray(value)) {
|
|
2154
|
+
for (const v of value) {
|
|
2155
|
+
mergedHeaders.append(key, v);
|
|
2156
|
+
}
|
|
2157
|
+
} else if (value !== void 0) {
|
|
2158
|
+
mergedHeaders.set(key, typeof value === "object" ? JSON.stringify(value) : value);
|
|
2159
|
+
}
|
|
2160
|
+
}
|
|
2161
|
+
}
|
|
2162
|
+
return mergedHeaders;
|
|
2163
|
+
};
|
|
2164
|
+
var Interceptors = class {
|
|
2165
|
+
_fns;
|
|
2166
|
+
constructor() {
|
|
2167
|
+
this._fns = [];
|
|
2168
|
+
}
|
|
2169
|
+
clear() {
|
|
2170
|
+
this._fns = [];
|
|
2171
|
+
}
|
|
2172
|
+
getInterceptorIndex(id) {
|
|
2173
|
+
if (typeof id === "number") {
|
|
2174
|
+
return this._fns[id] ? id : -1;
|
|
2175
|
+
} else {
|
|
2176
|
+
return this._fns.indexOf(id);
|
|
2177
|
+
}
|
|
2178
|
+
}
|
|
2179
|
+
exists(id) {
|
|
2180
|
+
const index = this.getInterceptorIndex(id);
|
|
2181
|
+
return !!this._fns[index];
|
|
2182
|
+
}
|
|
2183
|
+
eject(id) {
|
|
2184
|
+
const index = this.getInterceptorIndex(id);
|
|
2185
|
+
if (this._fns[index]) {
|
|
2186
|
+
this._fns[index] = null;
|
|
2187
|
+
}
|
|
2188
|
+
}
|
|
2189
|
+
update(id, fn) {
|
|
2190
|
+
const index = this.getInterceptorIndex(id);
|
|
2191
|
+
if (this._fns[index]) {
|
|
2192
|
+
this._fns[index] = fn;
|
|
2193
|
+
return id;
|
|
2194
|
+
} else {
|
|
2195
|
+
return false;
|
|
2196
|
+
}
|
|
2197
|
+
}
|
|
2198
|
+
use(fn) {
|
|
2199
|
+
this._fns = [...this._fns, fn];
|
|
2200
|
+
return this._fns.length - 1;
|
|
2201
|
+
}
|
|
2202
|
+
};
|
|
2203
|
+
var createInterceptors = () => ({
|
|
2204
|
+
error: new Interceptors(),
|
|
2205
|
+
request: new Interceptors(),
|
|
2206
|
+
response: new Interceptors()
|
|
2207
|
+
});
|
|
2208
|
+
var defaultQuerySerializer = createQuerySerializer({
|
|
2209
|
+
allowReserved: false,
|
|
2210
|
+
array: {
|
|
2211
|
+
explode: true,
|
|
2212
|
+
style: "form"
|
|
2213
|
+
},
|
|
2214
|
+
object: {
|
|
2215
|
+
explode: true,
|
|
2216
|
+
style: "deepObject"
|
|
2217
|
+
}
|
|
2218
|
+
});
|
|
2219
|
+
var defaultHeaders = {
|
|
2220
|
+
"Content-Type": "application/json"
|
|
2221
|
+
};
|
|
2222
|
+
var createConfig = (override = {}) => ({
|
|
2223
|
+
...jsonBodySerializer,
|
|
2224
|
+
headers: defaultHeaders,
|
|
2225
|
+
parseAs: "auto",
|
|
2226
|
+
querySerializer: defaultQuerySerializer,
|
|
2227
|
+
...override
|
|
2228
|
+
});
|
|
383
2229
|
|
|
384
|
-
// packages/experience-design-system-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
const
|
|
388
|
-
const
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
setTokenPath(value);
|
|
392
|
-
setFailure(null);
|
|
2230
|
+
// packages/experience-design-system-client/dist/src/generated/client/client.gen.js
|
|
2231
|
+
var createClient = (config = {}) => {
|
|
2232
|
+
let _config = mergeConfigs(createConfig(), config);
|
|
2233
|
+
const getConfig = () => ({ ..._config });
|
|
2234
|
+
const setConfig = (config2) => {
|
|
2235
|
+
_config = mergeConfigs(_config, config2);
|
|
2236
|
+
return getConfig();
|
|
393
2237
|
};
|
|
394
|
-
const
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
2238
|
+
const interceptors = createInterceptors();
|
|
2239
|
+
const request = async (options) => {
|
|
2240
|
+
const opts = {
|
|
2241
|
+
..._config,
|
|
2242
|
+
...options,
|
|
2243
|
+
fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,
|
|
2244
|
+
headers: mergeHeaders(_config.headers, options.headers),
|
|
2245
|
+
serializedBody: void 0
|
|
2246
|
+
};
|
|
2247
|
+
if (opts.security) {
|
|
2248
|
+
await setAuthParams({
|
|
2249
|
+
...opts,
|
|
2250
|
+
security: opts.security
|
|
2251
|
+
});
|
|
399
2252
|
}
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
2253
|
+
if (opts.requestValidator) {
|
|
2254
|
+
await opts.requestValidator(opts);
|
|
2255
|
+
}
|
|
2256
|
+
if (opts.body && opts.bodySerializer) {
|
|
2257
|
+
opts.serializedBody = opts.bodySerializer(opts.body);
|
|
2258
|
+
}
|
|
2259
|
+
if (opts.serializedBody === void 0 || opts.serializedBody === "") {
|
|
2260
|
+
opts.headers.delete("Content-Type");
|
|
2261
|
+
}
|
|
2262
|
+
const url = buildUrl(opts);
|
|
2263
|
+
const requestInit = {
|
|
2264
|
+
redirect: "follow",
|
|
2265
|
+
...opts,
|
|
2266
|
+
body: opts.serializedBody
|
|
2267
|
+
};
|
|
2268
|
+
let request2 = new Request(url, requestInit);
|
|
2269
|
+
for (const fn of interceptors.request._fns) {
|
|
2270
|
+
if (fn) {
|
|
2271
|
+
request2 = await fn(request2, opts);
|
|
2272
|
+
}
|
|
2273
|
+
}
|
|
2274
|
+
const _fetch = opts.fetch;
|
|
2275
|
+
let response = await _fetch(request2);
|
|
2276
|
+
for (const fn of interceptors.response._fns) {
|
|
2277
|
+
if (fn) {
|
|
2278
|
+
response = await fn(response, request2, opts);
|
|
2279
|
+
}
|
|
2280
|
+
}
|
|
2281
|
+
const result = {
|
|
2282
|
+
request: request2,
|
|
2283
|
+
response
|
|
2284
|
+
};
|
|
2285
|
+
if (response.ok) {
|
|
2286
|
+
if (response.status === 204 || response.headers.get("Content-Length") === "0") {
|
|
2287
|
+
return opts.responseStyle === "data" ? {} : {
|
|
2288
|
+
data: {},
|
|
2289
|
+
...result
|
|
2290
|
+
};
|
|
2291
|
+
}
|
|
2292
|
+
const parseAs = (opts.parseAs === "auto" ? getParseAs(response.headers.get("Content-Type")) : opts.parseAs) ?? "json";
|
|
2293
|
+
let data;
|
|
2294
|
+
switch (parseAs) {
|
|
2295
|
+
case "arrayBuffer":
|
|
2296
|
+
case "blob":
|
|
2297
|
+
case "formData":
|
|
2298
|
+
case "json":
|
|
2299
|
+
case "text":
|
|
2300
|
+
data = await response[parseAs]();
|
|
2301
|
+
break;
|
|
2302
|
+
case "stream":
|
|
2303
|
+
return opts.responseStyle === "data" ? response.body : {
|
|
2304
|
+
data: response.body,
|
|
2305
|
+
...result
|
|
2306
|
+
};
|
|
2307
|
+
}
|
|
2308
|
+
if (parseAs === "json") {
|
|
2309
|
+
if (opts.responseValidator) {
|
|
2310
|
+
await opts.responseValidator(data);
|
|
2311
|
+
}
|
|
2312
|
+
if (opts.responseTransformer) {
|
|
2313
|
+
data = await opts.responseTransformer(data);
|
|
2314
|
+
}
|
|
2315
|
+
}
|
|
2316
|
+
return opts.responseStyle === "data" ? data : {
|
|
2317
|
+
data,
|
|
2318
|
+
...result
|
|
2319
|
+
};
|
|
2320
|
+
}
|
|
2321
|
+
const textError = await response.text();
|
|
2322
|
+
let jsonError;
|
|
2323
|
+
try {
|
|
2324
|
+
jsonError = JSON.parse(textError);
|
|
2325
|
+
} catch {
|
|
2326
|
+
}
|
|
2327
|
+
const error = jsonError ?? textError;
|
|
2328
|
+
let finalError = error;
|
|
2329
|
+
for (const fn of interceptors.error._fns) {
|
|
2330
|
+
if (fn) {
|
|
2331
|
+
finalError = await fn(error, response, request2, opts);
|
|
2332
|
+
}
|
|
2333
|
+
}
|
|
2334
|
+
finalError = finalError || {};
|
|
2335
|
+
if (opts.throwOnError) {
|
|
2336
|
+
throw finalError;
|
|
2337
|
+
}
|
|
2338
|
+
return opts.responseStyle === "data" ? void 0 : {
|
|
2339
|
+
error: finalError,
|
|
2340
|
+
...result
|
|
2341
|
+
};
|
|
403
2342
|
};
|
|
404
|
-
return
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
] })
|
|
422
|
-
] })
|
|
423
|
-
] }),
|
|
424
|
-
/* @__PURE__ */ jsx5(Box4, { marginTop: 1, gap: 3, children: TOKEN_INPUT_CONTROLS.map((control) => /* @__PURE__ */ jsxs4(Text5, { children: [
|
|
425
|
-
"[",
|
|
426
|
-
control.keys,
|
|
427
|
-
"] ",
|
|
428
|
-
control.label
|
|
429
|
-
] }, control.keys)) })
|
|
430
|
-
] });
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
// packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/screen.tsx
|
|
434
|
-
import { useEffect as useEffect3, useMemo, useState as useState5 } from "react";
|
|
435
|
-
import { Box as Box5, Text as Text6 } from "ink";
|
|
2343
|
+
return {
|
|
2344
|
+
buildUrl,
|
|
2345
|
+
connect: (options) => request({ ...options, method: "CONNECT" }),
|
|
2346
|
+
delete: (options) => request({ ...options, method: "DELETE" }),
|
|
2347
|
+
get: (options) => request({ ...options, method: "GET" }),
|
|
2348
|
+
getConfig,
|
|
2349
|
+
head: (options) => request({ ...options, method: "HEAD" }),
|
|
2350
|
+
interceptors,
|
|
2351
|
+
options: (options) => request({ ...options, method: "OPTIONS" }),
|
|
2352
|
+
patch: (options) => request({ ...options, method: "PATCH" }),
|
|
2353
|
+
post: (options) => request({ ...options, method: "POST" }),
|
|
2354
|
+
put: (options) => request({ ...options, method: "PUT" }),
|
|
2355
|
+
request,
|
|
2356
|
+
setConfig,
|
|
2357
|
+
trace: (options) => request({ ...options, method: "TRACE" })
|
|
2358
|
+
};
|
|
2359
|
+
};
|
|
436
2360
|
|
|
437
|
-
// packages/experience-design-system-
|
|
438
|
-
|
|
2361
|
+
// packages/experience-design-system-client/dist/src/generated/client.gen.js
|
|
2362
|
+
var client = createClient(createConfig());
|
|
439
2363
|
|
|
440
|
-
// packages/experience-design-system-
|
|
441
|
-
var
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
".git"
|
|
451
|
-
]);
|
|
452
|
-
var CATEGORY_BY_EXTENSION = /* @__PURE__ */ new Map([
|
|
453
|
-
["tsx", "tsx"],
|
|
454
|
-
["ts", "ts"],
|
|
455
|
-
["vue", "vue"],
|
|
456
|
-
["astro", "astro"],
|
|
457
|
-
["jsx", "jsx"],
|
|
458
|
-
["js", "js"],
|
|
459
|
-
["json", "json"]
|
|
460
|
-
]);
|
|
461
|
-
var COMPONENT_CATEGORIES = ["tsx", "ts", "vue", "astro", "jsx", "js"];
|
|
462
|
-
var ROW_LABELS = {
|
|
463
|
-
tsx: ".tsx files",
|
|
464
|
-
ts: ".ts files",
|
|
465
|
-
vue: ".vue files",
|
|
466
|
-
astro: ".astro files",
|
|
467
|
-
jsx: ".jsx files",
|
|
468
|
-
js: ".js files",
|
|
469
|
-
json: ".json files (design tokens)",
|
|
470
|
-
other: "other (ignored)"
|
|
2364
|
+
// packages/experience-design-system-client/dist/src/generated/sdk.gen.js
|
|
2365
|
+
var designSystemImportSourcelessPreview = (options) => {
|
|
2366
|
+
return (options.client ?? client).post({
|
|
2367
|
+
url: "/spaces/{spaceId}/environments/{environmentId}/design_systems/imports/preview",
|
|
2368
|
+
...options,
|
|
2369
|
+
headers: {
|
|
2370
|
+
"Content-Type": "application/json",
|
|
2371
|
+
...options.headers
|
|
2372
|
+
}
|
|
2373
|
+
});
|
|
471
2374
|
};
|
|
472
|
-
var
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
2375
|
+
var designSystemImportApply = (options) => {
|
|
2376
|
+
return (options.client ?? client).post({
|
|
2377
|
+
url: "/spaces/{spaceId}/environments/{environmentId}/design_systems/imports/apply",
|
|
2378
|
+
...options,
|
|
2379
|
+
headers: {
|
|
2380
|
+
"Content-Type": "application/json",
|
|
2381
|
+
...options.headers
|
|
2382
|
+
}
|
|
2383
|
+
});
|
|
2384
|
+
};
|
|
2385
|
+
var designSystemImportGetOperation = (options) => {
|
|
2386
|
+
return (options.client ?? client).get({
|
|
2387
|
+
url: "/spaces/{spaceId}/environments/{environmentId}/design_systems/imports/apply/{operationId}",
|
|
2388
|
+
...options
|
|
2389
|
+
});
|
|
2390
|
+
};
|
|
2391
|
+
|
|
2392
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/constants/api.js
|
|
2393
|
+
var PREVIEW_ERROR_PREFIX = "preview failed:";
|
|
2394
|
+
var APPLY_ERROR_PREFIX = "apply failed:";
|
|
2395
|
+
var USER_AGENT = "experience-design-system-backend-pipeline";
|
|
2396
|
+
|
|
2397
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/helpers/http-utils.js
|
|
2398
|
+
var MAX_RETRY_AFTER_MS = 6e4;
|
|
2399
|
+
function isTransientStatus(status) {
|
|
2400
|
+
return status >= 500 && status <= 599;
|
|
2401
|
+
}
|
|
2402
|
+
function retryAfterMs(response) {
|
|
2403
|
+
const value = response.headers?.get("retry-after")?.trim();
|
|
2404
|
+
if (!value)
|
|
2405
|
+
return void 0;
|
|
2406
|
+
const seconds = Number(value);
|
|
2407
|
+
const delayMs = Number.isFinite(seconds) ? seconds * 1e3 : Date.parse(value) - Date.now();
|
|
2408
|
+
if (!Number.isFinite(delayMs) || delayMs < 0 || delayMs > MAX_RETRY_AFTER_MS)
|
|
2409
|
+
return void 0;
|
|
2410
|
+
return Math.round(delayMs);
|
|
485
2411
|
}
|
|
486
|
-
function
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
total: a.total + b.total
|
|
497
|
-
};
|
|
2412
|
+
function isApsDenialBody(body) {
|
|
2413
|
+
if (!body)
|
|
2414
|
+
return false;
|
|
2415
|
+
try {
|
|
2416
|
+
const parsed = JSON.parse(body);
|
|
2417
|
+
const id = parsed?.sys?.id;
|
|
2418
|
+
return id === "NotFound" || id === "AccessDenied";
|
|
2419
|
+
} catch {
|
|
2420
|
+
return false;
|
|
2421
|
+
}
|
|
498
2422
|
}
|
|
499
|
-
function
|
|
500
|
-
|
|
501
|
-
if (code === "EACCES") return "permission-denied";
|
|
502
|
-
return "unreadable";
|
|
2423
|
+
function stringifyError(error) {
|
|
2424
|
+
return typeof error === "string" ? error : JSON.stringify(error ?? {});
|
|
503
2425
|
}
|
|
504
|
-
function
|
|
505
|
-
|
|
506
|
-
case "is-file":
|
|
507
|
-
return {
|
|
508
|
-
headline: "That's a file, not a directory.",
|
|
509
|
-
hints: [
|
|
510
|
-
"Provide the path to your component library's root folder, not a specific file.",
|
|
511
|
-
"Example: ~/projects/my-design-system"
|
|
512
|
-
]
|
|
513
|
-
};
|
|
514
|
-
case "not-found":
|
|
515
|
-
return {
|
|
516
|
-
headline: `Directory not found: ${path}`,
|
|
517
|
-
hints: ["Double-check the path and try again. Tip: you can use ~, relative, or absolute paths."]
|
|
518
|
-
};
|
|
519
|
-
case "permission-denied":
|
|
520
|
-
return {
|
|
521
|
-
headline: `Permission denied: ${path}`,
|
|
522
|
-
hints: ["You don't have read access to this directory."]
|
|
523
|
-
};
|
|
524
|
-
case "not-directory":
|
|
525
|
-
return { headline: `Not a directory: ${path}`, hints: [] };
|
|
526
|
-
case "unreadable":
|
|
527
|
-
return { headline: `Cannot access: ${path}`, hints: [] };
|
|
528
|
-
}
|
|
2426
|
+
function errorMessage(error) {
|
|
2427
|
+
return error instanceof Error && error.message ? error.message : String(error);
|
|
529
2428
|
}
|
|
530
|
-
function
|
|
531
|
-
|
|
532
|
-
const tone = category === "json" ? "accent" : category === "other" ? "muted" : "default";
|
|
533
|
-
return { label: ROW_LABELS[category], count: counts[category], tone };
|
|
534
|
-
});
|
|
535
|
-
const componentFiles = COMPONENT_CATEGORIES.reduce((sum, category) => sum + counts[category], 0);
|
|
536
|
-
if (componentFiles > 0) return { total: counts.total, rows };
|
|
537
|
-
if (counts.json > 0) {
|
|
538
|
-
return { total: counts.total, rows, warning: "No component files found \u2014 only token files detected." };
|
|
539
|
-
}
|
|
540
|
-
return {
|
|
541
|
-
total: counts.total,
|
|
542
|
-
rows,
|
|
543
|
-
warning: "No component or token files found. Try a different path."
|
|
544
|
-
};
|
|
2429
|
+
function defaultSleep(delayMs) {
|
|
2430
|
+
return new Promise((resolve2) => setTimeout(resolve2, delayMs));
|
|
545
2431
|
}
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
2432
|
+
|
|
2433
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/helpers/sanitize-preview.js
|
|
2434
|
+
var PROPERTY_BREAKING_REASONS = /* @__PURE__ */ new Set([
|
|
2435
|
+
"removed",
|
|
2436
|
+
"added_required_no_default",
|
|
2437
|
+
"type_changed",
|
|
2438
|
+
"validation_narrowed"
|
|
2439
|
+
]);
|
|
2440
|
+
var SLOT_BREAKING_REASONS = /* @__PURE__ */ new Set(["slot_removed", "slot_allowed_components_narrowed"]);
|
|
2441
|
+
function sanitizeBreakingChanges(raw) {
|
|
2442
|
+
if (!Array.isArray(raw))
|
|
2443
|
+
return [];
|
|
2444
|
+
const out = [];
|
|
2445
|
+
for (const bc of raw) {
|
|
2446
|
+
if (typeof bc !== "object" || bc === null)
|
|
2447
|
+
continue;
|
|
2448
|
+
const reason = bc.reason;
|
|
2449
|
+
if (typeof reason !== "string")
|
|
2450
|
+
continue;
|
|
2451
|
+
if ("propertyId" in bc && typeof bc.propertyId === "string") {
|
|
2452
|
+
if (PROPERTY_BREAKING_REASONS.has(reason))
|
|
2453
|
+
out.push(bc);
|
|
2454
|
+
continue;
|
|
2455
|
+
}
|
|
2456
|
+
if ("slotId" in bc && typeof bc.slotId === "string") {
|
|
2457
|
+
if (SLOT_BREAKING_REASONS.has(reason))
|
|
2458
|
+
out.push(bc);
|
|
2459
|
+
continue;
|
|
2460
|
+
}
|
|
2461
|
+
}
|
|
2462
|
+
return out;
|
|
549
2463
|
}
|
|
550
|
-
function
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
if (
|
|
554
|
-
|
|
2464
|
+
function sanitizePreviewResponse(res) {
|
|
2465
|
+
for (const item of res.components?.changed ?? []) {
|
|
2466
|
+
const cc = item.changeClassification;
|
|
2467
|
+
if (cc && Array.isArray(cc.breakingChanges)) {
|
|
2468
|
+
cc.breakingChanges = sanitizeBreakingChanges(cc.breakingChanges);
|
|
2469
|
+
}
|
|
555
2470
|
}
|
|
556
|
-
|
|
557
|
-
return void 0;
|
|
2471
|
+
return res;
|
|
558
2472
|
}
|
|
559
2473
|
|
|
560
|
-
// packages/experience-design-system-
|
|
561
|
-
var
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
{ keys: "Esc", label: "Back" }
|
|
571
|
-
]
|
|
572
|
-
};
|
|
573
|
-
function controlsFor(phase) {
|
|
574
|
-
return CONTROLS[phase];
|
|
2474
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/helpers/host-utils.js
|
|
2475
|
+
var DEFAULT_API_HOST = "https://api.contentful.com";
|
|
2476
|
+
function trimTrailingSlashes(value) {
|
|
2477
|
+
return value.replace(/\/+$/, "");
|
|
2478
|
+
}
|
|
2479
|
+
function normalizeHostInput(host) {
|
|
2480
|
+
const value = host?.trim();
|
|
2481
|
+
if (!value)
|
|
2482
|
+
return void 0;
|
|
2483
|
+
return trimTrailingSlashes(value);
|
|
575
2484
|
}
|
|
576
|
-
function
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
2485
|
+
function toConfiguredHost2(host) {
|
|
2486
|
+
const normalized = normalizeHostInput(host);
|
|
2487
|
+
if (!normalized)
|
|
2488
|
+
return void 0;
|
|
2489
|
+
return normalized.replace(/^https:\/\//i, "");
|
|
2490
|
+
}
|
|
2491
|
+
function toApiHost2(host) {
|
|
2492
|
+
const normalized = normalizeHostInput(host);
|
|
2493
|
+
if (!normalized)
|
|
2494
|
+
return DEFAULT_API_HOST;
|
|
2495
|
+
if (/^[a-z][a-z\d+\-.]*:\/\//i.test(normalized))
|
|
2496
|
+
return normalized;
|
|
2497
|
+
return `https://${normalized}`;
|
|
583
2498
|
}
|
|
584
2499
|
|
|
585
|
-
// packages/experience-design-system-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
2500
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/types/api-error.js
|
|
2501
|
+
var ERROR_BODY_LOG_CAP = 16384;
|
|
2502
|
+
var ApiError = class extends Error {
|
|
2503
|
+
status;
|
|
2504
|
+
body;
|
|
2505
|
+
guidance;
|
|
2506
|
+
constructor(message, status, body, guidance) {
|
|
2507
|
+
super(message);
|
|
2508
|
+
this.status = status;
|
|
2509
|
+
this.body = body;
|
|
2510
|
+
this.guidance = guidance;
|
|
2511
|
+
if (body) {
|
|
2512
|
+
const trimmed = body.length > ERROR_BODY_LOG_CAP ? body.slice(0, ERROR_BODY_LOG_CAP) + "\u2026" : body;
|
|
2513
|
+
this.message = `${message}
|
|
2514
|
+
${trimmed}`;
|
|
2515
|
+
}
|
|
2516
|
+
}
|
|
2517
|
+
};
|
|
2518
|
+
|
|
2519
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/helpers/api-client/api-client.js
|
|
2520
|
+
var ApiClient = class {
|
|
2521
|
+
host;
|
|
2522
|
+
token;
|
|
2523
|
+
spaceId;
|
|
2524
|
+
environmentId;
|
|
2525
|
+
retry;
|
|
2526
|
+
lastRequestId;
|
|
2527
|
+
constructor(opts) {
|
|
2528
|
+
this.host = toApiHost2(opts.host);
|
|
2529
|
+
this.token = opts.cmaToken;
|
|
2530
|
+
this.spaceId = opts.spaceId;
|
|
2531
|
+
this.environmentId = opts.environmentId;
|
|
2532
|
+
const initialDelayMs = Math.max(0, opts.retry?.initialDelayMs ?? 250);
|
|
2533
|
+
this.retry = {
|
|
2534
|
+
maxAttempts: Math.max(1, Math.floor(opts.retry?.maxAttempts ?? 3)),
|
|
2535
|
+
initialDelayMs,
|
|
2536
|
+
maxDelayMs: Math.max(initialDelayMs, opts.retry?.maxDelayMs ?? 2e3),
|
|
2537
|
+
sleep: opts.retry?.sleep ?? defaultSleep
|
|
2538
|
+
};
|
|
2539
|
+
}
|
|
2540
|
+
getLastRequestId() {
|
|
2541
|
+
return this.lastRequestId;
|
|
2542
|
+
}
|
|
2543
|
+
noteRequestId(response) {
|
|
2544
|
+
const id = response.headers.get("x-contentful-request-id");
|
|
2545
|
+
if (id)
|
|
2546
|
+
this.lastRequestId = id;
|
|
2547
|
+
}
|
|
2548
|
+
headers() {
|
|
2549
|
+
return {
|
|
2550
|
+
Authorization: `Bearer ${this.token}`,
|
|
2551
|
+
"Content-Type": "application/json",
|
|
2552
|
+
"X-Contentful-User-Agent": USER_AGENT
|
|
2553
|
+
};
|
|
2554
|
+
}
|
|
2555
|
+
async requestWithRetry(phase, errorPrefix, makeCall) {
|
|
2556
|
+
for (let attempt = 1; attempt <= this.retry.maxAttempts; attempt++) {
|
|
2557
|
+
let result;
|
|
2558
|
+
try {
|
|
2559
|
+
result = await makeCall();
|
|
2560
|
+
} catch (error) {
|
|
2561
|
+
if (attempt === this.retry.maxAttempts) {
|
|
2562
|
+
const body = `The request failed after ${attempt} attempts because of a network error: ${errorMessage(error)}. Check your connection and try again.`;
|
|
2563
|
+
throw new ApiError(`${errorPrefix} 0`, 0, body);
|
|
2564
|
+
}
|
|
2565
|
+
await this.retry.sleep(Math.min(this.retry.initialDelayMs * 2 ** (attempt - 1), this.retry.maxDelayMs));
|
|
2566
|
+
continue;
|
|
2567
|
+
}
|
|
2568
|
+
if (!isTransientStatus(result.response.status)) {
|
|
2569
|
+
this.noteRequestId(result.response);
|
|
2570
|
+
return result;
|
|
2571
|
+
}
|
|
2572
|
+
if (attempt === this.retry.maxAttempts) {
|
|
2573
|
+
const body = stringifyError(result.error);
|
|
2574
|
+
const guidance = `The ${phase} request failed after ${attempt} attempts because the service remained unavailable. Wait a moment and try again.`;
|
|
2575
|
+
throw new ApiError(`${errorPrefix} ${result.response.status}`, result.response.status, body, guidance);
|
|
2576
|
+
}
|
|
2577
|
+
const backoffMs = Math.min(this.retry.initialDelayMs * 2 ** (attempt - 1), this.retry.maxDelayMs);
|
|
2578
|
+
await this.retry.sleep(retryAfterMs(result.response) ?? backoffMs);
|
|
2579
|
+
}
|
|
2580
|
+
throw new Error("Retry attempts exhausted");
|
|
2581
|
+
}
|
|
2582
|
+
async validateToken() {
|
|
2583
|
+
const res = await fetch(`${this.host}/users/me`, { headers: this.headers() });
|
|
2584
|
+
this.noteRequestId(res);
|
|
2585
|
+
if (res.status === 401) {
|
|
2586
|
+
throw new ApiError("CMA token is invalid or revoked", res.status, await res.text());
|
|
2587
|
+
}
|
|
2588
|
+
if (!res.ok) {
|
|
2589
|
+
throw new ApiError(`unexpected error validating token: ${res.status}`, res.status, await res.text());
|
|
2590
|
+
}
|
|
2591
|
+
await this.checkPreflight();
|
|
2592
|
+
}
|
|
2593
|
+
async checkPreflight() {
|
|
2594
|
+
const url = `${this.host}/spaces/${this.spaceId}/environments/${this.environmentId}/design_systems/preflight`;
|
|
2595
|
+
let res;
|
|
2596
|
+
try {
|
|
2597
|
+
res = await fetch(url, { headers: this.headers() });
|
|
2598
|
+
} catch {
|
|
2599
|
+
return;
|
|
2600
|
+
}
|
|
2601
|
+
this.noteRequestId(res);
|
|
2602
|
+
if (res.ok)
|
|
2603
|
+
return;
|
|
2604
|
+
if (res.status >= 500)
|
|
2605
|
+
return;
|
|
2606
|
+
const body = await res.text();
|
|
2607
|
+
if (res.status === 404 && !isApsDenialBody(body))
|
|
2608
|
+
return;
|
|
2609
|
+
throw new ApiError(`preflight failed: ${res.status}`, res.status, body);
|
|
2610
|
+
}
|
|
2611
|
+
async previewImport(cdf) {
|
|
2612
|
+
const result = await this.requestWithRetry("preview", PREVIEW_ERROR_PREFIX, () => designSystemImportSourcelessPreview({
|
|
2613
|
+
baseUrl: this.host,
|
|
2614
|
+
headers: this.headers(),
|
|
2615
|
+
path: { spaceId: this.spaceId, environmentId: this.environmentId },
|
|
2616
|
+
body: cdf,
|
|
2617
|
+
parseAs: "json"
|
|
2618
|
+
}));
|
|
2619
|
+
if (!result.response.ok) {
|
|
2620
|
+
throw new ApiError(`${PREVIEW_ERROR_PREFIX} ${result.response.status}`, result.response.status, stringifyError(result.error));
|
|
2621
|
+
}
|
|
2622
|
+
return sanitizePreviewResponse(result.data);
|
|
2623
|
+
}
|
|
2624
|
+
async applyImport(cdf, opts) {
|
|
2625
|
+
let result;
|
|
2626
|
+
try {
|
|
2627
|
+
result = await designSystemImportApply({
|
|
2628
|
+
baseUrl: this.host,
|
|
2629
|
+
headers: this.headers(),
|
|
2630
|
+
path: { spaceId: this.spaceId, environmentId: this.environmentId },
|
|
2631
|
+
body: { ...cdf, acknowledgeBreakingChanges: opts.acknowledgeBreakingChanges },
|
|
2632
|
+
parseAs: "json"
|
|
2633
|
+
});
|
|
2634
|
+
} catch (error) {
|
|
2635
|
+
const body = `The apply request was not retried because its outcome is unknown and retrying could start a duplicate operation. Cause: ${errorMessage(error)}`;
|
|
2636
|
+
throw new ApiError(`${APPLY_ERROR_PREFIX} 0`, 0, body);
|
|
2637
|
+
}
|
|
2638
|
+
if (!result.response.ok) {
|
|
2639
|
+
const body = stringifyError(result.error);
|
|
2640
|
+
const guidance = isTransientStatus(result.response.status) ? "The apply request was not retried because the server may already have started an operation and retrying could create a duplicate." : void 0;
|
|
2641
|
+
throw new ApiError(`${APPLY_ERROR_PREFIX} ${result.response.status}`, result.response.status, body, guidance);
|
|
2642
|
+
}
|
|
2643
|
+
this.noteRequestId(result.response);
|
|
2644
|
+
return result.data;
|
|
2645
|
+
}
|
|
2646
|
+
async pollOperation(operationId, opts = {}) {
|
|
2647
|
+
const intervalMs = opts.intervalMs ?? 2e3;
|
|
2648
|
+
const maxIntervalMs = opts.maxIntervalMs ?? Math.round(intervalMs * 2.5);
|
|
2649
|
+
const maxAttempts = opts.maxAttempts ?? 150;
|
|
2650
|
+
const terminalStatuses = /* @__PURE__ */ new Set(["succeeded", "partial", "failed"]);
|
|
2651
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
2652
|
+
const result = await this.requestWithRetry("poll", "poll failed:", () => designSystemImportGetOperation({
|
|
2653
|
+
baseUrl: this.host,
|
|
2654
|
+
headers: this.headers(),
|
|
2655
|
+
path: { spaceId: this.spaceId, environmentId: this.environmentId, operationId },
|
|
2656
|
+
parseAs: "json"
|
|
2657
|
+
}));
|
|
2658
|
+
if (!result.response.ok) {
|
|
2659
|
+
throw new ApiError(`poll failed: ${result.response.status}`, result.response.status, stringifyError(result.error));
|
|
2660
|
+
}
|
|
2661
|
+
const op = result.data;
|
|
2662
|
+
opts.onProgress?.(op);
|
|
2663
|
+
if (terminalStatuses.has(op.sys.status))
|
|
2664
|
+
return op;
|
|
2665
|
+
if (attempt < maxAttempts - 1) {
|
|
2666
|
+
const progress = maxAttempts > 1 ? attempt / (maxAttempts - 1) : 0;
|
|
2667
|
+
const baseDelay = intervalMs + (maxIntervalMs - intervalMs) * progress;
|
|
2668
|
+
const jitter = Math.random() * baseDelay * 0.15;
|
|
2669
|
+
await new Promise((resolve2) => setTimeout(resolve2, baseDelay + jitter));
|
|
2670
|
+
}
|
|
2671
|
+
}
|
|
2672
|
+
throw new Error(`Operation ${operationId} timed out after ${maxAttempts} attempts`);
|
|
2673
|
+
}
|
|
2674
|
+
};
|
|
2675
|
+
|
|
2676
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/controller/validation/assert-no-unresolved-slot-references.js
|
|
2677
|
+
init_shared();
|
|
2678
|
+
|
|
2679
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/helpers/edsi-errors/parse-binding-diagnostics.js
|
|
2680
|
+
function parseBindingDiagnostics(body) {
|
|
2681
|
+
if (!/binding configurations are invalid|Pointer path does not exist/i.test(body))
|
|
2682
|
+
return null;
|
|
2683
|
+
const locationMatches = [...body.matchAll(/(?:^|\.\s)([A-Za-z0-9_$-]+(?:\s*›\s*[A-Za-z0-9_$-]+){2,})/g)];
|
|
2684
|
+
const location = locationMatches.at(-1)?.[1];
|
|
2685
|
+
const pointerMessage = body.match(/Pointer path does not exist for '\[object Object\]':\s*(.+?)(?=\.\s*Default\s*›|$)/i)?.[1];
|
|
2686
|
+
const graphQlMessage = body.match(/return GraphQL validation error:\s*(.+?)(?=\.\s*Default\s*›|$)/i)?.[1];
|
|
2687
|
+
const heading = body.match(/^(.*?)(?=\.?\s*Pointer path does not exist|\.?\s*Default\s*›)/i)?.[1]?.trim();
|
|
2688
|
+
const diagnostics = [];
|
|
2689
|
+
if (pointerMessage)
|
|
2690
|
+
diagnostics.push({ message: pointerMessage.trim(), ...location ? { path: location } : {} });
|
|
2691
|
+
if (graphQlMessage)
|
|
2692
|
+
diagnostics.push({ message: graphQlMessage.trim(), ...location ? { path: location } : {} });
|
|
2693
|
+
return {
|
|
2694
|
+
code: "BindingValidationFailed",
|
|
2695
|
+
message: heading || "One or more binding configurations are invalid.",
|
|
2696
|
+
...diagnostics.length > 0 ? { diagnostics } : {}
|
|
2697
|
+
};
|
|
2698
|
+
}
|
|
2699
|
+
|
|
2700
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/helpers/edsi-errors/helpers.js
|
|
2701
|
+
function asRecord(value) {
|
|
2702
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
|
|
2703
|
+
}
|
|
2704
|
+
function displayValue(value) {
|
|
2705
|
+
if (typeof value === "string")
|
|
2706
|
+
return value;
|
|
2707
|
+
if (typeof value === "number" || typeof value === "boolean")
|
|
2708
|
+
return String(value);
|
|
2709
|
+
if (value === null || value === void 0)
|
|
2710
|
+
return null;
|
|
589
2711
|
try {
|
|
590
|
-
return
|
|
2712
|
+
return JSON.stringify(value);
|
|
591
2713
|
} catch {
|
|
592
|
-
return
|
|
2714
|
+
return null;
|
|
593
2715
|
}
|
|
594
2716
|
}
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
if (entry.isDirectory()) return countFiles(path);
|
|
598
|
-
if (entry.isFile() || entry.isSymbolicLink() && await isFile(path)) return addFile(emptyCounts(), entry.name);
|
|
599
|
-
return emptyCounts();
|
|
2717
|
+
function isPathSegment(value) {
|
|
2718
|
+
return typeof value === "string" || typeof value === "number" && Number.isFinite(value);
|
|
600
2719
|
}
|
|
601
|
-
|
|
602
|
-
|
|
2720
|
+
function formatPath(value) {
|
|
2721
|
+
if (isPathSegment(value))
|
|
2722
|
+
return String(value) ? { path: String(value) } : { path: null };
|
|
2723
|
+
if (Array.isArray(value)) {
|
|
2724
|
+
const parts = value.filter(isPathSegment);
|
|
2725
|
+
return parts.length > 0 ? { path: parts.join(" \u203A ") } : { path: null };
|
|
2726
|
+
}
|
|
2727
|
+
return {};
|
|
2728
|
+
}
|
|
2729
|
+
function componentFromPath(path) {
|
|
2730
|
+
if (!path)
|
|
2731
|
+
return void 0;
|
|
2732
|
+
const manifestMatch = path.match(/manifest:components\/([^/›]+)/);
|
|
2733
|
+
if (manifestMatch?.[1])
|
|
2734
|
+
return manifestMatch[1];
|
|
2735
|
+
const parts = path.split(/[›/]/).map((part) => part.trim()).filter(Boolean);
|
|
2736
|
+
const componentsIndex = parts.findIndex((part) => part === "components");
|
|
2737
|
+
return componentsIndex === -1 ? void 0 : parts[componentsIndex + 1];
|
|
2738
|
+
}
|
|
2739
|
+
function diagnosticMessage(error) {
|
|
2740
|
+
const candidates = [
|
|
2741
|
+
["message", error.message],
|
|
2742
|
+
["details", error.details],
|
|
2743
|
+
["error", error.error],
|
|
2744
|
+
["name", error.name]
|
|
2745
|
+
];
|
|
2746
|
+
for (const [messageSource, value] of candidates) {
|
|
2747
|
+
const message = displayValue(value);
|
|
2748
|
+
if (message !== null)
|
|
2749
|
+
return { message, messageSource };
|
|
2750
|
+
}
|
|
2751
|
+
return { message: "Validation failed" };
|
|
2752
|
+
}
|
|
2753
|
+
function parseObjectLiteralTail(body) {
|
|
2754
|
+
const braceStart = body.lastIndexOf("{");
|
|
2755
|
+
if (braceStart === -1)
|
|
2756
|
+
return null;
|
|
2757
|
+
const tail = body.slice(braceStart);
|
|
2758
|
+
const codeMatch = tail.match(/code:\s*['"]([^'"]+)['"]/);
|
|
2759
|
+
const cycleMatch = tail.match(/cycle:\s*\[\s*([^\]]*)\s*\]/);
|
|
2760
|
+
if (!codeMatch && !cycleMatch)
|
|
2761
|
+
return null;
|
|
2762
|
+
const code = codeMatch ? codeMatch[1] : null;
|
|
2763
|
+
let cycle = null;
|
|
2764
|
+
if (cycleMatch) {
|
|
2765
|
+
cycle = cycleMatch[1].split(",").map((s) => s.trim().replace(/^['"]|['"]$/g, "")).filter((s) => s.length > 0);
|
|
2766
|
+
if (cycle.length === 0)
|
|
2767
|
+
cycle = null;
|
|
2768
|
+
}
|
|
2769
|
+
return { code, cycle };
|
|
2770
|
+
}
|
|
2771
|
+
|
|
2772
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/helpers/edsi-errors/parse-json-body.js
|
|
2773
|
+
function parseValidationDiagnostics(details) {
|
|
2774
|
+
if (!Array.isArray(details.errors))
|
|
2775
|
+
return [];
|
|
2776
|
+
const diagnostics = [];
|
|
2777
|
+
for (const rawError of details.errors) {
|
|
2778
|
+
const error = asRecord(rawError);
|
|
2779
|
+
if (!error)
|
|
2780
|
+
continue;
|
|
2781
|
+
const location = formatPath(error.path);
|
|
2782
|
+
const component = displayValue(error.component ?? error.componentName ?? error.componentId) ?? componentFromPath(location.path);
|
|
2783
|
+
diagnostics.push({ ...diagnosticMessage(error), ...location, ...component ? { component } : {} });
|
|
2784
|
+
}
|
|
2785
|
+
return diagnostics;
|
|
2786
|
+
}
|
|
2787
|
+
function parseJsonBody(body) {
|
|
2788
|
+
let parsed;
|
|
603
2789
|
try {
|
|
604
|
-
|
|
2790
|
+
parsed = JSON.parse(body);
|
|
605
2791
|
} catch {
|
|
606
|
-
return
|
|
2792
|
+
return null;
|
|
607
2793
|
}
|
|
608
|
-
const
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
2794
|
+
const p = asRecord(parsed);
|
|
2795
|
+
if (!p)
|
|
2796
|
+
return null;
|
|
2797
|
+
const details = asRecord(p.details) ?? {};
|
|
2798
|
+
const pick = (k) => p[k] !== void 0 ? p[k] : details[k];
|
|
2799
|
+
const codeRaw = pick("code") ?? asRecord(p.sys)?.id;
|
|
2800
|
+
const messageRaw = pick("message");
|
|
2801
|
+
const cycleRaw = pick("cycle");
|
|
2802
|
+
const out = {};
|
|
2803
|
+
if (typeof codeRaw === "string")
|
|
2804
|
+
out.code = codeRaw;
|
|
2805
|
+
if (typeof messageRaw === "string")
|
|
2806
|
+
out.message = messageRaw;
|
|
2807
|
+
if (Array.isArray(cycleRaw)) {
|
|
2808
|
+
const strs = cycleRaw.filter((x) => typeof x === "string");
|
|
2809
|
+
if (strs.length > 0)
|
|
2810
|
+
out.cycle = strs;
|
|
2811
|
+
}
|
|
2812
|
+
const diagnostics = parseValidationDiagnostics(details);
|
|
2813
|
+
if (diagnostics.length > 0)
|
|
2814
|
+
out.diagnostics = diagnostics;
|
|
2815
|
+
return out;
|
|
612
2816
|
}
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
2817
|
+
|
|
2818
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/helpers/edsi-errors/strip-lambda-log-prefix.js
|
|
2819
|
+
var LAMBDA_LOG_PREFIX_RE = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z\s+[0-9a-f-]+\s+ERROR\s+(?:\[dd\.[^\]]*\]\s*)?/;
|
|
2820
|
+
var DD_TAG_RE = /\[dd\.(?:trace_id|span_id)=[^\]]*\]\s*/g;
|
|
2821
|
+
function stripLambdaLogPrefix(body) {
|
|
2822
|
+
return body.replace(LAMBDA_LOG_PREFIX_RE, "").replace(DD_TAG_RE, "").trim();
|
|
2823
|
+
}
|
|
2824
|
+
|
|
2825
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/helpers/edsi-errors/parse-edsi-error.js
|
|
2826
|
+
var API_ERROR_PREFIX_RE = /^(?:apply|preview|poll) failed: \d+$/;
|
|
2827
|
+
function parseEdsiError(rawInput) {
|
|
2828
|
+
if (!rawInput)
|
|
2829
|
+
return { code: null, message: "", cycle: null, raw: true };
|
|
2830
|
+
const { body, prefix } = splitPhasePrefix(rawInput);
|
|
2831
|
+
const cleaned = stripLambdaLogPrefix(body);
|
|
2832
|
+
const json = parseJsonBody(cleaned) ?? parseJsonBody(body);
|
|
2833
|
+
const bindingFromJson = typeof json?.message === "string" ? parseBindingDiagnostics(json.message) : null;
|
|
2834
|
+
if (bindingFromJson) {
|
|
2835
|
+
return {
|
|
2836
|
+
code: bindingFromJson.code ?? json?.code ?? null,
|
|
2837
|
+
message: bindingFromJson.message ?? cleaned,
|
|
2838
|
+
cycle: null,
|
|
2839
|
+
raw: false,
|
|
2840
|
+
...bindingFromJson.diagnostics ? { diagnostics: bindingFromJson.diagnostics } : {}
|
|
2841
|
+
};
|
|
620
2842
|
}
|
|
621
|
-
|
|
2843
|
+
if (json && (json.code || json.message || json.cycle)) {
|
|
2844
|
+
return {
|
|
2845
|
+
code: json.code ?? null,
|
|
2846
|
+
message: json.message ?? (cleaned || prefix),
|
|
2847
|
+
cycle: json.cycle ?? null,
|
|
2848
|
+
raw: false,
|
|
2849
|
+
...json.diagnostics ? { diagnostics: json.diagnostics } : {}
|
|
2850
|
+
};
|
|
2851
|
+
}
|
|
2852
|
+
const binding = parseBindingDiagnostics(cleaned);
|
|
2853
|
+
if (binding) {
|
|
2854
|
+
return {
|
|
2855
|
+
code: binding.code ?? null,
|
|
2856
|
+
message: binding.message ?? cleaned,
|
|
2857
|
+
cycle: null,
|
|
2858
|
+
raw: false,
|
|
2859
|
+
...binding.diagnostics ? { diagnostics: binding.diagnostics } : {}
|
|
2860
|
+
};
|
|
2861
|
+
}
|
|
2862
|
+
const literal2 = parseObjectLiteralTail(cleaned);
|
|
2863
|
+
if (literal2 && (literal2.code || literal2.cycle)) {
|
|
2864
|
+
const braceStart = cleaned.lastIndexOf("{");
|
|
2865
|
+
const head = braceStart === -1 ? cleaned : cleaned.slice(0, braceStart).trim();
|
|
2866
|
+
return { code: literal2.code ?? null, message: head || cleaned, cycle: literal2.cycle ?? null, raw: false };
|
|
2867
|
+
}
|
|
2868
|
+
return { code: null, message: cleaned || prefix || rawInput, cycle: null, raw: true };
|
|
2869
|
+
}
|
|
2870
|
+
function splitPhasePrefix(input) {
|
|
2871
|
+
const nlIndex = input.indexOf("\n");
|
|
2872
|
+
if (nlIndex === -1)
|
|
2873
|
+
return { body: input, prefix: "" };
|
|
2874
|
+
const firstLine = input.slice(0, nlIndex);
|
|
2875
|
+
if (!API_ERROR_PREFIX_RE.test(firstLine))
|
|
2876
|
+
return { body: input, prefix: "" };
|
|
2877
|
+
return { body: input.slice(nlIndex + 1), prefix: firstLine };
|
|
622
2878
|
}
|
|
623
2879
|
|
|
624
|
-
// packages/experience-design-system-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
2880
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/helpers/edsi-errors/format-parsed-edsi-error.js
|
|
2881
|
+
function formatParsedEdsiError(parsed, opts = {}) {
|
|
2882
|
+
const lines = [];
|
|
2883
|
+
if (parsed.code)
|
|
2884
|
+
lines.push(`[${parsed.code}]`);
|
|
2885
|
+
if (parsed.message)
|
|
2886
|
+
lines.push(parsed.message);
|
|
2887
|
+
for (const diagnostic of parsed.diagnostics ?? []) {
|
|
2888
|
+
const context = [
|
|
2889
|
+
diagnostic.component ? `Component: ${diagnostic.component}` : null,
|
|
2890
|
+
diagnostic.path ? `Path: ${diagnostic.path}` : null
|
|
2891
|
+
].filter(Boolean);
|
|
2892
|
+
lines.push(`- ${diagnostic.message}${context.length > 0 ? ` (${context.join("; ")})` : ""}`);
|
|
2893
|
+
if (diagnostic.path === null) {
|
|
2894
|
+
lines.push(" Location: not provided by the server. Review the submitted CDF file; no component or field was identified.");
|
|
2895
|
+
}
|
|
2896
|
+
if (opts.verbose && diagnostic.messageSource) {
|
|
2897
|
+
lines.push(` Message field: ${diagnostic.messageSource}`);
|
|
2898
|
+
}
|
|
2899
|
+
}
|
|
2900
|
+
if (parsed.code === "BindingValidationFailed") {
|
|
2901
|
+
const location = parsed.diagnostics?.find((d) => d.path)?.path;
|
|
2902
|
+
lines.push(location ? `Next action: review the binding at ${location} and correct its pointer or GraphQL selection.` : "Next action: review the binding pointer and GraphQL selection.");
|
|
2903
|
+
}
|
|
2904
|
+
if (parsed.code === "AccessDenied") {
|
|
2905
|
+
lines.push("Next action: this operation requires DesignToken and Component permissions in this environment. Ask a Contentful admin to grant both on your role.");
|
|
2906
|
+
}
|
|
2907
|
+
if (parsed.code === "NotFound") {
|
|
2908
|
+
lines.push("Next action: verify the resource id is correct. If it should exist, your role may lack read permission on DesignToken or Component.");
|
|
2909
|
+
}
|
|
2910
|
+
if (parsed.cycle && parsed.cycle.length > 0) {
|
|
2911
|
+
lines.push(`Cycle: ${parsed.cycle.join(" \u2192 ")} \u2192 ${parsed.cycle[0]}`);
|
|
2912
|
+
lines.push("Break the cycle by removing at least one $allowedComponents entry.");
|
|
2913
|
+
}
|
|
2914
|
+
if (opts.verbose && opts.raw) {
|
|
2915
|
+
lines.push("");
|
|
2916
|
+
lines.push("--- raw ---");
|
|
2917
|
+
lines.push(opts.raw);
|
|
2918
|
+
}
|
|
2919
|
+
return lines.filter(Boolean).join("\n");
|
|
633
2920
|
}
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
hints.map((hint) => /* @__PURE__ */ jsx6(Text6, { dimColor: true, children: hint }, hint))
|
|
642
|
-
] });
|
|
2921
|
+
|
|
2922
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/helpers/edsi-errors/format-edsi-error.js
|
|
2923
|
+
function formatEdsiError(raw, opts = {}) {
|
|
2924
|
+
const input = typeof raw === "string" ? raw : displayValue(raw);
|
|
2925
|
+
if (!input)
|
|
2926
|
+
return "";
|
|
2927
|
+
return formatParsedEdsiError(parseEdsiError(input), { ...opts, raw: opts.raw ?? input });
|
|
643
2928
|
}
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
"\u2713 Found ",
|
|
654
|
-
total,
|
|
655
|
-
" files:"
|
|
656
|
-
] }),
|
|
657
|
-
rows.map((row) => /* @__PURE__ */ jsx6(Row, { row }, row.label))
|
|
658
|
-
] }),
|
|
659
|
-
warning && /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.warning, children: [
|
|
660
|
-
"\u26A0 ",
|
|
661
|
-
warning
|
|
662
|
-
] }),
|
|
663
|
-
/* @__PURE__ */ jsx6(Text6, { children: "Does this look right?" })
|
|
664
|
-
] });
|
|
2929
|
+
|
|
2930
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/helpers/edsi-errors/format-api-error.js
|
|
2931
|
+
function formatApiError(error, verbose = false) {
|
|
2932
|
+
const formatted = formatEdsiError(error.body || error.message, { verbose, raw: error.body }) || error.message;
|
|
2933
|
+
const phase = error.message.split("\n", 1)[0];
|
|
2934
|
+
const withPhase = /^(?:apply|preview|poll) failed: \d+$/.test(phase) && formatted !== phase ? `${phase}
|
|
2935
|
+
${formatted}` : formatted;
|
|
2936
|
+
return error.guidance ? `${withPhase}
|
|
2937
|
+
${error.guidance}` : withPhase;
|
|
665
2938
|
}
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
onBack
|
|
671
|
-
}) {
|
|
672
|
-
const resolvedPath = useMemo(() => resolveUserPath(projectPath), [projectPath]);
|
|
673
|
-
const [scan, setScan] = useState5();
|
|
674
|
-
useEffect3(() => {
|
|
675
|
-
let cancelled = false;
|
|
676
|
-
setScan(void 0);
|
|
677
|
-
void scanProject(resolvedPath).then((result) => {
|
|
678
|
-
if (!cancelled) setScan(result);
|
|
679
|
-
});
|
|
680
|
-
return () => {
|
|
681
|
-
cancelled = true;
|
|
682
|
-
};
|
|
683
|
-
}, [resolvedPath]);
|
|
684
|
-
const phase = phaseOf(scan);
|
|
685
|
-
usePathValidationControls(phase, { onConfirm: () => onConfirm(resolvedPath), onChangePath, onBack });
|
|
686
|
-
return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
|
|
687
|
-
scan === void 0 && /* @__PURE__ */ jsxs5(Text6, { dimColor: true, children: [
|
|
688
|
-
"Scanning ",
|
|
689
|
-
/* @__PURE__ */ jsx6(Text6, { bold: true, children: resolvedPath }),
|
|
690
|
-
"..."
|
|
691
|
-
] }),
|
|
692
|
-
scan?.ok === false && /* @__PURE__ */ jsx6(Failure, { scan, path: resolvedPath }),
|
|
693
|
-
scan?.ok === true && /* @__PURE__ */ jsx6(Summary, { scan, path: resolvedPath }),
|
|
694
|
-
/* @__PURE__ */ jsx6(Box5, { marginTop: 1, gap: 3, children: controlsFor(phase).map((control) => /* @__PURE__ */ jsxs5(Text6, { dimColor: true, children: [
|
|
695
|
-
"[",
|
|
696
|
-
control.keys,
|
|
697
|
-
"] ",
|
|
698
|
-
control.label
|
|
699
|
-
] }, control.keys)) })
|
|
700
|
-
] });
|
|
2939
|
+
|
|
2940
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/controller/errors/format-api-error.js
|
|
2941
|
+
function formatApiError2(request) {
|
|
2942
|
+
return formatApiError(request.error, request.verbose ?? false);
|
|
701
2943
|
}
|
|
702
2944
|
|
|
703
|
-
// packages/experience-design-system-
|
|
704
|
-
|
|
705
|
-
import { Box as Box6, Text as Text7 } from "ink";
|
|
706
|
-
import TextInput3 from "ink-text-input";
|
|
2945
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/helpers/tokens/read-tokens-from-path.js
|
|
2946
|
+
init_shared();
|
|
707
2947
|
|
|
708
|
-
// packages/experience-design-system-
|
|
709
|
-
|
|
2948
|
+
// packages/experience-design-system-backend-pipeline/dist/src/index.js
|
|
2949
|
+
init_agents();
|
|
2950
|
+
|
|
2951
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/generation/src/controller/client/build-contentful-management-client.js
|
|
2952
|
+
import { createClient as createClient2 } from "contentful-management";
|
|
2953
|
+
|
|
2954
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/generation/src/helpers/existing-entities/fetch-from-contentful.js
|
|
2955
|
+
import { fetchAll } from "contentful-management";
|
|
2956
|
+
|
|
2957
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/apply/src/controller/endpoint/resolve-shared-inputs.js
|
|
2958
|
+
init_validate();
|
|
2959
|
+
|
|
2960
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/generation/src/controller/map-tokens/run-map-tokens.js
|
|
2961
|
+
init_build_prompt();
|
|
2962
|
+
init_create_local_cli_agent_invoker();
|
|
2963
|
+
init_describe_agent_failure();
|
|
2964
|
+
init_resolve_binary();
|
|
2965
|
+
init_resolve_skill_path();
|
|
2966
|
+
init_parse_map_token_prop_tool_calls();
|
|
2967
|
+
init_cache_keys();
|
|
2968
|
+
|
|
2969
|
+
// packages/experience-design-system-backend-pipeline/dist/src/agents/helpers/resolution/binary-exists.js
|
|
2970
|
+
import { execFile } from "node:child_process";
|
|
2971
|
+
import { promisify } from "node:util";
|
|
2972
|
+
var execFileAsync = promisify(execFile);
|
|
2973
|
+
|
|
2974
|
+
// packages/experience-design-system-backend-pipeline/dist/src/steps/generation/src/controller/map-tokens/run-map-tokens.js
|
|
2975
|
+
var DEFAULT_TIMEOUT_MS2 = 5 * 60 * 1e3;
|
|
710
2976
|
|
|
711
2977
|
// packages/experience-design-system-cli/src/tui/import/steps/04-credentials/logic.ts
|
|
712
2978
|
var FIELDS = ["spaceId", "environmentId", "cmaToken", "host"];
|
|
713
|
-
var DEFAULT_HOST = "api.contentful.com";
|
|
714
2979
|
function keyAction2(input, key) {
|
|
715
2980
|
if (key.escape) return "back";
|
|
716
2981
|
if (key.tab) return "next-field";
|
|
@@ -720,21 +2985,12 @@ function keyAction2(input, key) {
|
|
|
720
2985
|
function nextField(field) {
|
|
721
2986
|
return FIELDS[(FIELDS.indexOf(field) + 1) % FIELDS.length];
|
|
722
2987
|
}
|
|
723
|
-
function toConfiguredHost(host) {
|
|
724
|
-
const value = (host ?? "").trim().replace(/\/+$/, "");
|
|
725
|
-
return value === "" ? DEFAULT_HOST : value.replace(/^https:\/\//i, "");
|
|
726
|
-
}
|
|
727
|
-
function toApiHost(host) {
|
|
728
|
-
const value = host.trim().replace(/\/+$/, "");
|
|
729
|
-
if (value === "") return `https://${DEFAULT_HOST}`;
|
|
730
|
-
return /^[a-z][a-z\d+\-.]*:\/\//i.test(value) ? value : `https://${value}`;
|
|
731
|
-
}
|
|
732
2988
|
function normalize(values) {
|
|
733
2989
|
return {
|
|
734
2990
|
spaceId: values.spaceId.trim(),
|
|
735
2991
|
environmentId: values.environmentId.trim(),
|
|
736
2992
|
cmaToken: values.cmaToken.trim(),
|
|
737
|
-
host:
|
|
2993
|
+
host: toConfiguredHost2(values.host) ?? DEFAULT_CONFIGURED_HOST
|
|
738
2994
|
};
|
|
739
2995
|
}
|
|
740
2996
|
function missingField(values) {
|
|
@@ -762,59 +3018,30 @@ function useCredentialsControls(handlers) {
|
|
|
762
3018
|
}
|
|
763
3019
|
|
|
764
3020
|
// packages/experience-design-system-cli/src/tui/import/steps/04-credentials/validate.ts
|
|
765
|
-
var USER_AGENT = "app contentful.experience-design-system-cli";
|
|
766
|
-
function headers(token) {
|
|
767
|
-
return { Authorization: `Bearer ${token}`, "X-Contentful-User-Agent": USER_AGENT };
|
|
768
|
-
}
|
|
769
|
-
function isApsDenial(body) {
|
|
770
|
-
try {
|
|
771
|
-
const id = JSON.parse(body).sys?.id;
|
|
772
|
-
return id === "NotFound" || id === "AccessDenied";
|
|
773
|
-
} catch {
|
|
774
|
-
return false;
|
|
775
|
-
}
|
|
776
|
-
}
|
|
777
|
-
function messageFrom(body) {
|
|
778
|
-
try {
|
|
779
|
-
const message = JSON.parse(body).message;
|
|
780
|
-
return typeof message === "string" && message !== "" ? message : void 0;
|
|
781
|
-
} catch {
|
|
782
|
-
return void 0;
|
|
783
|
-
}
|
|
784
|
-
}
|
|
785
3021
|
async function validateCredentials(values) {
|
|
786
|
-
const
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
}
|
|
793
|
-
if (me.status === 401) return { ok: false, error: "CMA token is invalid or revoked." };
|
|
794
|
-
if (!me.ok) return { ok: false, error: `Unexpected error validating the token (${me.status}).` };
|
|
795
|
-
let preflight;
|
|
3022
|
+
const host = toApiHost2(values.host);
|
|
3023
|
+
const client2 = new ApiClient({
|
|
3024
|
+
host,
|
|
3025
|
+
spaceId: values.spaceId,
|
|
3026
|
+
environmentId: values.environmentId,
|
|
3027
|
+
cmaToken: values.cmaToken
|
|
3028
|
+
});
|
|
796
3029
|
try {
|
|
797
|
-
|
|
798
|
-
`${base}/spaces/${values.spaceId}/environments/${values.environmentId}/design_systems/preflight`,
|
|
799
|
-
{ headers: headers(values.cmaToken) }
|
|
800
|
-
);
|
|
801
|
-
} catch {
|
|
3030
|
+
await client2.validateToken();
|
|
802
3031
|
return { ok: true };
|
|
3032
|
+
} catch (error) {
|
|
3033
|
+
return { ok: false, error: toUserError(error, host) };
|
|
803
3034
|
}
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
if (
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
if (preflight.status === 404) {
|
|
812
|
-
return {
|
|
813
|
-
ok: false,
|
|
814
|
-
error: `Not found. Check the space ID, environment and API host.${detail ? ` (${detail})` : ""}`
|
|
815
|
-
};
|
|
3035
|
+
}
|
|
3036
|
+
function toUserError(error, host) {
|
|
3037
|
+
if (error instanceof ApiError) {
|
|
3038
|
+
if (error.status === 404 && error.message.startsWith("preflight failed:")) {
|
|
3039
|
+
return "Not found. Check the space ID, environment and API host.";
|
|
3040
|
+
}
|
|
3041
|
+
return formatApiError2({ error });
|
|
816
3042
|
}
|
|
817
|
-
|
|
3043
|
+
if (error instanceof Error) return `Could not reach ${host}: ${error.message}`;
|
|
3044
|
+
return String(error);
|
|
818
3045
|
}
|
|
819
3046
|
|
|
820
3047
|
// packages/experience-design-system-cli/src/tui/import/steps/04-credentials/screen.tsx
|
|
@@ -829,7 +3056,7 @@ function CredentialsScreen({
|
|
|
829
3056
|
onDone,
|
|
830
3057
|
onBack,
|
|
831
3058
|
initial = {},
|
|
832
|
-
validate = validateCredentials
|
|
3059
|
+
validate: validate2 = validateCredentials
|
|
833
3060
|
}) {
|
|
834
3061
|
const initialValues = useRef(
|
|
835
3062
|
normalize({
|
|
@@ -865,7 +3092,7 @@ function CredentialsScreen({
|
|
|
865
3092
|
return;
|
|
866
3093
|
}
|
|
867
3094
|
setValidating(true);
|
|
868
|
-
const result = await
|
|
3095
|
+
const result = await validate2(credentials);
|
|
869
3096
|
setValidating(false);
|
|
870
3097
|
if (result.ok) onDone({ skipped: false, credentials });
|
|
871
3098
|
else setError(result.error);
|
|
@@ -891,7 +3118,7 @@ function CredentialsScreen({
|
|
|
891
3118
|
value: values[field],
|
|
892
3119
|
focus: active === field && !validating,
|
|
893
3120
|
mask: field === "cmaToken" ? "\u2022" : void 0,
|
|
894
|
-
placeholder: field === "host" ?
|
|
3121
|
+
placeholder: field === "host" ? DEFAULT_CONFIGURED_HOST : void 0,
|
|
895
3122
|
onChange: change(field),
|
|
896
3123
|
onSubmit: () => void submit(field)
|
|
897
3124
|
}
|
|
@@ -935,7 +3162,7 @@ ${candidates.join("\n")}`);
|
|
|
935
3162
|
}
|
|
936
3163
|
|
|
937
3164
|
// packages/experience-design-system-cli/src/tui/import/spawn-v1-import.ts
|
|
938
|
-
function
|
|
3165
|
+
function buildArgs2(options) {
|
|
939
3166
|
const args = ["import"];
|
|
940
3167
|
if (options.project) {
|
|
941
3168
|
args.push("--project", options.project);
|
|
@@ -947,7 +3174,7 @@ function buildArgs(options) {
|
|
|
947
3174
|
}
|
|
948
3175
|
async function spawnV1Import(options = {}) {
|
|
949
3176
|
const cliPath = findLegacyCliPath();
|
|
950
|
-
const args =
|
|
3177
|
+
const args = buildArgs2(options);
|
|
951
3178
|
return new Promise((resolvePromise) => {
|
|
952
3179
|
const child = spawn("node", [cliPath, ...args], {
|
|
953
3180
|
stdio: "inherit",
|
|
@@ -994,28 +3221,28 @@ import { randomBytes } from "node:crypto";
|
|
|
994
3221
|
import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
|
|
995
3222
|
import { homedir as homedir2 } from "node:os";
|
|
996
3223
|
import { dirname as dirname2, join as join5 } from "node:path";
|
|
997
|
-
function
|
|
3224
|
+
function configRoot2() {
|
|
998
3225
|
return process.env["EDS_HOME"] || join5(homedir2(), ".contentful", "experience-design-system-cli");
|
|
999
3226
|
}
|
|
1000
|
-
var
|
|
1001
|
-
var
|
|
1002
|
-
async function
|
|
3227
|
+
var configFilePath2 = () => join5(configRoot2(), "config.json");
|
|
3228
|
+
var debugSessionsDir2 = () => join5(configRoot2(), "debug", "sessions");
|
|
3229
|
+
async function readSettings2() {
|
|
1003
3230
|
try {
|
|
1004
|
-
return JSON.parse(await readFile(
|
|
3231
|
+
return JSON.parse(await readFile(configFilePath2(), "utf8"));
|
|
1005
3232
|
} catch {
|
|
1006
3233
|
return {};
|
|
1007
3234
|
}
|
|
1008
3235
|
}
|
|
1009
|
-
async function
|
|
1010
|
-
const path =
|
|
3236
|
+
async function writeSettings2(settings) {
|
|
3237
|
+
const path = configFilePath2();
|
|
1011
3238
|
await mkdir(dirname2(path), { recursive: true });
|
|
1012
3239
|
const tmp = `${path}.${process.pid}.${randomBytes(4).toString("hex")}.tmp`;
|
|
1013
3240
|
await writeFile(tmp, `${JSON.stringify(settings, null, 2)}
|
|
1014
3241
|
`, { mode: 384 });
|
|
1015
3242
|
await rename(tmp, path);
|
|
1016
3243
|
}
|
|
1017
|
-
async function
|
|
1018
|
-
await
|
|
3244
|
+
async function updateSettings2(patch) {
|
|
3245
|
+
await writeSettings2({ ...await readSettings2(), ...patch });
|
|
1019
3246
|
}
|
|
1020
3247
|
|
|
1021
3248
|
// packages/experience-design-system-cli/src/tui/settings/debug-mode/debug-mode-store.ts
|
|
@@ -1023,11 +3250,11 @@ var DEFAULT_DEBUG_MODE_SETTING = {
|
|
|
1023
3250
|
enabled: true
|
|
1024
3251
|
};
|
|
1025
3252
|
async function readDebugModeSetting() {
|
|
1026
|
-
const { debugMode } = await
|
|
3253
|
+
const { debugMode } = await readSettings2();
|
|
1027
3254
|
return { ...DEFAULT_DEBUG_MODE_SETTING, ...debugMode };
|
|
1028
3255
|
}
|
|
1029
3256
|
async function writeDebugModeSetting(setting) {
|
|
1030
|
-
await
|
|
3257
|
+
await updateSettings2({ debugMode: setting });
|
|
1031
3258
|
}
|
|
1032
3259
|
|
|
1033
3260
|
// packages/experience-design-system-cli/src/tui/debug-store.ts
|
|
@@ -1044,9 +3271,9 @@ function datePrefix(now = /* @__PURE__ */ new Date()) {
|
|
|
1044
3271
|
function slugify(value) {
|
|
1045
3272
|
return value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
1046
3273
|
}
|
|
1047
|
-
function
|
|
3274
|
+
function generateSessionId3() {
|
|
1048
3275
|
const today = datePrefix();
|
|
1049
|
-
const root =
|
|
3276
|
+
const root = debugSessionsDir2();
|
|
1050
3277
|
const existing = existsSync3(root) ? readdirSync(root) : [];
|
|
1051
3278
|
const seqPattern = new RegExp(`^${today}-session-(\\d+)$`);
|
|
1052
3279
|
const maxSeq = existing.reduce((max, entry) => {
|
|
@@ -1055,9 +3282,9 @@ function generateSessionId() {
|
|
|
1055
3282
|
}, 0);
|
|
1056
3283
|
return `${today}-session-${maxSeq + 1}`;
|
|
1057
3284
|
}
|
|
1058
|
-
var SESSION_ID =
|
|
3285
|
+
var SESSION_ID = generateSessionId3();
|
|
1059
3286
|
function sessionDebugDir() {
|
|
1060
|
-
return join6(
|
|
3287
|
+
return join6(debugSessionsDir2(), SESSION_ID);
|
|
1061
3288
|
}
|
|
1062
3289
|
function currentDebugSessionDir() {
|
|
1063
3290
|
return sessionDebugDir();
|
|
@@ -1174,9 +3401,9 @@ async function readHelpInfo() {
|
|
|
1174
3401
|
const debugMode = await readDebugModeSetting();
|
|
1175
3402
|
return {
|
|
1176
3403
|
storage: [
|
|
1177
|
-
{ label: "Config folder", value:
|
|
1178
|
-
{ label: "Settings file", value:
|
|
1179
|
-
{ label: "Debug logs", value:
|
|
3404
|
+
{ label: "Config folder", value: configRoot2() },
|
|
3405
|
+
{ label: "Settings file", value: configFilePath2() },
|
|
3406
|
+
{ label: "Debug logs", value: debugSessionsDir2() }
|
|
1180
3407
|
],
|
|
1181
3408
|
troubleshooting: [
|
|
1182
3409
|
{ label: "CLI version", value: readPackageVersion() },
|
|
@@ -1302,8 +3529,8 @@ import { Box as Box9, Text as Text10, useInput as useInput9 } from "ink";
|
|
|
1302
3529
|
import TextInput4 from "ink-text-input";
|
|
1303
3530
|
|
|
1304
3531
|
// packages/experience-design-system-cli/src/tui/settings/utils/v1-store.ts
|
|
1305
|
-
var readV1Store =
|
|
1306
|
-
var writeV1Store =
|
|
3532
|
+
var readV1Store = readSettings2;
|
|
3533
|
+
var writeV1Store = writeSettings2;
|
|
1307
3534
|
|
|
1308
3535
|
// packages/experience-design-system-cli/src/tui/settings/contentful-configuration/config-store.ts
|
|
1309
3536
|
async function readCredentials() {
|