@plumile/backoffice-core 0.1.161 → 0.1.163

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.
Files changed (43) hide show
  1. package/lib/esm/billing.d.ts +7 -0
  2. package/lib/esm/billing.d.ts.map +1 -1
  3. package/lib/esm/billing.js +33 -1
  4. package/lib/esm/capabilities.d.ts +10 -0
  5. package/lib/esm/capabilities.d.ts.map +1 -0
  6. package/lib/esm/capabilities.js +10 -0
  7. package/lib/esm/config/columns.d.ts.map +1 -1
  8. package/lib/esm/config/columns.js +22 -4
  9. package/lib/esm/config/detail-builders.d.ts +7 -0
  10. package/lib/esm/config/detail-builders.d.ts.map +1 -1
  11. package/lib/esm/config/detail-builders.js +8 -1
  12. package/lib/esm/config/detail.d.ts.map +1 -1
  13. package/lib/esm/config/detail.js +1 -2
  14. package/lib/esm/config/entity-builders.d.ts +142 -0
  15. package/lib/esm/config/entity-builders.d.ts.map +1 -0
  16. package/lib/esm/config/entity-builders.js +212 -0
  17. package/lib/esm/index.d.ts +3 -0
  18. package/lib/esm/index.d.ts.map +1 -1
  19. package/lib/esm/index.js +4 -1
  20. package/lib/esm/tools/operation-builders.d.ts +91 -0
  21. package/lib/esm/tools/operation-builders.d.ts.map +1 -0
  22. package/lib/esm/tools/operation-builders.js +211 -0
  23. package/lib/esm/types.d.ts +15 -0
  24. package/lib/esm/types.d.ts.map +1 -1
  25. package/lib/esm/types.js +1 -1
  26. package/lib/tsconfig.esm.tsbuildinfo +1 -1
  27. package/lib/types/billing.d.ts +7 -0
  28. package/lib/types/billing.d.ts.map +1 -1
  29. package/lib/types/capabilities.d.ts +10 -0
  30. package/lib/types/capabilities.d.ts.map +1 -0
  31. package/lib/types/config/columns.d.ts.map +1 -1
  32. package/lib/types/config/detail-builders.d.ts +7 -0
  33. package/lib/types/config/detail-builders.d.ts.map +1 -1
  34. package/lib/types/config/detail.d.ts.map +1 -1
  35. package/lib/types/config/entity-builders.d.ts +142 -0
  36. package/lib/types/config/entity-builders.d.ts.map +1 -0
  37. package/lib/types/index.d.ts +3 -0
  38. package/lib/types/index.d.ts.map +1 -1
  39. package/lib/types/tools/operation-builders.d.ts +91 -0
  40. package/lib/types/tools/operation-builders.d.ts.map +1 -0
  41. package/lib/types/types.d.ts +15 -0
  42. package/lib/types/types.d.ts.map +1 -1
  43. package/package.json +21 -6
@@ -0,0 +1,142 @@
1
+ import type { GraphQLTaggedNode, OperationType } from 'relay-runtime';
2
+ import type { BackofficeAliasedPickerValueResponse, BackofficeColumnSpec, BackofficeConnection, BackofficeConnectionListConfig, BackofficeDetailContentSpec, BackofficeDetailLayoutProfile, BackofficeDetailPageSpec, BackofficeDetailVariables, BackofficeEntityActionSpec, BackofficeEntityDetailConfig, BackofficeEntityPickerConfig, BackofficeListQueryInput, BackofficeListResponsiveProfile, BackofficeListState, BackofficeListUiConfig, BackofficeOperationSort, BackofficeOperationWhere, BackofficePickerQueryInput, BackofficePickerValueConfig, BackofficeRuntimeEntityCountConfig, BackofficeRowFlagSpec, I18nLabel } from '../types.js';
3
+ import { type BackofficeLegacyFilterSpec } from './filters.js';
4
+ import { type BackofficeLegacySortSpec } from './sorts.js';
5
+ export type BackofficeWhereEntry = {
6
+ key: string;
7
+ value: unknown;
8
+ path?: readonly string[];
9
+ };
10
+ export type BackofficePickerSearchConfig<Where> = {
11
+ whereKey: Extract<keyof Where, string>;
12
+ path?: readonly string[];
13
+ };
14
+ export type BackofficePickerScopeConfig<Where> = {
15
+ keys: readonly Extract<keyof Where, string>[];
16
+ };
17
+ export declare const DEFAULT_BACKOFFICE_LIST_UI_CONFIG: {
18
+ density: "compact";
19
+ displayMode: "auto";
20
+ infiniteScroll: {
21
+ enabled: true;
22
+ rootMargin: string;
23
+ threshold: number;
24
+ status: {
25
+ showLoadedCount: true;
26
+ showTotalCount: true;
27
+ showEndState: true;
28
+ };
29
+ };
30
+ toolbar: {
31
+ density: "compact";
32
+ displayMode: "auto";
33
+ maxPromotedFilters: number;
34
+ showRefresh: true;
35
+ showSort: true;
36
+ showFilterChips: "auto";
37
+ };
38
+ };
39
+ export declare const buildWhereFromEntries: (entries: readonly BackofficeWhereEntry[]) => Record<string, unknown> | null;
40
+ export declare const resolvePickerSearchFromFilters: <Where extends Record<string, unknown>, FilterWhere extends Record<string, unknown> = Where>(filters: readonly BackofficeLegacyFilterSpec<FilterWhere>[]) => BackofficePickerSearchConfig<Where> | undefined;
41
+ export declare const resolvePickerScopeFromFilters: <Where extends Record<string, unknown>, FilterWhere extends Record<string, unknown> = Where>(filters: readonly BackofficeLegacyFilterSpec<FilterWhere>[], supportedKeys: readonly string[]) => BackofficePickerScopeConfig<Where> | undefined;
42
+ export declare const buildBackofficeConnectionListConfig: <TOperation extends OperationType, RowRef extends object, RowView extends object, ListFragmentData = unknown, Where extends Record<string, unknown> = BackofficeOperationWhere<TOperation>, Sort extends string = BackofficeOperationSort<TOperation>>(options: {
43
+ title: I18nLabel;
44
+ columns: readonly BackofficeColumnSpec<RowView>[];
45
+ rowFlags?: readonly BackofficeRowFlagSpec<RowView>[];
46
+ sorts: readonly BackofficeLegacySortSpec<Sort>[];
47
+ filters: readonly BackofficeLegacyFilterSpec<Where>[];
48
+ defaultState: BackofficeListState<Where, Sort>;
49
+ query: GraphQLTaggedNode;
50
+ fragment: GraphQLTaggedNode;
51
+ count: BackofficeRuntimeEntityCountConfig<Where>;
52
+ getConnection: (data: ListFragmentData) => BackofficeConnection<RowRef>;
53
+ toRow: (rowRef: RowRef) => RowView;
54
+ buildQueryVariables?: (input: BackofficeListQueryInput<TOperation, Where, Sort>) => TOperation["variables"];
55
+ responsive?: BackofficeListResponsiveProfile<RowView>;
56
+ ui?: BackofficeListUiConfig;
57
+ }) => BackofficeConnectionListConfig<TOperation, RowRef, RowView, ListFragmentData, Where, Sort>;
58
+ export declare function buildBackofficeDetailPageConfig<DetailView extends {
59
+ id: string;
60
+ }, DetailData = DetailView, LayoutView = DetailView, DetailQueryData = unknown, DetailFragmentKey = unknown, DetailQueryVariables = {
61
+ id: string;
62
+ }>(options: {
63
+ id: string;
64
+ path: string;
65
+ label: I18nLabel;
66
+ query: GraphQLTaggedNode;
67
+ fragment: GraphQLTaggedNode;
68
+ toView: (data: DetailData) => DetailView;
69
+ content: readonly BackofficeDetailContentSpec<DetailView>[];
70
+ actions?: readonly BackofficeEntityActionSpec<DetailView>[];
71
+ resolveNode: (data: DetailQueryData, context: {
72
+ id: string;
73
+ detailId?: string;
74
+ }) => DetailFragmentKey | null;
75
+ buildVariables?: (input: {
76
+ id: string;
77
+ }) => BackofficeDetailVariables<DetailQueryVariables>;
78
+ isVisible?: (layoutPage: LayoutView) => boolean;
79
+ profile?: BackofficeDetailLayoutProfile<DetailView>;
80
+ }): BackofficeDetailPageSpec<DetailView, LayoutView, DetailData, DetailQueryData, DetailFragmentKey, DetailQueryVariables>;
81
+ export declare const buildBackofficeEntityDetailConfig: <LayoutData extends object, LayoutView extends {
82
+ id: string;
83
+ }, MainData extends object = LayoutData, MainView extends {
84
+ id: string;
85
+ } = LayoutView, LayoutQueryData = unknown, MainQueryData = unknown, LayoutFragmentKey = unknown, MainFragmentKey = unknown, LayoutQueryVariables = {
86
+ id: string;
87
+ }, MainQueryVariables = {
88
+ id: string;
89
+ }>(options: {
90
+ title: I18nLabel;
91
+ headerTitle?: I18nLabel;
92
+ headerSubtitle?: I18nLabel;
93
+ query: GraphQLTaggedNode;
94
+ fragment: GraphQLTaggedNode;
95
+ toView: (data: MainData) => MainView;
96
+ actions?: readonly BackofficeEntityActionSpec<MainView>[];
97
+ layoutQuery?: GraphQLTaggedNode;
98
+ layoutFragment?: GraphQLTaggedNode;
99
+ layoutToView?: (data: LayoutData) => LayoutView;
100
+ header?: BackofficeEntityDetailConfig<LayoutData, LayoutView, MainData, MainView, MainData, MainView, LayoutQueryData, MainQueryData, MainQueryData, LayoutFragmentKey, MainFragmentKey, MainFragmentKey, LayoutQueryVariables, MainQueryVariables, MainQueryVariables>["header"];
101
+ resolveNode: BackofficeEntityDetailConfig<LayoutData, LayoutView, MainData, MainView, MainData, MainView, LayoutQueryData, MainQueryData, MainQueryData, LayoutFragmentKey, MainFragmentKey, MainFragmentKey, LayoutQueryVariables, MainQueryVariables, MainQueryVariables>["mainPage"]["resolveNode"];
102
+ layoutResolveNode: BackofficeEntityDetailConfig<LayoutData, LayoutView, MainData, MainView, MainData, MainView, LayoutQueryData, MainQueryData, MainQueryData, LayoutFragmentKey, MainFragmentKey, MainFragmentKey, LayoutQueryVariables, MainQueryVariables, MainQueryVariables>["layoutPage"]["resolveNode"];
103
+ buildVariables?: (input: {
104
+ id: string;
105
+ }) => BackofficeDetailVariables<MainQueryVariables>;
106
+ layoutBuildVariables?: (input: {
107
+ id: string;
108
+ }) => BackofficeDetailVariables<LayoutQueryVariables>;
109
+ detailContent?: readonly BackofficeDetailContentSpec<MainView>[];
110
+ mainPageId?: string;
111
+ mainPagePath?: string;
112
+ mainPageLabel?: I18nLabel;
113
+ subPages?: BackofficeEntityDetailConfig<LayoutData, LayoutView, MainData, MainView, MainData, MainView, LayoutQueryData, MainQueryData, MainQueryData, LayoutFragmentKey, MainFragmentKey, MainFragmentKey, LayoutQueryVariables, MainQueryVariables, MainQueryVariables>["subPages"];
114
+ profile?: BackofficeDetailLayoutProfile<LayoutView>;
115
+ mainPageProfile?: BackofficeDetailLayoutProfile<MainView>;
116
+ }) => BackofficeEntityDetailConfig<LayoutData, LayoutView, MainData, MainView, MainData, MainView, LayoutQueryData, MainQueryData, MainQueryData, LayoutFragmentKey, MainFragmentKey, MainFragmentKey, LayoutQueryVariables, MainQueryVariables, MainQueryVariables>;
117
+ export declare const buildBackofficeConnectionDetailVariables: <Where extends Record<string, unknown>, Sort extends string>(input: {
118
+ detailId: string;
119
+ where: Where | null;
120
+ sort: Sort | null;
121
+ }) => BackofficeDetailVariables<{
122
+ where: Where | null;
123
+ sort: Sort | null;
124
+ count: number;
125
+ }>;
126
+ export declare const buildBackofficeEntityPickerConfig: <TOperation extends OperationType, RowRef extends object, RowView extends {
127
+ id: string;
128
+ }, PickerFragmentData = unknown, Where extends Record<string, unknown> = BackofficeOperationWhere<TOperation>, ValueQueryData = BackofficeAliasedPickerValueResponse<string, RowRef>>(options: {
129
+ query: GraphQLTaggedNode;
130
+ fragment: GraphQLTaggedNode;
131
+ value?: BackofficePickerValueConfig<RowRef, RowView, ValueQueryData>;
132
+ getConnection: (data: PickerFragmentData) => BackofficeConnection<RowRef>;
133
+ toRow: (rowRef: RowRef) => RowView;
134
+ getRowId?: (row: RowView) => string;
135
+ search?: BackofficePickerSearchConfig<Where>;
136
+ scope?: BackofficePickerScopeConfig<Where>;
137
+ searchEnabled?: boolean;
138
+ searchRequired?: boolean;
139
+ searchPlaceholder?: I18nLabel;
140
+ buildQueryVariables?: (input: BackofficePickerQueryInput<TOperation, Where>) => TOperation["variables"];
141
+ }) => BackofficeEntityPickerConfig<TOperation, RowRef, RowView, PickerFragmentData, Where, ValueQueryData>;
142
+ //# sourceMappingURL=entity-builders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-builders.d.ts","sourceRoot":"","sources":["../../../src/config/entity-builders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,212 @@
1
+ import { BACKOFFICE_LIST_DEFAULTS } from '../constants.js';
2
+ import { buildGenericDetailHeader } from './detail.js';
3
+ import { mapFilters } from './filters.js';
4
+ import { getRowId } from './list.js';
5
+ import { mapSorts } from './sorts.js';
6
+ import { setWhereValue } from '../filters/where.js';
7
+ export const DEFAULT_BACKOFFICE_LIST_UI_CONFIG = {
8
+ density: 'compact',
9
+ displayMode: 'auto',
10
+ infiniteScroll: {
11
+ enabled: true,
12
+ rootMargin: '720px 0px',
13
+ threshold: 0,
14
+ status: {
15
+ showLoadedCount: true,
16
+ showTotalCount: true,
17
+ showEndState: true,
18
+ },
19
+ },
20
+ toolbar: {
21
+ density: 'compact',
22
+ displayMode: 'auto',
23
+ maxPromotedFilters: 2,
24
+ showRefresh: true,
25
+ showSort: true,
26
+ showFilterChips: 'auto',
27
+ },
28
+ };
29
+ export const buildWhereFromEntries = (entries) => {
30
+ let where = null;
31
+ entries.forEach(({ key, path, value }) => {
32
+ if (value == null) {
33
+ return;
34
+ }
35
+ if (typeof value === 'string' && value.trim() === '') {
36
+ return;
37
+ }
38
+ const nextWhere = setWhereValue(where, key, value, path);
39
+ if (nextWhere != null) {
40
+ where = nextWhere;
41
+ }
42
+ });
43
+ return where;
44
+ };
45
+ export const resolvePickerSearchFromFilters = (filters) => {
46
+ const match = filters.find((filter) => {
47
+ return filter.kind === 'textContains';
48
+ });
49
+ if (match == null) {
50
+ return undefined;
51
+ }
52
+ const whereKey = (match.whereKey ?? match.id);
53
+ return { whereKey, path: match.path };
54
+ };
55
+ export const resolvePickerScopeFromFilters = (filters, supportedKeys) => {
56
+ const scopedKeys = new Set();
57
+ filters.forEach((filter) => {
58
+ const key = String(filter.whereKey ?? filter.id);
59
+ if (supportedKeys.includes(key)) {
60
+ scopedKeys.add((filter.whereKey ?? filter.id));
61
+ }
62
+ });
63
+ if (scopedKeys.size === 0) {
64
+ return undefined;
65
+ }
66
+ return { keys: Array.from(scopedKeys) };
67
+ };
68
+ export const buildBackofficeConnectionListConfig = (options) => {
69
+ return {
70
+ kind: 'connection',
71
+ title: options.title,
72
+ query: options.query,
73
+ fragment: options.fragment,
74
+ count: options.count,
75
+ getConnection: options.getConnection,
76
+ toRow: options.toRow,
77
+ getRowId,
78
+ columns: options.columns,
79
+ rowFlags: options.rowFlags,
80
+ sorts: mapSorts(options.sorts),
81
+ filters: mapFilters(options.filters),
82
+ defaultState: options.defaultState,
83
+ buildQueryVariables: options.buildQueryVariables ??
84
+ ((input) => {
85
+ return {
86
+ where: input.where,
87
+ sort: input.sort,
88
+ count: input.count,
89
+ cursor: input.cursor,
90
+ };
91
+ }),
92
+ responsive: options.responsive ?? {
93
+ mode: 'auto',
94
+ density: 'compact',
95
+ },
96
+ ui: options.ui ?? DEFAULT_BACKOFFICE_LIST_UI_CONFIG,
97
+ };
98
+ };
99
+ export function buildBackofficeDetailPageConfig(options) {
100
+ return {
101
+ query: options.query,
102
+ fragment: options.fragment,
103
+ resolveNode: options.resolveNode,
104
+ toView: options.toView,
105
+ buildVariables: options.buildVariables,
106
+ id: options.id,
107
+ path: options.path,
108
+ label: options.label,
109
+ content: options.content,
110
+ actions: options.actions,
111
+ isVisible: options.isVisible,
112
+ profile: options.profile,
113
+ };
114
+ }
115
+ export const buildBackofficeEntityDetailConfig = (options) => {
116
+ const defaultHeader = buildGenericDetailHeader({
117
+ title: options.headerTitle ?? options.title,
118
+ subtitle: options.headerSubtitle,
119
+ });
120
+ const mainPageId = options.mainPageId ?? 'overview';
121
+ const mainPagePath = options.mainPagePath ?? 'overview';
122
+ const mainPageLabel = options.mainPageLabel ?? options.title;
123
+ const mainPage = buildBackofficeDetailPageConfig({
124
+ id: mainPageId,
125
+ path: mainPagePath,
126
+ label: mainPageLabel,
127
+ query: options.query,
128
+ fragment: options.fragment,
129
+ resolveNode: options.resolveNode,
130
+ toView: options.toView,
131
+ buildVariables: options.buildVariables,
132
+ content: options.detailContent ?? [],
133
+ actions: options.actions,
134
+ profile: options.mainPageProfile,
135
+ });
136
+ return {
137
+ title: options.title,
138
+ header: options.header ?? defaultHeader,
139
+ layoutPage: {
140
+ query: options.layoutQuery ?? options.query,
141
+ fragment: options.layoutFragment ?? options.fragment,
142
+ resolveNode: options.layoutResolveNode,
143
+ toView: options.layoutToView ??
144
+ options.toView,
145
+ buildVariables: options.layoutBuildVariables ??
146
+ options.buildVariables,
147
+ },
148
+ mainPage,
149
+ subPages: options.subPages,
150
+ profile: options.profile,
151
+ };
152
+ };
153
+ export const buildBackofficeConnectionDetailVariables = (input) => {
154
+ return {
155
+ detailId: input.detailId,
156
+ variables: {
157
+ where: input.where,
158
+ sort: input.sort,
159
+ count: BACKOFFICE_LIST_DEFAULTS.pageSize,
160
+ },
161
+ };
162
+ };
163
+ export const buildBackofficeEntityPickerConfig = (options) => {
164
+ const searchConfig = options.search;
165
+ const scopeKeys = options.scope?.keys ?? [];
166
+ const searchRequired = options.searchRequired ?? false;
167
+ const searchEnabled = options.searchEnabled ?? (searchConfig != null || searchRequired);
168
+ const getResolvedRowId = options.getRowId ??
169
+ ((row) => {
170
+ return row.id;
171
+ });
172
+ return {
173
+ query: options.query,
174
+ fragment: options.fragment,
175
+ value: options.value,
176
+ getConnection: options.getConnection,
177
+ toRow: options.toRow,
178
+ getRowId: getResolvedRowId,
179
+ searchEnabled,
180
+ searchRequired,
181
+ searchPlaceholder: options.searchPlaceholder,
182
+ buildQueryVariables: options.buildQueryVariables ??
183
+ ((input) => {
184
+ const trimmed = input.search.trim();
185
+ let where = null;
186
+ if (searchConfig != null && trimmed !== '') {
187
+ const nextWhere = setWhereValue(null, searchConfig.whereKey, trimmed, searchConfig.path);
188
+ if (nextWhere != null) {
189
+ where = nextWhere;
190
+ }
191
+ }
192
+ if (input.scope != null && scopeKeys.length > 0) {
193
+ scopeKeys.forEach((key) => {
194
+ const value = input.scope?.[String(key)];
195
+ if (value == null) {
196
+ return;
197
+ }
198
+ const nextWhere = setWhereValue(where, key, value);
199
+ if (nextWhere != null) {
200
+ where = nextWhere;
201
+ }
202
+ });
203
+ }
204
+ return {
205
+ where,
206
+ count: 20,
207
+ cursor: null,
208
+ };
209
+ }),
210
+ };
211
+ };
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWJ1aWxkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbmZpZy9lbnRpdHktYnVpbGRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUF5QjNELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFtQyxNQUFNLGNBQWMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxRQUFRLEVBQWlDLE1BQU0sWUFBWSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWlCcEQsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQUc7SUFDL0MsT0FBTyxFQUFFLFNBQVM7SUFDbEIsV0FBVyxFQUFFLE1BQU07SUFDbkIsY0FBYyxFQUFFO1FBQ2QsT0FBTyxFQUFFLElBQUk7UUFDYixVQUFVLEVBQUUsV0FBVztRQUN2QixTQUFTLEVBQUUsQ0FBQztRQUNaLE1BQU0sRUFBRTtZQUNOLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLFlBQVksRUFBRSxJQUFJO1NBQ25CO0tBQ0Y7SUFDRCxPQUFPLEVBQUU7UUFDUCxPQUFPLEVBQUUsU0FBUztRQUNsQixXQUFXLEVBQUUsTUFBTTtRQUNuQixrQkFBa0IsRUFBRSxDQUFDO1FBQ3JCLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLFFBQVEsRUFBRSxJQUFJO1FBQ2QsZUFBZSxFQUFFLE1BQU07S0FDeEI7Q0FDK0IsQ0FBQztBQUVuQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUNuQyxPQUF3QyxFQUNSLEVBQUU7SUFDbEMsSUFBSSxLQUFLLEdBQW1DLElBQUksQ0FBQztJQUNqRCxPQUFPLENBQUMsT0FBTyxDQUFD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QUFDO3dCQUNuRCxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQzs0QkFDdEIsS0FBSyxHQUFHLFNBQVMsQ0FBQzt3QkFDcEIsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE9BQU87b0JBQ0wsS0FBSztvQkFDTCxLQUFLLEVBQUUsRUFBRTtvQkFDVCxNQUFNLEVBQUUsSUFBSTtpQkFDYixDQUFDO1lBQ0osQ0FBQyxDQUFDO0tBQ0wsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgR3JhcGhRTFRhZ2dlZE5vZGUsIE9wZXJhdGlvblR5cGUgfSBmcm9tICdyZWxheS1ydW50aW1lJztcblxuaW1wb3J0IHsgQkFDS09GRklDRV9MSVNUX0RFRkFVTFRTIH0gZnJvbSAnLi4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQmFja29mZmljZUFsaWFzZWRQaWNrZXJWYWx1ZVJlc3BvbnNlLFxuICBCYWNrb2ZmaWNlQ29sdW1uU3BlYyxcbiAgQmFja29mZmljZUNvbm5lY3Rpb24sXG4gIEJhY2tvZmZpY2VDb25uZWN0aW9uTGlzdENvbmZpZyxcbiAgQmFja29mZmljZURldGFpbENvbnRlbnRTcGVjLFxuICBCYWNrb2ZmaWNlRGV0YWlsTGF5b3V0UHJvZmlsZSxcbiAgQmFja29mZmljZURldGFpbFBhZ2VTcGVjLFxuICBCYWNrb2ZmaWNlRGV0YWlsVmFyaWFibGVzLFxuICBCYWNrb2ZmaWNlRW50aXR5QWN0aW9uU3BlYyxcbiAgQmFja29mZmljZUVudGl0eURldGFpbENvbmZpZyxcbiAgQmFja29mZmljZUVudGl0eVBpY2tlckNvbmZpZyxcbiAgQmFja29mZmljZUxpc3RRdWVyeUlucHV0LFxuICBCYWNrb2ZmaWNlTGlzdFJlc3BvbnNpdmVQcm9maWxlLFxuICBCYWNrb2ZmaWNlTGlzdFN0YXRlLFxuICBCYWNrb2ZmaWNlTGlzdFVpQ29uZmlnLFxuICBCYWNrb2ZmaWNlT3BlcmF0aW9uU29ydCxcbiAgQmFja29mZmljZU9wZXJhdGlvbldoZXJlLFxuICBCYWNrb2ZmaWNlUGlja2VyUXVlcnlJbnB1dCxcbiAgQmFja29mZmljZVBpY2tlclZhbHVlQ29uZmlnLFxuICBCYWNrb2ZmaWNlUnVudGltZUVudGl0eUNvdW50Q29uZmlnLFxuICBCYWNrb2ZmaWNlUm93RmxhZ1NwZWMsXG4gIEkxOG5MYWJlbCxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgYnVpbGRHZW5lcmljRGV0YWlsSGVhZGVyIH0gZnJvbSAnLi9kZXRhaWwuanMnO1xuaW1wb3J0IHsgbWFwRmlsdGVycywgdHlwZSBCYWNrb2ZmaWNlTGVnYWN5RmlsdGVyU3BlYyB9IGZyb20gJy4vZmlsdGVycy5qcyc7XG5pbXBvcnQgeyBnZXRSb3dJZCB9IGZyb20gJy4vbGlzdC5qcyc7XG5pbXBvcnQgeyBtYXBTb3J0cywgdHlwZSBCYWNrb2ZmaWNlTGVnYWN5U29ydFNwZWMgfSBmcm9tICcuL3NvcnRzLmpzJztcbmltcG9ydCB7IHNldFdoZXJlVmFsdWUgfSBmcm9tICcuLi9maWx0ZXJzL3doZXJlLmpzJztcblxuZXhwb3J0IHR5cGUgQmFja29mZmljZVdoZXJlRW50cnkgPSB7XG4gIGtleTogc3RyaW5nO1xuICB2YWx1ZTogdW5rbm93bjtcbiAgcGF0aD86IHJlYWRvbmx5IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgQmFja29mZmljZVBpY2tlclNlYXJjaENvbmZpZzxXaGVyZT4gPSB7XG4gIHdoZXJlS2V5OiBFeHRyYWN0PGtleW9mIFdoZXJlLCBzdHJpbmc+O1xuICBwYXRoPzogcmVhZG9ubHkgc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBCYWNrb2ZmaWNlUGlja2VyU2NvcGVDb25maWc8V2hlcmU+ID0ge1xuICBrZXlzOiByZWFkb25seSBFeHRyYWN0PGtleW9mIFdoZXJlLCBzdHJpbmc+W107XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9CQUNLT0ZGSUNFX0xJU1RfVUlfQ09ORklHID0ge1xuICBkZW5zaXR5OiAnY29tcGFjdCcsXG4gIGRpc3BsYXlNb2RlOiAnYXV0bycsXG4gIGluZmluaXRlU2Nyb2xsOiB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICByb290TWFyZ2luOiAnNzIwcHggMHB4JyxcbiAgICB0aHJlc2hvbGQ6IDAsXG4gICAgc3RhdHVzOiB7XG4gICAgICBzaG93TG9hZGVkQ291bnQ6IHRydWUsXG4gICAgICBzaG93VG90YWxDb3VudDogdHJ1ZSxcbiAgICAgIHNob3dFbmRTdGF0ZTogdHJ1ZSxcbiAgICB9LFxuICB9LFxuICB0b29sYmFyOiB7XG4gICAgZGVuc2l0eTogJ2NvbXBhY3QnLFxuICAgIGRpc3BsYXlNb2RlOiAnYXV0bycsXG4gICAgbWF4UHJvbW90ZWRGaWx0ZXJzOiAyLFxuICAgIHNob3dSZWZyZXNoOiB0cnVlLFxuICAgIHNob3dTb3J0OiB0cnVlLFxuICAgIHNob3dGaWx0ZXJDaGlwczogJ2F1dG8nLFxuICB9LFxufSBzYXRpc2ZpZXMgQmFja29mZmljZUxpc3RVaUNvbmZpZztcblxuZXhwb3J0IGNvbnN0IGJ1aWxkV2hlcmVGcm9tRW50cmllcyA9IChcbiAgZW50cmllczogcmVhZG9ubHkgQmFja29mZmljZVdoZXJlRW50cnlbXSxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCA9PiB7XG4gIGxldCB3aGVyZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsID0gbnVsbDtcbiAgZW50cmllcy5mb3JFYWNoKCh7IGtleSwgcGF0aCwgdmFsdWUgfSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dFdoZXJlID0gc2V0V2hlcmVWYWx1ZSh3aGVyZSwga2V5LCB2YWx1ZSwgcGF0aCk7XG4gICAgaWYgKG5leHRXaGVyZSAhPSBudWxsKSB7XG4gICAgICB3aGVyZSA9IG5leHRXaGVyZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gd2hlcmU7XG59O1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVBpY2tlclNlYXJjaEZyb21GaWx0ZXJzID0gPFxuICBXaGVyZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBGaWx0ZXJXaGVyZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gV2hlcmUsXG4+KFxuICBmaWx0ZXJzOiByZWFkb25seSBCYWNrb2ZmaWNlTGVnYWN5RmlsdGVyU3BlYzxGaWx0ZXJXaGVyZT5bXSxcbik6IEJhY2tvZmZpY2VQaWNrZXJTZWFyY2hDb25maWc8V2hlcmU+IHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgbWF0Y2ggPSBmaWx0ZXJzLmZpbmQoKGZpbHRlcikgPT4ge1xuICAgIHJldHVybiBmaWx0ZXIua2luZCA9PT0gJ3RleHRDb250YWlucyc7XG4gIH0pO1xuICBpZiAobWF0Y2ggPT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgd2hlcmVLZXkgPSAobWF0Y2gud2hlcmVLZXkgPz8gbWF0Y2guaWQpIGFzIEV4dHJhY3Q8a2V5b2YgV2hlcmUsIHN0cmluZz47XG4gIHJldHVybiB7IHdoZXJlS2V5LCBwYXRoOiBtYXRjaC5wYXRoIH07XG59O1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVBpY2tlclNjb3BlRnJvbUZpbHRlcnMgPSA8XG4gIFdoZXJlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIEZpbHRlcldoZXJlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBXaGVyZSxcbj4oXG4gIGZpbHRlcnM6IHJlYWRvbmx5IEJhY2tvZmZpY2VMZWdhY3lGaWx0ZXJTcGVjPEZpbHRlcldoZXJlPltdLFxuICBzdXBwb3J0ZWRLZXlzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IEJhY2tvZmZpY2VQaWNrZXJTY29wZUNvbmZpZzxXaGVyZT4gfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBzY29wZWRLZXlzID0gbmV3IFNldDxFeHRyYWN0PGtleW9mIFdoZXJlLCBzdHJpbmc+PigpO1xuICBmaWx0ZXJzLmZvckVhY2goKGZpbHRlcikgPT4ge1xuICAgIGNvbnN0IGtleSA9IFN0cmluZyhmaWx0ZXIud2hlcmVLZXkgPz8gZmlsdGVyLmlkKTtcbiAgICBpZiAoc3VwcG9ydGVkS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBzY29wZWRLZXlzLmFkZChcbiAgICAgICAgKGZpbHRlci53aGVyZUtleSA/PyBmaWx0ZXIuaWQpIGFzIEV4dHJhY3Q8a2V5b2YgV2hlcmUsIHN0cmluZz4sXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG4gIGlmIChzY29wZWRLZXlzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiB7IGtleXM6IEFycmF5LmZyb20oc2NvcGVkS2V5cykgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZEJhY2tvZmZpY2VDb25uZWN0aW9uTGlzdENvbmZpZyA9IDxcbiAgVE9wZXJhdGlvbiBleHRlbmRzIE9wZXJhdGlvblR5cGUsXG4gIFJvd1JlZiBleHRlbmRzIG9iamVjdCxcbiAgUm93VmlldyBleHRlbmRzIG9iamVjdCxcbiAgTGlzdEZyYWdtZW50RGF0YSA9IHVua25vd24sXG4gIFdoZXJlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBCYWNrb2ZmaWNlT3BlcmF0aW9uV2hlcmU8VE9wZXJhdGlvbj4sXG4gIFNvcnQgZXh0ZW5kcyBzdHJpbmcgPSBCYWNrb2ZmaWNlT3BlcmF0aW9uU29ydDxUT3BlcmF0aW9uPixcbj4ob3B0aW9uczoge1xuICB0aXRsZTogSTE4bkxhYmVsO1xuICBjb2x1bW5zOiByZWFkb25seSBCYWNrb2ZmaWNlQ29sdW1uU3BlYzxSb3dWaWV3PltdO1xuICByb3dGbGFncz86IHJlYWRvbmx5IEJhY2tvZmZpY2VSb3dGbGFnU3BlYzxSb3dWaWV3PltdO1xuICBzb3J0czogcmVhZG9ubHkgQmFja29mZmljZUxlZ2FjeVNvcnRTcGVjPFNvcnQ+W107XG4gIGZpbHRlcnM6IHJlYWRvbmx5IEJhY2tvZmZpY2VMZWdhY3lGaWx0ZXJTcGVjPFdoZXJlPltdO1xuICBkZWZhdWx0U3RhdGU6IEJhY2tvZmZpY2VMaXN0U3RhdGU8V2hlcmUsIFNvcnQ+O1xuICBxdWVyeTogR3JhcGhRTFRhZ2dlZE5vZGU7XG4gIGZyYWdtZW50OiBHcmFwaFFMVGFnZ2VkTm9kZTtcbiAgY291bnQ6IEJhY2tvZmZpY2VSdW50aW1lRW50aXR5Q291bnRDb25maWc8V2hlcmU+O1xuICBnZXRDb25uZWN0aW9uOiAoZGF0YTogTGlzdEZyYWdtZW50RGF0YSkgPT4gQmFja29mZmljZUNvbm5lY3Rpb248Um93UmVmPjtcbiAgdG9Sb3c6IChyb3dSZWY6IFJvd1JlZikgPT4gUm93VmlldztcbiAgYnVpbGRRdWVyeVZhcmlhYmxlcz86IChcbiAgICBpbnB1dDogQmFja29mZmljZUxpc3RRdWVyeUlucHV0PFRPcGVyYXRpb24sIFdoZXJlLCBTb3J0PixcbiAgKSA9PiBUT3BlcmF0aW9uWyd2YXJpYWJsZXMnXTtcbiAgcmVzcG9uc2l2ZT86IEJhY2tvZmZpY2VMaXN0UmVzcG9uc2l2ZVByb2ZpbGU8Um93Vmlldz47XG4gIHVpPzogQmFja29mZmljZUxpc3RVaUNvbmZpZztcbn0pOiBCYWNrb2ZmaWNlQ29ubmVjdGlvbkxpc3RDb25maWc8XG4gIFRPcGVyYXRpb24sXG4gIFJvd1JlZixcbiAgUm93VmlldyxcbiAgTGlzdEZyYWdtZW50RGF0YSxcbiAgV2hlcmUsXG4gIFNvcnRcbj4gPT4ge1xuICByZXR1cm4ge1xuICAgIGtpbmQ6ICdjb25uZWN0aW9uJyxcbiAgICB0aXRsZTogb3B0aW9ucy50aXRsZSxcbiAgICBxdWVyeTogb3B0aW9ucy5xdWVyeSxcbiAgICBmcmFnbWVudDogb3B0aW9ucy5mcmFnbWVudCxcbiAgICBjb3VudDogb3B0aW9ucy5jb3VudCxcbiAgICBnZXRDb25uZWN0aW9uOiBvcHRpb25zLmdldENvbm5lY3Rpb24sXG4gICAgdG9Sb3c6IG9wdGlvbnMudG9Sb3csXG4gICAgZ2V0Um93SWQsXG4gICAgY29sdW1uczogb3B0aW9ucy5jb2x1bW5zLFxuICAgIHJvd0ZsYWdzOiBvcHRpb25zLnJvd0ZsYWdzLFxuICAgIHNvcnRzOiBtYXBTb3J0cyhvcHRpb25zLnNvcnRzKSxcbiAgICBmaWx0ZXJzOiBtYXBGaWx0ZXJzKG9wdGlvbnMuZmlsdGVycyksXG4gICAgZGVmYXVsdFN0YXRlOiBvcHRpb25zLmRlZmF1bHRTdGF0ZSxcbiAgICBidWlsZFF1ZXJ5VmFyaWFibGVzOlxuICAgICAgb3B0aW9ucy5idWlsZFF1ZXJ5VmFyaWFibGVzID8/XG4gICAgICAoKGlucHV0KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd2hlcmU6IGlucHV0LndoZXJlLFxuICAgICAgICAgIHNvcnQ6IGlucHV0LnNvcnQsXG4gICAgICAgICAgY291bnQ6IGlucHV0LmNvdW50LFxuICAgICAgICAgIGN1cnNvcjogaW5wdXQuY3Vyc29yLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgcmVzcG9uc2l2ZTogb3B0aW9ucy5yZXNwb25zaXZlID8/IHtcbiAgICAgIG1vZGU6ICdhdXRvJyxcbiAgICAgIGRlbnNpdHk6ICdjb21wYWN0JyxcbiAgICB9LFxuICAgIHVpOiBvcHRpb25zLnVpID8/IERFRkFVTFRfQkFDS09GRklDRV9MSVNUX1VJX0NPTkZJRyxcbiAgfTtcbn07XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQmFja29mZmljZURldGFpbFBhZ2VDb25maWc8XG4gIERldGFpbFZpZXcgZXh0ZW5kcyB7IGlkOiBzdHJpbmcgfSxcbiAgRGV0YWlsRGF0YSA9IERldGFpbFZpZXcsXG4gIExheW91dFZpZXcgPSBEZXRhaWxWaWV3LFxuICBEZXRhaWxRdWVyeURhdGEgPSB1bmtub3duLFxuICBEZXRhaWxGcmFnbWVudEtleSA9IHVua25vd24sXG4gIERldGFpbFF1ZXJ5VmFyaWFibGVzID0geyBpZDogc3RyaW5nIH0sXG4+KG9wdGlvbnM6IHtcbiAgaWQ6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBsYWJlbDogSTE4bkxhYmVsO1xuICBxdWVyeTogR3JhcGhRTFRhZ2dlZE5vZGU7XG4gIGZyYWdtZW50OiBHcmFwaFFMVGFnZ2VkTm9kZTtcbiAgdG9WaWV3OiAoZGF0YTogRGV0YWlsRGF0YSkgPT4gRGV0YWlsVmlldztcbiAgY29udGVudDogcmVhZG9ubHkgQmFja29mZmljZURldGFpbENvbnRlbnRTcGVjPERldGFpbFZpZXc+W107XG4gIGFjdGlvbnM/OiByZWFkb25seSBCYWNrb2ZmaWNlRW50aXR5QWN0aW9uU3BlYzxEZXRhaWxWaWV3PltdO1xuICByZXNvbHZlTm9kZTogKFxuICAgIGRhdGE6IERldGFpbFF1ZXJ5RGF0YSxcbiAgICBjb250ZXh0OiB7IGlkOiBzdHJpbmc7IGRldGFpbElkPzogc3RyaW5nIH0sXG4gICkgPT4gRGV0YWlsRnJhZ21lbnRLZXkgfCBudWxsO1xuICBidWlsZFZhcmlhYmxlcz86IChpbnB1dDoge1xuICAgIGlkOiBzdHJpbmc7XG4gIH0pID0+IEJhY2tvZmZpY2VEZXRhaWxWYXJpYWJsZXM8RGV0YWlsUXVlcnlWYXJpYWJsZXM+O1xuICBpc1Zpc2libGU/OiAobGF5b3V0UGFnZTogTGF5b3V0VmlldykgPT4gYm9vbGVhbjtcbiAgcHJvZmlsZT86IEJhY2tvZmZpY2VEZXRhaWxMYXlvdXRQcm9maWxlPERldGFpbFZpZXc+O1xufSk6IEJhY2tvZmZpY2VEZXRhaWxQYWdlU3BlYzxcbiAgRGV0YWlsVmlldyxcbiAgTGF5b3V0VmlldyxcbiAgRGV0YWlsRGF0YSxcbiAgRGV0YWlsUXVlcnlEYXRhLFxuICBEZXRhaWxGcmFnbWVudEtleSxcbiAgRGV0YWlsUXVlcnlWYXJpYWJsZXNcbj4ge1xuICByZXR1cm4ge1xuICAgIHF1ZXJ5OiBvcHRpb25zLnF1ZXJ5LFxuICAgIGZyYWdtZW50OiBvcHRpb25zLmZyYWdtZW50LFxuICAgIHJlc29sdmVOb2RlOiBvcHRpb25zLnJlc29sdmVOb2RlLFxuICAgIHRvVmlldzogb3B0aW9ucy50b1ZpZXcsXG4gICAgYnVpbGRWYXJpYWJsZXM6IG9wdGlvbnMuYnVpbGRWYXJpYWJsZXMsXG4gICAgaWQ6IG9wdGlvbnMuaWQsXG4gICAgcGF0aDogb3B0aW9ucy5wYXRoLFxuICAgIGxhYmVsOiBvcHRpb25zLmxhYmVsLFxuICAgIGNvbnRlbnQ6IG9wdGlvbnMuY29udGVudCxcbiAgICBhY3Rpb25zOiBvcHRpb25zLmFjdGlvbnMsXG4gICAgaXNWaXNpYmxlOiBvcHRpb25zLmlzVmlzaWJsZSxcbiAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBidWlsZEJhY2tvZmZpY2VFbnRpdHlEZXRhaWxDb25maWcgPSA8XG4gIExheW91dERhdGEgZXh0ZW5kcyBvYmplY3QsXG4gIExheW91dFZpZXcgZXh0ZW5kcyB7IGlkOiBzdHJpbmcgfSxcbiAgTWFpbkRhdGEgZXh0ZW5kcyBvYmplY3QgPSBMYXlvdXREYXRhLFxuICBNYWluVmlldyBleHRlbmRzIHsgaWQ6IHN0cmluZyB9ID0gTGF5b3V0VmlldyxcbiAgTGF5b3V0UXVlcnlEYXRhID0gdW5rbm93bixcbiAgTWFpblF1ZXJ5RGF0YSA9IHVua25vd24sXG4gIExheW91dEZyYWdtZW50S2V5ID0gdW5rbm93bixcbiAgTWFpbkZyYWdtZW50S2V5ID0gdW5rbm93bixcbiAgTGF5b3V0UXVlcnlWYXJpYWJsZXMgPSB7IGlkOiBzdHJpbmcgfSxcbiAgTWFpblF1ZXJ5VmFyaWFibGVzID0geyBpZDogc3RyaW5nIH0sXG4+KG9wdGlvbnM6IHtcbiAgdGl0bGU6IEkxOG5MYWJlbDtcbiAgaGVhZGVyVGl0bGU/OiBJMThuTGFiZWw7XG4gIGhlYWRlclN1YnRpdGxlPzogSTE4bkxhYmVsO1xuICBxdWVyeTogR3JhcGhRTFRhZ2dlZE5vZGU7XG4gIGZyYWdtZW50OiBHcmFwaFFMVGFnZ2VkTm9kZTtcbiAgdG9WaWV3OiAoZGF0YTogTWFpbkRhdGEpID0+IE1haW5WaWV3O1xuICBhY3Rpb25zPzogcmVhZG9ubHkgQmFja29mZmljZUVudGl0eUFjdGlvblNwZWM8TWFpblZpZXc+W107XG4gIGxheW91dFF1ZXJ5PzogR3JhcGhRTFRhZ2dlZE5vZGU7XG4gIGxheW91dEZyYWdtZW50PzogR3JhcGhRTFRhZ2dlZE5vZGU7XG4gIGxheW91dFRvVmlldz86IChkYXRhOiBMYXlvdXREYXRhKSA9PiBMYXlvdXRWaWV3O1xuICBoZWFkZXI/OiBCYWNrb2ZmaWNlRW50aXR5RGV0YWlsQ29uZmlnPFxuICAgIExheW91dERhdGEsXG4gICAgTGF5b3V0VmlldyxcbiAgICBNYWluRGF0YSxcbiAgICBNYWluVmlldyxcbiAgICBNYWluRGF0YSxcbiAgICBNYWluVmlldyxcbiAgICBMYXlvdXRRdWVyeURhdGEsXG4gICAgTWFpblF1ZXJ5RGF0YSxcbiAgICBNYWluUXVlcnlEYXRhLFxuICAgIExheW91dEZyYWdtZW50S2V5LFxuICAgIE1haW5GcmFnbWVudEtleSxcbiAgICBNYWluRnJhZ21lbnRLZXksXG4gICAgTGF5b3V0UXVlcnlWYXJpYWJsZXMsXG4gICAgTWFpblF1ZXJ5VmFyaWFibGVzLFxuICAgIE1haW5RdWVyeVZhcmlhYmxlc1xuICA+WydoZWFkZXInXTtcbiAgcmVzb2x2ZU5vZGU6IEJhY2tvZmZpY2VFbnRpdHlEZXRhaWxDb25maWc8XG4gICAgTGF5b3V0RGF0YSxcbiAgICBMYXlvdXRWaWV3LFxuICAgIE1haW5EYXRhLFxuICAgIE1haW5WaWV3LFxuICAgIE1haW5EYXRhLFxuICAgIE1haW5WaWV3LFxuICAgIExheW91dFF1ZXJ5RGF0YSxcbiAgICBNYWluUXVlcnlEYXRhLFxuICAgIE1haW5RdWVyeURhdGEsXG4gICAgTGF5b3V0RnJhZ21lbnRLZXksXG4gICAgTWFpbkZyYWdtZW50S2V5LFxuICAgIE1haW5GcmFnbWVudEtleSxcbiAgICBMYXlvdXRRdWVyeVZhcmlhYmxlcyxcbiAgICBNYWluUXVlcnlWYXJpYWJsZXMsXG4gICAgTWFpblF1ZXJ5VmFyaWFibGVzXG4gID5bJ21haW5QYWdlJ11bJ3Jlc29sdmVOb2RlJ107XG4gIGxheW91dFJlc29sdmVOb2RlOiBCYWNrb2ZmaWNlRW50aXR5RGV0YWlsQ29uZmlnPFxuICAgIExheW91dERhdGEsXG4gICAgTGF5b3V0VmlldyxcbiAgICBNYWluRGF0YSxcbiAgICBNYWluVmlldyxcbiAgICBNYWluRGF0YSxcbiAgICBNYWluVmlldyxcbiAgICBMYXlvdXRRdWVyeURhdGEsXG4gICAgTWFpblF1ZXJ5RGF0YSxcbiAgICBNYWluUXVlcnlEYXRhLFxuICAgIExheW91dEZyYWdtZW50S2V5LFxuICAgIE1haW5GcmFnbWVudEtleSxcbiAgICBNYWluRnJhZ21lbnRLZXksXG4gICAgTGF5b3V0UXVlcnlWYXJpYWJsZXMsXG4gICAgTWFpblF1ZXJ5VmFyaWFibGVzLFxuICAgIE1haW5RdWVyeVZhcmlhYmxlc1xuICA+WydsYXlvdXRQYWdlJ11bJ3Jlc29sdmVOb2RlJ107XG4gIGJ1aWxkVmFyaWFibGVzPzogKGlucHV0OiB7XG4gICAgaWQ6IHN0cmluZztcbiAgfSkgPT4gQmFja29mZmljZURldGFpbFZhcmlhYmxlczxNYWluUXVlcnlWYXJpYWJsZXM+O1xuICBsYXlvdXRCdWlsZFZhcmlhYmxlcz86IChpbnB1dDoge1xuICAgIGlkOiBzdHJpbmc7XG4gIH0pID0+IEJhY2tvZmZpY2VEZXRhaWxWYXJpYWJsZXM8TGF5b3V0UXVlcnlWYXJpYWJsZXM+O1xuICBkZXRhaWxDb250ZW50PzogcmVhZG9ubHkgQmFja29mZmljZURldGFpbENvbnRlbnRTcGVjPE1haW5WaWV3PltdO1xuICBtYWluUGFnZUlkPzogc3RyaW5nO1xuICBtYWluUGFnZVBhdGg/OiBzdHJpbmc7XG4gIG1haW5QYWdlTGFiZWw/OiBJMThuTGFiZWw7XG4gIHN1YlBhZ2VzPzogQmFja29mZmljZUVudGl0eURldGFpbENvbmZpZzxcbiAgICBMYXlvdXREYXRhLFxuICAgIExheW91dFZpZXcsXG4gICAgTWFpbkRhdGEsXG4gICAgTWFpblZpZXcsXG4gICAgTWFpbkRhdGEsXG4gICAgTWFpblZpZXcsXG4gICAgTGF5b3V0UXVlcnlEYXRhLFxuICAgIE1haW5RdWVyeURhdGEsXG4gICAgTWFpblF1ZXJ5RGF0YSxcbiAgICBMYXlvdXRGcmFnbWVudEtleSxcbiAgICBNYWluRnJhZ21lbnRLZXksXG4gICAgTWFpbkZyYWdtZW50S2V5LFxuICAgIExheW91dFF1ZXJ5VmFyaWFibGVzLFxuICAgIE1haW5RdWVyeVZhcmlhYmxlcyxcbiAgICBNYWluUXVlcnlWYXJpYWJsZXNcbiAgPlsnc3ViUGFnZXMnXTtcbiAgcHJvZmlsZT86IEJhY2tvZmZpY2VEZXRhaWxMYXlvdXRQcm9maWxlPExheW91dFZpZXc+O1xuICBtYWluUGFnZVByb2ZpbGU/OiBCYWNrb2ZmaWNlRGV0YWlsTGF5b3V0UHJvZmlsZTxNYWluVmlldz47XG59KTogQmFja29mZmljZUVudGl0eURldGFpbENvbmZpZzxcbiAgTGF5b3V0RGF0YSxcbiAgTGF5b3V0VmlldyxcbiAgTWFpbkRhdGEsXG4gIE1haW5WaWV3LFxuICBNYWluRGF0YSxcbiAgTWFpblZpZXcsXG4gIExheW91dFF1ZXJ5RGF0YSxcbiAgTWFpblF1ZXJ5RGF0YSxcbiAgTWFpblF1ZXJ5RGF0YSxcbiAgTGF5b3V0RnJhZ21lbnRLZXksXG4gIE1haW5GcmFnbWVudEtleSxcbiAgTWFpbkZyYWdtZW50S2V5LFxuICBMYXlvdXRRdWVyeVZhcmlhYmxlcyxcbiAgTWFpblF1ZXJ5VmFyaWFibGVzLFxuICBNYWluUXVlcnlWYXJpYWJsZXNcbj4gPT4ge1xuICBjb25zdCBkZWZhdWx0SGVhZGVyID0gYnVpbGRHZW5lcmljRGV0YWlsSGVhZGVyKHtcbiAgICB0aXRsZTogb3B0aW9ucy5oZWFkZXJUaXRsZSA/PyBvcHRpb25zLnRpdGxlLFxuICAgIHN1YnRpdGxlOiBvcHRpb25zLmhlYWRlclN1YnRpdGxlLFxuICB9KTtcbiAgY29uc3QgbWFpblBhZ2VJZCA9IG9wdGlvbnMubWFpblBhZ2VJZCA/PyAnb3ZlcnZpZXcnO1xuICBjb25zdCBtYWluUGFnZVBhdGggPSBvcHRpb25zLm1haW5QYWdlUGF0aCA/PyAnb3ZlcnZpZXcnO1xuICBjb25zdCBtYWluUGFnZUxhYmVsID0gb3B0aW9ucy5tYWluUGFnZUxhYmVsID8/IG9wdGlvbnMudGl0bGU7XG4gIGNvbnN0IG1haW5QYWdlID0gYnVpbGRCYWNrb2ZmaWNlRGV0YWlsUGFnZUNvbmZpZzxcbiAgICBNYWluVmlldyxcbiAgICBNYWluRGF0YSxcbiAgICBMYXlvdXRWaWV3LFxuICAgIE1haW5RdWVyeURhdGEsXG4gICAgTWFpbkZyYWdtZW50S2V5LFxuICAgIE1haW5RdWVyeVZhcmlhYmxlc1xuICA+KHtcbiAgICBpZDogbWFpblBhZ2VJZCxcbiAgICBwYXRoOiBtYWluUGFnZVBhdGgsXG4gICAgbGFiZWw6IG1haW5QYWdlTGFiZWwsXG4gICAgcXVlcnk6IG9wdGlvbnMucXVlcnksXG4gICAgZnJhZ21lbnQ6IG9wdGlvbnMuZnJhZ21lbnQsXG4gICAgcmVzb2x2ZU5vZGU6IG9wdGlvbnMucmVzb2x2ZU5vZGUsXG4gICAgdG9WaWV3OiBvcHRpb25zLnRvVmlldyxcbiAgICBidWlsZFZhcmlhYmxlczogb3B0aW9ucy5idWlsZFZhcmlhYmxlcyxcbiAgICBjb250ZW50OiBvcHRpb25zLmRldGFpbENvbnRlbnQgPz8gW10sXG4gICAgYWN0aW9uczogb3B0aW9ucy5hY3Rpb25zLFxuICAgIHByb2ZpbGU6IG9wdGlvbnMubWFpblBhZ2VQcm9maWxlLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHRpdGxlOiBvcHRpb25zLnRpdGxlLFxuICAgIGhlYWRlcjogb3B0aW9ucy5oZWFkZXIgPz8gZGVmYXVsdEhlYWRlcixcbiAgICBsYXlvdXRQYWdlOiB7XG4gICAgICBxdWVyeTogb3B0aW9ucy5sYXlvdXRRdWVyeSA/PyBvcHRpb25zLnF1ZXJ5LFxuICAgICAgZnJhZ21lbnQ6IG9wdGlvbnMubGF5b3V0RnJhZ21lbnQgPz8gb3B0aW9ucy5mcmFnbWVudCxcbiAgICAgIHJlc29sdmVOb2RlOiBvcHRpb25zLmxheW91dFJlc29sdmVOb2RlLFxuICAgICAgdG9WaWV3OlxuICAgICAgICBvcHRpb25zLmxheW91dFRvVmlldyA/P1xuICAgICAgICAob3B0aW9ucy50b1ZpZXcgYXMgdW5rbm93biBhcyAoZGF0YTogTGF5b3V0RGF0YSkgPT4gTGF5b3V0VmlldyksXG4gICAgICBidWlsZFZhcmlhYmxlczpcbiAgICAgICAgb3B0aW9ucy5sYXlvdXRCdWlsZFZhcmlhYmxlcyA/P1xuICAgICAgICAob3B0aW9ucy5idWlsZFZhcmlhYmxlcyBhcyB1bmtub3duIGFzXG4gICAgICAgICAgfCAoKGlucHV0OiB7XG4gICAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICB9KSA9PiBCYWNrb2ZmaWNlRGV0YWlsVmFyaWFibGVzPExheW91dFF1ZXJ5VmFyaWFibGVzPilcbiAgICAgICAgICB8IHVuZGVmaW5lZCksXG4gICAgfSxcbiAgICBtYWluUGFnZSxcbiAgICBzdWJQYWdlczogb3B0aW9ucy5zdWJQYWdlcyxcbiAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRCYWNrb2ZmaWNlQ29ubmVjdGlvbkRldGFpbFZhcmlhYmxlcyA9IDxcbiAgV2hlcmUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgU29ydCBleHRlbmRzIHN0cmluZyxcbj4oaW5wdXQ6IHtcbiAgZGV0YWlsSWQ6IHN0cmluZztcbiAgd2hlcmU6IFdoZXJlIHwgbnVsbDtcbiAgc29ydDogU29ydCB8IG51bGw7XG59KTogQmFja29mZmljZURldGFpbFZhcmlhYmxlczx7XG4gIHdoZXJlOiBXaGVyZSB8IG51bGw7XG4gIHNvcnQ6IFNvcnQgfCBudWxsO1xuICBjb3VudDogbnVtYmVyO1xufT4gPT4ge1xuICByZXR1cm4ge1xuICAgIGRldGFpbElkOiBpbnB1dC5kZXRhaWxJZCxcbiAgICB2YXJpYWJsZXM6IHtcbiAgICAgIHdoZXJlOiBpbnB1dC53aGVyZSxcbiAgICAgIHNvcnQ6IGlucHV0LnNvcnQsXG4gICAgICBjb3VudDogQkFDS09GRklDRV9MSVNUX0RFRkFVTFRTLnBhZ2VTaXplLFxuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRCYWNrb2ZmaWNlRW50aXR5UGlja2VyQ29uZmlnID0gPFxuICBUT3BlcmF0aW9uIGV4dGVuZHMgT3BlcmF0aW9uVHlwZSxcbiAgUm93UmVmIGV4dGVuZHMgb2JqZWN0LFxuICBSb3dWaWV3IGV4dGVuZHMgeyBpZDogc3RyaW5nIH0sXG4gIFBpY2tlckZyYWdtZW50RGF0YSA9IHVua25vd24sXG4gIFdoZXJlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBCYWNrb2ZmaWNlT3BlcmF0aW9uV2hlcmU8VE9wZXJhdGlvbj4sXG4gIFZhbHVlUXVlcnlEYXRhID0gQmFja29mZmljZUFsaWFzZWRQaWNrZXJWYWx1ZVJlc3BvbnNlPHN0cmluZywgUm93UmVmPixcbj4ob3B0aW9uczoge1xuICBxdWVyeTogR3JhcGhRTFRhZ2dlZE5vZGU7XG4gIGZyYWdtZW50OiBHcmFwaFFMVGFnZ2VkTm9kZTtcbiAgdmFsdWU/OiBCYWNrb2ZmaWNlUGlja2VyVmFsdWVDb25maWc8Um93UmVmLCBSb3dWaWV3LCBWYWx1ZVF1ZXJ5RGF0YT47XG4gIGdldENvbm5lY3Rpb246IChkYXRhOiBQaWNrZXJGcmFnbWVudERhdGEpID0+IEJhY2tvZmZpY2VDb25uZWN0aW9uPFJvd1JlZj47XG4gIHRvUm93OiAocm93UmVmOiBSb3dSZWYpID0+IFJvd1ZpZXc7XG4gIGdldFJvd0lkPzogKHJvdzogUm93VmlldykgPT4gc3RyaW5nO1xuICBzZWFyY2g/OiBCYWNrb2ZmaWNlUGlja2VyU2VhcmNoQ29uZmlnPFdoZXJlPjtcbiAgc2NvcGU/OiBCYWNrb2ZmaWNlUGlja2VyU2NvcGVDb25maWc8V2hlcmU+O1xuICBzZWFyY2hFbmFibGVkPzogYm9vbGVhbjtcbiAgc2VhcmNoUmVxdWlyZWQ/OiBib29sZWFuO1xuICBzZWFyY2hQbGFjZWhvbGRlcj86IEkxOG5MYWJlbDtcbiAgYnVpbGRRdWVyeVZhcmlhYmxlcz86IChcbiAgICBpbnB1dDogQmFja29mZmljZVBpY2tlclF1ZXJ5SW5wdXQ8VE9wZXJhdGlvbiwgV2hlcmU+LFxuICApID0+IFRPcGVyYXRpb25bJ3ZhcmlhYmxlcyddO1xufSk6IEJhY2tvZmZpY2VFbnRpdHlQaWNrZXJDb25maWc8XG4gIFRPcGVyYXRpb24sXG4gIFJvd1JlZixcbiAgUm93VmlldyxcbiAgUGlja2VyRnJhZ21lbnREYXRhLFxuICBXaGVyZSxcbiAgVmFsdWVRdWVyeURhdGFcbj4gPT4ge1xuICBjb25zdCBzZWFyY2hDb25maWcgPSBvcHRpb25zLnNlYXJjaDtcbiAgY29uc3Qgc2NvcGVLZXlzID0gb3B0aW9ucy5zY29wZT8ua2V5cyA/PyBbXTtcbiAgY29uc3Qgc2VhcmNoUmVxdWlyZWQgPSBvcHRpb25zLnNlYXJjaFJlcXVpcmVkID8/IGZhbHNlO1xuICBjb25zdCBzZWFyY2hFbmFibGVkID1cbiAgICBvcHRpb25zLnNlYXJjaEVuYWJsZWQgPz8gKHNlYXJjaENvbmZpZyAhPSBudWxsIHx8IHNlYXJjaFJlcXVpcmVkKTtcbiAgY29uc3QgZ2V0UmVzb2x2ZWRSb3dJZCA9XG4gICAgb3B0aW9ucy5nZXRSb3dJZCA/P1xuICAgICgocm93OiBSb3dWaWV3KSA9PiB7XG4gICAgICByZXR1cm4gcm93LmlkO1xuICAgIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcXVlcnk6IG9wdGlvbnMucXVlcnksXG4gICAgZnJhZ21lbnQ6IG9wdGlvbnMuZnJhZ21lbnQsXG4gICAgdmFsdWU6IG9wdGlvbnMudmFsdWUsXG4gICAgZ2V0Q29ubmVjdGlvbjogb3B0aW9ucy5nZXRDb25uZWN0aW9uLFxuICAgIHRvUm93OiBvcHRpb25zLnRvUm93LFxuICAgIGdldFJvd0lkOiBnZXRSZXNvbHZlZFJvd0lkLFxuICAgIHNlYXJjaEVuYWJsZWQsXG4gICAgc2VhcmNoUmVxdWlyZWQsXG4gICAgc2VhcmNoUGxhY2Vob2xkZXI6IG9wdGlvbnMuc2VhcmNoUGxhY2Vob2xkZXIsXG4gICAgYnVpbGRRdWVyeVZhcmlhYmxlczpcbiAgICAgIG9wdGlvbnMuYnVpbGRRdWVyeVZhcmlhYmxlcyA/P1xuICAgICAgKChpbnB1dCkgPT4ge1xuICAgICAgICBjb25zdCB0cmltbWVkID0gaW5wdXQuc2VhcmNoLnRyaW0oKTtcbiAgICAgICAgbGV0IHdoZXJlOiBXaGVyZSB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAoc2VhcmNoQ29uZmlnICE9IG51bGwgJiYgdHJpbW1lZCAhPT0gJycpIHtcbiAgICAgICAgICBjb25zdCBuZXh0V2hlcmUgPSBzZXRXaGVyZVZhbHVlKFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHNlYXJjaENvbmZpZy53aGVyZUtleSxcbiAgICAgICAgICAgIHRyaW1tZWQsXG4gICAgICAgICAgICBzZWFyY2hDb25maWcucGF0aCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChuZXh0V2hlcmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2hlcmUgPSBuZXh0V2hlcmUgYXMgV2hlcmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dC5zY29wZSAhPSBudWxsICYmIHNjb3BlS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2NvcGVLZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dC5zY29wZT8uW1N0cmluZyhrZXkpXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5leHRXaGVyZSA9IHNldFdoZXJlVmFsdWUod2hlcmUsIGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgaWYgKG5leHRXaGVyZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHdoZXJlID0gbmV4dFdoZXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd2hlcmUsXG4gICAgICAgICAgY291bnQ6IDIwLFxuICAgICAgICAgIGN1cnNvcjogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICB9O1xufTtcbiJdfQ==
@@ -1,10 +1,12 @@
1
1
  export * from './base64.js';
2
2
  export * from './billing.js';
3
3
  export * from './builders.js';
4
+ export * from './capabilities.js';
4
5
  export * from './constants.js';
5
6
  export * from './config/columns.js';
6
7
  export * from './config/detail.js';
7
8
  export * from './config/detail-builders.js';
9
+ export * from './config/entity-builders.js';
8
10
  export * from './config/filters.js';
9
11
  export * from './config/list.js';
10
12
  export * from './config/listRuntime.js';
@@ -19,5 +21,6 @@ export * from './state/buildListHref.js';
19
21
  export * from './state/stableKey.js';
20
22
  export * from './state/urlState.js';
21
23
  export * from './taskState.js';
24
+ export * from './tools/operation-builders.js';
22
25
  export * from './types.js';
23
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,YAAY,CAAC"}
package/lib/esm/index.js CHANGED
@@ -1,10 +1,12 @@
1
1
  export * from './base64.js';
2
2
  export * from './billing.js';
3
3
  export * from './builders.js';
4
+ export * from './capabilities.js';
4
5
  export * from './constants.js';
5
6
  export * from './config/columns.js';
6
7
  export * from './config/detail.js';
7
8
  export * from './config/detail-builders.js';
9
+ export * from './config/entity-builders.js';
8
10
  export * from './config/filters.js';
9
11
  export * from './config/list.js';
10
12
  export * from './config/listRuntime.js';
@@ -19,5 +21,6 @@ export * from './state/buildListHref.js';
19
21
  export * from './state/stableKey.js';
20
22
  export * from './state/urlState.js';
21
23
  export * from './taskState.js';
24
+ export * from './tools/operation-builders.js';
22
25
  export * from './types.js';
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9iYXNlNjQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9iaWxsaW5nLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYnVpbGRlcnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWcvY29sdW1ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZy9kZXRhaWwuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWcvZGV0YWlsLWJ1aWxkZXJzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uZmlnL2ZpbHRlcnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWcvbGlzdC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZy9saXN0UnVudGltZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZy9yZWNvcmQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWcvc29ydHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXRhaWwvcGFnZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXRhaWxQYXJhbXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9maWx0ZXJzL3NjaGVtYS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbHRlcnMvd2hlcmUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXNvbHZlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdGUvYnVpbGRMaXN0SHJlZi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXRlL3N0YWJsZUtleS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXRlL3VybFN0YXRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdGFza1N0YXRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMuanMnO1xuIl19
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9iYXNlNjQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9iaWxsaW5nLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYnVpbGRlcnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jYXBhYmlsaXRpZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWcvY29sdW1ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZy9kZXRhaWwuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWcvZGV0YWlsLWJ1aWxkZXJzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uZmlnL2VudGl0eS1idWlsZGVycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZy9maWx0ZXJzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uZmlnL2xpc3QuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWcvbGlzdFJ1bnRpbWUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWcvcmVjb3JkLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uZmlnL3NvcnRzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGV0YWlsL3BhZ2VzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGV0YWlsUGFyYW1zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsdGVycy9zY2hlbWEuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9maWx0ZXJzL3doZXJlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVzb2x2ZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXRlL2J1aWxkTGlzdEhyZWYuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdGF0ZS9zdGFibGVLZXkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdGF0ZS91cmxTdGF0ZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Rhc2tTdGF0ZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Rvb2xzL29wZXJhdGlvbi1idWlsZGVycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzLmpzJztcbiJdfQ==
@@ -0,0 +1,91 @@
1
+ import { type GraphQLTaggedNode } from 'relay-runtime';
2
+ import { type BackofficeToolEntityConfig, type BackofficeToolInputSpec, type BackofficeToolOperation, type BackofficeToolOutputSpec, type BackofficeToolVariablesContext, type I18nLabel } from '../types.js';
3
+ export type BackofficeToolTemplateMap = Readonly<Record<string, unknown>>;
4
+ export type BackofficeToolTypeSDLMap = Readonly<Record<string, string>>;
5
+ export type BackofficeToolBuilderLabels = {
6
+ jsonInput: I18nLabel;
7
+ output: I18nLabel;
8
+ invalidJson: I18nLabel;
9
+ };
10
+ export type ParseToolJson = (value: string) => Record<string, unknown> | null;
11
+ export declare const resolveGraphQLInputTypeName: (query: GraphQLTaggedNode) => string | null;
12
+ export declare const resolveToolInputTemplate: (options: {
13
+ query: GraphQLTaggedNode;
14
+ templates: BackofficeToolTemplateMap;
15
+ fallback?: string;
16
+ }) => string;
17
+ export declare const resolveToolInputTypeSDL: (options: {
18
+ query: GraphQLTaggedNode;
19
+ inputTypeSDL: BackofficeToolTypeSDLMap;
20
+ }) => string | null;
21
+ export declare const buildJsonToolInputs: (options: {
22
+ query: GraphQLTaggedNode;
23
+ label: I18nLabel;
24
+ templates?: BackofficeToolTemplateMap;
25
+ defaultValue?: string;
26
+ inputId?: string;
27
+ }) => readonly BackofficeToolInputSpec[];
28
+ export declare const readToolJsonInput: (input: Record<string, unknown>, inputId?: string) => string;
29
+ export declare const buildJsonToolVariables: (options: {
30
+ parseJson: ParseToolJson;
31
+ invalidJsonLabel: I18nLabel;
32
+ inputId?: string;
33
+ mapVariables: (input: Record<string, unknown>, context: BackofficeToolVariablesContext) => Record<string, unknown>;
34
+ }) => NonNullable<BackofficeToolOperation["buildVariables"]>;
35
+ export declare const getToolPayload: (data: unknown, key: string) => unknown;
36
+ export declare const resolveToolPayload: (data: unknown, outputKey: string) => Record<string, unknown> | null;
37
+ export declare const coerceToolValue: (value: unknown) => string | number | null;
38
+ export declare const buildToolPayloadOutput: (config: {
39
+ label: I18nLabel;
40
+ outputKey: string;
41
+ format?: Extract<BackofficeToolOutputSpec, {
42
+ kind: "payload";
43
+ }>["format"];
44
+ }) => BackofficeToolOutputSpec;
45
+ export declare const buildToolKeyValueOutput: (config: {
46
+ label: I18nLabel;
47
+ outputKey: string;
48
+ items: readonly {
49
+ label: I18nLabel;
50
+ field: string;
51
+ }[];
52
+ }) => BackofficeToolOutputSpec;
53
+ export declare const buildToolJsonFieldOutput: (config: {
54
+ label: I18nLabel;
55
+ outputKey: string;
56
+ field: string;
57
+ }) => BackofficeToolOutputSpec;
58
+ export declare const buildToolCodeFieldOutput: (config: {
59
+ label: I18nLabel;
60
+ outputKey: string;
61
+ field: string;
62
+ }) => BackofficeToolOutputSpec;
63
+ export declare const buildJsonToolOperation: (config: {
64
+ query: GraphQLTaggedNode;
65
+ title: I18nLabel;
66
+ subtitle?: I18nLabel;
67
+ labels: BackofficeToolBuilderLabels;
68
+ parseJson: ParseToolJson;
69
+ mapVariables: (input: Record<string, unknown>, context: BackofficeToolVariablesContext) => Record<string, unknown>;
70
+ outputs: readonly BackofficeToolOutputSpec[];
71
+ templates?: BackofficeToolTemplateMap;
72
+ inputTypeSDL?: BackofficeToolTypeSDLMap;
73
+ inputDefaultValue?: string;
74
+ inputId?: string;
75
+ showProjectPicker?: boolean;
76
+ }) => BackofficeToolOperation;
77
+ export declare const buildJsonToolEntity: (config: {
78
+ id: string;
79
+ query: GraphQLTaggedNode;
80
+ title: I18nLabel;
81
+ subtitle?: I18nLabel;
82
+ labels: BackofficeToolBuilderLabels;
83
+ parseJson: ParseToolJson;
84
+ mapVariables: (input: Record<string, unknown>, context: BackofficeToolVariablesContext) => Record<string, unknown>;
85
+ outputKey: string;
86
+ templates?: BackofficeToolTemplateMap;
87
+ inputTypeSDL?: BackofficeToolTypeSDLMap;
88
+ inputDefaultValue?: string;
89
+ showProjectPicker?: boolean;
90
+ }) => BackofficeToolEntityConfig;
91
+ //# sourceMappingURL=operation-builders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-builders.d.ts","sourceRoot":"","sources":["../../../src/tools/operation-builders.ts"],"names":[],"mappings":"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"}