@simplybusiness/services 0.21.5 → 0.22.0
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/CHANGELOG.md +21 -0
- package/dist/cjs/index.js +1198 -17
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/index.js +1193 -4
- package/package.json +7 -6
- package/src/snowplow/event-definitions/intervention.ts +2 -2
- package/dist/cjs/address-lookup/index.js +0 -98
- package/dist/cjs/address-lookup/index.js.map +0 -1
- package/dist/cjs/address-lookup/types.js +0 -7
- package/dist/cjs/address-lookup/types.js.map +0 -1
- package/dist/cjs/airbrake/index.js +0 -45
- package/dist/cjs/airbrake/index.js.map +0 -1
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/mocks/eventDefinitions.js +0 -90
- package/dist/cjs/mocks/eventDefinitions.js.map +0 -1
- package/dist/cjs/mocks/scripts-mock.js +0 -59
- package/dist/cjs/mocks/scripts-mock.js.map +0 -1
- package/dist/cjs/mocks/snowplowBrowserTrackerMock.js +0 -7
- package/dist/cjs/mocks/snowplowBrowserTrackerMock.js.map +0 -1
- package/dist/cjs/snowplow/Snowplow.js +0 -174
- package/dist/cjs/snowplow/Snowplow.js.map +0 -1
- package/dist/cjs/snowplow/SnowplowContext.js +0 -61
- package/dist/cjs/snowplow/SnowplowContext.js.map +0 -1
- package/dist/cjs/snowplow/constants.js +0 -13
- package/dist/cjs/snowplow/constants.js.map +0 -1
- package/dist/cjs/snowplow/contexts.js +0 -68
- package/dist/cjs/snowplow/contexts.js.map +0 -1
- package/dist/cjs/snowplow/event-definitions/base.js +0 -56
- package/dist/cjs/snowplow/event-definitions/base.js.map +0 -1
- package/dist/cjs/snowplow/event-definitions/index.js +0 -65
- package/dist/cjs/snowplow/event-definitions/index.js.map +0 -1
- package/dist/cjs/snowplow/event-definitions/intervention.js +0 -33
- package/dist/cjs/snowplow/event-definitions/intervention.js.map +0 -1
- package/dist/cjs/snowplow/event-definitions/personalised_cover.js +0 -122
- package/dist/cjs/snowplow/event-definitions/personalised_cover.js.map +0 -1
- package/dist/cjs/snowplow/event-definitions/qcp.js +0 -348
- package/dist/cjs/snowplow/event-definitions/qcp.js.map +0 -1
- package/dist/cjs/snowplow/event-definitions/questionnaire.js +0 -115
- package/dist/cjs/snowplow/event-definitions/questionnaire.js.map +0 -1
- package/dist/cjs/snowplow/event-definitions/redaction.js +0 -154
- package/dist/cjs/snowplow/event-definitions/redaction.js.map +0 -1
- package/dist/cjs/snowplow/event-definitions/referral.js +0 -37
- package/dist/cjs/snowplow/event-definitions/referral.js.map +0 -1
- package/dist/cjs/snowplow/getSnowplowConfig.js +0 -16
- package/dist/cjs/snowplow/getSnowplowConfig.js.map +0 -1
- package/dist/cjs/snowplow/index.js +0 -25
- package/dist/cjs/snowplow/index.js.map +0 -1
- package/dist/cjs/snowplow/types.js +0 -6
- package/dist/cjs/snowplow/types.js.map +0 -1
- package/dist/cjs/utils/index.js +0 -21
- package/dist/cjs/utils/index.js.map +0 -1
- package/dist/cjs/utils/isObject.js +0 -15
- package/dist/cjs/utils/isObject.js.map +0 -1
- package/dist/cjs/utils/testUtils.js +0 -43
- package/dist/cjs/utils/testUtils.js.map +0 -1
- package/dist/cjs/utils/text.js +0 -45
- package/dist/cjs/utils/text.js.map +0 -1
- package/dist/esm/address-lookup/index.js +0 -88
- package/dist/esm/address-lookup/index.js.map +0 -1
- package/dist/esm/address-lookup/types.js +0 -5
- package/dist/esm/address-lookup/types.js.map +0 -1
- package/dist/esm/airbrake/index.js +0 -35
- package/dist/esm/airbrake/index.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/mocks/eventDefinitions.js +0 -80
- package/dist/esm/mocks/eventDefinitions.js.map +0 -1
- package/dist/esm/mocks/scripts-mock.js +0 -49
- package/dist/esm/mocks/scripts-mock.js.map +0 -1
- package/dist/esm/mocks/snowplowBrowserTrackerMock.js +0 -6
- package/dist/esm/mocks/snowplowBrowserTrackerMock.js.map +0 -1
- package/dist/esm/snowplow/Snowplow.js +0 -169
- package/dist/esm/snowplow/Snowplow.js.map +0 -1
- package/dist/esm/snowplow/SnowplowContext.js +0 -43
- package/dist/esm/snowplow/SnowplowContext.js.map +0 -1
- package/dist/esm/snowplow/constants.js +0 -3
- package/dist/esm/snowplow/constants.js.map +0 -1
- package/dist/esm/snowplow/contexts.js +0 -47
- package/dist/esm/snowplow/contexts.js.map +0 -1
- package/dist/esm/snowplow/event-definitions/base.js +0 -66
- package/dist/esm/snowplow/event-definitions/base.js.map +0 -1
- package/dist/esm/snowplow/event-definitions/index.js +0 -36
- package/dist/esm/snowplow/event-definitions/index.js.map +0 -1
- package/dist/esm/snowplow/event-definitions/intervention.js +0 -23
- package/dist/esm/snowplow/event-definitions/intervention.js.map +0 -1
- package/dist/esm/snowplow/event-definitions/personalised_cover.js +0 -131
- package/dist/esm/snowplow/event-definitions/personalised_cover.js.map +0 -1
- package/dist/esm/snowplow/event-definitions/qcp.js +0 -339
- package/dist/esm/snowplow/event-definitions/qcp.js.map +0 -1
- package/dist/esm/snowplow/event-definitions/questionnaire.js +0 -106
- package/dist/esm/snowplow/event-definitions/questionnaire.js.map +0 -1
- package/dist/esm/snowplow/event-definitions/redaction.js +0 -144
- package/dist/esm/snowplow/event-definitions/redaction.js.map +0 -1
- package/dist/esm/snowplow/event-definitions/referral.js +0 -28
- package/dist/esm/snowplow/event-definitions/referral.js.map +0 -1
- package/dist/esm/snowplow/getSnowplowConfig.js +0 -7
- package/dist/esm/snowplow/getSnowplowConfig.js.map +0 -1
- package/dist/esm/snowplow/index.js +0 -8
- package/dist/esm/snowplow/index.js.map +0 -1
- package/dist/esm/snowplow/types.js +0 -3
- package/dist/esm/snowplow/types.js.map +0 -1
- package/dist/esm/utils/index.js +0 -4
- package/dist/esm/utils/index.js.map +0 -1
- package/dist/esm/utils/isObject.js +0 -5
- package/dist/esm/utils/isObject.js.map +0 -1
- package/dist/esm/utils/testUtils.js +0 -26
- package/dist/esm/utils/testUtils.js.map +0 -1
- package/dist/esm/utils/text.js +0 -25
- package/dist/esm/utils/text.js.map +0 -1
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
// Referral page events
|
|
2
|
-
export const referralEventDefinitions = [
|
|
3
|
-
{
|
|
4
|
-
name: "nextCoverageClicked",
|
|
5
|
-
type: "structured",
|
|
6
|
-
makePayload: (params)=>{
|
|
7
|
-
const { url } = params;
|
|
8
|
-
const eventName = "post_referral_workers_compensation_continuation_link";
|
|
9
|
-
return {
|
|
10
|
-
category: eventName,
|
|
11
|
-
action: "link_click",
|
|
12
|
-
label: eventName,
|
|
13
|
-
property: url
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
name: "helpChatLinkClicked",
|
|
19
|
-
type: "structured",
|
|
20
|
-
makePayload: ()=>({
|
|
21
|
-
category: "help chat for question",
|
|
22
|
-
action: "help_chat_for_question_clicked",
|
|
23
|
-
property: window.location.href
|
|
24
|
-
})
|
|
25
|
-
}
|
|
26
|
-
];
|
|
27
|
-
|
|
28
|
-
//# sourceMappingURL=referral.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/snowplow/event-definitions/referral.ts"],"sourcesContent":["import { EventDefinition, ParamsType } from \"../types\";\n\n// Referral page events\nexport const referralEventDefinitions: EventDefinition[] = [\n {\n name: \"nextCoverageClicked\",\n type: \"structured\",\n makePayload: params => {\n const { url } = params as ParamsType;\n const eventName = \"post_referral_workers_compensation_continuation_link\";\n\n return {\n category: eventName,\n action: \"link_click\",\n label: eventName,\n property: url,\n };\n },\n },\n {\n name: \"helpChatLinkClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"help chat for question\",\n action: \"help_chat_for_question_clicked\",\n property: window.location.href,\n }),\n },\n];\n"],"names":["referralEventDefinitions","name","type","makePayload","params","url","eventName","category","action","label","property","window","location","href"],"mappings":"AAEA,uBAAuB;AACvB,OAAO,MAAMA,2BAA8C;IACzD;QACEC,MAAM;QACNC,MAAM;QACNC,aAAaC,CAAAA;YACX,MAAM,EAAEC,GAAG,EAAE,GAAGD;YAChB,MAAME,YAAY;YAElB,OAAO;gBACLC,UAAUD;gBACVE,QAAQ;gBACRC,OAAOH;gBACPI,UAAUL;YACZ;QACF;IACF;IACA;QACEJ,MAAM;QACNC,MAAM;QACNC,aAAa,IAAO,CAAA;gBAClBI,UAAU;gBACVC,QAAQ;gBACRE,UAAUC,OAAOC,QAAQ,CAACC,IAAI;YAChC,CAAA;IACF;CACD,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
// Get Snowplow config from page data props
|
|
2
|
-
export const getSnowplowConfig = (pageData)=>{
|
|
3
|
-
var _pageData_scripts_find, _pageData_scripts;
|
|
4
|
-
return (_pageData_scripts = pageData.scripts) === null || _pageData_scripts === void 0 ? void 0 : (_pageData_scripts_find = _pageData_scripts.find(({ metadata })=>metadata.name === "snowplow")) === null || _pageData_scripts_find === void 0 ? void 0 : _pageData_scripts_find.props;
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
//# sourceMappingURL=getSnowplowConfig.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/snowplow/getSnowplowConfig.ts"],"sourcesContent":["import type { TrackingProps, PageDataProps } from \"./types\";\n\n// Get Snowplow config from page data props\nexport const getSnowplowConfig = (\n pageData: PageDataProps,\n): TrackingProps | undefined =>\n pageData.scripts?.find(({ metadata }) => metadata.name === \"snowplow\")\n ?.props as TrackingProps;\n"],"names":["getSnowplowConfig","pageData","scripts","find","metadata","name","props"],"mappings":"AAEA,2CAA2C;AAC3C,OAAO,MAAMA,oBAAoB,CAC/BC;QAEAA,wBAAAA;YAAAA,oBAAAA,SAASC,OAAO,cAAhBD,yCAAAA,yBAAAA,kBAAkBE,IAAI,CAAC,CAAC,EAAEC,QAAQ,EAAE,GAAKA,SAASC,IAAI,KAAK,yBAA3DJ,6CAAAA,uBACIK,KAAK;EAAkB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/snowplow/index.ts"],"sourcesContent":["export * from \"./contexts\";\nexport * from \"./event-definitions\";\nexport * from \"./getSnowplowConfig\";\nexport * from \"./Snowplow\";\nexport * from \"./SnowplowContext\";\nexport * from \"./types\";\n"],"names":[],"mappings":"AAAA,cAAc,aAAa;AAC3B,cAAc,sBAAsB;AACpC,cAAc,sBAAsB;AACpC,cAAc,aAAa;AAC3B,cAAc,oBAAoB;AAClC,cAAc,UAAU"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/snowplow/types.ts"],"sourcesContent":["import {\n EventMethod,\n SelfDescribingJson,\n StructuredEvent,\n} from \"@snowplow/browser-tracker\";\n\ntype BaseConfig = {\n appId: string;\n avalancheCollector: string;\n eventMethod: EventMethod;\n trackPageView: boolean;\n includeGAContext: boolean;\n uid?: string;\n postPath?: string;\n};\n\nexport type EnvConfig = BaseConfig & {\n cookieDomain: Record<string, string>;\n};\n\nexport type TrackingProps = BaseConfig & {\n eventMethod: EventMethod;\n cookieDomain?: string;\n pageViewContext?: ChannelContext;\n};\n\nexport type ChannelContext = {\n schema: string;\n data: Record<string, string | number>;\n};\n\nexport type ChannelContexts = Record<string, ChannelContext>;\n\nexport type ArrayOneOrMore<T> = [T, ...T[]];\n\nexport type ParamsType = Record<string, string> & {\n context: ServerContext;\n};\n\ntype ServerContext = {\n site: string;\n vertical: string;\n primary_detail: string;\n journey_name: string;\n journey_id: string;\n};\n\nexport type LinkType = Record<string, string> & {\n targetUrl: string;\n elementContent: string;\n};\n\nexport type SerialisedEvent = SelfDescribingJson<Record<string, unknown>>;\n\nexport type EventDefinition = {\n name: string;\n type: \"structured\" | \"unstructured\";\n makePayload: (\n params?: Record<string, unknown>,\n ) => StructuredEvent | SerialisedEvent;\n contexts?: string[];\n};\n\nexport interface PageDataProps\n extends Partial<\n Record<\n \"scripts\",\n Array<{\n metadata: { name: string };\n props?: Record<string, unknown>;\n }>\n >\n > {}\n"],"names":[],"mappings":"AA+DA,WASM"}
|
package/dist/esm/utils/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/index.ts"],"sourcesContent":["export * from \"./text\";\nexport * from \"./isObject\";\n"],"names":[],"mappings":"AAAA,cAAc,SAAS;AACvB,cAAc,aAAa"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/isObject.tsx"],"sourcesContent":["export function isObject(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) === Object.prototype\n );\n }\n"],"names":["isObject","value","Array","isArray","Object","getPrototypeOf","prototype"],"mappings":"AAAA,OAAO,SAASA,SAASC,KAAc;IACnC,OACE,OAAOA,UAAU,YACjBA,UAAU,QACV,CAACC,MAAMC,OAAO,CAACF,UACfG,OAAOC,cAAc,CAACJ,WAAWG,OAAOE,SAAS;AAErD"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/* eslint-disable import/no-extraneous-dependencies */ import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { render } from "@testing-library/react";
|
|
3
|
-
import { pageData } from "../mocks/scripts-mock";
|
|
4
|
-
import { SnowplowProvider } from "../snowplow/SnowplowContext";
|
|
5
|
-
import { getSnowplowConfig } from "../snowplow/getSnowplowConfig";
|
|
6
|
-
// Snowplow analytics
|
|
7
|
-
const snowplowProps = getSnowplowConfig(pageData);
|
|
8
|
-
const ProvidersMock = ({ children })=>/*#__PURE__*/ _jsx(SnowplowProvider, {
|
|
9
|
-
scripts: snowplowProps,
|
|
10
|
-
children: children
|
|
11
|
-
});
|
|
12
|
-
export const renderWithProviders = (ui, options)=>render(ui, {
|
|
13
|
-
wrapper: ProvidersMock,
|
|
14
|
-
...options
|
|
15
|
-
});
|
|
16
|
-
// Mocks window.location for url testing
|
|
17
|
-
export const mockLocation = ({ origin = "https://simplybusiness.co.uk", pathname = "" })=>Object.defineProperty(window, "location", {
|
|
18
|
-
get () {
|
|
19
|
-
return {
|
|
20
|
-
origin,
|
|
21
|
-
pathname
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
//# sourceMappingURL=testUtils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/testUtils.tsx"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport { RenderOptions, render } from \"@testing-library/react\";\nimport { ReactElement, ReactNode } from \"react\";\nimport { pageData } from \"../mocks/scripts-mock\";\nimport { SnowplowProvider } from \"../snowplow/SnowplowContext\";\nimport { getSnowplowConfig } from \"../snowplow/getSnowplowConfig\";\nimport { PageDataProps } from \"../snowplow/types\";\n\n// Snowplow analytics\nconst snowplowProps = getSnowplowConfig(pageData as PageDataProps);\n\nconst ProvidersMock = ({ children }: { children: ReactNode }) => (\n <SnowplowProvider scripts={snowplowProps!}>{children}</SnowplowProvider>\n);\n\nexport const renderWithProviders = (\n ui: ReactElement,\n options?: RenderOptions,\n) => render(ui, { wrapper: ProvidersMock, ...options });\n\n// Mocks window.location for url testing\nexport const mockLocation = ({\n origin = \"https://simplybusiness.co.uk\",\n pathname = \"\",\n}: {\n origin?: string;\n pathname?: string;\n}) =>\n Object.defineProperty(window, \"location\", {\n get() {\n return {\n origin,\n pathname,\n };\n },\n });\n"],"names":["render","pageData","SnowplowProvider","getSnowplowConfig","snowplowProps","ProvidersMock","children","scripts","renderWithProviders","ui","options","wrapper","mockLocation","origin","pathname","Object","defineProperty","window","get"],"mappings":"AAAA,oDAAoD;AACpD,SAAwBA,MAAM,QAAQ,yBAAyB;AAE/D,SAASC,QAAQ,QAAQ,wBAAwB;AACjD,SAASC,gBAAgB,QAAQ,8BAA8B;AAC/D,SAASC,iBAAiB,QAAQ,gCAAgC;AAGlE,qBAAqB;AACrB,MAAMC,gBAAgBD,kBAAkBF;AAExC,MAAMI,gBAAgB,CAAC,EAAEC,QAAQ,EAA2B,iBAC1D,KAACJ;QAAiBK,SAASH;kBAAiBE;;AAG9C,OAAO,MAAME,sBAAsB,CACjCC,IACAC,UACGV,OAAOS,IAAI;QAAEE,SAASN;QAAe,GAAGK,OAAO;IAAC,GAAG;AAExD,wCAAwC;AACxC,OAAO,MAAME,eAAe,CAAC,EAC3BC,SAAS,8BAA8B,EACvCC,WAAW,EAAE,EAId,GACCC,OAAOC,cAAc,CAACC,QAAQ,YAAY;QACxCC;YACE,OAAO;gBACLL;gBACAC;YACF;QACF;IACF,GAAG"}
|
package/dist/esm/utils/text.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { isObject } from ".";
|
|
2
|
-
// Deeply converts keys in an object to snake_case
|
|
3
|
-
export const snakeCaseKeys = (object)=>Object.entries(object || {}).reduce((acc, [key, value])=>{
|
|
4
|
-
const newKey = camelToSnakeCase(key);
|
|
5
|
-
if (Array.isArray(value) && value.every(isObject)) {
|
|
6
|
-
return {
|
|
7
|
-
...acc,
|
|
8
|
-
[newKey]: value.map((v)=>snakeCaseKeys(v))
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
if (isObject(value)) {
|
|
12
|
-
return {
|
|
13
|
-
...acc,
|
|
14
|
-
[newKey]: snakeCaseKeys(value)
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
return {
|
|
18
|
-
...acc,
|
|
19
|
-
[newKey]: value
|
|
20
|
-
};
|
|
21
|
-
}, {});
|
|
22
|
-
export const snakeCase = (text = "")=>text.toLowerCase().replace(/ /g, "_");
|
|
23
|
-
export const camelToSnakeCase = (text)=>text.charAt(0).toLowerCase() + text.slice(1).replace(/(\[.*?\])|[A-Z]/g, (match, group)=>group ? match : `_${match.toLowerCase()}`);
|
|
24
|
-
|
|
25
|
-
//# sourceMappingURL=text.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/text.ts"],"sourcesContent":["import { isObject } from \".\";\n\n// Deeply converts keys in an object to snake_case\nexport const snakeCaseKeys = (object: Record<string, unknown>) =>\n Object.entries(object || {}).reduce(\n (acc: Record<string, unknown>, [key, value]): Record<string, unknown> => {\n const newKey = camelToSnakeCase(key);\n\n if (Array.isArray(value) && value.every(isObject)) {\n return {\n ...acc,\n [newKey]: value.map(v => snakeCaseKeys(v)),\n };\n }\n\n if (isObject(value)) {\n return {\n ...acc,\n [newKey]: snakeCaseKeys(value),\n };\n }\n\n return {\n ...acc,\n [newKey]: value,\n };\n },\n {},\n );\n\nexport const snakeCase = (text = \"\"): string =>\n text.toLowerCase().replace(/ /g, \"_\");\n\nexport const camelToSnakeCase = (text: string) =>\n text.charAt(0).toLowerCase() +\n text\n .slice(1)\n .replace(/(\\[.*?\\])|[A-Z]/g, (match, group) =>\n group ? match : `_${match.toLowerCase()}`,\n );\n\n"],"names":["isObject","snakeCaseKeys","object","Object","entries","reduce","acc","key","value","newKey","camelToSnakeCase","Array","isArray","every","map","v","snakeCase","text","toLowerCase","replace","charAt","slice","match","group"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,IAAI;AAE7B,kDAAkD;AAClD,OAAO,MAAMC,gBAAgB,CAACC,SAC5BC,OAAOC,OAAO,CAACF,UAAU,CAAC,GAAGG,MAAM,CACjC,CAACC,KAA8B,CAACC,KAAKC,MAAM;QACzC,MAAMC,SAASC,iBAAiBH;QAEhC,IAAII,MAAMC,OAAO,CAACJ,UAAUA,MAAMK,KAAK,CAACb,WAAW;YACjD,OAAO;gBACL,GAAGM,GAAG;gBACN,CAACG,OAAO,EAAED,MAAMM,GAAG,CAACC,CAAAA,IAAKd,cAAcc;YACzC;QACF;QAEA,IAAIf,SAASQ,QAAQ;YACnB,OAAO;gBACL,GAAGF,GAAG;gBACN,CAACG,OAAO,EAAER,cAAcO;YAC1B;QACF;QAEA,OAAO;YACL,GAAGF,GAAG;YACN,CAACG,OAAO,EAAED;QACZ;IACF,GACA,CAAC,GACD;AAEJ,OAAO,MAAMQ,YAAY,CAACC,OAAO,EAAE,GACjCA,KAAKC,WAAW,GAAGC,OAAO,CAAC,MAAM,KAAK;AAExC,OAAO,MAAMT,mBAAmB,CAACO,OAC/BA,KAAKG,MAAM,CAAC,GAAGF,WAAW,KAC1BD,KACGI,KAAK,CAAC,GACNF,OAAO,CAAC,oBAAoB,CAACG,OAAOC,QACnCA,QAAQD,QAAQ,CAAC,CAAC,EAAEA,MAAMJ,WAAW,IAAI,EACzC"}
|