@forestadmin/forestadmin-client 1.0.0-alpha.2 → 1.0.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.
@@ -0,0 +1,17 @@
1
+ import { Chart } from './types';
2
+ import type { ChartHandlerInterface } from '../types';
3
+ import type { RequestContextVariables } from '../utils/context-variables';
4
+ import type ContextVariablesInstantiator from '../utils/context-variables-instantiator';
5
+ export declare type ChartRequest<C extends Chart = Chart> = C & {
6
+ contextVariables?: RequestContextVariables;
7
+ };
8
+ export default class ChartHandlerService implements ChartHandlerInterface {
9
+ private readonly contextVariablesInstantiator;
10
+ constructor(contextVariablesInstantiator: ContextVariablesInstantiator);
11
+ getChartWithContextInjected({ userId, renderingId, chartRequest, }: {
12
+ userId: string | number;
13
+ renderingId: string | number;
14
+ chartRequest: ChartRequest;
15
+ }): Promise<Chart>;
16
+ }
17
+ //# sourceMappingURL=chart-handler.d.ts.map
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const chart_detector_1 = __importDefault(require("../utils/chart-detector"));
7
+ const context_variables_injector_1 = __importDefault(require("../utils/context-variables-injector"));
8
+ class ChartHandlerService {
9
+ constructor(contextVariablesInstantiator) {
10
+ this.contextVariablesInstantiator = contextVariablesInstantiator;
11
+ }
12
+ async getChartWithContextInjected({ userId, renderingId, chartRequest, }) {
13
+ const contextVariables = await this.contextVariablesInstantiator.buildContextVariables({
14
+ userId,
15
+ renderingId,
16
+ requestContextVariables: chartRequest.contextVariables,
17
+ });
18
+ const chart = { ...chartRequest };
19
+ delete chart.contextVariables;
20
+ if (chart_detector_1.default.isFilterableChart(chart)) {
21
+ chart.filter = context_variables_injector_1.default.injectContextInFilter(chart.filter, contextVariables);
22
+ }
23
+ if (chart_detector_1.default.isAggregatedChart(chart)) {
24
+ chart.aggregator = context_variables_injector_1.default.injectContextInValue(chart.aggregator, contextVariables);
25
+ }
26
+ if (chart_detector_1.default.isLineChart(chart)) {
27
+ chart.timeRange = context_variables_injector_1.default.injectContextInValue(chart.timeRange, contextVariables);
28
+ }
29
+ if (chart_detector_1.default.isObjectiveChart(chart)) {
30
+ chart.objective = Number(context_variables_injector_1.default.injectContextInValue(chart.objective, contextVariables));
31
+ }
32
+ if (chart_detector_1.default.isLeaderboardChart(chart)) {
33
+ chart.limit = Number(context_variables_injector_1.default.injectContextInValue(chart.limit, contextVariables));
34
+ }
35
+ return chart;
36
+ }
37
+ }
38
+ exports.default = ChartHandlerService;
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jaGFydHMvY2hhcnQtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLDZFQUFvRDtBQUNwRCxxR0FBMkU7QUFVM0UsTUFBcUIsbUJBQW1CO0lBQ3RDLFlBQTZCLDRCQUEwRDtRQUExRCxpQ0FBNEIsR0FBNUIsNEJBQTRCLENBQThCO0lBQUcsQ0FBQztJQUVwRixLQUFLLENBQUMsMkJBQTJCLENBQUMsRUFDdkMsTUFBTSxFQUNOLFdBQVcsRUFDWCxZQUFZLEdBS2I7UUFDQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLDRCQUE0QixDQUFDLHFCQUFxQixDQUFDO1lBQ3JGLE1BQU07WUFDTixXQUFXO1lBQ1gsdUJBQXVCLEVBQUUsWUFBWSxDQUFDLGdCQUFnQjtTQUN2RCxDQUFDLENBQUM7UUFFSCxNQUFNLEtBQUssR0FBRyxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDbEMsT0FBTyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7UUFFOUIsSUFBSSx3QkFBYSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsb0NBQXdCLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1NBQy9GO1FBRUQsSUFBSSx3QkFBYSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsb0NBQXdCLENBQUMsb0JBQW9CLENBQzlELEtBQUssQ0FBQyxVQUFVLEVBQ2hCLGdCQUFnQixDQUNqQixDQUFDO1NBQ0g7UUFFRCxJQUFJLHdCQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BDLEtBQUssQ0FBQyxTQUFTLEdBQUcsb0NBQXdCLENBQUMsb0JBQW9CLENBQzdELEtBQUssQ0FBQyxTQUFTLEVBQ2YsZ0JBQWdCLENBQ2pCLENBQUM7U0FDSDtRQUVELElBQUksd0JBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN6QyxLQUFLLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FDdEIsb0NBQXdCLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUNqRixDQUFDO1NBQ0g7UUFFRCxJQUFJLHdCQUFhLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0MsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQ2xCLG9DQUF3QixDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FDN0UsQ0FBQztTQUNIO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFyREQsc0NBcURDIn0=
@@ -1,3 +1,4 @@
1
+ import type { PlainConditionTreeBranch } from '@forestadmin/datasource-toolkit';
1
2
  export declare type KeysOfUnion<T> = T extends T ? keyof T : never;
2
3
  export interface BaseChart {
3
4
  type: ChartType;
@@ -15,7 +16,7 @@ export interface QueryChart extends BaseChart {
15
16
  query: string;
16
17
  }
17
18
  export interface FilterableChart extends BaseChart {
18
- filter?: string | null;
19
+ filter?: PlainConditionTreeBranch | null;
19
20
  }
20
21
  export interface AggregatedChart extends BaseChart {
21
22
  aggregator: 'Sum' | 'Count';
@@ -11,4 +11,4 @@ var ChartType;
11
11
  ChartType["Percentage"] = "Percentage";
12
12
  ChartType["Smart"] = "Smart";
13
13
  })(ChartType = exports.ChartType || (exports.ChartType = {}));
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hhcnRzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXNFQSxJQUFZLFNBUVg7QUFSRCxXQUFZLFNBQVM7SUFDbkIsd0JBQVcsQ0FBQTtJQUNYLDRCQUFlLENBQUE7SUFDZix3Q0FBMkIsQ0FBQTtJQUMzQiwwQkFBYSxDQUFBO0lBQ2Isb0NBQXVCLENBQUE7SUFDdkIsc0NBQXlCLENBQUE7SUFDekIsNEJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBUlcsU0FBUyxHQUFULGlCQUFTLEtBQVQsaUJBQVMsUUFRcEIifQ==
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hhcnRzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXdFQSxJQUFZLFNBUVg7QUFSRCxXQUFZLFNBQVM7SUFDbkIsd0JBQVcsQ0FBQTtJQUNYLDRCQUFlLENBQUE7SUFDZix3Q0FBMkIsQ0FBQTtJQUMzQiwwQkFBYSxDQUFBO0lBQ2Isb0NBQXVCLENBQUE7SUFDdkIsc0NBQXlCLENBQUE7SUFDekIsNEJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBUlcsU0FBUyxHQUFULGlCQUFTLEtBQVQsaUJBQVMsUUFRcEIifQ==
@@ -1,11 +1,15 @@
1
1
  import type { GenericTree } from '@forestadmin/datasource-toolkit';
2
2
  import { ForestAdminClient, ForestAdminClientOptionsWithDefaults, PermissionService } from './types';
3
+ import ChartHandler from './charts/chart-handler';
4
+ import ContextVariablesInstantiator from './utils/context-variables-instantiator';
3
5
  import RenderingPermissionService from './permissions/rendering-permission';
4
6
  export default class ForestAdminClientWithCache implements ForestAdminClient {
5
7
  protected readonly options: ForestAdminClientOptionsWithDefaults;
6
8
  readonly permissionService: PermissionService;
7
9
  protected readonly renderingPermissionService: RenderingPermissionService;
8
- constructor(options: ForestAdminClientOptionsWithDefaults, permissionService: PermissionService, renderingPermissionService: RenderingPermissionService);
10
+ readonly contextVariablesInstantiator: ContextVariablesInstantiator;
11
+ readonly chartHandler: ChartHandler;
12
+ constructor(options: ForestAdminClientOptionsWithDefaults, permissionService: PermissionService, renderingPermissionService: RenderingPermissionService, contextVariablesInstantiator: ContextVariablesInstantiator, chartHandler: ChartHandler);
9
13
  verifySignedActionParameters<TSignedParameters>(signedParameters: string): TSignedParameters;
10
14
  getScope({ renderingId, userId, collectionName, }: {
11
15
  renderingId: number | string;
@@ -5,10 +5,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const verify_approval_1 = __importDefault(require("./permissions/verify-approval"));
7
7
  class ForestAdminClientWithCache {
8
- constructor(options, permissionService, renderingPermissionService) {
8
+ constructor(options, permissionService, renderingPermissionService, contextVariablesInstantiator, chartHandler) {
9
9
  this.options = options;
10
10
  this.permissionService = permissionService;
11
11
  this.renderingPermissionService = renderingPermissionService;
12
+ this.contextVariablesInstantiator = contextVariablesInstantiator;
13
+ this.chartHandler = chartHandler;
12
14
  }
13
15
  verifySignedActionParameters(signedParameters) {
14
16
  return (0, verify_approval_1.default)(signedParameters, this.options.envSecret);
@@ -25,4 +27,4 @@ class ForestAdminClientWithCache {
25
27
  }
26
28
  }
27
29
  exports.default = ForestAdminClientWithCache;
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZXN0LWFkbWluLWNsaWVudC13aXRoLWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZvcmVzdC1hZG1pbi1jbGllbnQtd2l0aC1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVFBLG9GQUFxRTtBQUVyRSxNQUFxQiwwQkFBMEI7SUFDN0MsWUFDcUIsT0FBNkMsRUFDaEQsaUJBQW9DLEVBQ2pDLDBCQUFzRDtRQUZ0RCxZQUFPLEdBQVAsT0FBTyxDQUFzQztRQUNoRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ2pDLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBNEI7SUFDeEUsQ0FBQztJQUVHLDRCQUE0QixDQUNqQyxnQkFBd0I7UUFFeEIsT0FBTyxJQUFBLHlCQUF3QixFQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFDcEIsV0FBVyxFQUNYLE1BQU0sRUFDTixjQUFjLEdBS2Y7UUFDQyxPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUM7WUFDOUMsV0FBVztZQUNYLGNBQWM7WUFDZCxNQUFNO1NBQ1AsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLG1CQUFtQixDQUFDLFdBQTRCO1FBQ3JELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNGO0FBaENELDZDQWdDQyJ9
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZXN0LWFkbWluLWNsaWVudC13aXRoLWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZvcmVzdC1hZG1pbi1jbGllbnQtd2l0aC1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVVBLG9GQUFxRTtBQUVyRSxNQUFxQiwwQkFBMEI7SUFDN0MsWUFDcUIsT0FBNkMsRUFDaEQsaUJBQW9DLEVBQ2pDLDBCQUFzRCxFQUN6RCw0QkFBMEQsRUFDMUQsWUFBMEI7UUFKdkIsWUFBTyxHQUFQLE9BQU8sQ0FBc0M7UUFDaEQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNqQywrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTRCO1FBQ3pELGlDQUE0QixHQUE1Qiw0QkFBNEIsQ0FBOEI7UUFDMUQsaUJBQVksR0FBWixZQUFZLENBQWM7SUFDekMsQ0FBQztJQUVHLDRCQUE0QixDQUNqQyxnQkFBd0I7UUFFeEIsT0FBTyxJQUFBLHlCQUF3QixFQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFDcEIsV0FBVyxFQUNYLE1BQU0sRUFDTixjQUFjLEdBS2Y7UUFDQyxPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUM7WUFDOUMsV0FBVztZQUNYLGNBQWM7WUFDZCxNQUFNO1NBQ1AsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLG1CQUFtQixDQUFDLFdBQTRCO1FBQ3JELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNGO0FBbENELDZDQWtDQyJ9
package/dist/index.d.ts CHANGED
@@ -5,8 +5,11 @@ export { default as JTWUnableToVerifyError } from './permissions/errors/jwt-unab
5
5
  export { default as ChainedSQLQueryError } from './permissions/errors/chained-sql-query-error';
6
6
  export { default as EmptySQLQueryError } from './permissions/errors/empty-sql-query-error';
7
7
  export { default as NonSelectSQLQueryError } from './permissions/errors/non-select-sql-query-error';
8
- export { ForestAdminClientOptions, Logger, LoggerLevel, ForestAdminClient } from './types';
8
+ export { ForestAdminClientOptions, Logger, LoggerLevel, ForestAdminClient, ChartHandlerInterface, ContextVariablesInstantiatorInterface, } from './types';
9
9
  export { CollectionActionEvent } from './permissions/types';
10
10
  export default function createForestAdminClient(options: ForestAdminClientOptions): ForestAdminClient;
11
11
  export * from './charts/types';
12
+ export { default as ContextVariablesInjector } from './utils/context-variables-injector';
13
+ export { default as ContextVariables } from './utils/context-variables';
14
+ export { default as ChartHandler } from './charts/chart-handler';
12
15
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -17,8 +17,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.CollectionActionEvent = exports.NonSelectSQLQueryError = exports.EmptySQLQueryError = exports.ChainedSQLQueryError = exports.JTWUnableToVerifyError = exports.JTWTokenExpiredError = void 0;
20
+ exports.ChartHandler = exports.ContextVariables = exports.ContextVariablesInjector = exports.CollectionActionEvent = exports.NonSelectSQLQueryError = exports.EmptySQLQueryError = exports.ChainedSQLQueryError = exports.JTWUnableToVerifyError = exports.JTWTokenExpiredError = void 0;
21
21
  const action_permission_1 = __importDefault(require("./permissions/action-permission"));
22
+ const chart_handler_1 = __importDefault(require("./charts/chart-handler"));
23
+ const context_variables_instantiator_1 = __importDefault(require("./utils/context-variables-instantiator"));
22
24
  const forest_admin_client_with_cache_1 = __importDefault(require("./forest-admin-client-with-cache"));
23
25
  const permission_with_cache_1 = __importDefault(require("./permissions/permission-with-cache"));
24
26
  const rendering_permission_1 = __importDefault(require("./permissions/rendering-permission"));
@@ -47,8 +49,16 @@ function createForestAdminClient(options) {
47
49
  const userPermission = new user_permission_1.default(optionsWithDefaults);
48
50
  const renderingPermission = new rendering_permission_1.default(optionsWithDefaults, userPermission);
49
51
  const permissionService = new permission_with_cache_1.default(actionPermission, renderingPermission);
50
- return new forest_admin_client_with_cache_1.default(optionsWithDefaults, permissionService, renderingPermission);
52
+ const contextVariablesInstantiator = new context_variables_instantiator_1.default(renderingPermission);
53
+ const chartHandler = new chart_handler_1.default(contextVariablesInstantiator);
54
+ return new forest_admin_client_with_cache_1.default(optionsWithDefaults, permissionService, renderingPermission, contextVariablesInstantiator, chartHandler);
51
55
  }
52
56
  exports.default = createForestAdminClient;
53
57
  __exportStar(require("./charts/types"), exports);
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSx3RkFBc0U7QUFDdEUsc0dBQWlFO0FBQ2pFLGdHQUFvRTtBQUNwRSw4RkFBNEU7QUFDNUUsb0ZBQWtFO0FBRWxFLHdGQUErRjtBQUF0RixnSkFBQSxPQUFPLE9BQXdCO0FBQ3hDLDhGQUFvRztBQUEzRixxSkFBQSxPQUFPLE9BQTBCO0FBQzFDLHdGQUErRjtBQUF0RixnSkFBQSxPQUFPLE9BQXdCO0FBQ3hDLG9GQUEyRjtBQUFsRiw0SUFBQSxPQUFPLE9BQXNCO0FBQ3RDLDhGQUFvRztBQUEzRixxSkFBQSxPQUFPLE9BQTBCO0FBRTFDLDZDQUE0RDtBQUFuRCw4R0FBQSxxQkFBcUIsT0FBQTtBQUU5QixTQUF3Qix1QkFBdUIsQ0FDN0MsT0FBaUM7SUFFakMsTUFBTSxtQkFBbUIsR0FBeUM7UUFDaEUsZUFBZSxFQUFFLDZCQUE2QjtRQUM5QyxpQ0FBaUMsRUFBRSxFQUFFLEdBQUcsRUFBRTtRQUMxQyxzQ0FBc0M7UUFDdEMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDakUsR0FBRyxPQUFPO0tBQ1gsQ0FBQztJQUVGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSwyQkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sY0FBYyxHQUFHLElBQUkseUJBQXFCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN0RSxNQUFNLG1CQUFtQixHQUFHLElBQUksOEJBQTBCLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDaEcsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLCtCQUFpQixDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFFdkYsT0FBTyxJQUFJLHdDQUFpQixDQUFDLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDNUYsQ0FBQztBQWpCRCwwQ0FpQkM7QUFFRCxpREFBK0IifQ==
58
+ var context_variables_injector_1 = require("./utils/context-variables-injector");
59
+ Object.defineProperty(exports, "ContextVariablesInjector", { enumerable: true, get: function () { return __importDefault(context_variables_injector_1).default; } });
60
+ var context_variables_1 = require("./utils/context-variables");
61
+ Object.defineProperty(exports, "ContextVariables", { enumerable: true, get: function () { return __importDefault(context_variables_1).default; } });
62
+ var chart_handler_2 = require("./charts/chart-handler");
63
+ Object.defineProperty(exports, "ChartHandler", { enumerable: true, get: function () { return __importDefault(chart_handler_2).default; } });
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSx3RkFBc0U7QUFDdEUsMkVBQWtEO0FBQ2xELDRHQUFrRjtBQUNsRixzR0FBaUU7QUFDakUsZ0dBQW9FO0FBQ3BFLDhGQUE0RTtBQUM1RSxvRkFBa0U7QUFFbEUsd0ZBQStGO0FBQXRGLGdKQUFBLE9BQU8sT0FBd0I7QUFDeEMsOEZBQW9HO0FBQTNGLHFKQUFBLE9BQU8sT0FBMEI7QUFDMUMsd0ZBQStGO0FBQXRGLGdKQUFBLE9BQU8sT0FBd0I7QUFDeEMsb0ZBQTJGO0FBQWxGLDRJQUFBLE9BQU8sT0FBc0I7QUFDdEMsOEZBQW9HO0FBQTNGLHFKQUFBLE9BQU8sT0FBMEI7QUFTMUMsNkNBQTREO0FBQW5ELDhHQUFBLHFCQUFxQixPQUFBO0FBRTlCLFNBQXdCLHVCQUF1QixDQUM3QyxPQUFpQztJQUVqQyxNQUFNLG1CQUFtQixHQUF5QztRQUNoRSxlQUFlLEVBQUUsNkJBQTZCO1FBQzlDLGlDQUFpQyxFQUFFLEVBQUUsR0FBRyxFQUFFO1FBQzFDLHNDQUFzQztRQUN0QyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNqRSxHQUFHLE9BQU87S0FDWCxDQUFDO0lBRUYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLDJCQUF1QixDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDMUUsTUFBTSxjQUFjLEdBQUcsSUFBSSx5QkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSw4QkFBMEIsQ0FBQyxtQkFBbUIsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNoRyxNQUFNLGlCQUFpQixHQUFHLElBQUksK0JBQWlCLENBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUN2RixNQUFNLDRCQUE0QixHQUFHLElBQUksd0NBQTRCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMzRixNQUFNLFlBQVksR0FBRyxJQUFJLHVCQUFZLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUVwRSxPQUFPLElBQUksd0NBQWlCLENBQzFCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLDRCQUE0QixFQUM1QixZQUFZLENBQ2IsQ0FBQztBQUNKLENBQUM7QUF6QkQsMENBeUJDO0FBRUQsaURBQStCO0FBQy9CLGlGQUF5RjtBQUFoRix1SkFBQSxPQUFPLE9BQTRCO0FBQzVDLCtEQUF3RTtBQUEvRCxzSUFBQSxPQUFPLE9BQW9CO0FBQ3BDLHdEQUFpRTtBQUF4RCw4SEFBQSxPQUFPLE9BQWdCIn0=
@@ -1,7 +1,4 @@
1
1
  import { Chart } from '../charts/types';
2
2
  export declare function hashServerCharts(charts: Chart[]): Set<string>;
3
- export declare function isGroupedByChart(chart: Chart): chart is Chart & {
4
- groupByFieldName?: string;
5
- };
6
3
  export declare function hashChartRequest(chart: Chart): string;
7
4
  //# sourceMappingURL=hash-chart.d.ts.map
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.hashChartRequest = exports.isGroupedByChart = exports.hashServerCharts = void 0;
6
+ exports.hashChartRequest = exports.hashServerCharts = void 0;
7
7
  const object_hash_1 = __importDefault(require("object-hash"));
8
8
  function hashChart(chart) {
9
9
  const knownChartKeys = [
@@ -35,12 +35,8 @@ function hashServerCharts(charts) {
35
35
  return new Set(hashes);
36
36
  }
37
37
  exports.hashServerCharts = hashServerCharts;
38
- function isGroupedByChart(chart) {
39
- return 'groupByFieldName' in chart;
40
- }
41
- exports.isGroupedByChart = isGroupedByChart;
42
38
  function hashChartRequest(chart) {
43
39
  return hashChart(chart);
44
40
  }
45
41
  exports.hashChartRequest = hashChartRequest;
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaC1jaGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wZXJtaXNzaW9ucy9oYXNoLWNoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhEQUFxQztBQUlyQyxTQUFTLFNBQVMsQ0FBQyxLQUFZO0lBQzdCLE1BQU0sY0FBYyxHQUFnQjtRQUNsQyxNQUFNO1FBQ04sVUFBVTtRQUNWLFlBQVk7UUFDWixPQUFPO1FBQ1AsZ0JBQWdCO1FBQ2hCLFFBQVE7UUFDUixzQkFBc0I7UUFDdEIsWUFBWTtRQUNaLG9CQUFvQjtRQUNwQixrQkFBa0I7UUFDbEIsdUJBQXVCO1FBQ3ZCLE9BQU87UUFDUCxXQUFXO1FBQ1gsV0FBVztRQUNYLGtCQUFrQjtRQUNsQixvQkFBb0I7S0FDckIsQ0FBQztJQUVGLE1BQU0sSUFBSSxHQUFHLElBQUEscUJBQVUsRUFBQyxLQUFLLEVBQUU7UUFDN0IsV0FBVyxFQUFFLEtBQUs7UUFDbEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQ2pCLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBZ0IsQ0FBQztLQUNoRyxDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxNQUFlO0lBQzlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFckMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBSkQsNENBSUM7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxLQUFZO0lBQzNDLE9BQU8sa0JBQWtCLElBQUksS0FBSyxDQUFDO0FBQ3JDLENBQUM7QUFGRCw0Q0FFQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLEtBQVk7SUFDM0MsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUZELDRDQUVDIn0=
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaC1jaGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wZXJtaXNzaW9ucy9oYXNoLWNoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhEQUFxQztBQUlyQyxTQUFTLFNBQVMsQ0FBQyxLQUFZO0lBQzdCLE1BQU0sY0FBYyxHQUFnQjtRQUNsQyxNQUFNO1FBQ04sVUFBVTtRQUNWLFlBQVk7UUFDWixPQUFPO1FBQ1AsZ0JBQWdCO1FBQ2hCLFFBQVE7UUFDUixzQkFBc0I7UUFDdEIsWUFBWTtRQUNaLG9CQUFvQjtRQUNwQixrQkFBa0I7UUFDbEIsdUJBQXVCO1FBQ3ZCLE9BQU87UUFDUCxXQUFXO1FBQ1gsV0FBVztRQUNYLGtCQUFrQjtRQUNsQixvQkFBb0I7S0FDckIsQ0FBQztJQUVGLE1BQU0sSUFBSSxHQUFHLElBQUEscUJBQVUsRUFBQyxLQUFLLEVBQUU7UUFDN0IsV0FBVyxFQUFFLEtBQUs7UUFDbEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQ2pCLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBZ0IsQ0FBQztLQUNoRyxDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxNQUFlO0lBQzlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFckMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBSkQsNENBSUM7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxLQUFZO0lBQzNDLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFGRCw0Q0FFQyJ9
@@ -1,6 +1,6 @@
1
1
  import type { GenericTree } from '@forestadmin/datasource-toolkit';
2
2
  import { Chart } from '../charts/types';
3
- import { CollectionRenderingPermissionV4, Team } from './types';
3
+ import { CollectionRenderingPermissionV4, Team, UserPermissionV4 } from './types';
4
4
  import { ForestAdminClientOptionsWithDefaults } from '../types';
5
5
  import UserPermissionService from './user-permission';
6
6
  export declare type RenderingPermission = {
@@ -34,5 +34,7 @@ export default class RenderingPermissionService {
34
34
  }): Promise<boolean>;
35
35
  private canRetrieveChartHashOrRetry;
36
36
  invalidateCache(renderingId: number | string): void;
37
+ getUser(userId: number | string): Promise<UserPermissionV4>;
38
+ getTeam(renderingId: number | string): Promise<Team>;
37
39
  }
38
40
  //# sourceMappingURL=rendering-permission.d.ts.map
@@ -6,8 +6,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const lru_cache_1 = __importDefault(require("lru-cache"));
7
7
  const types_1 = require("./types");
8
8
  const hash_chart_1 = require("./hash-chart");
9
+ const context_variables_1 = __importDefault(require("../utils/context-variables"));
10
+ const context_variables_injector_1 = __importDefault(require("../utils/context-variables-injector"));
9
11
  const forest_http_api_1 = __importDefault(require("./forest-http-api"));
10
- const generate_user_scope_1 = __importDefault(require("./generate-user-scope"));
11
12
  const is_segment_query_authorized_1 = __importDefault(require("./is-segment-query-authorized"));
12
13
  const verify_sql_query_1 = __importDefault(require("./verify-sql-query"));
13
14
  class RenderingPermissionService {
@@ -36,7 +37,7 @@ class RenderingPermissionService {
36
37
  }
37
38
  return null;
38
39
  }
39
- return (0, generate_user_scope_1.default)(collectionPermissions.scope, permissions.team, userInfo);
40
+ return context_variables_injector_1.default.injectContextInFilter(collectionPermissions.scope, new context_variables_1.default({ team: permissions.team, user: userInfo }));
40
41
  }
41
42
  async canExecuteSegmentQuery({ renderingId, collectionName, segmentQuery, }) {
42
43
  return ((await this.canExecuteSegmentQueryOrRetry({
@@ -116,6 +117,13 @@ class RenderingPermissionService {
116
117
  this.options.logger('Debug', `Invalidating rendering permissions cache for rendering ${renderingId}`);
117
118
  this.permissionsByRendering.delete(`${renderingId}`);
118
119
  }
120
+ async getUser(userId) {
121
+ return this.userPermissions.getUserInfo(userId);
122
+ }
123
+ async getTeam(renderingId) {
124
+ const permissions = await this.permissionsByRendering.fetch(`${renderingId}`);
125
+ return permissions.team;
126
+ }
119
127
  }
120
128
  exports.default = RenderingPermissionService;
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyaW5nLXBlcm1pc3Npb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGVybWlzc2lvbnMvcmVuZGVyaW5nLXBlcm1pc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwwREFBaUM7QUFJakMsbUNBQW1HO0FBRW5HLDZDQUFrRTtBQUNsRSx3RUFBOEM7QUFFOUMsZ0ZBQXNEO0FBQ3RELGdHQUFrRTtBQUNsRSwwRUFBZ0Q7QUFRaEQsTUFBcUIsMEJBQTBCO0lBRzdDLFlBQ21CLE9BQTZDLEVBQzdDLGVBQXNDO1FBRHRDLFlBQU8sR0FBUCxPQUFPLENBQXNDO1FBQzdDLG9CQUFlLEdBQWYsZUFBZSxDQUF1QjtRQUV2RCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxtQkFBUSxDQUFDO1lBQ3pDLEdBQUcsRUFBRSxHQUFHO1lBQ1IsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsaUNBQWlDLEdBQUcsSUFBSTtZQUMxRCxXQUFXLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQztTQUM5RCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUNwQixXQUFXLEVBQ1gsY0FBYyxFQUNkLE1BQU0sR0FLUDtRQUNDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFTyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQzVCLFdBQVcsRUFDWCxjQUFjLEVBQ2QsTUFBTSxFQUNOLFVBQVUsR0FNWDtRQUNDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEdBQTRDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUN6RixJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLEdBQUcs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
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyaW5nLXBlcm1pc3Npb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGVybWlzc2lvbnMvcmVuZGVyaW5nLXBlcm1pc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwwREFBaUM7QUFJakMsbUNBQW1HO0FBRW5HLDZDQUFrRTtBQUNsRSxtRkFBMEQ7QUFDMUQscUdBQTJFO0FBQzNFLHdFQUE4QztBQUU5QyxnR0FBa0U7QUFDbEUsMEVBQWdEO0FBUWhELE1BQXFCLDBCQUEwQjtJQUc3QyxZQUNtQixPQUE2QyxFQUM3QyxlQUFzQztRQUR0QyxZQUFPLEdBQVAsT0FBTyxDQUFzQztRQUM3QyxvQkFBZSxHQUFmLGVBQWUsQ0FBdUI7UUFFdkQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksbUJBQVEsQ0FBQztZQUN6QyxHQUFHLEVBQUUsR0FBRztZQUNSLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGlDQUFpQyxHQUFHLElBQUk7WUFDMUQsV0FBVyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7U0FDOUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFDcEIsV0FBVyxFQUNYLGNBQWMsRUFDZCxNQUFNLEdBS1A7UUFDQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUM1QixXQUFXLEVBQ1gsY0FBYyxFQUNkLE1BQU0sRUFDTixVQUFVLEdBTVg7UUFDQyxNQUFNLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxHQUE0QyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDekYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtB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
@@ -42,6 +42,7 @@ export declare type UserPermissionV4 = {
42
42
  id: number;
43
43
  firstName: string;
44
44
  lastName: string;
45
+ fullName: string;
45
46
  email: string;
46
47
  permissionLevel: PermissionLevel;
47
48
  tags: Record<string, string>;
@@ -24,4 +24,4 @@ var CustomActionEvent;
24
24
  CustomActionEvent["SelfApprove"] = "self-approve";
25
25
  CustomActionEvent["RequireApproval"] = "require-approval";
26
26
  })(CustomActionEvent = exports.CustomActionEvent || (exports.CustomActionEvent = {}));
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGVybWlzc2lvbnMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMENBLElBQVksZUFLWDtBQUxELFdBQVksZUFBZTtJQUN6QixrQ0FBZSxDQUFBO0lBQ2YsMENBQXVCLENBQUE7SUFDdkIsb0NBQWlCLENBQUE7SUFDakIsZ0NBQWEsQ0FBQTtBQUNmLENBQUMsRUFMVyxlQUFlLEdBQWYsdUJBQWUsS0FBZix1QkFBZSxRQUsxQjtBQVlELElBQVkscUJBT1g7QUFQRCxXQUFZLHFCQUFxQjtJQUMvQiwwQ0FBaUIsQ0FBQTtJQUNqQiwwQ0FBaUIsQ0FBQTtJQUNqQixzQ0FBYSxDQUFBO0lBQ2Isc0NBQWEsQ0FBQTtJQUNiLDBDQUFpQixDQUFBO0lBQ2pCLG9DQUFXLENBQUE7QUFDYixDQUFDLEVBUFcscUJBQXFCLEdBQXJCLDZCQUFxQixLQUFyQiw2QkFBcUIsUUFPaEM7QUFFRCxJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0Isd0NBQW1CLENBQUE7SUFDbkIsd0NBQW1CLENBQUE7SUFDbkIsaURBQTRCLENBQUE7SUFDNUIseURBQW9DLENBQUE7QUFDdEMsQ0FBQyxFQUxXLGlCQUFpQixHQUFqQix5QkFBaUIsS0FBakIseUJBQWlCLFFBSzVCIn0=
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGVybWlzc2lvbnMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMENBLElBQVksZUFLWDtBQUxELFdBQVksZUFBZTtJQUN6QixrQ0FBZSxDQUFBO0lBQ2YsMENBQXVCLENBQUE7SUFDdkIsb0NBQWlCLENBQUE7SUFDakIsZ0NBQWEsQ0FBQTtBQUNmLENBQUMsRUFMVyxlQUFlLEdBQWYsdUJBQWUsS0FBZix1QkFBZSxRQUsxQjtBQWFELElBQVkscUJBT1g7QUFQRCxXQUFZLHFCQUFxQjtJQUMvQiwwQ0FBaUIsQ0FBQTtJQUNqQiwwQ0FBaUIsQ0FBQTtJQUNqQixzQ0FBYSxDQUFBO0lBQ2Isc0NBQWEsQ0FBQTtJQUNiLDBDQUFpQixDQUFBO0lBQ2pCLG9DQUFXLENBQUE7QUFDYixDQUFDLEVBUFcscUJBQXFCLEdBQXJCLDZCQUFxQixLQUFyQiw2QkFBcUIsUUFPaEM7QUFFRCxJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0Isd0NBQW1CLENBQUE7SUFDbkIsd0NBQW1CLENBQUE7SUFDbkIsaURBQTRCLENBQUE7SUFDNUIseURBQW9DLENBQUE7QUFDdEMsQ0FBQyxFQUxXLGlCQUFpQixHQUFqQix5QkFBaUIsS0FBakIseUJBQWlCLFFBSzVCIn0=
package/dist/types.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import type { GenericTree } from '@forestadmin/datasource-toolkit';
2
+ import ContextVariables, { RequestContextVariables } from './utils/context-variables';
2
3
  import type { Chart } from './charts/types';
4
+ import type { ChartRequest } from './charts/chart-handler';
3
5
  import type { CollectionActionEvent } from './permissions/types';
4
6
  export declare type LoggerLevel = 'Debug' | 'Info' | 'Warn' | 'Error';
5
7
  export declare type Logger = (level: LoggerLevel, message: unknown) => void;
@@ -12,6 +14,8 @@ export declare type ForestAdminClientOptions = {
12
14
  export declare type ForestAdminClientOptionsWithDefaults = Required<ForestAdminClientOptions>;
13
15
  export interface ForestAdminClient {
14
16
  readonly permissionService: PermissionService;
17
+ readonly contextVariablesInstantiator: ContextVariablesInstantiatorInterface;
18
+ readonly chartHandler: ChartHandlerInterface;
15
19
  verifySignedActionParameters<TSignedParameters>(signedParameters: string): TSignedParameters;
16
20
  getScope(params: {
17
21
  renderingId: number | string;
@@ -54,4 +58,18 @@ export interface PermissionService {
54
58
  segmentQuery: string;
55
59
  }): Promise<boolean>;
56
60
  }
61
+ export interface ChartHandlerInterface {
62
+ getChartWithContextInjected(params: {
63
+ userId: string | number;
64
+ renderingId: string | number;
65
+ chartRequest: ChartRequest;
66
+ }): Promise<Chart>;
67
+ }
68
+ export interface ContextVariablesInstantiatorInterface {
69
+ buildContextVariables(params: {
70
+ requestContextVariables?: RequestContextVariables;
71
+ renderingId: string | number;
72
+ userId: string | number;
73
+ }): Promise<ContextVariables>;
74
+ }
57
75
  //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,11 @@
1
+ import type { AggregatedChart, ApiRouteChart, Chart, FilterableChart, GroupedByChart, LeaderboardChart, LineChart, ObjectiveChart } from '../charts/types';
2
+ export default class ChartDetector {
3
+ static isAPIRouteChart(chart: Chart): chart is ApiRouteChart;
4
+ static isLineChart(chart: Chart): chart is LineChart;
5
+ static isObjectiveChart(chart: Chart): chart is ObjectiveChart;
6
+ static isLeaderboardChart(chart: Chart): chart is LeaderboardChart;
7
+ static isFilterableChart(chart: Chart): chart is FilterableChart & Chart;
8
+ static isAggregatedChart(chart: Chart): chart is AggregatedChart & Chart;
9
+ static isGroupedByChart(chart: Chart): chart is GroupedByChart & Chart;
10
+ }
11
+ //# sourceMappingURL=chart-detector.d.ts.map
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const types_1 = require("../charts/types");
4
+ class ChartDetector {
5
+ static isAPIRouteChart(chart) {
6
+ return 'apiRoute' in chart;
7
+ }
8
+ static isLineChart(chart) {
9
+ return chart.type === types_1.ChartType.Line;
10
+ }
11
+ static isObjectiveChart(chart) {
12
+ return chart.type === types_1.ChartType.Objective;
13
+ }
14
+ static isLeaderboardChart(chart) {
15
+ return chart.type === types_1.ChartType.Leaderboard;
16
+ }
17
+ static isFilterableChart(chart) {
18
+ return 'filter' in chart;
19
+ }
20
+ static isAggregatedChart(chart) {
21
+ return 'aggregator' in chart;
22
+ }
23
+ static isGroupedByChart(chart) {
24
+ return 'groupByFieldName' in chart;
25
+ }
26
+ }
27
+ exports.default = ChartDetector;
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtZGV0ZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvY2hhcnQtZGV0ZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFXQSwyQ0FBNEM7QUFFNUMsTUFBcUIsYUFBYTtJQUN6QixNQUFNLENBQUMsZUFBZSxDQUFDLEtBQVk7UUFDeEMsT0FBTyxVQUFVLElBQUksS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFTSxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQVk7UUFDcEMsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFTLENBQUMsSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBWTtRQUN6QyxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssaUJBQVMsQ0FBQyxTQUFTLENBQUM7SUFDNUMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFZO1FBQzNDLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxpQkFBUyxDQUFDLFdBQVcsQ0FBQztJQUM5QyxDQUFDO0lBRU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQVk7UUFDMUMsT0FBTyxRQUFRLElBQUksS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBWTtRQUMxQyxPQUFPLFlBQVksSUFBSSxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVNLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFZO1FBQ3pDLE9BQU8sa0JBQWtCLElBQUksS0FBSyxDQUFDO0lBQ3JDLENBQUM7Q0FDRjtBQTVCRCxnQ0E0QkMifQ==
@@ -0,0 +1,8 @@
1
+ import type { PlainConditionTreeBranch, PlainConditionTreeLeaf } from '@forestadmin/datasource-toolkit';
2
+ import ContextVariables from './context-variables';
3
+ export default class ContextVariablesInjector {
4
+ private static isPlainConditionTreeBranch;
5
+ static injectContextInValue<ValueType>(value: ValueType, contextVariables: ContextVariables): ValueType;
6
+ static injectContextInFilter<PlainConditionTree extends PlainConditionTreeBranch | PlainConditionTreeLeaf | null>(filter: PlainConditionTree, contextVariables: ContextVariables): PlainConditionTree;
7
+ }
8
+ //# sourceMappingURL=context-variables-injector.d.ts.map
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class ContextVariablesInjector {
4
+ static isPlainConditionTreeBranch(filter) {
5
+ return 'aggregator' in filter;
6
+ }
7
+ static injectContextInValue(value, contextVariables) {
8
+ if (typeof value !== 'string') {
9
+ return value;
10
+ }
11
+ let valueWithContextVariablesInjected = value;
12
+ const regex = /{{([^}]+)}}/g;
13
+ let match = regex.exec(value);
14
+ while (match) {
15
+ const contextVariableKey = match[1];
16
+ const contextValue = contextVariables.getValue(contextVariableKey);
17
+ valueWithContextVariablesInjected = valueWithContextVariablesInjected.replace(new RegExp(`{{${contextVariableKey}}}`, 'g'), String(contextValue));
18
+ match = regex.exec(value);
19
+ }
20
+ return valueWithContextVariablesInjected;
21
+ }
22
+ static injectContextInFilter(filter, contextVariables) {
23
+ if (!filter) {
24
+ return null;
25
+ }
26
+ if (ContextVariablesInjector.isPlainConditionTreeBranch(filter)) {
27
+ return {
28
+ ...filter,
29
+ conditions: filter.conditions.map(condition => {
30
+ return this.injectContextInFilter(condition, contextVariables);
31
+ }),
32
+ };
33
+ }
34
+ return {
35
+ ...filter,
36
+ value: this.injectContextInValue(filter.value, contextVariables),
37
+ };
38
+ }
39
+ }
40
+ exports.default = ContextVariablesInjector;
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC12YXJpYWJsZXMtaW5qZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvY29udGV4dC12YXJpYWJsZXMtaW5qZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFPQSxNQUFxQix3QkFBd0I7SUFDbkMsTUFBTSxDQUFDLDBCQUEwQixDQUN2QyxNQUF5RDtRQUV6RCxPQUFPLFlBQVksSUFBSSxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxvQkFBb0IsQ0FDaEMsS0FBZ0IsRUFDaEIsZ0JBQWtDO1FBRWxDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLGlDQUFpQyxHQUFXLEtBQUssQ0FBQztRQUN0RCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUM7UUFDN0IsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5QixPQUFPLEtBQUssRUFBRTtZQUNaLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBRW5FLGlDQUFpQyxHQUFHLGlDQUFpQyxDQUFDLE9BQU8sQ0FDM0UsSUFBSSxNQUFNLENBQUMsS0FBSyxrQkFBa0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUM1QyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQ3JCLENBQUM7WUFDRixLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzQjtRQUVELE9BQU8saUNBQXlELENBQUM7SUFDbkUsQ0FBQztJQUVNLE1BQU0sQ0FBQyxxQkFBcUIsQ0FFakMsTUFBMEIsRUFBRSxnQkFBa0M7UUFDOUQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLHdCQUF3QixDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQy9ELE9BQU87Z0JBQ0wsR0FBRyxNQUFNO2dCQUNULFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDNUMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7Z0JBQ2pFLENBQUMsQ0FBQzthQUNILENBQUM7U0FDSDtRQUVELE9BQU87WUFDTCxHQUFHLE1BQU07WUFDVCxLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUM7U0FDakUsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXRERCwyQ0FzREMifQ==
@@ -0,0 +1,13 @@
1
+ import { ContextVariablesInstantiatorInterface } from '../types';
2
+ import ContextVariables, { RequestContextVariables } from './context-variables';
3
+ import RenderingPermissionService from '../permissions/rendering-permission';
4
+ export default class ContextVariablesInstantiator implements ContextVariablesInstantiatorInterface {
5
+ private readonly renderingPermissionService;
6
+ constructor(renderingPermissionService: RenderingPermissionService);
7
+ buildContextVariables({ requestContextVariables, renderingId, userId, }: {
8
+ requestContextVariables?: RequestContextVariables;
9
+ renderingId: string | number;
10
+ userId: string | number;
11
+ }): Promise<ContextVariables>;
12
+ }
13
+ //# sourceMappingURL=context-variables-instantiator.d.ts.map
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const context_variables_1 = __importDefault(require("./context-variables"));
7
+ class ContextVariablesInstantiator {
8
+ constructor(renderingPermissionService) {
9
+ this.renderingPermissionService = renderingPermissionService;
10
+ }
11
+ async buildContextVariables({ requestContextVariables = {}, renderingId, userId, }) {
12
+ const team = await this.renderingPermissionService.getTeam(renderingId);
13
+ const user = await this.renderingPermissionService.getUser(userId);
14
+ return new context_variables_1.default({ requestContextVariables, team, user });
15
+ }
16
+ }
17
+ exports.default = ContextVariablesInstantiator;
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC12YXJpYWJsZXMtaW5zdGFudGlhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2NvbnRleHQtdmFyaWFibGVzLWluc3RhbnRpYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLDRFQUFnRjtBQUdoRixNQUFxQiw0QkFBNEI7SUFDL0MsWUFBNkIsMEJBQXNEO1FBQXRELCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBNEI7SUFBRyxDQUFDO0lBRWhGLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxFQUNqQyx1QkFBdUIsR0FBRyxFQUFFLEVBQzVCLFdBQVcsRUFDWCxNQUFNLEdBS1A7UUFDQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5FLE9BQU8sSUFBSSwyQkFBZ0IsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7Q0FDRjtBQWpCRCwrQ0FpQkMifQ==
@@ -0,0 +1,17 @@
1
+ import { Team, UserPermissionV4 } from '../permissions/types';
2
+ export declare type RequestContextVariables = {
3
+ [key: string]: string | number | boolean;
4
+ };
5
+ export default class ContextVariables {
6
+ private requestContextVariables;
7
+ private team;
8
+ private user;
9
+ constructor({ requestContextVariables, team, user, }: {
10
+ requestContextVariables?: RequestContextVariables;
11
+ team: Team;
12
+ user: UserPermissionV4;
13
+ });
14
+ private getCurrentUserData;
15
+ getValue(contextVariableKey: string): unknown;
16
+ }
17
+ //# sourceMappingURL=context-variables.d.ts.map
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const USER_VALUE_PREFIX = 'currentUser.';
4
+ const USER_VALUE_TAG_PREFIX = 'currentUser.tags.';
5
+ const USER_VALUE_TEAM_PREFIX = 'currentUser.team.';
6
+ class ContextVariables {
7
+ constructor({ requestContextVariables = {}, team, user, }) {
8
+ this.requestContextVariables = requestContextVariables;
9
+ this.team = team;
10
+ this.user = user;
11
+ }
12
+ getCurrentUserData(contextVariableKey) {
13
+ if (contextVariableKey.startsWith(USER_VALUE_TEAM_PREFIX)) {
14
+ return this.team[contextVariableKey.substring(USER_VALUE_TEAM_PREFIX.length)];
15
+ }
16
+ if (contextVariableKey.startsWith(USER_VALUE_TAG_PREFIX)) {
17
+ return this.user?.tags?.[contextVariableKey.substring(USER_VALUE_TAG_PREFIX.length)];
18
+ }
19
+ return this.user?.[contextVariableKey.substring(USER_VALUE_PREFIX.length)];
20
+ }
21
+ getValue(contextVariableKey) {
22
+ if (contextVariableKey.startsWith(USER_VALUE_PREFIX)) {
23
+ return this.getCurrentUserData(contextVariableKey);
24
+ }
25
+ return this.requestContextVariables[contextVariableKey];
26
+ }
27
+ }
28
+ exports.default = ContextVariables;
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC12YXJpYWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvY29udGV4dC12YXJpYWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FBQztBQUN6QyxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixDQUFDO0FBQ2xELE1BQU0sc0JBQXNCLEdBQUcsbUJBQW1CLENBQUM7QUFFbkQsTUFBcUIsZ0JBQWdCO0lBS25DLFlBQVksRUFDVix1QkFBdUIsR0FBRyxFQUFFLEVBQzVCLElBQUksRUFDSixJQUFJLEdBS0w7UUFDQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7UUFDdkQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLGtCQUEwQjtRQUNuRCxJQUFJLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO1lBQ3pELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMvRTtRQUVELElBQUksa0JBQWtCLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLEVBQUU7WUFDeEQsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3RGO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVNLFFBQVEsQ0FBQyxrQkFBMEI7UUFDeEMsSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUNwRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMxRCxDQUFDO0NBQ0Y7QUF0Q0QsbUNBc0NDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forestadmin/forestadmin-client",
3
- "version": "1.0.0-alpha.2",
3
+ "version": "1.0.0-alpha.3",
4
4
  "main": "dist/index.js",
5
5
  "license": "GPL-3.0",
6
6
  "publishConfig": {
@@ -1,4 +0,0 @@
1
- import type { GenericTree } from '@forestadmin/datasource-toolkit';
2
- import { Team, UserPermissionV4 } from './types';
3
- export default function generateUserScope(filter: GenericTree | null, team: Team, user: UserPermissionV4): GenericTree;
4
- //# sourceMappingURL=generate-user-scope.d.ts.map
@@ -1,36 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const USER_VALUE_PREFIX = '$currentUser.';
4
- const USER_VALUE_TAG_PREFIX = '$currentUser.tags.';
5
- const USER_VALUE_TEAM_PREFIX = '$currentUser.team.';
6
- function generateUserValue(value, team, user) {
7
- if (typeof value !== 'string' || !value.startsWith(USER_VALUE_PREFIX)) {
8
- return value;
9
- }
10
- if (value.startsWith(USER_VALUE_TEAM_PREFIX)) {
11
- return team[value.slice(USER_VALUE_TEAM_PREFIX.length)];
12
- }
13
- if (value.startsWith(USER_VALUE_TAG_PREFIX)) {
14
- return user?.tags?.[value.substring(USER_VALUE_TAG_PREFIX.length)];
15
- }
16
- return user?.[value.substring(USER_VALUE_PREFIX.length)];
17
- }
18
- function generateUserScope(filter, team, user) {
19
- if (!filter) {
20
- return null;
21
- }
22
- const branch = filter;
23
- if (branch.aggregator) {
24
- return {
25
- ...filter,
26
- conditions: branch.conditions.map(condition => generateUserScope(condition, team, user)),
27
- };
28
- }
29
- const leaf = filter;
30
- return {
31
- ...filter,
32
- value: generateUserValue(leaf.value, team, user),
33
- };
34
- }
35
- exports.default = generateUserScope;
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtdXNlci1zY29wZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wZXJtaXNzaW9ucy9nZW5lcmF0ZS11c2VyLXNjb3BlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUEsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUM7QUFDMUMsTUFBTSxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQztBQUNuRCxNQUFNLHNCQUFzQixHQUFHLG9CQUFvQixDQUFDO0FBRXBELFNBQVMsaUJBQWlCLENBQUMsS0FBdUIsRUFBRSxJQUFVLEVBQUUsSUFBc0I7SUFDcEYsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7UUFDckUsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO1FBQzVDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUN6RDtJQUVELElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1FBQzNDLE9BQU8sSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUNwRTtJQUVELE9BQU8sSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRCxTQUF3QixpQkFBaUIsQ0FDdkMsTUFBMEIsRUFDMUIsSUFBVSxFQUNWLElBQXNCO0lBRXRCLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDWCxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBMkIsQ0FBQztJQUUzQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUU7UUFDckIsT0FBTztZQUNMLEdBQUcsTUFBTTtZQUNULFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDekYsQ0FBQztLQUNIO0lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBeUIsQ0FBQztJQUV2QyxPQUFPO1FBQ0wsR0FBRyxNQUFNO1FBQ1QsS0FBSyxFQUFFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztLQUNqRCxDQUFDO0FBQ0osQ0FBQztBQXhCRCxvQ0F3QkMifQ==