@contentful/experience-design-system-cli 2.37.1-dev-build-c5e75ab7.0 → 2.37.1-dev-build-ed4a0d5c.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
@@ -15165,6 +15165,35 @@ async function emitInvokedIfReady() {
15165
15165
  }, state.sessionId, { flush: true });
15166
15166
  }
15167
15167
 
15168
+ // packages/experience-design-system-backend-pipeline/dist/src/analytics/apply.js
15169
+ function countWriteResult(items, entityType) {
15170
+ const subset = items.filter((item) => item.entityType === entityType);
15171
+ return {
15172
+ created_count: subset.filter((item) => item.action === "create" && item.status === "succeeded").length,
15173
+ updated_count: subset.filter((item) => item.action === "update" && item.status === "succeeded").length,
15174
+ failed_count: subset.filter((item) => item.status === "failed").length
15175
+ };
15176
+ }
15177
+ function recordApplyOutcome(client2, spaceId, environmentId, operation) {
15178
+ setCommandContext({
15179
+ space_key: spaceId,
15180
+ environment_key: environmentId,
15181
+ x_contentful_request_id: client2.getLastRequestId()
15182
+ });
15183
+ enrichCommandResult({
15184
+ dsi_operation_id: operation.sys.id,
15185
+ component_type_result: countWriteResult(operation.items ?? [], "ComponentType"),
15186
+ design_token_result: countWriteResult(operation.items ?? [], "DesignToken")
15187
+ });
15188
+ }
15189
+ function recordContentfulContext(client2, spaceId, environmentId) {
15190
+ setCommandContext({
15191
+ space_key: spaceId,
15192
+ environment_key: environmentId,
15193
+ x_contentful_request_id: client2.getLastRequestId()
15194
+ });
15195
+ }
15196
+
15168
15197
  // packages/experience-design-system-backend-pipeline/dist/src/steps/generation/src/controller/map-tokens/run-map-tokens.js
15169
15198
  var DEFAULT_TIMEOUT_MS2 = 5 * 60 * 1e3;
15170
15199
  var MapTokensRunFailure = class _MapTokensRunFailure extends Error {
@@ -19157,7 +19186,8 @@ function GroupedSidebar(props) {
19157
19186
  dimPredicate,
19158
19187
  visibleRows: providedRows,
19159
19188
  graph,
19160
- filterVisibleKeys
19189
+ filterVisibleKeys,
19190
+ emptyMessage
19161
19191
  } = props;
19162
19192
  const allRows = providedRows ?? buildVisibleRows({
19163
19193
  items,
@@ -19174,6 +19204,10 @@ function GroupedSidebar(props) {
19174
19204
  const end = windowed ? start + (visibleCount ?? allRows.length) : allRows.length;
19175
19205
  const rows = windowed ? allRows.slice(start, end) : allRows;
19176
19206
  return /* @__PURE__ */ jsxs18(WindowedPanel, { width, height: props.height, title, focused, children: [
19207
+ allRows.length === 0 && emptyMessage !== void 0 && /* @__PURE__ */ jsxs18(Text19, { color: PALETTE2.warning, children: [
19208
+ " ",
19209
+ emptyMessage
19210
+ ] }),
19177
19211
  windowed && /* @__PURE__ */ jsx21(WindowIndicator, { direction: "up", count: start }),
19178
19212
  rows.map((row, i) => {
19179
19213
  const absoluteRowIdx = start + i;
@@ -19489,9 +19523,9 @@ function createSidebarViewsHelpSection(includeBreaking) {
19489
19523
  { keys: "L", label: "Flat view" },
19490
19524
  { keys: "i", label: "Focus lineage" }
19491
19525
  ];
19492
- if (includeBreaking) entries.push({ keys: "w", label: "Only breaking" });
19526
+ if (includeBreaking) entries.push({ keys: "w", label: "Show only components with breaking changes" });
19493
19527
  entries.push(
19494
- { keys: "o", label: "Only cycles" },
19528
+ { keys: "o", label: "Show only components in slot cycles" },
19495
19529
  { keys: "space", label: "Expand/collapse group" },
19496
19530
  { keys: "E / C", label: "Expand/collapse all" }
19497
19531
  );
@@ -20058,6 +20092,17 @@ function computeFilterKeys(input) {
20058
20092
  if (active.has("deleted")) for (const k of input.data.deleted ?? []) out.add(k);
20059
20093
  return out;
20060
20094
  }
20095
+ var FILTER_LABELS = {
20096
+ broken: "components with breaking changes",
20097
+ cycles: "slot cycles",
20098
+ deleted: "removed components"
20099
+ };
20100
+ function describeEmptyFilter(input) {
20101
+ const names = [...input.filters].map((f) => FILTER_LABELS[f]);
20102
+ if (input.slotDependencies) names.push("slot dependencies");
20103
+ if (names.length === 0) return void 0;
20104
+ return `Nothing to show: no ${names.join(" or ")} in this import.`;
20105
+ }
20061
20106
  function intersectFilterKeys(a, b) {
20062
20107
  if (a === void 0) return b;
20063
20108
  if (b === void 0) return a;
@@ -20253,6 +20298,7 @@ function useScopeGate({ components, onConfirm, onQuit }) {
20253
20298
  }),
20254
20299
  [groupedItems, cycleParticipants, expandedGroups, columnOneView, graph, filterVisibleKeys]
20255
20300
  );
20301
+ const emptyMessage = visibleRows.length === 0 && filterVisibleKeys !== void 0 && !jumpFilterTarget ? describeEmptyFilter({ filters: activeFilters, slotDependencies: showDependencies }) : void 0;
20256
20302
  const total = visibleRows.length;
20257
20303
  const safeCursor = Math.min(nav.cursor, Math.max(0, total - 1));
20258
20304
  const currentRow = visibleRows[safeCursor];
@@ -20574,6 +20620,7 @@ function useScopeGate({ components, onConfirm, onQuit }) {
20574
20620
  expandedGroups,
20575
20621
  toggleExpanded,
20576
20622
  visibleRows,
20623
+ emptyMessage,
20577
20624
  safeCursor,
20578
20625
  scrollOffset: nav.scrollOffset,
20579
20626
  selectionStateByKey,
@@ -20627,7 +20674,7 @@ var HELP_SECTIONS = [
20627
20674
  title: "Panels",
20628
20675
  entries: [
20629
20676
  { keys: "c", label: "Cycle list" },
20630
- { keys: "d", label: "Show slot dependencies in main list" },
20677
+ { keys: "d", label: "Show slot dependenciess" },
20631
20678
  { keys: "x", label: "Review flags" }
20632
20679
  ]
20633
20680
  },
@@ -20696,6 +20743,7 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
20696
20743
  aiFlaggedByKey: gate.aiFlaggedByKey,
20697
20744
  dimPredicate: gate.dimPredicate,
20698
20745
  visibleRows: gate.visibleRows,
20746
+ emptyMessage: gate.emptyMessage,
20699
20747
  viewMode: gate.columnOneView,
20700
20748
  graph: graph.nodes
20701
20749
  }
@@ -25455,12 +25503,12 @@ var HELP_SECTIONS2 = [
25455
25503
  title: "Panels",
25456
25504
  entries: [
25457
25505
  { keys: "c", label: "Cycle list" },
25458
- { keys: "b", label: "Breaking changes" },
25459
- { keys: "w", label: "Only breaking" },
25460
- { keys: "o", label: "Only cycles" },
25506
+ { keys: "b", label: "Show breaking changes" },
25507
+ { keys: "w", label: "Filter components with breaking changes" },
25508
+ { keys: "o", label: "Filter components in slot cycles" },
25461
25509
  { keys: "p", label: "Prop rationale" },
25462
25510
  { keys: "P", label: "Component rationale" },
25463
- { keys: "s", label: "Source" },
25511
+ { keys: "s", label: "Source code snippet" },
25464
25512
  { keys: "J", label: "Toggle JSON" },
25465
25513
  { keys: "t", label: "Token review" }
25466
25514
  ]
@@ -26179,18 +26227,18 @@ function GenerateReviewStepView({
26179
26227
  }
26180
26228
  return;
26181
26229
  }
26182
- if (input === "c" && !key.ctrl && !key.meta && cycleRows.length > 0) {
26230
+ if (input === "c" && !reviewEditor.textEntryActive && !key.ctrl && !key.meta && cycleRows.length > 0) {
26183
26231
  cyclePanel.open();
26184
26232
  setCyclePanelScroll(0);
26185
26233
  setCyclesCursor(0);
26186
26234
  return;
26187
26235
  }
26188
- if (input === "b" && sidebarFocused && breakingChanges.length > 0) {
26236
+ if (input === "b" && !reviewEditor.textEntryActive && sidebarFocused && breakingChanges.length > 0) {
26189
26237
  breakingPanel.open();
26190
26238
  setBreakingCursor(0);
26191
26239
  return;
26192
26240
  }
26193
- if (input === "o" || input === "w") {
26241
+ if (!reviewEditor.textEntryActive && (input === "o" || input === "w")) {
26194
26242
  const category = input === "o" ? "cycles" : "broken";
26195
26243
  setActiveFilters((prev) => {
26196
26244
  const next = new Set(prev);
@@ -26576,6 +26624,7 @@ function GenerateReviewStepView({
26576
26624
  visibleCount,
26577
26625
  dimPredicate,
26578
26626
  visibleRows: visibleRowsMemo,
26627
+ emptyMessage: visibleRowsMemo.length === 0 && filterVisibleKeys !== void 0 && !jumpFilterTarget ? describeEmptyFilter({ filters: activeFilters }) : void 0,
26579
26628
  viewMode: columnOneView,
26580
26629
  graph: sidebarGraph
26581
26630
  }
@@ -27652,6 +27701,7 @@ function clearedValidationErrorState() {
27652
27701
  }
27653
27702
  async function runPreview(input, deps) {
27654
27703
  if (shouldBypassPreview(input.state)) return buildSkippedPreviewTransition();
27704
+ setCommandContext({ space_key: input.spaceId, environment_key: input.environmentId });
27655
27705
  try {
27656
27706
  const client2 = deps.createClient({
27657
27707
  cmaToken: input.cmaToken,
@@ -27700,6 +27750,7 @@ async function runPreview(input, deps) {
27700
27750
  db.close();
27701
27751
  }
27702
27752
  }
27753
+ recordContentfulContext(client2, input.spaceId, input.environmentId);
27703
27754
  if (isEmptyPreview(preview)) {
27704
27755
  return {
27705
27756
  step: "done",
@@ -27865,6 +27916,7 @@ async function runPush(input, deps, onPatch) {
27865
27916
  } catch (logErr) {
27866
27917
  safeLog(deps, { pollLogError: String(logErr) });
27867
27918
  }
27919
+ recordApplyOutcome(client2, input.spaceId, input.environmentId, operation);
27868
27920
  const pushResult = resultOf(operation, preview);
27869
27921
  const pushSucceeded = pushResult.componentTypes.failed === 0 && pushResult.designTokens.failed === 0 && operation.sys.status !== "failed";
27870
27922
  if (pushSucceeded && input.state.lastRunId) {
package/dist/index.js CHANGED
@@ -16270,6 +16270,33 @@ var init_tracker = __esm({
16270
16270
  });
16271
16271
 
16272
16272
  // packages/experience-design-system-backend-pipeline/dist/src/analytics/apply.js
16273
+ function countWriteResult(items, entityType) {
16274
+ const subset = items.filter((item) => item.entityType === entityType);
16275
+ return {
16276
+ created_count: subset.filter((item) => item.action === "create" && item.status === "succeeded").length,
16277
+ updated_count: subset.filter((item) => item.action === "update" && item.status === "succeeded").length,
16278
+ failed_count: subset.filter((item) => item.status === "failed").length
16279
+ };
16280
+ }
16281
+ function recordApplyOutcome(client2, spaceId, environmentId, operation) {
16282
+ setCommandContext({
16283
+ space_key: spaceId,
16284
+ environment_key: environmentId,
16285
+ x_contentful_request_id: client2.getLastRequestId()
16286
+ });
16287
+ enrichCommandResult({
16288
+ dsi_operation_id: operation.sys.id,
16289
+ component_type_result: countWriteResult(operation.items ?? [], "ComponentType"),
16290
+ design_token_result: countWriteResult(operation.items ?? [], "DesignToken")
16291
+ });
16292
+ }
16293
+ function recordContentfulContext(client2, spaceId, environmentId) {
16294
+ setCommandContext({
16295
+ space_key: spaceId,
16296
+ environment_key: environmentId,
16297
+ x_contentful_request_id: client2.getLastRequestId()
16298
+ });
16299
+ }
16273
16300
  var init_apply2 = __esm({
16274
16301
  "packages/experience-design-system-backend-pipeline/dist/src/analytics/apply.js"() {
16275
16302
  "use strict";
@@ -22530,7 +22557,8 @@ function GroupedSidebar(props) {
22530
22557
  dimPredicate,
22531
22558
  visibleRows: providedRows,
22532
22559
  graph,
22533
- filterVisibleKeys
22560
+ filterVisibleKeys,
22561
+ emptyMessage
22534
22562
  } = props;
22535
22563
  const allRows = providedRows ?? buildVisibleRows({
22536
22564
  items,
@@ -22547,6 +22575,10 @@ function GroupedSidebar(props) {
22547
22575
  const end = windowed ? start + (visibleCount ?? allRows.length) : allRows.length;
22548
22576
  const rows = windowed ? allRows.slice(start, end) : allRows;
22549
22577
  return /* @__PURE__ */ jsxs18(WindowedPanel, { width, height: props.height, title, focused, children: [
22578
+ allRows.length === 0 && emptyMessage !== void 0 && /* @__PURE__ */ jsxs18(Text19, { color: PALETTE2.warning, children: [
22579
+ " ",
22580
+ emptyMessage
22581
+ ] }),
22550
22582
  windowed && /* @__PURE__ */ jsx21(WindowIndicator, { direction: "up", count: start }),
22551
22583
  rows.map((row, i) => {
22552
22584
  const absoluteRowIdx = start + i;
@@ -22911,9 +22943,9 @@ function createSidebarViewsHelpSection(includeBreaking) {
22911
22943
  { keys: "L", label: "Flat view" },
22912
22944
  { keys: "i", label: "Focus lineage" }
22913
22945
  ];
22914
- if (includeBreaking) entries.push({ keys: "w", label: "Only breaking" });
22946
+ if (includeBreaking) entries.push({ keys: "w", label: "Show only components with breaking changes" });
22915
22947
  entries.push(
22916
- { keys: "o", label: "Only cycles" },
22948
+ { keys: "o", label: "Show only components in slot cycles" },
22917
22949
  { keys: "space", label: "Expand/collapse group" },
22918
22950
  { keys: "E / C", label: "Expand/collapse all" }
22919
22951
  );
@@ -23557,6 +23589,12 @@ function computeFilterKeys(input) {
23557
23589
  if (active.has("deleted")) for (const k of input.data.deleted ?? []) out.add(k);
23558
23590
  return out;
23559
23591
  }
23592
+ function describeEmptyFilter(input) {
23593
+ const names = [...input.filters].map((f) => FILTER_LABELS[f]);
23594
+ if (input.slotDependencies) names.push("slot dependencies");
23595
+ if (names.length === 0) return void 0;
23596
+ return `Nothing to show: no ${names.join(" or ")} in this import.`;
23597
+ }
23560
23598
  function intersectFilterKeys(a, b) {
23561
23599
  if (a === void 0) return b;
23562
23600
  if (b === void 0) return a;
@@ -23575,10 +23613,16 @@ function buildFlatDimPredicate(input) {
23575
23613
  return false;
23576
23614
  };
23577
23615
  }
23616
+ var FILTER_LABELS;
23578
23617
  var init_step_filters = __esm({
23579
23618
  "packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/step-filters.ts"() {
23580
23619
  "use strict";
23581
23620
  init_fuzzy_search();
23621
+ FILTER_LABELS = {
23622
+ broken: "components with breaking changes",
23623
+ cycles: "slot cycles",
23624
+ deleted: "removed components"
23625
+ };
23582
23626
  }
23583
23627
  });
23584
23628
 
@@ -23766,6 +23810,7 @@ function useScopeGate({ components, onConfirm, onQuit }) {
23766
23810
  }),
23767
23811
  [groupedItems, cycleParticipants, expandedGroups, columnOneView, graph, filterVisibleKeys]
23768
23812
  );
23813
+ const emptyMessage = visibleRows.length === 0 && filterVisibleKeys !== void 0 && !jumpFilterTarget ? describeEmptyFilter({ filters: activeFilters, slotDependencies: showDependencies }) : void 0;
23769
23814
  const total = visibleRows.length;
23770
23815
  const safeCursor = Math.min(nav.cursor, Math.max(0, total - 1));
23771
23816
  const currentRow = visibleRows[safeCursor];
@@ -24087,6 +24132,7 @@ function useScopeGate({ components, onConfirm, onQuit }) {
24087
24132
  expandedGroups,
24088
24133
  toggleExpanded,
24089
24134
  visibleRows,
24135
+ emptyMessage,
24090
24136
  safeCursor,
24091
24137
  scrollOffset: nav.scrollOffset,
24092
24138
  selectionStateByKey,
@@ -24196,6 +24242,7 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
24196
24242
  aiFlaggedByKey: gate.aiFlaggedByKey,
24197
24243
  dimPredicate: gate.dimPredicate,
24198
24244
  visibleRows: gate.visibleRows,
24245
+ emptyMessage: gate.emptyMessage,
24199
24246
  viewMode: gate.columnOneView,
24200
24247
  graph: graph.nodes
24201
24248
  }
@@ -24278,7 +24325,7 @@ var init_screen7 = __esm({
24278
24325
  title: "Panels",
24279
24326
  entries: [
24280
24327
  { keys: "c", label: "Cycle list" },
24281
- { keys: "d", label: "Show slot dependencies in main list" },
24328
+ { keys: "d", label: "Show slot dependenciess" },
24282
24329
  { keys: "x", label: "Review flags" }
24283
24330
  ]
24284
24331
  },
@@ -30107,18 +30154,18 @@ function GenerateReviewStepView({
30107
30154
  }
30108
30155
  return;
30109
30156
  }
30110
- if (input === "c" && !key.ctrl && !key.meta && cycleRows.length > 0) {
30157
+ if (input === "c" && !reviewEditor.textEntryActive && !key.ctrl && !key.meta && cycleRows.length > 0) {
30111
30158
  cyclePanel.open();
30112
30159
  setCyclePanelScroll(0);
30113
30160
  setCyclesCursor(0);
30114
30161
  return;
30115
30162
  }
30116
- if (input === "b" && sidebarFocused && breakingChanges.length > 0) {
30163
+ if (input === "b" && !reviewEditor.textEntryActive && sidebarFocused && breakingChanges.length > 0) {
30117
30164
  breakingPanel.open();
30118
30165
  setBreakingCursor(0);
30119
30166
  return;
30120
30167
  }
30121
- if (input === "o" || input === "w") {
30168
+ if (!reviewEditor.textEntryActive && (input === "o" || input === "w")) {
30122
30169
  const category = input === "o" ? "cycles" : "broken";
30123
30170
  setActiveFilters((prev) => {
30124
30171
  const next = new Set(prev);
@@ -30504,6 +30551,7 @@ function GenerateReviewStepView({
30504
30551
  visibleCount,
30505
30552
  dimPredicate,
30506
30553
  visibleRows: visibleRowsMemo,
30554
+ emptyMessage: visibleRowsMemo.length === 0 && filterVisibleKeys !== void 0 && !jumpFilterTarget ? describeEmptyFilter({ filters: activeFilters }) : void 0,
30507
30555
  viewMode: columnOneView,
30508
30556
  graph: sidebarGraph
30509
30557
  }
@@ -30644,12 +30692,12 @@ var init_generate_review_step = __esm({
30644
30692
  title: "Panels",
30645
30693
  entries: [
30646
30694
  { keys: "c", label: "Cycle list" },
30647
- { keys: "b", label: "Breaking changes" },
30648
- { keys: "w", label: "Only breaking" },
30649
- { keys: "o", label: "Only cycles" },
30695
+ { keys: "b", label: "Show breaking changes" },
30696
+ { keys: "w", label: "Filter components with breaking changes" },
30697
+ { keys: "o", label: "Filter components in slot cycles" },
30650
30698
  { keys: "p", label: "Prop rationale" },
30651
30699
  { keys: "P", label: "Component rationale" },
30652
- { keys: "s", label: "Source" },
30700
+ { keys: "s", label: "Source code snippet" },
30653
30701
  { keys: "J", label: "Toggle JSON" },
30654
30702
  { keys: "t", label: "Token review" }
30655
30703
  ]
@@ -31786,6 +31834,7 @@ function clearedValidationErrorState() {
31786
31834
  }
31787
31835
  async function runPreview(input, deps) {
31788
31836
  if (shouldBypassPreview(input.state)) return buildSkippedPreviewTransition();
31837
+ setCommandContext({ space_key: input.spaceId, environment_key: input.environmentId });
31789
31838
  try {
31790
31839
  const client2 = deps.createClient({
31791
31840
  cmaToken: input.cmaToken,
@@ -31834,6 +31883,7 @@ async function runPreview(input, deps) {
31834
31883
  db.close();
31835
31884
  }
31836
31885
  }
31886
+ recordContentfulContext(client2, input.spaceId, input.environmentId);
31837
31887
  if (isEmptyPreview(preview)) {
31838
31888
  return {
31839
31889
  step: "done",
@@ -32004,6 +32054,7 @@ async function runPush(input, deps, onPatch) {
32004
32054
  } catch (logErr) {
32005
32055
  safeLog(deps, { pollLogError: String(logErr) });
32006
32056
  }
32057
+ recordApplyOutcome(client2, input.spaceId, input.environmentId, operation);
32007
32058
  const pushResult = resultOf(operation, preview);
32008
32059
  const pushSucceeded = pushResult.componentTypes.failed === 0 && pushResult.designTokens.failed === 0 && operation.sys.status !== "failed";
32009
32060
  if (pushSucceeded && input.state.lastRunId) {
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentful/experience-design-system-cli",
3
- "version": "2.37.1-dev-build-c5e75ab7.0",
3
+ "version": "2.37.1-dev-build-ed4a0d5c.0",
4
4
  "description": "Contentful Experiences design system import CLI",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -33,6 +33,7 @@ export interface GroupedSidebarProps {
33
33
  visibleRows?: VisibleRow[];
34
34
  graph: ComponentGraphNode[];
35
35
  filterVisibleKeys?: Set<string>;
36
+ emptyMessage?: string;
36
37
  }
37
38
  type RowKind = 'cycle' | 'empty' | 'group-root' | 'group-child' | 'standalone' | 'flat' | 'flat-header';
38
39
  export interface VisibleRow {
@@ -11,6 +11,10 @@ export declare function computeFilterKeys(input: {
11
11
  filters: Iterable<FilterCategory>;
12
12
  data: FilterDataSources;
13
13
  }): Set<string> | undefined;
14
+ export declare function describeEmptyFilter(input: {
15
+ filters: Iterable<FilterCategory>;
16
+ slotDependencies?: boolean;
17
+ }): string | undefined;
14
18
  export declare function intersectFilterKeys(a: Set<string> | undefined, b: Set<string> | undefined): Set<string> | undefined;
15
19
  export declare function buildFlatDimPredicate(input: {
16
20
  viewMode: 'grouped' | 'flat';
@@ -26,6 +26,7 @@ export declare function useScopeGate({ components, onConfirm, onQuit }: UseScope
26
26
  expandedGroups: Set<string>;
27
27
  toggleExpanded: (rootName: string) => void;
28
28
  visibleRows: import("./sidebar/components/GroupedSidebar.js").VisibleRow[];
29
+ emptyMessage: string | undefined;
29
30
  safeCursor: number;
30
31
  scrollOffset: number;
31
32
  selectionStateByKey: Map<string, "accepted" | "rejected" | "undecided">;
@@ -4,6 +4,8 @@ import { type CDFDocument, type DTCGTokenEntry, type ServerPreviewResponse } fro
4
4
  import type { FlowPatch, FlowState } from './types.js';
5
5
  type PreviewClient = {
6
6
  previewImport(cdf: CDFDocument): Promise<ServerPreviewResponse>;
7
+ /** Request id of the most recent response, used by `recordContentfulContext` for analytics correlation. */
8
+ getLastRequestId(): string | undefined;
7
9
  };
8
10
  /** The outside world `runPreview` talks to, so each branch can be tested without a database or a network. */
9
11
  export interface PreviewDeps {
@@ -8,6 +8,8 @@ type PushClient = {
8
8
  pollOperation(operationId: string, options: {
9
9
  onProgress?: (operation: ApplyOperationResponse) => void;
10
10
  }): Promise<ApplyOperationResponse>;
11
+ /** Request id of the most recent response, used by `recordApplyOutcome` for analytics correlation. */
12
+ getLastRequestId(): string | undefined;
11
13
  };
12
14
  /** The outside world `runPush` talks to, so each branch can be tested without a network or a run history. */
13
15
  export interface PushDeps {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentful/experience-design-system-cli",
3
- "version": "2.37.1-dev-build-c5e75ab7.0",
3
+ "version": "2.37.1-dev-build-ed4a0d5c.0",
4
4
  "description": "Contentful Experiences design system import CLI",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentful/experience-design-system-cli",
3
- "version": "2.37.1-dev-build-c5e75ab7.0",
3
+ "version": "2.37.1-dev-build-ed4a0d5c.0",
4
4
  "description": "Contentful Experiences design system import CLI",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -45,8 +45,8 @@
45
45
  "ts-morph": "^27.0.2",
46
46
  "typescript": "^5.9.3",
47
47
  "zod": "^4.6.5",
48
- "@contentful/experience-design-system-backend-pipeline": "2.37.1-dev-build-c5e75ab7.0",
49
- "@contentful/experience-design-system-types": "2.37.1-dev-build-c5e75ab7.0"
48
+ "@contentful/experience-design-system-backend-pipeline": "2.37.1-dev-build-ed4a0d5c.0",
49
+ "@contentful/experience-design-system-types": "2.37.1-dev-build-ed4a0d5c.0"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@tsconfig/node24": "^24.0.4",