@gooddata/sdk-backend-tiger 11.57.0-alpha.1 → 11.57.0-alpha.3

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.
@@ -1,4 +1,4 @@
1
- export declare const LIB_VERSION = "11.57.0-alpha.1";
1
+ export declare const LIB_VERSION = "11.57.0-alpha.3";
2
2
  export declare const LIB_DESCRIPTION = "GoodData Backend SPI implementation for GoodData Cloud and GoodData.CN";
3
3
  export declare const LIB_NAME = "@gooddata/sdk-backend-tiger";
4
4
  //# sourceMappingURL=__version.d.ts.map
package/esm/__version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // (C) 2021 GoodData Corporation
2
2
  // DO NOT CHANGE THIS FILE, IT IS RE-GENERATED ON EVERY BUILD
3
- export const LIB_VERSION = "11.57.0-alpha.1";
3
+ export const LIB_VERSION = "11.57.0-alpha.3";
4
4
  export const LIB_DESCRIPTION = "GoodData Backend SPI implementation for GoodData Cloud and GoodData.CN";
5
5
  export const LIB_NAME = "@gooddata/sdk-backend-tiger";
@@ -1,4 +1,5 @@
1
1
  // (C) 2019-2026 GoodData Corporation
2
+ import axios from "axios";
2
3
  import { inRange, isEmpty, isError, omit } from "lodash-es";
3
4
  import { invariant } from "ts-invariant";
4
5
  import { newAxios, tigerClientBaseFactory } from "@gooddata/api-client-tiger";
@@ -287,6 +288,11 @@ function createAxios(config, implConfig, telemetry) {
287
288
  function interceptBackendErrorsToConsole(client) {
288
289
  client.interceptors.response.use((v) => v, (error) => {
289
290
  const response = error.response;
291
+ // Cancellations are expected whenever a component aborts its in-flight requests
292
+ // on unmount; logging them as backend errors only floods the console.
293
+ if (axios.isCancel(error)) {
294
+ return Promise.reject(error);
295
+ }
290
296
  // If there is no response object (for example for blocked requests), print the whole error.
291
297
  if (!response) {
292
298
  console.error("Tiger backend threw an error:", error);
@@ -33,7 +33,7 @@ export declare class TigerWorkspaceDashboards implements IWorkspaceDashboardsSer
33
33
  timezoneId?: string;
34
34
  } | null>;
35
35
  private getDashboardWithSideloads;
36
- createDashboard: (dashboard: IDashboardDefinition) => Promise<IDashboard>;
36
+ createDashboard: (dashboard: IDashboardDefinition, generateId?: boolean) => Promise<IDashboard>;
37
37
  updateDashboard: (originalDashboard: IDashboard, updatedDashboard: IDashboardDefinition) => Promise<IDashboard>;
38
38
  /**
39
39
  * Starts AI dashboard summary workflow.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/backend/workspace/dashboards/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/backend/workspace/dashboards/index.ts"],"names":[],"mappings":"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"}
@@ -251,7 +251,7 @@ export class TigerWorkspaceDashboards {
251
251
  metaInclude: ["accessInfo"],
252
252
  }).then((result) => result.data));
253
253
  };
254
- createDashboard = async (dashboard) => {
254
+ createDashboard = async (dashboard, generateId = true) => {
255
255
  // Process filter contexts for each tab first
256
256
  const dashboardWithTabFilterContexts = await this.processDashboardTabsFilterContexts(dashboard);
257
257
  // For the root-level filter context (backward compatibility):
@@ -270,6 +270,11 @@ export class TigerWorkspaceDashboards {
270
270
  workspaceId: this.workspace,
271
271
  jsonApiAnalyticalDashboardPostOptionalIdDocument: {
272
272
  data: {
273
+ ...(generateId
274
+ ? {}
275
+ : {
276
+ id: dashboard.identifier,
277
+ }),
273
278
  type: "analyticalDashboard",
274
279
  attributes: {
275
280
  content: dashboardContent,
@@ -1,5 +1,5 @@
1
1
  import { type IGetInsightOptions, type IInsightReferences, type IInsightReferencing, type IInsightsQuery, type IInsightsQueryOptions, type IInsightsQueryResult, type IWorkspaceInsightsService, type SupportedInsightReferenceTypes } from "@gooddata/sdk-backend-spi";
2
- import { type ICatalogAttribute, type ICatalogFact, type ICatalogMeasure, type IFilter, type IInsight, type IInsightDefinition, type IMetadataObjectBase, type IMetadataObjectIdentity, type IObjectCertificationWrite, type IVisualizationClass, type ObjRef } from "@gooddata/sdk-model";
2
+ import { type ICatalogAttribute, type ICatalogFact, type ICatalogMeasure, type IFilter, type IInsight, type IInsightDefinition, type IInsightDefinitionWithOptionalIdentity, type IMetadataObjectBase, type IMetadataObjectIdentity, type IObjectCertificationWrite, type IVisualizationClass, type ObjRef } from "@gooddata/sdk-model";
3
3
  import { type TigerAuthenticatedCallGuard } from "../../../types/index.js";
4
4
  export declare class TigerWorkspaceInsights implements IWorkspaceInsightsService {
5
5
  private readonly authCall;
@@ -21,7 +21,7 @@ export declare class TigerWorkspaceInsights implements IWorkspaceInsightsService
21
21
  }>;
22
22
  private getInsightWithReferences;
23
23
  getInsight: (ref: ObjRef, options?: IGetInsightOptions) => Promise<IInsight>;
24
- createInsight: (insight: IInsightDefinition) => Promise<IInsight>;
24
+ createInsight: (insight: IInsightDefinitionWithOptionalIdentity, generateId?: boolean) => Promise<IInsight>;
25
25
  updateInsight: (insight: IInsight) => Promise<IInsight>;
26
26
  updateInsightMeta: (insightMeta: Partial<IMetadataObjectBase> & IMetadataObjectIdentity) => Promise<IInsight>;
27
27
  setCertification: (ref: ObjRef, certification?: IObjectCertificationWrite) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/backend/workspace/insights/index.ts"],"names":[],"mappings":"AA+BA,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EAEtC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,MAAM,EASd,MAAM,qBAAqB,CAAC;AAkB7B,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAM3E,qBAAa,sBAAuB,YAAW,yBAAyB;IAEhE,OAAO,CAAC,QAAQ,CAAC,QAAQ;aACT,SAAS,EAAE,MAAM;IAFrC,YACqB,QAAQ,EAAE,2BAA2B,EACtC,SAAS,EAAE,MAAM,EACjC;IAEG,qBAAqB,QAAe,MAAM,KAAG,OAAO,CAAC,mBAAmB,CAAC,CAS9E;IAEK,uBAAuB,QAAa,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAEvE;IAEK,WAAW,aAAoB,qBAAqB,KAAG,OAAO,CAAC,oBAAoB,CAAC,CA6BzF;IAEK,gBAAgB,QAAO,cAAc,CAE1C;IAEF,OAAO,CAAC,4BAA4B,CAqBlC;IAEF,OAAO,CAAC,eAAe,CAmCrB;IAEF;;;OAGG;IACI,0BAA0B,QACxB,MAAM,KACZ,OAAO,CAAC;QACP,OAAO,EAAE,QAAQ,CAAC;QAClB,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,eAAe,GAAG,iBAAiB,CAAC,CAAC;KAC3E,CAAC,CAoBA;IAEF,OAAO,CAAC,wBAAwB,CAiB9B;IAEK,UAAU,QAAe,MAAM,YAAW,kBAAkB,KAAQ,OAAO,CAAC,QAAQ,CAAC,CAK1F;IAEK,aAAa,YAAmB,kBAAkB,KAAG,OAAO,CAAC,QAAQ,CAAC,CAoC3E;IAEK,aAAa,YAAmB,QAAQ,KAAG,OAAO,CAAC,QAAQ,CAAC,CAuBjE;IAEK,iBAAiB,gBACP,OAAO,CAAC,mBAAmB,CAAC,GAAG,uBAAuB,KACpE,OAAO,CAAC,QAAQ,CAAC,CAyBlB;IAEK,gBAAgB,QACd,MAAM,kBACK,yBAAyB,KAC1C,OAAO,CAAC,IAAI,CAAC,CAYd;IAEK,aAAa,QAAe,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CASvD;IAEK,2BAA2B,aACpB,QAAQ,WACT,8BAA8B,EAAE,KAC1C,OAAO,CAAC,kBAAkB,CAAC,CAE5B;IAEK,4BAA4B,QAAe,MAAM,KAAG,OAAO,CAAC,mBAAmB,CAAC,CAoBrF;IAEK,0BAA0B,GAAU,CAAC,SAAS,kBAAkB,WAC1D,CAAC,WACD,OAAO,EAAE,KACnB,OAAO,CAAC,CAAC,CAAC,CASX;CACL"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/backend/workspace/insights/index.ts"],"names":[],"mappings":"AA+BA,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EAEtC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,sCAAsC,EAC3C,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,MAAM,EASd,MAAM,qBAAqB,CAAC;AAkB7B,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAM3E,qBAAa,sBAAuB,YAAW,yBAAyB;IAEhE,OAAO,CAAC,QAAQ,CAAC,QAAQ;aACT,SAAS,EAAE,MAAM;IAFrC,YACqB,QAAQ,EAAE,2BAA2B,EACtC,SAAS,EAAE,MAAM,EACjC;IAEG,qBAAqB,QAAe,MAAM,KAAG,OAAO,CAAC,mBAAmB,CAAC,CAS9E;IAEK,uBAAuB,QAAa,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAEvE;IAEK,WAAW,aAAoB,qBAAqB,KAAG,OAAO,CAAC,oBAAoB,CAAC,CA6BzF;IAEK,gBAAgB,QAAO,cAAc,CAE1C;IAEF,OAAO,CAAC,4BAA4B,CAqBlC;IAEF,OAAO,CAAC,eAAe,CAmCrB;IAEF;;;OAGG;IACI,0BAA0B,QACxB,MAAM,KACZ,OAAO,CAAC;QACP,OAAO,EAAE,QAAQ,CAAC;QAClB,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,eAAe,GAAG,iBAAiB,CAAC,CAAC;KAC3E,CAAC,CAoBA;IAEF,OAAO,CAAC,wBAAwB,CAiB9B;IAEK,UAAU,QAAe,MAAM,YAAW,kBAAkB,KAAQ,OAAO,CAAC,QAAQ,CAAC,CAK1F;IAEK,aAAa,YACP,sCAAsC,2BAEhD,OAAO,CAAC,QAAQ,CAAC,CAuClB;IAEK,aAAa,YAAmB,QAAQ,KAAG,OAAO,CAAC,QAAQ,CAAC,CAuBjE;IAEK,iBAAiB,gBACP,OAAO,CAAC,mBAAmB,CAAC,GAAG,uBAAuB,KACpE,OAAO,CAAC,QAAQ,CAAC,CAyBlB;IAEK,gBAAgB,QACd,MAAM,kBACK,yBAAyB,KAC1C,OAAO,CAAC,IAAI,CAAC,CAYd;IAEK,aAAa,QAAe,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CASvD;IAEK,2BAA2B,aACpB,QAAQ,WACT,8BAA8B,EAAE,KAC1C,OAAO,CAAC,kBAAkB,CAAC,CAE5B;IAEK,4BAA4B,QAAe,MAAM,KAAG,OAAO,CAAC,mBAAmB,CAAC,CAoBrF;IAEK,0BAA0B,GAAU,CAAC,SAAS,kBAAkB,WAC1D,CAAC,WACD,OAAO,EAAE,KACnB,OAAO,CAAC,CAAC,CAAC,CASX;CACL"}
@@ -151,12 +151,15 @@ export class TigerWorkspaceInsights {
151
151
  const { insight } = await this.getInsightWithReferences(ref, references);
152
152
  return insight;
153
153
  };
154
- createInsight = async (insight) => {
154
+ createInsight = async (insight, generateId = true) => {
155
155
  const createResponse = await this.authCall((client) => {
156
156
  return EntitiesApi_CreateEntityVisualizationObjects(client.axios, client.basePath, {
157
157
  workspaceId: this.workspace,
158
158
  jsonApiVisualizationObjectPostOptionalIdDocument: {
159
159
  data: {
160
+ ...(generateId || !insight.insight.identifier
161
+ ? {}
162
+ : { id: insight.insight.identifier }),
160
163
  type: "visualizationObject",
161
164
  attributes: {
162
165
  description: insightSummary(insight),
@@ -1 +1 @@
1
- {"version":3,"file":"genAIConvertor.d.ts","sourceRoot":"","sources":["../../../src/convertors/fromBackend/genAIConvertor.ts"],"names":[],"mappings":"AAKA,OAAO,EAGH,KAAK,0BAA0B,EAC/B,KAAK,gCAAgC,EACrC,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAI/B,KAAK,yBAAyB,EAI9B,KAAK,aAAa,EAQrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAEH,KAAK,iBAAiB,EAGtB,KAAK,sBAAsB,EAE3B,KAAK,gCAAgC,EACrC,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAGhC,KAAK,gBAAgB,EAExB,MAAM,2BAA2B,CAAC;AAuCnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAIhE,wBAAgB,kCAAkC,CAAC,YAAY,EAAE,sBAAsB,GAAG,iBAAiB,CAS1G;AAED,wBAAgB,sCAAsC,CAClD,IAAI,EAAE,0BAA0B,EAChC,SAAS,EAAE,0BAA0B,CAAC,WAAW,CAAC,GAAG,SAAS,EAC9D,OAAO,EAAE,qBAAqB,EAAE,EAChC,cAAc,EAAE,cAAc,EAC9B,MAAM,CAAC,EAAE,gBAAgB,EACzB,QAAQ,CAAC,EAAE,MAAM,GAClB,qBAAqB,GAAG,SAAS,CA6BnC;AAED,wBAAgB,uCAAuC,CACnD,KAAK,EAAE,0BAA0B,EAAE,EACnC,SAAS,EAAE,0BAA0B,CAAC,WAAW,CAAC,GAAG,SAAS,EAC9D,cAAc,EAAE,cAAc,EAC9B,MAAM,CAAC,EAAE,gBAAgB,EACzB,QAAQ,CAAC,EAAE,MAAM,GAClB,qBAAqB,EAAE,CAkBzB;AAoJD,wBAAgB,uCAAuC,CACnD,IAAI,EAAE,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EACrE,OAAO,CAAC,EAAE,MAAM,GACjB,sBAAsB,CAQxB;AAED;;;GAGG;AACH,wBAAgB,iDAAiD,CAC7D,IAAI,EAAE,yBAAyB,EAC/B,OAAO,CAAC,EAAE,MAAM,GACjB,gCAAgC,CAgBlC;AAED;;;;GAIG;AACH,wBAAgB,4CAA4C,CACxD,MAAM,EAAE,gCAAgC,GAAG,IAAI,GAAG,SAAS,GAC5D,2BAA2B,GAAG,SAAS,CAgEzC;AA2FD,wBAAgB,oCAAoC,CAChD,IAAI,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,GACvC,gBAAgB,CAQlB"}
1
+ {"version":3,"file":"genAIConvertor.d.ts","sourceRoot":"","sources":["../../../src/convertors/fromBackend/genAIConvertor.ts"],"names":[],"mappings":"AAKA,OAAO,EAGH,KAAK,0BAA0B,EAC/B,KAAK,gCAAgC,EACrC,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAI/B,KAAK,yBAAyB,EAK9B,KAAK,aAAa,EAQrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAEH,KAAK,iBAAiB,EAGtB,KAAK,sBAAsB,EAE3B,KAAK,gCAAgC,EACrC,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAGhC,KAAK,gBAAgB,EAExB,MAAM,2BAA2B,CAAC;AAuCnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAIhE,wBAAgB,kCAAkC,CAAC,YAAY,EAAE,sBAAsB,GAAG,iBAAiB,CAS1G;AAED,wBAAgB,sCAAsC,CAClD,IAAI,EAAE,0BAA0B,EAChC,SAAS,EAAE,0BAA0B,CAAC,WAAW,CAAC,GAAG,SAAS,EAC9D,OAAO,EAAE,qBAAqB,EAAE,EAChC,cAAc,EAAE,cAAc,EAC9B,MAAM,CAAC,EAAE,gBAAgB,EACzB,QAAQ,CAAC,EAAE,MAAM,GAClB,qBAAqB,GAAG,SAAS,CA6BnC;AAED,wBAAgB,uCAAuC,CACnD,KAAK,EAAE,0BAA0B,EAAE,EACnC,SAAS,EAAE,0BAA0B,CAAC,WAAW,CAAC,GAAG,SAAS,EAC9D,cAAc,EAAE,cAAc,EAC9B,MAAM,CAAC,EAAE,gBAAgB,EACzB,QAAQ,CAAC,EAAE,MAAM,GAClB,qBAAqB,EAAE,CAkBzB;AAsMD,wBAAgB,uCAAuC,CACnD,IAAI,EAAE,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EACrE,OAAO,CAAC,EAAE,MAAM,GACjB,sBAAsB,CAQxB;AAED;;;GAGG;AACH,wBAAgB,iDAAiD,CAC7D,IAAI,EAAE,yBAAyB,EAC/B,OAAO,CAAC,EAAE,MAAM,GACjB,gCAAgC,CAgBlC;AAED;;;;GAIG;AACH,wBAAgB,4CAA4C,CACxD,MAAM,EAAE,gCAAgC,GAAG,IAAI,GAAG,SAAS,GAC5D,2BAA2B,GAAG,SAAS,CAgEzC;AA2FD,wBAAgB,oCAAoC,CAChD,IAAI,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,GACvC,gBAAgB,CAQlB"}
@@ -81,73 +81,7 @@ function convertChatConversationContentFromBackend(content, history, dateNormali
81
81
  case "multipart":
82
82
  return {
83
83
  type: "multipart",
84
- // Unknown parts are dropped rather than failing the whole item, so the rest
85
- // of the message (known parts) keeps rendering normally.
86
- parts: content.parts
87
- .map((part) => {
88
- switch (part.type) {
89
- case "text":
90
- return {
91
- type: "text",
92
- text: part.text,
93
- };
94
- case "alertProposal":
95
- return {
96
- type: "alertProposal",
97
- alertProposal: convertAlertProposalFrom(part.alertProposal),
98
- };
99
- case "visualization":
100
- return {
101
- type: "visualization",
102
- visualization: part.visualization
103
- ? visualizationObjectsItemToInsight(yamlVisualisationToMetadataObject([], part.visualization))
104
- : null,
105
- };
106
- case "dashboard": {
107
- return {
108
- type: "dashboard",
109
- ...applyDashboardDefinition(part),
110
- };
111
- }
112
- case "dashboardPatch": {
113
- if (!part.patch) {
114
- return undefined;
115
- }
116
- return {
117
- type: "dashboard",
118
- ...applyDashboardPatch(history, part.patch),
119
- };
120
- }
121
- case "kda":
122
- return {
123
- type: "kda",
124
- kda: convertKda(part.kda, dateNormalizer, locale, timezone),
125
- };
126
- case "whatIf":
127
- return {
128
- type: "whatIf",
129
- whatIf: convertWhatIf(part.whatIf),
130
- };
131
- case "searchResults":
132
- return {
133
- type: "searchResults",
134
- keywords: part.keywords,
135
- searchResults: convertSearchResults(part.objects),
136
- relationships: convertSearchRelationships(part.relationships),
137
- };
138
- case "clarifyingQuestions":
139
- return {
140
- type: "clarifyingQuestions",
141
- questions: part.questions,
142
- };
143
- default:
144
- // Unknown part type (e.g. sent by a newer backend): log and drop
145
- // it, do not fail the whole item.
146
- assertNever(part);
147
- return undefined;
148
- }
149
- })
150
- .filter((part) => part !== undefined),
84
+ parts: convertMultipartParts(content.parts, history, dateNormalizer, locale, timezone),
151
85
  suggestions: convertChatSuggestionItemFromBackend(content.suggestions),
152
86
  };
153
87
  case "toolCall":
@@ -171,6 +105,103 @@ function convertChatConversationContentFromBackend(content, history, dateNormali
171
105
  return undefined;
172
106
  }
173
107
  }
108
+ /**
109
+ * Converts the parts of a single multipart message.
110
+ *
111
+ * Parts are converted in order, and each one sees the siblings converted before it. That matters
112
+ * for `dashboardPatch`: the base document it applies to arrives as a `dashboard` part next to it
113
+ * in the same message, and `history` only holds the previous messages - the current item is
114
+ * appended to it after it has been converted, in both the replay and the SSE path.
115
+ *
116
+ * A `dashboard` part that only carries the base for a sibling patch is folded into that patch: it
117
+ * is used as the base but not emitted, so the message renders a single card showing the patched
118
+ * draft instead of a second card offering the unchanged dashboard.
119
+ */
120
+ function convertMultipartParts(rawParts, history, dateNormalizer, locale, timezone) {
121
+ const patchedDashboardIds = new Set(rawParts.flatMap((part) => part.type === "dashboardPatch" && part.patch?.dashboard_id ? [part.patch.dashboard_id] : []));
122
+ const siblings = [];
123
+ const parts = [];
124
+ rawParts.forEach((rawPart) => {
125
+ const part = convertMultipartPart(rawPart, history, siblings, dateNormalizer, locale, timezone);
126
+ // Unknown parts are dropped rather than failing the whole item, so the rest
127
+ // of the message (known parts) keeps rendering normally.
128
+ if (!part) {
129
+ return;
130
+ }
131
+ siblings.push(part);
132
+ const isPatchBase = rawPart.type === "dashboard" &&
133
+ part.type === "dashboard" &&
134
+ !!part.dashboard &&
135
+ patchedDashboardIds.has(part.dashboard.identifier);
136
+ if (!isPatchBase) {
137
+ parts.push(part);
138
+ }
139
+ });
140
+ return parts;
141
+ }
142
+ function convertMultipartPart(part, history, siblings, dateNormalizer, locale, timezone) {
143
+ switch (part.type) {
144
+ case "text":
145
+ return {
146
+ type: "text",
147
+ text: part.text,
148
+ };
149
+ case "alertProposal":
150
+ return {
151
+ type: "alertProposal",
152
+ alertProposal: convertAlertProposalFrom(part.alertProposal),
153
+ };
154
+ case "visualization":
155
+ return {
156
+ type: "visualization",
157
+ visualization: part.visualization
158
+ ? visualizationObjectsItemToInsight(yamlVisualisationToMetadataObject([], part.visualization))
159
+ : null,
160
+ };
161
+ case "dashboard": {
162
+ return {
163
+ type: "dashboard",
164
+ ...applyDashboardDefinition(part),
165
+ };
166
+ }
167
+ case "dashboardPatch": {
168
+ if (!part.patch) {
169
+ return undefined;
170
+ }
171
+ return {
172
+ type: "dashboard",
173
+ ...applyDashboardPatch(history, siblings, part.patch),
174
+ };
175
+ }
176
+ case "kda":
177
+ return {
178
+ type: "kda",
179
+ kda: convertKda(part.kda, dateNormalizer, locale, timezone),
180
+ };
181
+ case "whatIf":
182
+ return {
183
+ type: "whatIf",
184
+ whatIf: convertWhatIf(part.whatIf),
185
+ };
186
+ case "searchResults":
187
+ return {
188
+ type: "searchResults",
189
+ keywords: part.keywords,
190
+ searchResults: convertSearchResults(part.objects),
191
+ relationships: convertSearchRelationships(part.relationships),
192
+ };
193
+ case "clarifyingQuestions":
194
+ return {
195
+ type: "clarifyingQuestions",
196
+ questions: part.questions,
197
+ };
198
+ default:
199
+ // Unknown part type (e.g. sent by a newer backend): log and drop
200
+ // it, do not fail the whole item.
201
+ assertNever(part);
202
+ return undefined;
203
+ }
204
+ }
174
205
  function tryParseJson(jsonString) {
175
206
  try {
176
207
  return JSON.parse(jsonString);
@@ -477,20 +508,21 @@ function asNonPersistedFilterContext(fc) {
477
508
  };
478
509
  }
479
510
  // Apply dashboard patch to the items
480
- function applyDashboardPatch(items, patch) {
511
+ function applyDashboardPatch(items, siblings, patch) {
481
512
  if (!patch?.dashboard_id) {
482
513
  return {
483
514
  dashboard: null,
484
515
  insights: null,
485
516
  };
486
517
  }
487
- const related = collectRelatedItems(items, {
518
+ const related = collectRelatedItems(items, siblings, {
488
519
  identifier: patch.dashboard_id,
489
520
  type: "analyticalDashboard",
490
521
  });
491
- const last = related[related.length - 1];
522
+ // The most recent card for this dashboard need not carry a base - a patch that failed to
523
+ // apply resolves to one without. Rebase on the last card that actually has one.
524
+ const last = related.filter((part) => !!part.base).pop();
492
525
  const base = last?.base;
493
- const saved = last?.saved;
494
526
  const previousInsights = last?.insights ?? [];
495
527
  if (!base) {
496
528
  return {
@@ -511,23 +543,34 @@ function applyDashboardPatch(items, patch) {
511
543
  patchError: e,
512
544
  };
513
545
  }
514
- const { dashboard, insights } = buildDashboardReferences(newDocument, patch.references, saved);
546
+ const { dashboard, insights } = buildDashboardReferences(newDocument, patch.references, patch.dashboard_id);
547
+ // `base` is carried over unchanged: the operations are defined against the relayed document,
548
+ // not against the result of a previous proposal, so a follow-up patch - which arrives without
549
+ // a base of its own as long as the relayed document has not changed - rebases on the same one.
550
+ //
551
+ // `saved` deliberately stays unset. The dashboard does exist saved, but this card describes a
552
+ // change the user has not accepted yet, so it has to offer the draft and not the saved copy.
515
553
  return {
554
+ base,
516
555
  dashboard: convertToTemporaryFilterContexts(dashboard),
517
556
  insights: [...previousInsights, ...insights],
518
557
  };
519
558
  }
520
- function collectRelatedItems(items, ref) {
559
+ function collectRelatedItems(items, siblings, ref) {
521
560
  const related = [];
561
+ const collect = (part) => {
562
+ if (part.type === "dashboard" && part.dashboard && areObjRefsEqual(part.dashboard.ref, ref)) {
563
+ related.push(part);
564
+ }
565
+ };
522
566
  items.forEach((item) => {
523
567
  if (item.content.type === "multipart") {
524
- item.content.parts.forEach((part) => {
525
- if (part.type === "dashboard" && part.dashboard && areObjRefsEqual(part.dashboard.ref, ref)) {
526
- related.push(part);
527
- }
528
- });
568
+ item.content.parts.forEach(collect);
529
569
  }
530
570
  });
571
+ // Siblings come last: a base resent in the current message wins over anything in history,
572
+ // which is exactly what happens when the user edited the dashboard since the last proposal.
573
+ siblings.forEach(collect);
531
574
  return related;
532
575
  }
533
576
  // Apply dashboard definition
@@ -566,15 +609,19 @@ function buildDashboardReferences(aacDashboard, references, savedDashboardId) {
566
609
  const filters = data?.filterContext
567
610
  ? convertFilterContextFromBackend(buildFilterContextWrapper(data.filterContext))
568
611
  : undefined;
569
- const vis = [...(references?.visualizations ?? []), ...(references?.new_visualizations ?? [])];
570
- const insights = vis.map((vis) => {
612
+ const existingInsights = (references?.visualizations ?? []).map((vis) => {
571
613
  return visualizationObjectsItemToInsight(yamlVisualisationToMetadataObject(entities, vis));
572
614
  }) ?? [];
615
+ const newInsights = (references?.new_visualizations ?? []).map((vis) => {
616
+ const insight = visualizationObjectsItemToInsight(yamlVisualisationToMetadataObject(entities, vis));
617
+ insight.insight.isDraft = true;
618
+ return insight;
619
+ }) ?? [];
573
620
  const dashboard = data
574
621
  ? convertDashboard(buildDashboardWrapper(data.dashboard, data.tabFilterContexts, savedDashboardId), filters)
575
622
  : null;
576
623
  return {
577
624
  dashboard,
578
- insights,
625
+ insights: [...existingInsights, ...newInsights],
579
626
  };
580
627
  }
@@ -81,7 +81,7 @@ function handleAttributeSort(sortItem, dims, sorting) {
81
81
  };
82
82
  const dimIdx = dims.findIndex((dim) => dim.itemIdentifiers.includes(attributeIdentifier));
83
83
  if (dimIdx < 0) {
84
- // eslint-disable-next-line no-console
84
+ // oxlint-disable-next-line eslint-js/no-console
85
85
  console.log(`attempting to sort by attribute with localId ${attributeIdentifier} but this attribute is not in any dimension.`);
86
86
  return;
87
87
  }
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // (C) 2019-2026 GoodData Corporation
2
- /* oxlint-disable no-barrel-files/no-barrel-files */
2
+ // oxlint-disable no-barrel-files/no-barrel-files
3
3
  /**
4
4
  * This package provides the Analytical Backend implementation for GoodData Cloud and GoodData.CN.
5
5
  *
@@ -53,5 +53,5 @@ export { convertInsightToVisualizationContent } from "./convertors/toBackend/Ins
53
53
  /**
54
54
  * @deprecated This will be removed in the next major release, please use the named export "tigerFactory" instead
55
55
  */
56
- // eslint-disable-next-line no-restricted-exports
56
+ // oxlint-disable-next-line eslint-js/no-restricted-exports
57
57
  export default tigerFactory;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-backend-tiger",
3
- "version": "11.57.0-alpha.1",
3
+ "version": "11.57.0-alpha.3",
4
4
  "description": "GoodData Backend SPI implementation for GoodData Cloud and GoodData.CN",
5
5
  "license": "MIT",
6
6
  "author": "GoodData",
@@ -34,12 +34,12 @@
34
34
  "ts-invariant": "0.10.3",
35
35
  "tslib": "2.8.1",
36
36
  "uuid": "11.1.1",
37
- "@gooddata/sdk-backend-base": "11.57.0-alpha.1",
38
- "@gooddata/api-client-tiger": "11.57.0-alpha.1",
39
- "@gooddata/sdk-code-convertors": "11.57.0-alpha.1",
40
- "@gooddata/sdk-backend-spi": "11.57.0-alpha.1",
41
- "@gooddata/sdk-model": "11.57.0-alpha.1",
42
- "@gooddata/util": "11.57.0-alpha.1"
37
+ "@gooddata/api-client-tiger": "11.57.0-alpha.3",
38
+ "@gooddata/sdk-backend-spi": "11.57.0-alpha.3",
39
+ "@gooddata/sdk-backend-base": "11.57.0-alpha.3",
40
+ "@gooddata/sdk-model": "11.57.0-alpha.3",
41
+ "@gooddata/sdk-code-convertors": "11.57.0-alpha.3",
42
+ "@gooddata/util": "11.57.0-alpha.3"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@gooddata/fixtures": "3.7.0",
@@ -59,14 +59,15 @@
59
59
  "eslint-plugin-sonarjs": "3.0.6",
60
60
  "npm-run-all": "4.1.5",
61
61
  "oxfmt": "0.66.0",
62
- "oxlint": "1.57.0",
63
- "oxlint-tsgolint": "0.18.1",
62
+ "oxlint": "1.67.0",
63
+ "oxlint-plugin-eslint": "1.82.0",
64
+ "oxlint-tsgolint": "0.22.1",
64
65
  "typescript": "7.0.2",
65
66
  "vitest": "4.1.8",
66
- "@gooddata/catalog-export": "11.57.0-alpha.1",
67
- "@gooddata/eslint-config": "11.57.0-alpha.1",
68
- "@gooddata/oxlint-config": "11.57.0-alpha.1",
69
- "@gooddata/reference-workspace": "11.57.0-alpha.1"
67
+ "@gooddata/eslint-config": "11.57.0-alpha.3",
68
+ "@gooddata/catalog-export": "11.57.0-alpha.3",
69
+ "@gooddata/oxlint-config": "11.57.0-alpha.3",
70
+ "@gooddata/reference-workspace": "11.57.0-alpha.3"
70
71
  },
71
72
  "scripts": {
72
73
  "_phase:build": "npm run build",