@gooddata/sdk-backend-base 8.13.0-alpha.2 → 8.13.0-alpha.21
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/cachingBackend/index.js +304 -380
- package/dist/cachingBackend/index.js.map +1 -1
- package/dist/convertors/fromBackend/afm/result.js +3 -3
- package/dist/convertors/fromBackend/afm/result.js.map +1 -1
- package/dist/customBackend/execution.js +77 -92
- package/dist/customBackend/execution.js.map +1 -1
- package/dist/customBackend/index.js +78 -114
- package/dist/customBackend/index.js.map +1 -1
- package/dist/customBackend/workspace.js +39 -40
- package/dist/customBackend/workspace.js.map +1 -1
- package/dist/decoratedBackend/attributes.js +21 -22
- package/dist/decoratedBackend/attributes.js.map +1 -1
- package/dist/decoratedBackend/catalog.js +38 -50
- package/dist/decoratedBackend/catalog.js.map +1 -1
- package/dist/decoratedBackend/dashboards.js +61 -62
- package/dist/decoratedBackend/dashboards.js.map +1 -1
- package/dist/decoratedBackend/elements.js +47 -70
- package/dist/decoratedBackend/elements.js.map +1 -1
- package/dist/decoratedBackend/execution.js +62 -79
- package/dist/decoratedBackend/execution.js.map +1 -1
- package/dist/decoratedBackend/index.js +90 -104
- package/dist/decoratedBackend/index.js.map +1 -1
- package/dist/decoratedBackend/securitySettings.js +7 -8
- package/dist/decoratedBackend/securitySettings.js.map +1 -1
- package/dist/decoratedBackend/workspaceSettings.js +12 -26
- package/dist/decoratedBackend/workspaceSettings.js.map +1 -1
- package/dist/dummyBackend/index.js +347 -391
- package/dist/dummyBackend/index.js.map +1 -1
- package/dist/eventingBackend/index.js +42 -49
- package/dist/eventingBackend/index.js.map +1 -1
- package/dist/ldmFactories/builder.js +14 -16
- package/dist/ldmFactories/builder.js.map +1 -1
- package/dist/ldmFactories/catalog/attributeFactory.js +22 -32
- package/dist/ldmFactories/catalog/attributeFactory.js.map +1 -1
- package/dist/ldmFactories/catalog/dateDatasetFactory.js +25 -41
- package/dist/ldmFactories/catalog/dateDatasetFactory.js.map +1 -1
- package/dist/ldmFactories/catalog/factFactory.js +11 -19
- package/dist/ldmFactories/catalog/factFactory.js.map +1 -1
- package/dist/ldmFactories/catalog/groupFactory.js +14 -27
- package/dist/ldmFactories/catalog/groupFactory.js.map +1 -1
- package/dist/ldmFactories/catalog/measureFactory.js +15 -25
- package/dist/ldmFactories/catalog/measureFactory.js.map +1 -1
- package/dist/ldmFactories/dashboard/insightWidgetFactory.js +20 -27
- package/dist/ldmFactories/dashboard/insightWidgetFactory.js.map +1 -1
- package/dist/ldmFactories/dashboard/kpiWidgetFactory.js +24 -34
- package/dist/ldmFactories/dashboard/kpiWidgetFactory.js.map +1 -1
- package/dist/ldmFactories/dashboard/widgetFactory.js +20 -39
- package/dist/ldmFactories/dashboard/widgetFactory.js.map +1 -1
- package/dist/ldmFactories/metadata/attributeFactory.js +13 -21
- package/dist/ldmFactories/metadata/attributeFactory.js.map +1 -1
- package/dist/ldmFactories/metadata/dashboardFactory.js +7 -15
- package/dist/ldmFactories/metadata/dashboardFactory.js.map +1 -1
- package/dist/ldmFactories/metadata/dataSetFactory.js +7 -15
- package/dist/ldmFactories/metadata/dataSetFactory.js.map +1 -1
- package/dist/ldmFactories/metadata/displayFormFactory.js +13 -21
- package/dist/ldmFactories/metadata/displayFormFactory.js.map +1 -1
- package/dist/ldmFactories/metadata/factFactory.js +7 -15
- package/dist/ldmFactories/metadata/factFactory.js.map +1 -1
- package/dist/ldmFactories/metadata/factory.js +17 -23
- package/dist/ldmFactories/metadata/factory.js.map +1 -1
- package/dist/ldmFactories/metadata/measureFactory.js +13 -21
- package/dist/ldmFactories/metadata/measureFactory.js.map +1 -1
- package/dist/ldmFactories/metadata/variableFactory.js +7 -15
- package/dist/ldmFactories/metadata/variableFactory.js.map +1 -1
- package/dist/normalizingBackend/index.js +71 -96
- package/dist/normalizingBackend/index.js.map +1 -1
- package/dist/normalizingBackend/normalizer.d.ts.map +1 -1
- package/dist/normalizingBackend/normalizer.js +130 -138
- package/dist/normalizingBackend/normalizer.js.map +1 -1
- package/dist/toolkit/auth.js +47 -60
- package/dist/toolkit/auth.js.map +1 -1
- package/dist/toolkit/execution.js +40 -52
- package/dist/toolkit/execution.js.map +1 -1
- package/dist/toolkit/paging.js +77 -146
- package/dist/toolkit/paging.js.map +1 -1
- package/dist/toolkit/pluginUrlValidation.js +9 -9
- package/dist/toolkit/pluginUrlValidation.js.map +1 -1
- package/dist/workspaceSettingsBackend/index.js +23 -46
- package/dist/workspaceSettingsBackend/index.js.map +1 -1
- package/esm/cachingBackend/index.js +281 -358
- package/esm/cachingBackend/index.js.map +1 -1
- package/esm/convertors/fromBackend/afm/result.js +3 -3
- package/esm/convertors/fromBackend/afm/result.js.map +1 -1
- package/esm/customBackend/execution.js +72 -89
- package/esm/customBackend/execution.js.map +1 -1
- package/esm/customBackend/index.js +75 -112
- package/esm/customBackend/index.js.map +1 -1
- package/esm/customBackend/workspace.js +37 -39
- package/esm/customBackend/workspace.js.map +1 -1
- package/esm/decoratedBackend/attributes.js +21 -23
- package/esm/decoratedBackend/attributes.js.map +1 -1
- package/esm/decoratedBackend/catalog.js +36 -51
- package/esm/decoratedBackend/catalog.js.map +1 -1
- package/esm/decoratedBackend/dashboards.js +61 -63
- package/esm/decoratedBackend/dashboards.js.map +1 -1
- package/esm/decoratedBackend/elements.js +47 -73
- package/esm/decoratedBackend/elements.js.map +1 -1
- package/esm/decoratedBackend/execution.js +60 -81
- package/esm/decoratedBackend/execution.js.map +1 -1
- package/esm/decoratedBackend/index.js +88 -103
- package/esm/decoratedBackend/index.js.map +1 -1
- package/esm/decoratedBackend/securitySettings.js +7 -9
- package/esm/decoratedBackend/securitySettings.js.map +1 -1
- package/esm/decoratedBackend/workspaceSettings.js +12 -27
- package/esm/decoratedBackend/workspaceSettings.js.map +1 -1
- package/esm/dummyBackend/index.js +342 -387
- package/esm/dummyBackend/index.js.map +1 -1
- package/esm/eventingBackend/index.js +37 -45
- package/esm/eventingBackend/index.js.map +1 -1
- package/esm/ldmFactories/builder.js +14 -17
- package/esm/ldmFactories/builder.js.map +1 -1
- package/esm/ldmFactories/catalog/attributeFactory.js +15 -27
- package/esm/ldmFactories/catalog/attributeFactory.js.map +1 -1
- package/esm/ldmFactories/catalog/dateDatasetFactory.js +18 -37
- package/esm/ldmFactories/catalog/dateDatasetFactory.js.map +1 -1
- package/esm/ldmFactories/catalog/factFactory.js +5 -15
- package/esm/ldmFactories/catalog/factFactory.js.map +1 -1
- package/esm/ldmFactories/catalog/groupFactory.js +11 -27
- package/esm/ldmFactories/catalog/groupFactory.js.map +1 -1
- package/esm/ldmFactories/catalog/measureFactory.js +9 -21
- package/esm/ldmFactories/catalog/measureFactory.js.map +1 -1
- package/esm/ldmFactories/dashboard/insightWidgetFactory.js +16 -25
- package/esm/ldmFactories/dashboard/insightWidgetFactory.js.map +1 -1
- package/esm/ldmFactories/dashboard/kpiWidgetFactory.js +19 -31
- package/esm/ldmFactories/dashboard/kpiWidgetFactory.js.map +1 -1
- package/esm/ldmFactories/dashboard/widgetFactory.js +19 -39
- package/esm/ldmFactories/dashboard/widgetFactory.js.map +1 -1
- package/esm/ldmFactories/metadata/attributeFactory.js +9 -19
- package/esm/ldmFactories/metadata/attributeFactory.js.map +1 -1
- package/esm/ldmFactories/metadata/dashboardFactory.js +3 -13
- package/esm/ldmFactories/metadata/dashboardFactory.js.map +1 -1
- package/esm/ldmFactories/metadata/dataSetFactory.js +3 -13
- package/esm/ldmFactories/metadata/dataSetFactory.js.map +1 -1
- package/esm/ldmFactories/metadata/displayFormFactory.js +9 -19
- package/esm/ldmFactories/metadata/displayFormFactory.js.map +1 -1
- package/esm/ldmFactories/metadata/factFactory.js +3 -13
- package/esm/ldmFactories/metadata/factFactory.js.map +1 -1
- package/esm/ldmFactories/metadata/factory.js +16 -23
- package/esm/ldmFactories/metadata/factory.js.map +1 -1
- package/esm/ldmFactories/metadata/measureFactory.js +9 -19
- package/esm/ldmFactories/metadata/measureFactory.js.map +1 -1
- package/esm/ldmFactories/metadata/variableFactory.js +3 -13
- package/esm/ldmFactories/metadata/variableFactory.js.map +1 -1
- package/esm/normalizingBackend/index.js +64 -90
- package/esm/normalizingBackend/index.js.map +1 -1
- package/esm/normalizingBackend/normalizer.d.ts.map +1 -1
- package/esm/normalizingBackend/normalizer.js +125 -136
- package/esm/normalizingBackend/normalizer.js.map +1 -1
- package/esm/toolkit/auth.js +47 -63
- package/esm/toolkit/auth.js.map +1 -1
- package/esm/toolkit/execution.js +38 -53
- package/esm/toolkit/execution.js.map +1 -1
- package/esm/toolkit/paging.js +72 -144
- package/esm/toolkit/paging.js.map +1 -1
- package/esm/toolkit/pluginUrlValidation.js +8 -8
- package/esm/toolkit/pluginUrlValidation.js.map +1 -1
- package/esm/workspaceSettingsBackend/index.js +19 -43
- package/esm/workspaceSettingsBackend/index.js.map +1 -1
- package/package.json +7 -6
package/esm/toolkit/auth.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __awaiter, __generator } from "tslib";
|
|
2
1
|
// (C) 2019-2021 GoodData Corporation
|
|
3
2
|
import { NotSupported, } from "@gooddata/sdk-backend-spi";
|
|
4
3
|
/**
|
|
@@ -14,80 +13,69 @@ import { NotSupported, } from "@gooddata/sdk-backend-spi";
|
|
|
14
13
|
*
|
|
15
14
|
* @internal
|
|
16
15
|
*/
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
var _this = this;
|
|
16
|
+
export class AuthProviderCallGuard {
|
|
17
|
+
constructor(realProvider) {
|
|
20
18
|
this.realProvider = realProvider;
|
|
21
|
-
this.reset =
|
|
22
|
-
|
|
19
|
+
this.reset = () => {
|
|
20
|
+
this.principal = undefined;
|
|
23
21
|
};
|
|
24
22
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
25
|
-
this.initializeClient =
|
|
23
|
+
this.initializeClient = (client) => {
|
|
26
24
|
var _a, _b;
|
|
27
|
-
(_b = (_a =
|
|
25
|
+
(_b = (_a = this.realProvider).initializeClient) === null || _b === void 0 ? void 0 : _b.call(_a, client);
|
|
28
26
|
};
|
|
29
|
-
this.onNotAuthenticated =
|
|
27
|
+
this.onNotAuthenticated = (context, error) => {
|
|
30
28
|
var _a, _b;
|
|
31
|
-
(_b = (_a =
|
|
29
|
+
(_b = (_a = this.realProvider).onNotAuthenticated) === null || _b === void 0 ? void 0 : _b.call(_a, context, error);
|
|
32
30
|
};
|
|
33
|
-
this.authenticate =
|
|
34
|
-
if (
|
|
35
|
-
return Promise.resolve(
|
|
31
|
+
this.authenticate = (context) => {
|
|
32
|
+
if (this.principal) {
|
|
33
|
+
return Promise.resolve(this.principal);
|
|
36
34
|
}
|
|
37
|
-
if (
|
|
38
|
-
return
|
|
35
|
+
if (this.inflightRequest) {
|
|
36
|
+
return this.inflightRequest;
|
|
39
37
|
}
|
|
40
|
-
|
|
38
|
+
this.inflightRequest = this.realProvider
|
|
41
39
|
.authenticate(context)
|
|
42
|
-
.then(
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
.then((res) => {
|
|
41
|
+
this.principal = res;
|
|
42
|
+
this.inflightRequest = undefined;
|
|
45
43
|
return res;
|
|
46
44
|
})
|
|
47
|
-
.catch(
|
|
48
|
-
|
|
45
|
+
.catch((err) => {
|
|
46
|
+
this.inflightRequest = undefined;
|
|
49
47
|
throw err;
|
|
50
48
|
});
|
|
51
|
-
return
|
|
49
|
+
return this.inflightRequest;
|
|
52
50
|
};
|
|
53
51
|
}
|
|
54
|
-
|
|
52
|
+
getCurrentPrincipal(context) {
|
|
55
53
|
return this.realProvider.getCurrentPrincipal(context);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
};
|
|
64
|
-
return AuthProviderCallGuard;
|
|
65
|
-
}());
|
|
66
|
-
export { AuthProviderCallGuard };
|
|
54
|
+
}
|
|
55
|
+
async deauthenticate(context) {
|
|
56
|
+
return this.realProvider.deauthenticate(context);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
67
59
|
/**
|
|
68
60
|
* This implementation serves as a Null object for IAuthProviderCallGuard.
|
|
69
61
|
*
|
|
70
62
|
* @internal
|
|
71
63
|
*/
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
NoopAuthProvider.prototype.authenticate = function (_context) {
|
|
64
|
+
export class NoopAuthProvider {
|
|
65
|
+
authenticate(_context) {
|
|
76
66
|
throw new NotSupported("NoopAuthProvider does not support authenticate");
|
|
77
|
-
}
|
|
78
|
-
|
|
67
|
+
}
|
|
68
|
+
getCurrentPrincipal(_context) {
|
|
79
69
|
throw new NotSupported("NoopAuthProvider does not support getCurrentPrincipal");
|
|
80
|
-
}
|
|
81
|
-
|
|
70
|
+
}
|
|
71
|
+
deauthenticate(_context) {
|
|
82
72
|
throw new NotSupported("NoopAuthProvider does not support deauthenticate");
|
|
83
|
-
}
|
|
84
|
-
|
|
73
|
+
}
|
|
74
|
+
reset() {
|
|
85
75
|
throw new NotSupported("NoopAuthProvider does not support reset");
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
export { NoopAuthProvider };
|
|
90
|
-
export var AnonymousUser = {
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export const AnonymousUser = {
|
|
91
79
|
userId: "anonymous",
|
|
92
80
|
};
|
|
93
81
|
/**
|
|
@@ -95,22 +83,18 @@ export var AnonymousUser = {
|
|
|
95
83
|
*
|
|
96
84
|
* @public
|
|
97
85
|
*/
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
AnonymousAuthProvider.prototype.authenticate = function (_context) {
|
|
86
|
+
export class AnonymousAuthProvider {
|
|
87
|
+
authenticate(_context) {
|
|
102
88
|
return Promise.resolve(AnonymousUser);
|
|
103
|
-
}
|
|
104
|
-
|
|
89
|
+
}
|
|
90
|
+
getCurrentPrincipal(_context) {
|
|
105
91
|
return Promise.resolve(AnonymousUser);
|
|
106
|
-
}
|
|
107
|
-
|
|
92
|
+
}
|
|
93
|
+
deauthenticate(_context) {
|
|
108
94
|
return Promise.resolve();
|
|
109
|
-
}
|
|
110
|
-
|
|
95
|
+
}
|
|
96
|
+
reset() {
|
|
111
97
|
return;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
}());
|
|
115
|
-
export { AnonymousAuthProvider };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
116
100
|
//# sourceMappingURL=auth.js.map
|
package/esm/toolkit/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/toolkit/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/toolkit/auth.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,EAKH,YAAY,GAEf,MAAM,2BAA2B,CAAC;AA6CnC;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,qBAAqB;IAI9B,YAA6B,YAAqC;QAArC,iBAAY,GAAZ,YAAY,CAAyB;QAE3D,UAAK,GAAG,GAAS,EAAE;YACtB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC/B,CAAC,CAAC;QAEF,6EAA6E;QACtE,qBAAgB,GAAG,CAAC,MAAW,EAAQ,EAAE;;YAC5C,MAAA,MAAA,IAAI,CAAC,YAAY,EAAC,gBAAgB,mDAAG,MAAM,EAAE;QACjD,CAAC,CAAC;QAEK,uBAAkB,GAAG,CAAC,OAA+B,EAAE,KAAuB,EAAQ,EAAE;;YAC3F,MAAA,MAAA,IAAI,CAAC,YAAY,EAAC,kBAAkB,mDAAG,OAAO,EAAE,KAAK,EAAE;QAC3D,CAAC,CAAC;QAEK,iBAAY,GAAG,CAAC,OAA+B,EAAoC,EAAE;YACxF,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC1C;YAED,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,OAAO,IAAI,CAAC,eAAe,CAAC;aAC/B;YAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY;iBACnC,YAAY,CAAC,OAAO,CAAC;iBACrB,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACV,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;gBACrB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;gBAEjC,OAAO,GAAG,CAAC;YACf,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACX,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;gBAEjC,MAAM,GAAG,CAAC;YACd,CAAC,CAAC,CAAC;YAEP,OAAO,IAAI,CAAC,eAAe,CAAC;QAChC,CAAC,CAAC;IAvCmE,CAAC;IAyC/D,mBAAmB,CAAC,OAA+B;QACtD,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,OAA+B;QACvD,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACrD,CAAC;CACJ;AAED;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;IAClB,YAAY,CAAC,QAAgC;QAChD,MAAM,IAAI,YAAY,CAAC,gDAAgD,CAAC,CAAC;IAC7E,CAAC;IAEM,mBAAmB,CAAC,QAAgC;QACvD,MAAM,IAAI,YAAY,CAAC,uDAAuD,CAAC,CAAC;IACpF,CAAC;IAEM,cAAc,CAAC,QAAgC;QAClD,MAAM,IAAI,YAAY,CAAC,kDAAkD,CAAC,CAAC;IAC/E,CAAC;IAEM,KAAK;QACR,MAAM,IAAI,YAAY,CAAC,yCAAyC,CAAC,CAAC;IACtE,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,aAAa,GAA4B;IAClD,MAAM,EAAE,WAAW;CACtB,CAAC;AAEF;;;;GAIG;AACH,MAAM,OAAO,qBAAqB;IACvB,YAAY,CAAC,QAAgC;QAChD,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC;IAEM,mBAAmB,CAAC,QAAgC;QACvD,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC;IAEM,cAAc,CAAC,QAAgC;QAClD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAEM,KAAK;QACR,OAAO;IACX,CAAC;CACJ"}
|
package/esm/toolkit/execution.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
// (C) 2019-2020 GoodData Corporation
|
|
2
|
-
import { __extends } from "tslib";
|
|
3
2
|
import { defaultDimensionsGenerator, defWithDimensions, newDefForBuckets, newDefForInsight, newDefForItems, isInsight, } from "@gooddata/sdk-model";
|
|
4
3
|
import { DecoratedExecutionFactory } from "../decoratedBackend/execution";
|
|
5
4
|
/**
|
|
@@ -15,28 +14,26 @@ import { DecoratedExecutionFactory } from "../decoratedBackend/execution";
|
|
|
15
14
|
*
|
|
16
15
|
* @internal
|
|
17
16
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
export class AbstractExecutionFactory {
|
|
18
|
+
constructor(workspace) {
|
|
20
19
|
this.workspace = workspace;
|
|
21
20
|
}
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
forItems(items, filters) {
|
|
22
|
+
const def = defWithDimensions(newDefForItems(this.workspace, items, filters), defaultDimensionsGenerator);
|
|
24
23
|
return this.forDefinition(def);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
}
|
|
25
|
+
forBuckets(buckets, filters) {
|
|
26
|
+
const def = defWithDimensions(newDefForBuckets(this.workspace, buckets, filters), defaultDimensionsGenerator);
|
|
28
27
|
return this.forDefinition(def);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
}
|
|
29
|
+
forInsight(insight, filters) {
|
|
30
|
+
const def = defWithDimensions(newDefForInsight(this.workspace, insight, filters), defaultDimensionsGenerator);
|
|
32
31
|
return this.forDefinition(def);
|
|
33
|
-
}
|
|
34
|
-
|
|
32
|
+
}
|
|
33
|
+
forInsightByRef(insight, filters) {
|
|
35
34
|
return this.forInsight(insight, filters);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
}());
|
|
39
|
-
export { AbstractExecutionFactory };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
40
37
|
/**
|
|
41
38
|
* This implementation of execution factory allows transparent injection of fixed set of filters to all
|
|
42
39
|
* executions started through it.
|
|
@@ -46,33 +43,24 @@ export { AbstractExecutionFactory };
|
|
|
46
43
|
*
|
|
47
44
|
* @internal
|
|
48
45
|
*/
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
return
|
|
46
|
+
export class ExecutionFactoryWithFixedFilters extends DecoratedExecutionFactory {
|
|
47
|
+
constructor(decorated, filters = []) {
|
|
48
|
+
super(decorated);
|
|
49
|
+
this.filters = filters;
|
|
50
|
+
}
|
|
51
|
+
forItems(items, filters = []) {
|
|
52
|
+
return super.forItems(items, this.filters.concat(filters));
|
|
56
53
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
return _super.prototype.forInsight.call(this, insight, this.filters.concat(filters));
|
|
68
|
-
};
|
|
69
|
-
ExecutionFactoryWithFixedFilters.prototype.forInsightByRef = function (insight, filters) {
|
|
70
|
-
if (filters === void 0) { filters = []; }
|
|
71
|
-
return _super.prototype.forInsightByRef.call(this, insight, this.filters.concat(filters));
|
|
72
|
-
};
|
|
73
|
-
return ExecutionFactoryWithFixedFilters;
|
|
74
|
-
}(DecoratedExecutionFactory));
|
|
75
|
-
export { ExecutionFactoryWithFixedFilters };
|
|
54
|
+
forBuckets(buckets, filters = []) {
|
|
55
|
+
return super.forBuckets(buckets, this.filters.concat(filters));
|
|
56
|
+
}
|
|
57
|
+
forInsight(insight, filters = []) {
|
|
58
|
+
return super.forInsight(insight, this.filters.concat(filters));
|
|
59
|
+
}
|
|
60
|
+
forInsightByRef(insight, filters = []) {
|
|
61
|
+
return super.forInsightByRef(insight, this.filters.concat(filters));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
76
64
|
/**
|
|
77
65
|
* This implementation of execution factory will transparently upgrade any `forInsight` execution
|
|
78
66
|
* to `forInsightByRef` execution IF the argument to `forInsight` is actually a persisted insight (`IInsight` which
|
|
@@ -80,18 +68,15 @@ export { ExecutionFactoryWithFixedFilters };
|
|
|
80
68
|
*
|
|
81
69
|
* @internal
|
|
82
70
|
*/
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return _super.call(this, decorated) || this;
|
|
71
|
+
export class ExecutionFactoryUpgradingToExecByReference extends DecoratedExecutionFactory {
|
|
72
|
+
constructor(decorated) {
|
|
73
|
+
super(decorated);
|
|
87
74
|
}
|
|
88
|
-
|
|
75
|
+
forInsight(insight, filters) {
|
|
89
76
|
if (isInsight(insight)) {
|
|
90
77
|
return this.forInsightByRef(insight, filters);
|
|
91
78
|
}
|
|
92
|
-
return
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
}(DecoratedExecutionFactory));
|
|
96
|
-
export { ExecutionFactoryUpgradingToExecByReference };
|
|
79
|
+
return super.forInsight(insight, filters);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
97
82
|
//# sourceMappingURL=execution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/toolkit/execution.ts"],"names":[],"mappings":"AAAA,qCAAqC
|
|
1
|
+
{"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/toolkit/execution.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,EAEH,0BAA0B,EAC1B,iBAAiB,EAIjB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EAEd,SAAS,GAEZ,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAE1E;;;;;;;;;;;;GAYG;AACH,MAAM,OAAgB,wBAAwB;IAC1C,YAA+B,SAAiB;QAAjB,cAAS,GAAT,SAAS,CAAQ;IAAG,CAAC;IAI7C,QAAQ,CAAC,KAA4B,EAAE,OAA2B;QACrE,MAAM,GAAG,GAAG,iBAAiB,CACzB,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,EAC9C,0BAA0B,CAC7B,CAAC;QAEF,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAEM,UAAU,CAAC,OAAkB,EAAE,OAA2B;QAC7D,MAAM,GAAG,GAAG,iBAAiB,CACzB,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAClD,0BAA0B,CAC7B,CAAC;QAEF,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAEM,UAAU,CAAC,OAA2B,EAAE,OAA2B;QACtE,MAAM,GAAG,GAAG,iBAAiB,CACzB,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAClD,0BAA0B,CAC7B,CAAC;QAEF,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAEM,eAAe,CAAC,OAAiB,EAAE,OAA2B;QACjE,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;CACJ;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,gCAAiC,SAAQ,yBAAyB;IAC3E,YAAY,SAA4B,EAAmB,UAA6B,EAAE;QACtF,KAAK,CAAC,SAAS,CAAC,CAAC;QADsC,YAAO,GAAP,OAAO,CAAwB;IAE1F,CAAC;IAEM,QAAQ,CAAC,KAA4B,EAAE,UAA6B,EAAE;QACzE,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,CAAC;IAEM,UAAU,CAAC,OAAkB,EAAE,UAA6B,EAAE;QACjE,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,CAAC;IAEM,UAAU,CAAC,OAA2B,EAAE,UAA6B,EAAE;QAC1E,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,CAAC;IAEM,eAAe,CAAC,OAAiB,EAAE,UAA6B,EAAE;QACrE,OAAO,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACxE,CAAC;CACJ;AAED;;;;;;GAMG;AACH,MAAM,OAAO,0CAA2C,SAAQ,yBAAyB;IACrF,YAAY,SAA4B;QACpC,KAAK,CAAC,SAAS,CAAC,CAAC;IACrB,CAAC;IAEM,UAAU,CAAC,OAA2B,EAAE,OAA2B;QACtE,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE;YACpB,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACjD;QAED,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;CACJ"}
|
package/esm/toolkit/paging.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __awaiter, __generator, __spreadArrays } from "tslib";
|
|
2
1
|
import invariant from "ts-invariant";
|
|
3
2
|
import range from "lodash/range";
|
|
4
3
|
import flatMap from "lodash/flatMap";
|
|
@@ -9,13 +8,11 @@ import isNil from "lodash/isNil";
|
|
|
9
8
|
*
|
|
10
9
|
* @internal
|
|
11
10
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
if (limit === void 0) { limit = 50; }
|
|
15
|
-
if (offset === void 0) { offset = 0; }
|
|
11
|
+
export class InMemoryPaging {
|
|
12
|
+
constructor(allItems, limit = 50, offset = 0) {
|
|
16
13
|
this.allItems = allItems;
|
|
17
|
-
invariant(offset >= 0,
|
|
18
|
-
invariant(limit > 0,
|
|
14
|
+
invariant(offset >= 0, `paging offset must be non-negative, got: ${offset}`);
|
|
15
|
+
invariant(limit > 0, `limit must be a positive number, got: ${limit}`);
|
|
19
16
|
// this will naturally return empty items if at the end of data; limit will always be positive
|
|
20
17
|
this.items = allItems.slice(offset, offset + limit);
|
|
21
18
|
// offset is at most at the end of all available elements
|
|
@@ -24,152 +21,83 @@ var InMemoryPaging = /** @class */ (function () {
|
|
|
24
21
|
this.limit = limit;
|
|
25
22
|
this.totalCount = allItems.length;
|
|
26
23
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
};
|
|
47
|
-
InMemoryPaging.prototype.all = function () {
|
|
48
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
49
|
-
return __generator(this, function (_a) {
|
|
50
|
-
return [2 /*return*/, __spreadArrays(this.allItems)];
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
};
|
|
54
|
-
InMemoryPaging.prototype.allSorted = function (compareFn) {
|
|
55
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
56
|
-
return __generator(this, function (_a) {
|
|
57
|
-
return [2 /*return*/, __spreadArrays(this.allItems).sort(compareFn)];
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
};
|
|
61
|
-
return InMemoryPaging;
|
|
62
|
-
}());
|
|
63
|
-
export { InMemoryPaging };
|
|
24
|
+
async next() {
|
|
25
|
+
if (this.items.length === 0) {
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
return new InMemoryPaging(this.allItems, this.limit, this.offset + this.items.length);
|
|
29
|
+
}
|
|
30
|
+
async goTo(pageIndex) {
|
|
31
|
+
if (this.items.length === 0) {
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
return new InMemoryPaging(this.allItems, this.limit, pageIndex * this.items.length);
|
|
35
|
+
}
|
|
36
|
+
async all() {
|
|
37
|
+
return [...this.allItems];
|
|
38
|
+
}
|
|
39
|
+
async allSorted(compareFn) {
|
|
40
|
+
return [...this.allItems].sort(compareFn);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
64
43
|
/**
|
|
65
44
|
* Common implementation of the {@link @gooddata/sdk-backend-spi#IPagedResource} for the server-side paging.
|
|
66
45
|
*
|
|
67
46
|
* @internal
|
|
68
47
|
*/
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
var _this = this;
|
|
72
|
-
if (limit === void 0) { limit = 50; }
|
|
73
|
-
if (offset === void 0) { offset = 0; }
|
|
48
|
+
export class ServerPaging {
|
|
49
|
+
constructor(getData, limit = 50, offset = 0, totalCount, items) {
|
|
74
50
|
this.getData = getData;
|
|
75
51
|
this.limit = limit;
|
|
76
52
|
this.offset = offset;
|
|
77
53
|
this.totalCount = totalCount;
|
|
78
54
|
this.items = items;
|
|
79
|
-
this.next =
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
return
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
_a.label = 1;
|
|
127
|
-
case 1:
|
|
128
|
-
if (!(allPagesToLoad.length > 0)) return [3 /*break*/, 3];
|
|
129
|
-
pagesToLoad = allPagesToLoad.slice(0, maxRequests);
|
|
130
|
-
allPagesToLoad.splice(0, maxRequests);
|
|
131
|
-
return [4 /*yield*/, Promise.all(pagesToLoad.map(function (page) { return _this.goTo(page); }))];
|
|
132
|
-
case 2:
|
|
133
|
-
loadedPages = _a.sent();
|
|
134
|
-
results.push.apply(results, flatMap(loadedPages, function (page) { return page.items; }));
|
|
135
|
-
return [3 /*break*/, 1];
|
|
136
|
-
case 3: return [2 /*return*/, results];
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
}); };
|
|
140
|
-
this.allSorted = function (compareFn) { return __awaiter(_this, void 0, void 0, function () {
|
|
141
|
-
var all;
|
|
142
|
-
return __generator(this, function (_a) {
|
|
143
|
-
switch (_a.label) {
|
|
144
|
-
case 0: return [4 /*yield*/, this.all()];
|
|
145
|
-
case 1:
|
|
146
|
-
all = _a.sent();
|
|
147
|
-
return [2 /*return*/, all.sort(compareFn)];
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
}); };
|
|
55
|
+
this.next = async () => {
|
|
56
|
+
// No items = we are on the last page.
|
|
57
|
+
if (this.items.length === 0) {
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
// We are on the last page with the items - return empty result for the next page immediately
|
|
61
|
+
if (this.items.length < this.limit || this.offset + this.items.length === this.totalCount) {
|
|
62
|
+
return new ServerPaging(this.getData, this.limit, this.offset + this.limit, this.totalCount, []);
|
|
63
|
+
}
|
|
64
|
+
const pageData = await this.getData({ limit: this.limit, offset: this.offset + this.limit });
|
|
65
|
+
return new ServerPaging(this.getData, this.limit, this.offset + this.limit, pageData.totalCount, pageData.items);
|
|
66
|
+
};
|
|
67
|
+
this.goTo = async (pageIndex) => {
|
|
68
|
+
const offset = pageIndex * this.limit;
|
|
69
|
+
const pageData = await this.getData({ limit: this.limit, offset });
|
|
70
|
+
return new ServerPaging(this.getData, this.limit, offset, pageData.totalCount, pageData.items);
|
|
71
|
+
};
|
|
72
|
+
this.all = async () => {
|
|
73
|
+
const results = [];
|
|
74
|
+
const maxRequests = 6;
|
|
75
|
+
const allPagesToLoad = range(0, this.totalCount / this.limit);
|
|
76
|
+
// if the paged resource is already at the 0 offset, use it directly to save a duplicate request
|
|
77
|
+
if (this.offset === 0) {
|
|
78
|
+
results.push(...this.items);
|
|
79
|
+
allPagesToLoad.shift();
|
|
80
|
+
}
|
|
81
|
+
while (allPagesToLoad.length > 0) {
|
|
82
|
+
const pagesToLoad = allPagesToLoad.slice(0, maxRequests);
|
|
83
|
+
allPagesToLoad.splice(0, maxRequests);
|
|
84
|
+
const loadedPages = await Promise.all(pagesToLoad.map((page) => this.goTo(page)));
|
|
85
|
+
results.push(...flatMap(loadedPages, (page) => page.items));
|
|
86
|
+
}
|
|
87
|
+
return results;
|
|
88
|
+
};
|
|
89
|
+
this.allSorted = async (compareFn) => {
|
|
90
|
+
const all = await this.all();
|
|
91
|
+
return all.sort(compareFn);
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
static async for(getData, limit = 50, offset = 0) {
|
|
95
|
+
invariant(offset >= 0, `paging offset must be non-negative, got: ${offset}`);
|
|
96
|
+
invariant(limit > 0, `limit must be a positive number, got: ${limit}`);
|
|
97
|
+
const { totalCount, items } = await getData({ limit, offset });
|
|
98
|
+
// must use isNil, totalCount: 0 is a valid case (e.g. when searching for a nonsensical string)
|
|
99
|
+
invariant(!isNil(totalCount), `total count must be specified, got: ${totalCount}`);
|
|
100
|
+
return new ServerPaging(getData, limit, offset, totalCount, items);
|
|
151
101
|
}
|
|
152
|
-
|
|
153
|
-
if (limit === void 0) { limit = 50; }
|
|
154
|
-
if (offset === void 0) { offset = 0; }
|
|
155
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
156
|
-
var _a, totalCount, items;
|
|
157
|
-
return __generator(this, function (_b) {
|
|
158
|
-
switch (_b.label) {
|
|
159
|
-
case 0:
|
|
160
|
-
invariant(offset >= 0, "paging offset must be non-negative, got: " + offset);
|
|
161
|
-
invariant(limit > 0, "limit must be a positive number, got: " + limit);
|
|
162
|
-
return [4 /*yield*/, getData({ limit: limit, offset: offset })];
|
|
163
|
-
case 1:
|
|
164
|
-
_a = _b.sent(), totalCount = _a.totalCount, items = _a.items;
|
|
165
|
-
// must use isNil, totalCount: 0 is a valid case (e.g. when searching for a nonsensical string)
|
|
166
|
-
invariant(!isNil(totalCount), "total count must be specified, got: " + totalCount);
|
|
167
|
-
return [2 /*return*/, new ServerPaging(getData, limit, offset, totalCount, items)];
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
};
|
|
172
|
-
return ServerPaging;
|
|
173
|
-
}());
|
|
174
|
-
export { ServerPaging };
|
|
102
|
+
}
|
|
175
103
|
//# sourceMappingURL=paging.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paging.js","sourceRoot":"","sources":["../../src/toolkit/paging.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"paging.js","sourceRoot":"","sources":["../../src/toolkit/paging.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
// (C) 2021 GoodData Corporation
|
|
2
2
|
import { sanitizeUrl } from "@braintree/sanitize-url";
|
|
3
|
-
|
|
3
|
+
const AboutBlank = "about:blank";
|
|
4
4
|
function validateUrl(url, messagePrefix) {
|
|
5
|
-
|
|
5
|
+
const sanitized = sanitizeUrl(url);
|
|
6
6
|
if (url !== sanitized) {
|
|
7
7
|
// sanitized URL being different from the input means there was something fishy with the URL
|
|
8
8
|
if (sanitized === AboutBlank) {
|
|
9
9
|
// sanitization about return about:blank in case the url contains javascript/vbscript/data schemas
|
|
10
|
-
return messagePrefix
|
|
10
|
+
return `${messagePrefix} contains invalid schema; possible XSS detected`;
|
|
11
11
|
}
|
|
12
|
-
return messagePrefix
|
|
12
|
+
return `${messagePrefix} contains invalid characters`;
|
|
13
13
|
}
|
|
14
14
|
// explicitly check for '/.' and '/..'
|
|
15
15
|
if (url.search(/\/\.+/) > -1) {
|
|
16
|
-
return messagePrefix
|
|
16
|
+
return `${messagePrefix} contains reserved filename characters`;
|
|
17
17
|
}
|
|
18
18
|
return undefined;
|
|
19
19
|
}
|
|
@@ -28,16 +28,16 @@ export function validatePluginUrlIsSane(url) {
|
|
|
28
28
|
var _a;
|
|
29
29
|
try {
|
|
30
30
|
// ensure URL is valid and is https
|
|
31
|
-
|
|
31
|
+
const parsedUrl = new URL(url);
|
|
32
32
|
if (parsedUrl.protocol !== "https:") {
|
|
33
|
-
return
|
|
33
|
+
return `url does not use https`;
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
catch (e) {
|
|
37
37
|
return "url is malformed";
|
|
38
38
|
}
|
|
39
39
|
// validate URL as is; then decode from percent-encoded URL and do one more round with the same validations
|
|
40
|
-
|
|
40
|
+
const validationError = (_a = validateUrl(url, "url")) !== null && _a !== void 0 ? _a : validateUrl(decodeURIComponent(url), "decoded url");
|
|
41
41
|
if (validationError) {
|
|
42
42
|
return validationError;
|
|
43
43
|
}
|