@crimson-education/browser-logger 2.0.1 → 2.0.2-cognito.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # Crimson Education Browser Logger
2
2
 
3
- An abstract logger and reporting utility for browser environments
3
+ An abstract logger and reporting utility for browser environments.
4
+
5
+ This library contains a number of reporters that is will send analytics to.
6
+
7
+ These must be enabled by calling `Logger.init()`, as seen below.
4
8
 
5
9
  ## Install
6
10
 
@@ -16,15 +20,18 @@ yarn add @crimson-education/browser-logger
16
20
 
17
21
  ## Usage
18
22
 
19
- ### Initialise
23
+ ### Initialize
20
24
 
21
25
  ```ts
22
26
  import * as Logger from '@crimson-education/browser-logger';
23
27
 
24
28
  Logger.init({
25
- service: 'browser-project',
29
+ service: 'test-project',
26
30
  environment: config.environment,
27
31
  version: config.version,
32
+ defaultMetadata: {
33
+ application: 'test',
34
+ },
28
35
 
29
36
  datadog: {
30
37
  applicationId: config.datadogApplicationId,
package/lib/index.d.ts CHANGED
@@ -1,27 +1,27 @@
1
- import { ILogger, Metadata, ReportError, ReportUser, ServiceInfo } from './types';
2
- import { ReporterBreadcrumb, ReporterEvent, TrackedReporterEvent } from './reporters';
3
- import { DatadogReporterConfig } from './reporters/datadogReporter';
4
- import { AmplifyReporterConfig } from './reporters/amplifyReporter';
5
- export * from './types';
6
- export declare let logger: ILogger | null;
7
- export declare type ReporterConfig = ServiceInfo & {
8
- datadog?: DatadogReporterConfig;
9
- amplify?: AmplifyReporterConfig;
10
- gtm?: boolean;
11
- };
12
- export declare function init(config: ReporterConfig): void;
13
- export declare function trackEvent(event: ReporterEvent): void;
14
- export declare function addBreadcrumb(breadcrumb: ReporterBreadcrumb): void;
15
- export declare function addMetadata(metadata: Metadata): void;
16
- export declare function setUser(user: ReportUser | null): void;
17
- export declare function setRouteName(routeName: string): void;
18
- export declare function setPageName(pageName: string): void;
19
- export declare function reportError(error: ReportError, metadata?: Metadata): void;
20
- export declare function recordSession(): void;
21
- export declare function recordSessionStop(): void;
22
- export declare function trackEventSinceLastAction(event: ReporterEvent): void;
23
- export declare function getLastTrackedEvent(): TrackedReporterEvent | null;
24
- export declare function createLogger(name?: string, options?: {
25
- metadata?: Metadata;
26
- }): ILogger;
1
+ import { ILogger, Metadata, ReportError, ReportUser, ServiceInfo } from './types';
2
+ import { ReporterBreadcrumb, ReporterEvent, TrackedReporterEvent } from './reporters';
3
+ import { DatadogReporterConfig } from './reporters/datadogReporter';
4
+ import { AmplifyReporterConfig } from './reporters/amplifyReporter';
5
+ export * from './types';
6
+ export declare let logger: ILogger | null;
7
+ export declare type ReporterConfig = ServiceInfo & {
8
+ datadog?: DatadogReporterConfig;
9
+ amplify?: AmplifyReporterConfig;
10
+ gtm?: boolean;
11
+ };
12
+ export declare function init(config: ReporterConfig): void;
13
+ export declare function trackEvent(event: ReporterEvent): void;
14
+ export declare function addBreadcrumb(breadcrumb: ReporterBreadcrumb): void;
15
+ export declare function addMetadata(metadata: Metadata): void;
16
+ export declare function setUser(user: ReportUser | null): void;
17
+ export declare function setRouteName(routeName: string): void;
18
+ export declare function setPageName(pageName: string): void;
19
+ export declare function reportError(error: ReportError, metadata?: Metadata): void;
20
+ export declare function recordSession(): void;
21
+ export declare function recordSessionStop(): void;
22
+ export declare function trackEventSinceLastAction(event: ReporterEvent): void;
23
+ export declare function getLastTrackedEvent(): TrackedReporterEvent | null;
24
+ export declare function createLogger(name?: string, options?: {
25
+ metadata?: Metadata;
26
+ }): ILogger;
27
27
  //# sourceMappingURL=index.d.ts.map
package/lib/index.js CHANGED
@@ -1,141 +1,141 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.createLogger = exports.getLastTrackedEvent = exports.trackEventSinceLastAction = exports.recordSessionStop = exports.recordSession = exports.reportError = exports.setPageName = exports.setRouteName = exports.setUser = exports.addMetadata = exports.addBreadcrumb = exports.trackEvent = exports.init = exports.logger = void 0;
18
- const utils_1 = require("./utils");
19
- const datadogReporter_1 = require("./reporters/datadogReporter");
20
- const gtmReporter_1 = require("./reporters/gtmReporter");
21
- const amplifyReporter_1 = require("./reporters/amplifyReporter");
22
- __exportStar(require("./types"), exports);
23
- exports.logger = null;
24
- const reporters = [];
25
- let initialized = false;
26
- let ddInitialized = false;
27
- function init(config) {
28
- initialized = true;
29
- if (config.datadog) {
30
- reporters.push((0, datadogReporter_1.datadogReporter)(config, config.datadog));
31
- ddInitialized = true;
32
- }
33
- if (config.amplify) {
34
- reporters.push((0, amplifyReporter_1.amplifyReporter)(config, config.amplify));
35
- }
36
- if (config.gtm) {
37
- reporters.push((0, gtmReporter_1.gtmReporter)());
38
- }
39
- if (config.defaultMetadata) {
40
- for (const reporter of reporters) {
41
- reporter.addMetadata(config.defaultMetadata);
42
- }
43
- }
44
- exports.logger = createLogger('Reporter');
45
- }
46
- exports.init = init;
47
- function trackEvent(event) {
48
- for (const reporter of reporters) {
49
- reporter.trackEvent(event);
50
- }
51
- }
52
- exports.trackEvent = trackEvent;
53
- function addBreadcrumb(breadcrumb) {
54
- for (const reporter of reporters) {
55
- reporter.addBreadcrumb(breadcrumb);
56
- }
57
- }
58
- exports.addBreadcrumb = addBreadcrumb;
59
- function addMetadata(metadata) {
60
- for (const reporter of reporters) {
61
- reporter.addMetadata(metadata);
62
- }
63
- }
64
- exports.addMetadata = addMetadata;
65
- function setUser(user) {
66
- for (const reporter of reporters) {
67
- reporter.setUser(user);
68
- }
69
- }
70
- exports.setUser = setUser;
71
- function setRouteName(routeName) {
72
- for (const reporter of reporters) {
73
- reporter.setRouteName(routeName);
74
- }
75
- }
76
- exports.setRouteName = setRouteName;
77
- function setPageName(pageName) {
78
- for (const reporter of reporters) {
79
- reporter.setPageName(pageName);
80
- }
81
- }
82
- exports.setPageName = setPageName;
83
- function reportError(error, metadata) {
84
- for (const reporter of reporters) {
85
- reporter.reportError(error, metadata);
86
- }
87
- }
88
- exports.reportError = reportError;
89
- function recordSession() {
90
- for (const reporter of reporters) {
91
- reporter.recordSession();
92
- }
93
- }
94
- exports.recordSession = recordSession;
95
- function recordSessionStop() {
96
- for (const reporter of reporters) {
97
- reporter.recordSessionStop();
98
- }
99
- }
100
- exports.recordSessionStop = recordSessionStop;
101
- function trackEventSinceLastAction(event) {
102
- const lastEvent = getLastTrackedEvent();
103
- if (lastEvent) {
104
- const duration = new Date().getTime() - lastEvent.occurred.getTime();
105
- trackEvent({
106
- ...event,
107
- metadata: {
108
- ...event.metadata,
109
- lastEventName: lastEvent.message,
110
- timeSinceLastEvent: duration,
111
- },
112
- });
113
- }
114
- else {
115
- trackEvent(event);
116
- }
117
- sessionStorage.setItem('loggerLastEvent', JSON.stringify({ ...event, occurred: new Date() }));
118
- }
119
- exports.trackEventSinceLastAction = trackEventSinceLastAction;
120
- function getLastTrackedEvent() {
121
- const eventStr = sessionStorage.getItem('loggerLastEvent');
122
- if (!eventStr)
123
- return null;
124
- const event = JSON.parse(eventStr);
125
- event.occurred = new Date(event.occurred);
126
- return event;
127
- }
128
- exports.getLastTrackedEvent = getLastTrackedEvent;
129
- function createLogger(name, options) {
130
- if (!initialized) {
131
- throw new Error('You must call init on BrowserLogger before creating a logger');
132
- }
133
- if (ddInitialized) {
134
- return (0, datadogReporter_1.datadogLogger)(name, options);
135
- }
136
- else {
137
- return (0, utils_1.consoleLogger)(name, options);
138
- }
139
- }
140
- exports.createLogger = createLogger;
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.createLogger = exports.getLastTrackedEvent = exports.trackEventSinceLastAction = exports.recordSessionStop = exports.recordSession = exports.reportError = exports.setPageName = exports.setRouteName = exports.setUser = exports.addMetadata = exports.addBreadcrumb = exports.trackEvent = exports.init = exports.logger = void 0;
18
+ const utils_1 = require("./utils");
19
+ const datadogReporter_1 = require("./reporters/datadogReporter");
20
+ const gtmReporter_1 = require("./reporters/gtmReporter");
21
+ const amplifyReporter_1 = require("./reporters/amplifyReporter");
22
+ __exportStar(require("./types"), exports);
23
+ exports.logger = null;
24
+ const reporters = [];
25
+ let initialized = false;
26
+ let ddInitialized = false;
27
+ function init(config) {
28
+ initialized = true;
29
+ if (config.datadog) {
30
+ reporters.push((0, datadogReporter_1.datadogReporter)(config, config.datadog));
31
+ ddInitialized = true;
32
+ }
33
+ if (config.amplify) {
34
+ reporters.push((0, amplifyReporter_1.amplifyReporter)(config, config.amplify));
35
+ }
36
+ if (config.gtm) {
37
+ reporters.push((0, gtmReporter_1.gtmReporter)());
38
+ }
39
+ if (config.defaultMetadata) {
40
+ for (const reporter of reporters) {
41
+ reporter.addMetadata(config.defaultMetadata);
42
+ }
43
+ }
44
+ exports.logger = createLogger('Reporter');
45
+ }
46
+ exports.init = init;
47
+ function trackEvent(event) {
48
+ for (const reporter of reporters) {
49
+ reporter.trackEvent(event);
50
+ }
51
+ }
52
+ exports.trackEvent = trackEvent;
53
+ function addBreadcrumb(breadcrumb) {
54
+ for (const reporter of reporters) {
55
+ reporter.addBreadcrumb(breadcrumb);
56
+ }
57
+ }
58
+ exports.addBreadcrumb = addBreadcrumb;
59
+ function addMetadata(metadata) {
60
+ for (const reporter of reporters) {
61
+ reporter.addMetadata(metadata);
62
+ }
63
+ }
64
+ exports.addMetadata = addMetadata;
65
+ function setUser(user) {
66
+ for (const reporter of reporters) {
67
+ reporter.setUser(user);
68
+ }
69
+ }
70
+ exports.setUser = setUser;
71
+ function setRouteName(routeName) {
72
+ for (const reporter of reporters) {
73
+ reporter.setRouteName(routeName);
74
+ }
75
+ }
76
+ exports.setRouteName = setRouteName;
77
+ function setPageName(pageName) {
78
+ for (const reporter of reporters) {
79
+ reporter.setPageName(pageName);
80
+ }
81
+ }
82
+ exports.setPageName = setPageName;
83
+ function reportError(error, metadata) {
84
+ for (const reporter of reporters) {
85
+ reporter.reportError(error, metadata);
86
+ }
87
+ }
88
+ exports.reportError = reportError;
89
+ function recordSession() {
90
+ for (const reporter of reporters) {
91
+ reporter.recordSession();
92
+ }
93
+ }
94
+ exports.recordSession = recordSession;
95
+ function recordSessionStop() {
96
+ for (const reporter of reporters) {
97
+ reporter.recordSessionStop();
98
+ }
99
+ }
100
+ exports.recordSessionStop = recordSessionStop;
101
+ function trackEventSinceLastAction(event) {
102
+ const lastEvent = getLastTrackedEvent();
103
+ if (lastEvent) {
104
+ const duration = new Date().getTime() - lastEvent.occurred.getTime();
105
+ trackEvent({
106
+ ...event,
107
+ metadata: {
108
+ ...event.metadata,
109
+ lastEventName: lastEvent.message,
110
+ timeSinceLastEvent: duration,
111
+ },
112
+ });
113
+ }
114
+ else {
115
+ trackEvent(event);
116
+ }
117
+ sessionStorage.setItem('loggerLastEvent', JSON.stringify({ ...event, occurred: new Date() }));
118
+ }
119
+ exports.trackEventSinceLastAction = trackEventSinceLastAction;
120
+ function getLastTrackedEvent() {
121
+ const eventStr = sessionStorage.getItem('loggerLastEvent');
122
+ if (!eventStr)
123
+ return null;
124
+ const event = JSON.parse(eventStr);
125
+ event.occurred = new Date(event.occurred);
126
+ return event;
127
+ }
128
+ exports.getLastTrackedEvent = getLastTrackedEvent;
129
+ function createLogger(name, options) {
130
+ if (!initialized) {
131
+ throw new Error('You must call init on BrowserLogger before creating a logger');
132
+ }
133
+ if (ddInitialized) {
134
+ return (0, datadogReporter_1.datadogLogger)(name, options);
135
+ }
136
+ else {
137
+ return (0, utils_1.consoleLogger)(name, options);
138
+ }
139
+ }
140
+ exports.createLogger = createLogger;
141
141
  //# sourceMappingURL=index.js.map
@@ -1,48 +1,52 @@
1
- import { IReporter } from '.';
2
- import { ServiceInfo } from '../types';
3
- export declare type AmplifyReporterConfig = {
4
- region: string;
5
- identityPoolId: string;
6
- analyticsAppId: string;
7
- autoTrackPageViews?: boolean;
8
- autoTrackEvents?: boolean;
9
- autoTrackSessions?: boolean;
10
- selectorPrefix?: string;
11
- ignoreBreadcrumbCategories?: string[];
12
- buffering?: AmplifyReporterBufferingConfig;
13
- userPoolId?: string;
14
- userPoolWebClientId?: string;
15
- ignoreMetadataPatterns?: RegExp[];
16
- };
17
- /**
18
- * Configuration options for the buffering behavior of Pinpoint's event tracker.
19
- *
20
- * @see https://docs.amplify.aws/lib/analytics/getting-started/q/platform/js/#set-up-existing-analytics-backend
21
- */
22
- declare type AmplifyReporterBufferingConfig = {
23
- /** Number of items to buffer for sending. */
24
- bufferSize?: number;
25
- /** Number of events sent each time Pinpoint flushes. */
26
- flushSize?: number;
27
- /** Interval Pinpoint flushes analytics events. Measured in milliseconds. */
28
- flushInterval?: number;
29
- /** The maximum number of times Pinpoint will retry to send an event. */
30
- resendLimit?: number;
31
- };
32
- export declare function amplifyReporter(info: ServiceInfo, config: AmplifyReporterConfig): IReporter;
33
- declare type AttributeMap = Record<string, string[] | string | null>;
34
- /**
35
- * Pinpoint has strict attribute name and value length limits
36
- */
37
- export declare function asAttributeMap(values: Record<string, any>, groupValues?: boolean, ignorePatterns?: RegExp[]): AttributeMap;
38
- /**
39
- * Pinpoint expects `endpoint.attributes` and `endpoint.userAttributes` to have
40
- * values which are string arrays. This function takes in an object and ensures
41
- * all of its values are of type `string[]` to appease Pinpoint.
42
- */
43
- export declare function buildAttributeMap(values: Record<string, any>, parentKey?: string | undefined, groupValues?: boolean): AttributeMap;
44
- export declare function filterAttributeMap(attributes: AttributeMap | Record<string, string>, ignorePatterns: RegExp[]): {
45
- [k: string]: string | string[] | null;
46
- };
47
- export {};
1
+ import { IReporter } from '.';
2
+ import { ServiceInfo } from '../types';
3
+ export declare type AmplifyReporterConfig = {
4
+ region: string;
5
+ /**
6
+ * The Identity Pool ID to use for reporting, if set to false, Auth.configure is not called.
7
+ * This must be called manually for the reporter to work.
8
+ */
9
+ identityPoolId: string | false;
10
+ analyticsAppId: string;
11
+ autoTrackPageViews?: boolean;
12
+ autoTrackEvents?: boolean;
13
+ autoTrackSessions?: boolean;
14
+ selectorPrefix?: string;
15
+ ignoreBreadcrumbCategories?: string[];
16
+ buffering?: AmplifyReporterBufferingConfig;
17
+ userPoolId?: string;
18
+ userPoolWebClientId?: string;
19
+ ignoreMetadataPatterns?: RegExp[];
20
+ };
21
+ /**
22
+ * Configuration options for the buffering behavior of Pinpoint's event tracker.
23
+ *
24
+ * @see https://docs.amplify.aws/lib/analytics/getting-started/q/platform/js/#set-up-existing-analytics-backend
25
+ */
26
+ declare type AmplifyReporterBufferingConfig = {
27
+ /** Number of items to buffer for sending. */
28
+ bufferSize?: number;
29
+ /** Number of events sent each time Pinpoint flushes. */
30
+ flushSize?: number;
31
+ /** Interval Pinpoint flushes analytics events. Measured in milliseconds. */
32
+ flushInterval?: number;
33
+ /** The maximum number of times Pinpoint will retry to send an event. */
34
+ resendLimit?: number;
35
+ };
36
+ export declare function amplifyReporter(info: ServiceInfo, config: AmplifyReporterConfig): IReporter;
37
+ declare type AttributeMap = Record<string, string[] | string | null>;
38
+ /**
39
+ * Pinpoint has strict attribute name and value length limits
40
+ */
41
+ export declare function asAttributeMap(values: Record<string, any>, groupValues?: boolean, ignorePatterns?: RegExp[]): AttributeMap;
42
+ /**
43
+ * Pinpoint expects `endpoint.attributes` and `endpoint.userAttributes` to have
44
+ * values which are string arrays. This function takes in an object and ensures
45
+ * all of its values are of type `string[]` to appease Pinpoint.
46
+ */
47
+ export declare function buildAttributeMap(values: Record<string, any>, parentKey?: string | undefined, groupValues?: boolean): AttributeMap;
48
+ export declare function filterAttributeMap(attributes: AttributeMap | Record<string, string>, ignorePatterns: RegExp[]): {
49
+ [k: string]: string | string[] | null;
50
+ };
51
+ export {};
48
52
  //# sourceMappingURL=amplifyReporter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"amplifyReporter.d.ts","sourceRoot":"","sources":["../../src/reporters/amplifyReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAqC,MAAM,GAAG,CAAC;AACjE,OAAO,EAAwB,WAAW,EAAE,MAAM,UAAU,CAAC;AAI7D,oBAAY,qBAAqB,GAAG;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0BAA0B,CAAC,EAAE,MAAM,EAAE,CAAC;IACtC,SAAS,CAAC,EAAE,8BAA8B,CAAC;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;CACnC,CAAC;AAEF;;;;GAIG;AACH,aAAK,8BAA8B,GAAG;IACpC,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,GAAG,SAAS,CAyG3F;AAED,aAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;AAE7D;;GAEG;AAEH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,WAAW,UAAO,EAClB,cAAc,GAAE,MAAM,EAAO,GAC5B,YAAY,CAcd;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAE/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,SAAS,GAAE,MAAM,GAAG,SAAqB,EACzC,WAAW,UAAO,GACjB,YAAY,CAsBd;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE;;EAI7G"}
1
+ {"version":3,"file":"amplifyReporter.d.ts","sourceRoot":"","sources":["../../src/reporters/amplifyReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAqC,MAAM,GAAG,CAAC;AACjE,OAAO,EAAwB,WAAW,EAAE,MAAM,UAAU,CAAC;AAI7D,oBAAY,qBAAqB,GAAG;IAClC,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,cAAc,EAAE,MAAM,GAAG,KAAK,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0BAA0B,CAAC,EAAE,MAAM,EAAE,CAAC;IACtC,SAAS,CAAC,EAAE,8BAA8B,CAAC;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;CACnC,CAAC;AAEF;;;;GAIG;AACH,aAAK,8BAA8B,GAAG;IACpC,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,GAAG,SAAS,CA2G3F;AAED,aAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;AAE7D;;GAEG;AAEH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,WAAW,UAAO,EAClB,cAAc,GAAE,MAAM,EAAO,GAC5B,YAAY,CAcd;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAE/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,SAAS,GAAE,MAAM,GAAG,SAAqB,EACzC,WAAW,UAAO,GACjB,YAAY,CAsBd;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE;;EAI7G"}