@flagship.io/react-sdk 2.1.10-beta.0 → 2.1.11-alpha.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/CONTRIBUTING.md +65 -65
- package/LICENSE +201 -201
- package/README.md +108 -108
- package/dist/FlagshipContext.d.ts +99 -0
- package/dist/FlagshipContext.js +312 -0
- package/dist/FlagshipContext.js.map +1 -0
- package/dist/FlagshipErrorBoundary.d.ts +34 -0
- package/dist/FlagshipErrorBoundary.js +95 -0
- package/dist/FlagshipErrorBoundary.js.map +1 -0
- package/dist/FlagshipHooks.d.ts +33 -0
- package/dist/FlagshipHooks.js +198 -0
- package/dist/FlagshipHooks.js.map +1 -0
- package/dist/components/ReactErrorBoundaryContainer/index.d.ts +10 -0
- package/dist/components/ReactErrorBoundaryContainer/index.js +65 -0
- package/dist/components/ReactErrorBoundaryContainer/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/loggerHelper.d.ts +5 -0
- package/dist/lib/loggerHelper.js +14 -0
- package/dist/lib/loggerHelper.js.map +1 -0
- package/dist/lib/utils.d.ts +1 -0
- package/dist/lib/utils.js +7 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/setupTests.d.ts +1 -0
- package/dist/setupTests.js +9 -0
- package/dist/setupTests.js.map +1 -0
- package/dist/tests/mock/apiAnswers/oneModifInMoreThanOneCampaign.d.ts +3 -0
- package/dist/tests/mock/apiAnswers/oneModifInMoreThanOneCampaign.js +51 -0
- package/dist/tests/mock/apiAnswers/oneModifInMoreThanOneCampaign.js.map +1 -0
- package/dist/tests/mock/env.d.ts +5 -0
- package/dist/tests/mock/env.js +8 -0
- package/dist/tests/mock/env.js.map +1 -0
- package/dist/tests/mock/index.d.ts +74 -0
- package/dist/tests/mock/index.js +90 -0
- package/dist/tests/mock/index.js.map +1 -0
- package/package.json +111 -111
package/README.md
CHANGED
|
@@ -1,108 +1,108 @@
|
|
|
1
|
-
<p align="center">
|
|
2
|
-
|
|
3
|
-
<img src="https://mk0abtastybwtpirqi5t.kinstacdn.com/wp-content/uploads/picture-solutions-persona-product-flagship.jpg" width="211" height="182" alt="flagship-react-sdk" />
|
|
4
|
-
|
|
5
|
-
</p>
|
|
6
|
-
|
|
7
|
-
<h3 align="center">Bring your features to life</h3>
|
|
8
|
-
|
|
9
|
-
<div style='display: flex; justify-content: space-around;'>
|
|
10
|
-
|
|
11
|
-
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
12
|
-
|
|
13
|
-
[](#contributors-)
|
|
14
|
-
|
|
15
|
-
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
16
|
-
|
|
17
|
-
[](http://www.apache.org/licenses/LICENSE-2.0)
|
|
18
|
-
|
|
19
|
-
[](https://github.com/abtasty/flagship-react-sdk/releases)
|
|
20
|
-
|
|
21
|
-
</div>
|
|
22
|
-
|
|
23
|
-
## Docs
|
|
24
|
-
|
|
25
|
-
**Visit [https://developers.flagship.io/](https://developers.flagship.io/) to get started with Flagship.**
|
|
26
|
-
|
|
27
|
-
- [Installation & Getting Started](https://developers.flagship.io/docs/sdk/react/v2.0#getting-started)
|
|
28
|
-
- [API Reference](https://developers.flagship.io/docs/sdk/react/v2.0#api-reference)
|
|
29
|
-
- [Flagship Provider Props](https://developers.flagship.io/docs/sdk/react/v2.0#flagshipprovider)
|
|
30
|
-
- Available Hooks
|
|
31
|
-
|
|
32
|
-
- [useFlagship](https://developers.flagship.io/docs/sdk/react/v2.0#useflagship)
|
|
33
|
-
- [useFsModifications](https://developers.flagship.io/docs/sdk/react/v2.0#usefsmodifications)
|
|
34
|
-
- [useFsActivate](https://developers.flagship.io/docs/sdk/react/v2.0#usefsactivate)
|
|
35
|
-
|
|
36
|
-
- [Getting modifications](https://developers.flagship.io/docs/sdk/react/v2.0#getting-modifications)
|
|
37
|
-
- [Campaign synchronization](https://developers.flagship.io/docs/sdk/react/v2.0#campaign-synchronization)
|
|
38
|
-
- [Hit tracking](https://developers.flagship.io/docs/sdk/react/v2.0#hit-tracking)
|
|
39
|
-
- [Release Notes](https://github.com/flagship-io/flagship-react-sdk/blob/master/RELEASENOTES.md)
|
|
40
|
-
- [Contributing](https://github.com/flagship-io/flagship-react-sdk/blob/master/CONTRIBUTING.md)
|
|
41
|
-
|
|
42
|
-
## Examples
|
|
43
|
-
|
|
44
|
-
Following demos illustrate how the SDK is used in practice ☕
|
|
45
|
-
|
|
46
|
-
- With React (for developers):
|
|
47
|
-
|
|
48
|
-
<a href="https://flagship-io.github.io/flagship-react-sdk/">
|
|
49
|
-
<div style="max-width: 850px; margin: 0 auto;">
|
|
50
|
-
|
|
51
|
-

|
|
52
|
-
|
|
53
|
-
</div>
|
|
54
|
-
</a>
|
|
55
|
-
<div style="display: flex; justify-content: space-around; font-size: 24px">
|
|
56
|
-
|
|
57
|
-
[Readme 📖](examples/react-dev-demo/README.md)
|
|
58
|
-
|
|
59
|
-
[Live Demo 🕹](https://flagship-io.github.io/flagship-react-sdk/)
|
|
60
|
-
|
|
61
|
-
</div>
|
|
62
|
-
|
|
63
|
-
- With React, e-commerce app:
|
|
64
|
-
|
|
65
|
-
<a href="https://react-ecommerce-demo.internal.flagship.io/">
|
|
66
|
-
<div style="max-width: 850px; margin: 0 auto;">
|
|
67
|
-
|
|
68
|
-

|
|
69
|
-
|
|
70
|
-
</div>
|
|
71
|
-
</a>
|
|
72
|
-
<div style="display: flex; justify-content: space-around; font-size: 24px">
|
|
73
|
-
|
|
74
|
-
[Readme 📖](examples/react-ecommerce-demo/README.md)
|
|
75
|
-
|
|
76
|
-
[Live Demo 🕹](https://react-ecommerce-demo.internal.flagship.io/)
|
|
77
|
-
|
|
78
|
-
</div>
|
|
79
|
-
|
|
80
|
-
- With React, codeSandbox, using campaign displaying cats / dogs / both:
|
|
81
|
-
|
|
82
|
-
<a href="https://codesandbox.io/s/flagship-sdk-react-example-sg5qu">
|
|
83
|
-
<div style="max-width: 850px; margin: 0 auto;">
|
|
84
|
-
|
|
85
|
-

|
|
86
|
-
|
|
87
|
-
</div>
|
|
88
|
-
</a>
|
|
89
|
-
<div style="display: flex; justify-content: space-around; font-size: 24px">
|
|
90
|
-
|
|
91
|
-
[Live Demo 🕹](https://codesandbox.io/s/flagship-sdk-react-example-sg5qu)
|
|
92
|
-
|
|
93
|
-
</div>
|
|
94
|
-
</a>
|
|
95
|
-
|
|
96
|
-
- With an universal (isomorphic) app, uses React both on server and client side:
|
|
97
|
-
|
|
98
|
-
[Source code 📚](./examples/react-universal-demo/README.md)
|
|
99
|
-
|
|
100
|
-
- With a server side rendering app, uses React on server:
|
|
101
|
-
|
|
102
|
-
[Source code 📚](./examples/react-ssr-demo/README.md)
|
|
103
|
-
|
|
104
|
-
</div>
|
|
105
|
-
|
|
106
|
-
## Licence
|
|
107
|
-
|
|
108
|
-
[Apache License.](https://github.com/flagship-io/flagship-react-sdk/blob/master/LICENSE)
|
|
1
|
+
<p align="center">
|
|
2
|
+
|
|
3
|
+
<img src="https://mk0abtastybwtpirqi5t.kinstacdn.com/wp-content/uploads/picture-solutions-persona-product-flagship.jpg" width="211" height="182" alt="flagship-react-sdk" />
|
|
4
|
+
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<h3 align="center">Bring your features to life</h3>
|
|
8
|
+
|
|
9
|
+
<div style='display: flex; justify-content: space-around;'>
|
|
10
|
+
|
|
11
|
+
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
12
|
+
|
|
13
|
+
[](#contributors-)
|
|
14
|
+
|
|
15
|
+
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
16
|
+
|
|
17
|
+
[](http://www.apache.org/licenses/LICENSE-2.0)
|
|
18
|
+
|
|
19
|
+
[](https://github.com/abtasty/flagship-react-sdk/releases)
|
|
20
|
+
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
## Docs
|
|
24
|
+
|
|
25
|
+
**Visit [https://developers.flagship.io/](https://developers.flagship.io/) to get started with Flagship.**
|
|
26
|
+
|
|
27
|
+
- [Installation & Getting Started](https://developers.flagship.io/docs/sdk/react/v2.0#getting-started)
|
|
28
|
+
- [API Reference](https://developers.flagship.io/docs/sdk/react/v2.0#api-reference)
|
|
29
|
+
- [Flagship Provider Props](https://developers.flagship.io/docs/sdk/react/v2.0#flagshipprovider)
|
|
30
|
+
- Available Hooks
|
|
31
|
+
|
|
32
|
+
- [useFlagship](https://developers.flagship.io/docs/sdk/react/v2.0#useflagship)
|
|
33
|
+
- [useFsModifications](https://developers.flagship.io/docs/sdk/react/v2.0#usefsmodifications)
|
|
34
|
+
- [useFsActivate](https://developers.flagship.io/docs/sdk/react/v2.0#usefsactivate)
|
|
35
|
+
|
|
36
|
+
- [Getting modifications](https://developers.flagship.io/docs/sdk/react/v2.0#getting-modifications)
|
|
37
|
+
- [Campaign synchronization](https://developers.flagship.io/docs/sdk/react/v2.0#campaign-synchronization)
|
|
38
|
+
- [Hit tracking](https://developers.flagship.io/docs/sdk/react/v2.0#hit-tracking)
|
|
39
|
+
- [Release Notes](https://github.com/flagship-io/flagship-react-sdk/blob/master/RELEASENOTES.md)
|
|
40
|
+
- [Contributing](https://github.com/flagship-io/flagship-react-sdk/blob/master/CONTRIBUTING.md)
|
|
41
|
+
|
|
42
|
+
## Examples
|
|
43
|
+
|
|
44
|
+
Following demos illustrate how the SDK is used in practice ☕
|
|
45
|
+
|
|
46
|
+
- With React (for developers):
|
|
47
|
+
|
|
48
|
+
<a href="https://flagship-io.github.io/flagship-react-sdk/">
|
|
49
|
+
<div style="max-width: 850px; margin: 0 auto;">
|
|
50
|
+
|
|
51
|
+

|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
</a>
|
|
55
|
+
<div style="display: flex; justify-content: space-around; font-size: 24px">
|
|
56
|
+
|
|
57
|
+
[Readme 📖](examples/react-dev-demo/README.md)
|
|
58
|
+
|
|
59
|
+
[Live Demo 🕹](https://flagship-io.github.io/flagship-react-sdk/)
|
|
60
|
+
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
- With React, e-commerce app:
|
|
64
|
+
|
|
65
|
+
<a href="https://react-ecommerce-demo.internal.flagship.io/">
|
|
66
|
+
<div style="max-width: 850px; margin: 0 auto;">
|
|
67
|
+
|
|
68
|
+

|
|
69
|
+
|
|
70
|
+
</div>
|
|
71
|
+
</a>
|
|
72
|
+
<div style="display: flex; justify-content: space-around; font-size: 24px">
|
|
73
|
+
|
|
74
|
+
[Readme 📖](examples/react-ecommerce-demo/README.md)
|
|
75
|
+
|
|
76
|
+
[Live Demo 🕹](https://react-ecommerce-demo.internal.flagship.io/)
|
|
77
|
+
|
|
78
|
+
</div>
|
|
79
|
+
|
|
80
|
+
- With React, codeSandbox, using campaign displaying cats / dogs / both:
|
|
81
|
+
|
|
82
|
+
<a href="https://codesandbox.io/s/flagship-sdk-react-example-sg5qu">
|
|
83
|
+
<div style="max-width: 850px; margin: 0 auto;">
|
|
84
|
+
|
|
85
|
+

|
|
86
|
+
|
|
87
|
+
</div>
|
|
88
|
+
</a>
|
|
89
|
+
<div style="display: flex; justify-content: space-around; font-size: 24px">
|
|
90
|
+
|
|
91
|
+
[Live Demo 🕹](https://codesandbox.io/s/flagship-sdk-react-example-sg5qu)
|
|
92
|
+
|
|
93
|
+
</div>
|
|
94
|
+
</a>
|
|
95
|
+
|
|
96
|
+
- With an universal (isomorphic) app, uses React both on server and client side:
|
|
97
|
+
|
|
98
|
+
[Source code 📚](./examples/react-universal-demo/README.md)
|
|
99
|
+
|
|
100
|
+
- With a server side rendering app, uses React on server:
|
|
101
|
+
|
|
102
|
+
[Source code 📚](./examples/react-ssr-demo/README.md)
|
|
103
|
+
|
|
104
|
+
</div>
|
|
105
|
+
|
|
106
|
+
## Licence
|
|
107
|
+
|
|
108
|
+
[Apache License.](https://github.com/flagship-io/flagship-react-sdk/blob/master/LICENSE)
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import React, { SetStateAction, Dispatch } from 'react';
|
|
2
|
+
import { FlagshipSdkConfig, FlagshipVisitorContext, IFlagshipVisitor, SaveCacheArgs, DecisionApiCampaign, PostFlagshipApiCallback, BucketingApiResponse, IFlagship } from '@flagship.io/js-sdk';
|
|
3
|
+
import { FsLogger } from '@flagship.io/js-sdk-logs';
|
|
4
|
+
import { HandleErrorBoundaryDisplay } from './FlagshipErrorBoundary';
|
|
5
|
+
export declare type FsStatus = {
|
|
6
|
+
isLoading: boolean;
|
|
7
|
+
isSdkReady: boolean;
|
|
8
|
+
isVisitorDefined: boolean;
|
|
9
|
+
hasError: boolean;
|
|
10
|
+
lastRefresh: string | null;
|
|
11
|
+
firstInitSuccess: string | null;
|
|
12
|
+
};
|
|
13
|
+
export declare type FsState = {
|
|
14
|
+
fsSdk: IFlagship | null;
|
|
15
|
+
fsVisitor: IFlagshipVisitor | null;
|
|
16
|
+
fsModifications: DecisionApiCampaign[] | null;
|
|
17
|
+
status: FsStatus;
|
|
18
|
+
log: FsLogger | null;
|
|
19
|
+
private: {
|
|
20
|
+
previousFetchedModifications: undefined | DecisionApiCampaign[];
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export interface FlagshipReactSdkConfig extends FlagshipSdkConfig {
|
|
24
|
+
fetchNow?: boolean;
|
|
25
|
+
pollingInterval?: number | null;
|
|
26
|
+
activateNow?: boolean;
|
|
27
|
+
enableConsoleLogs?: boolean;
|
|
28
|
+
decisionMode?: 'API' | 'Bucketing';
|
|
29
|
+
nodeEnv?: string;
|
|
30
|
+
enableClientCache?: boolean;
|
|
31
|
+
flagshipApi?: string;
|
|
32
|
+
apiKey?: string | null;
|
|
33
|
+
initialModifications?: DecisionApiCampaign[] | null;
|
|
34
|
+
initialBucketing?: BucketingApiResponse | null;
|
|
35
|
+
timeout?: number;
|
|
36
|
+
enableErrorLayout?: boolean;
|
|
37
|
+
enableSafeMode?: boolean;
|
|
38
|
+
internal?: {
|
|
39
|
+
react?: {};
|
|
40
|
+
reactNative?: {
|
|
41
|
+
httpCallback?: PostFlagshipApiCallback;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export declare const initState: FsState;
|
|
46
|
+
export declare type BucketingSuccessArgs = {
|
|
47
|
+
status: string;
|
|
48
|
+
payload: BucketingApiResponse;
|
|
49
|
+
};
|
|
50
|
+
export declare type FsContext = {
|
|
51
|
+
hasError: boolean;
|
|
52
|
+
state: FsState;
|
|
53
|
+
setState: Dispatch<SetStateAction<FsState>> | null;
|
|
54
|
+
};
|
|
55
|
+
declare const FlagshipContext: React.Context<FsContext>;
|
|
56
|
+
export declare type FsOnUpdateArguments = {
|
|
57
|
+
fsModifications: DecisionApiCampaign[] | null;
|
|
58
|
+
config: FlagshipReactSdkConfig;
|
|
59
|
+
status: FsStatus;
|
|
60
|
+
};
|
|
61
|
+
export declare type FsOnUpdate = (data: FsOnUpdateArguments, visitor: IFlagshipVisitor | null) => void;
|
|
62
|
+
interface FlagshipProviderProps {
|
|
63
|
+
children: React.ReactNode;
|
|
64
|
+
loadingComponent?: React.ReactNode;
|
|
65
|
+
envId: string;
|
|
66
|
+
visitorData: {
|
|
67
|
+
id: string;
|
|
68
|
+
context?: FlagshipVisitorContext;
|
|
69
|
+
isAuthenticated?: boolean;
|
|
70
|
+
};
|
|
71
|
+
reactNative?: {
|
|
72
|
+
handleErrorDisplay: HandleErrorBoundaryDisplay;
|
|
73
|
+
httpCallback: PostFlagshipApiCallback;
|
|
74
|
+
};
|
|
75
|
+
fetchNow?: boolean;
|
|
76
|
+
decisionMode?: 'API' | 'Bucketing';
|
|
77
|
+
pollingInterval?: number | null;
|
|
78
|
+
activateNow?: boolean;
|
|
79
|
+
enableConsoleLogs?: boolean;
|
|
80
|
+
enableErrorLayout?: boolean;
|
|
81
|
+
enableSafeMode?: boolean;
|
|
82
|
+
enableClientCache?: boolean;
|
|
83
|
+
nodeEnv?: string;
|
|
84
|
+
timeout?: number;
|
|
85
|
+
flagshipApi?: string;
|
|
86
|
+
apiKey?: string | null;
|
|
87
|
+
initialModifications?: DecisionApiCampaign[];
|
|
88
|
+
initialBucketing?: BucketingApiResponse;
|
|
89
|
+
onInitStart?(): void;
|
|
90
|
+
onInitDone?(): void;
|
|
91
|
+
onBucketingSuccess?(data: BucketingSuccessArgs): void;
|
|
92
|
+
onBucketingFail?(error: Error): void;
|
|
93
|
+
onSavingModificationsInCache?(args: SaveCacheArgs): void;
|
|
94
|
+
onUpdate?: FsOnUpdate;
|
|
95
|
+
}
|
|
96
|
+
export declare const FlagshipProvider: React.SFC<FlagshipProviderProps>;
|
|
97
|
+
export declare const FlagshipConsumer: React.Consumer<FsContext>;
|
|
98
|
+
export default FlagshipContext;
|
|
99
|
+
export declare const useFlagshipContext: () => any;
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
26
|
+
if (mod && mod.__esModule) return mod;
|
|
27
|
+
var result = {};
|
|
28
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
29
|
+
__setModuleDefault(result, mod);
|
|
30
|
+
return result;
|
|
31
|
+
};
|
|
32
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
33
|
+
var t = {};
|
|
34
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
35
|
+
t[p] = s[p];
|
|
36
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
37
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
38
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
39
|
+
t[p[i]] = s[p[i]];
|
|
40
|
+
}
|
|
41
|
+
return t;
|
|
42
|
+
};
|
|
43
|
+
var __spreadArrays = (this && this.__spreadArrays) || function () {
|
|
44
|
+
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
|
45
|
+
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
|
46
|
+
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
|
47
|
+
r[k] = a[j];
|
|
48
|
+
return r;
|
|
49
|
+
};
|
|
50
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
51
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
52
|
+
};
|
|
53
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
+
exports.useFlagshipContext = exports.FlagshipConsumer = exports.FlagshipProvider = exports.initState = void 0;
|
|
55
|
+
var react_1 = __importStar(require("react"));
|
|
56
|
+
var js_sdk_1 = __importDefault(require("@flagship.io/js-sdk"));
|
|
57
|
+
var use_ssr_1 = __importDefault(require("use-ssr"));
|
|
58
|
+
var loggerHelper_1 = __importDefault(require("./lib/loggerHelper"));
|
|
59
|
+
var FlagshipErrorBoundary_1 = __importDefault(require("./FlagshipErrorBoundary"));
|
|
60
|
+
var utils_1 = require("./lib/utils");
|
|
61
|
+
exports.initState = {
|
|
62
|
+
fsSdk: null,
|
|
63
|
+
fsVisitor: null,
|
|
64
|
+
log: null,
|
|
65
|
+
fsModifications: null,
|
|
66
|
+
status: {
|
|
67
|
+
isLoading: true,
|
|
68
|
+
isSdkReady: false,
|
|
69
|
+
isVisitorDefined: false,
|
|
70
|
+
firstInitSuccess: null,
|
|
71
|
+
lastRefresh: null,
|
|
72
|
+
hasError: false
|
|
73
|
+
},
|
|
74
|
+
private: {
|
|
75
|
+
previousFetchedModifications: undefined
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
var FlagshipContext = react_1.default.createContext({ state: __assign({}, exports.initState), setState: null, hasError: false });
|
|
79
|
+
exports.FlagshipProvider = function (_a) {
|
|
80
|
+
var children = _a.children, reactNative = _a.reactNative, envId = _a.envId, visitorData = _a.visitorData, loadingComponent = _a.loadingComponent, initialModifications = _a.initialModifications, initialBucketing = _a.initialBucketing, onSavingModificationsInCache = _a.onSavingModificationsInCache, onInitStart = _a.onInitStart, onInitDone = _a.onInitDone, onBucketingSuccess = _a.onBucketingSuccess, onBucketingFail = _a.onBucketingFail, onUpdate = _a.onUpdate, timeout = _a.timeout, fetchNow = _a.fetchNow, activateNow = _a.activateNow, enableConsoleLogs = _a.enableConsoleLogs, enableErrorLayout = _a.enableErrorLayout, enableSafeMode = _a.enableSafeMode, enableClientCache = _a.enableClientCache, nodeEnv = _a.nodeEnv, flagshipApi = _a.flagshipApi, apiKey = _a.apiKey, decisionMode = _a.decisionMode, pollingInterval = _a.pollingInterval;
|
|
81
|
+
var id = visitorData === null || visitorData === void 0 ? void 0 : visitorData.id;
|
|
82
|
+
var context = visitorData === null || visitorData === void 0 ? void 0 : visitorData.context;
|
|
83
|
+
var isAuthenticated = (visitorData === null || visitorData === void 0 ? void 0 : visitorData.isAuthenticated) || false;
|
|
84
|
+
var previousIsAuthenticated = react_1.useRef(isAuthenticated);
|
|
85
|
+
var isFirstRun = react_1.useRef(true);
|
|
86
|
+
var _b = use_ssr_1.default(), isBrowser = _b.isBrowser, isServer = _b.isServer, isNative = _b.isNative;
|
|
87
|
+
var isJest = utils_1.areWeTestingWithJest();
|
|
88
|
+
var extractConfiguration = function () { return ({
|
|
89
|
+
fetchNow: typeof fetchNow !== 'boolean' ? true : fetchNow,
|
|
90
|
+
decisionMode: decisionMode || 'API',
|
|
91
|
+
pollingInterval: pollingInterval || null,
|
|
92
|
+
activateNow: typeof activateNow !== 'boolean' ? false : activateNow,
|
|
93
|
+
timeout: typeof timeout !== 'number' ? undefined : timeout,
|
|
94
|
+
enableConsoleLogs: typeof enableConsoleLogs !== 'boolean' ? false : enableConsoleLogs,
|
|
95
|
+
enableErrorLayout: typeof enableErrorLayout !== 'boolean' ? false : enableErrorLayout,
|
|
96
|
+
enableSafeMode: typeof enableSafeMode !== 'boolean' ? false : enableSafeMode,
|
|
97
|
+
enableClientCache: typeof enableClientCache !== 'boolean' ? true : enableClientCache,
|
|
98
|
+
nodeEnv: nodeEnv || 'production',
|
|
99
|
+
initialBucketing: initialBucketing || null,
|
|
100
|
+
flagshipApi: flagshipApi,
|
|
101
|
+
apiKey: apiKey
|
|
102
|
+
}); };
|
|
103
|
+
var configuration = extractConfiguration();
|
|
104
|
+
var _c = react_1.useState(__assign(__assign({}, exports.initState), { log: loggerHelper_1.default.getLogger(configuration), config: configuration, private: __assign(__assign({}, exports.initState.private), { previousFetchedModifications: initialModifications }) })), state = _c[0], setState = _c[1];
|
|
105
|
+
var _d = react_1.useState({ hasError: false, error: null }), errorData = _d[0], setError = _d[1];
|
|
106
|
+
var handleError = function (error) {
|
|
107
|
+
state.log.fatal("error: " + error.stack);
|
|
108
|
+
setError({ error: error, hasError: !!error });
|
|
109
|
+
};
|
|
110
|
+
var _e = state.status, isLoading = _e.isLoading, isVisitorDefined = _e.isVisitorDefined, firstInitSuccess = _e.firstInitSuccess, lastRefresh = _e.lastRefresh, fsVisitor = state.fsVisitor;
|
|
111
|
+
var tryCatchCallback = function (callback) {
|
|
112
|
+
try {
|
|
113
|
+
callback();
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
state.log.fatal("error: " + error.stack);
|
|
117
|
+
setError({ error: error, hasError: true });
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
var computeConfig = function () {
|
|
121
|
+
var sdkConfig = {
|
|
122
|
+
internal: {
|
|
123
|
+
react: {},
|
|
124
|
+
reactNative: {
|
|
125
|
+
httpCallback: reactNative === null || reactNative === void 0 ? void 0 : reactNative.httpCallback
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
if (Array.isArray(state.private.previousFetchedModifications)) {
|
|
130
|
+
return __assign(__assign(__assign({}, configuration), sdkConfig), { initialModifications: __spreadArrays(state.private.previousFetchedModifications) });
|
|
131
|
+
}
|
|
132
|
+
if (state.private.previousFetchedModifications) {
|
|
133
|
+
state.log.warn('initialModifications props is not correctly set and has been ignored, please check the documentation.');
|
|
134
|
+
}
|
|
135
|
+
return __assign(__assign({}, configuration), sdkConfig);
|
|
136
|
+
};
|
|
137
|
+
var computedConfig = computeConfig();
|
|
138
|
+
var handleErrorDisplay = reactNative === null || reactNative === void 0 ? void 0 : reactNative.handleErrorDisplay;
|
|
139
|
+
var initSdk = function (previousBucketing) {
|
|
140
|
+
var theApiKey = computedConfig.apiKey, otherComputedConfig = __rest(computedConfig, ["apiKey"]);
|
|
141
|
+
return js_sdk_1.default.start(envId, theApiKey, __assign(__assign({}, otherComputedConfig), { fetchNow: isServer ? false : otherComputedConfig.fetchNow, initialBucketing: computedConfig.initialBucketing === null ? previousBucketing : computedConfig.initialBucketing }));
|
|
142
|
+
};
|
|
143
|
+
var checkIfVisitorShouldBeNew = function (fsSdk) {
|
|
144
|
+
var _a, _b, _c;
|
|
145
|
+
if ((state === null || state === void 0 ? void 0 : state.fsVisitor) && state.fsVisitor.envId === fsSdk.envId && state.fsVisitor.id === id) {
|
|
146
|
+
if (state.fsVisitor.context !== context) {
|
|
147
|
+
state.log.debug("update visitor after re-render, but context is different (old vs new): vContext (" + JSON.stringify((_a = state.fsVisitor) === null || _a === void 0 ? void 0 : _a.context) + " vs " + JSON.stringify(context) + ")");
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
state.log.debug("update visitor after re-render");
|
|
151
|
+
}
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
if (state === null || state === void 0 ? void 0 : state.fsVisitor) {
|
|
155
|
+
state.log.debug("unable to update visitor after re-render because of strong update (old vs new): envId (" + ((_b = state.fsVisitor) === null || _b === void 0 ? void 0 : _b.envId) + " vs " + fsSdk.envId + ") or vId (" + ((_c = state.fsVisitor) === null || _c === void 0 ? void 0 : _c.id) + " vs " + id + ")");
|
|
156
|
+
}
|
|
157
|
+
return true;
|
|
158
|
+
};
|
|
159
|
+
var postInitSdkForClientSide = function (fsSdk) {
|
|
160
|
+
fsSdk.eventEmitter.on('bucketPollingSuccess', function (_a) {
|
|
161
|
+
var status = _a.status, payload = _a.payload;
|
|
162
|
+
if (onBucketingSuccess) {
|
|
163
|
+
onBucketingSuccess({ status: status.toString(), payload: payload });
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
fsSdk.eventEmitter.on('bucketPollingFailed', function (error) {
|
|
167
|
+
if (onBucketingFail) {
|
|
168
|
+
onBucketingFail(error);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
if (onInitStart && !isVisitorDefined) {
|
|
172
|
+
tryCatchCallback(onInitStart);
|
|
173
|
+
}
|
|
174
|
+
var newVisitorDetected = checkIfVisitorShouldBeNew(fsSdk);
|
|
175
|
+
var visitorInstance = newVisitorDetected
|
|
176
|
+
? fsSdk.newVisitor(id, context)
|
|
177
|
+
: fsSdk.updateVisitor(state.fsVisitor, { context: context });
|
|
178
|
+
setState(function (s) { return (__assign(__assign({}, s), { status: __assign(__assign({}, s.status), { isVisitorDefined: !!visitorInstance, isLoading: true }), fsVisitor: visitorInstance, fsModifications: visitorInstance.fetchedModifications || null, fsSdk: fsSdk })); });
|
|
179
|
+
visitorInstance.on('ready', function (readyData) {
|
|
180
|
+
var withError = readyData.withError;
|
|
181
|
+
setState(function (s) { return (__assign(__assign({}, s), { status: __assign(__assign({}, s.status), { isVisitorDefined: !!visitorInstance, isLoading: false, lastRefresh: new Date().toISOString(), hasError: withError, firstInitSuccess: (!newVisitorDetected && s.status.firstInitSuccess) || new Date().toISOString() }), fsVisitor: visitorInstance, fsSdk: fsSdk, fsModifications: visitorInstance.fetchedModifications || null, private: {
|
|
182
|
+
previousFetchedModifications: visitorInstance.fetchedModifications || undefined
|
|
183
|
+
} })); });
|
|
184
|
+
});
|
|
185
|
+
visitorInstance.on('saveCache', function (args) {
|
|
186
|
+
if (onSavingModificationsInCache) {
|
|
187
|
+
tryCatchCallback(function () { return onSavingModificationsInCache(args); });
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
};
|
|
191
|
+
if (!isJest && isServer && !isVisitorDefined) {
|
|
192
|
+
state.log.debug("SDK run on server side detected.");
|
|
193
|
+
var fsSdk_1 = initSdk();
|
|
194
|
+
var visitorInstance_1 = fsSdk_1.newVisitor(id, context);
|
|
195
|
+
setState(function (s) { return (__assign(__assign({}, s), { status: __assign(__assign({}, s.status), { isVisitorDefined: !!visitorInstance_1 }), fsVisitor: visitorInstance_1, fsModifications: visitorInstance_1.fetchedModifications || null, fsSdk: fsSdk_1 })); });
|
|
196
|
+
}
|
|
197
|
+
else if ((isJest || isNative || isBrowser) && !isVisitorDefined && firstInitSuccess === null) {
|
|
198
|
+
var fsSdk = initSdk();
|
|
199
|
+
postInitSdkForClientSide(fsSdk);
|
|
200
|
+
}
|
|
201
|
+
var updateVisitorIfIdentityChanged = function () {
|
|
202
|
+
var isBeingAuthenticated = previousIsAuthenticated.current === false && isAuthenticated === true;
|
|
203
|
+
var isBeingAnonymous = previousIsAuthenticated.current === true && isAuthenticated === false;
|
|
204
|
+
var hasVisitorIdentityChange = isBeingAnonymous || isBeingAuthenticated;
|
|
205
|
+
var updateVisitorAndStatus = function (fsV, isLoadingValue) {
|
|
206
|
+
setState(function (s) { return (__assign(__assign({}, s), { fsModifications: fsV.fetchedModifications, status: __assign(__assign({}, s.status), { isLoading: isLoadingValue }), fsVisitor: fsV })); });
|
|
207
|
+
};
|
|
208
|
+
if (!fsVisitor) {
|
|
209
|
+
handleError(new Error('Trying to change the anonymous status of visitor that has not been initialized or does not exist.'));
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
if (hasVisitorIdentityChange) {
|
|
213
|
+
fsVisitor.updateContext(context || {});
|
|
214
|
+
}
|
|
215
|
+
if (isBeingAnonymous) {
|
|
216
|
+
if (!fsVisitor.anonymousId) {
|
|
217
|
+
fsVisitor.anonymousId = id;
|
|
218
|
+
}
|
|
219
|
+
fsVisitor.unauthenticate(id).then(function () { return updateVisitorAndStatus(fsVisitor, false); });
|
|
220
|
+
}
|
|
221
|
+
else if (isBeingAuthenticated) {
|
|
222
|
+
fsVisitor.authenticate(id).then(function () { return updateVisitorAndStatus(fsVisitor, false); });
|
|
223
|
+
}
|
|
224
|
+
if (hasVisitorIdentityChange) {
|
|
225
|
+
updateVisitorAndStatus(fsVisitor, true);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
previousIsAuthenticated.current = isAuthenticated;
|
|
229
|
+
return hasVisitorIdentityChange;
|
|
230
|
+
};
|
|
231
|
+
react_1.useEffect(function () {
|
|
232
|
+
var _a;
|
|
233
|
+
if (isFirstRun.current) {
|
|
234
|
+
isFirstRun.current = false;
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
if (!id && !errorData.hasError) {
|
|
238
|
+
var errorMsg = 'No visitor id found. Make sure you\'ve set in prop something like this: visitorData={{id: "MY_VISITOR_ID_VALUE"}} inside the FlagshipProvider component.';
|
|
239
|
+
handleError(new Error(errorMsg));
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
if (isServer) {
|
|
243
|
+
state.log.warn("useEffect triggered in a server environment, SDK stopped.");
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
var previousBucketing = null;
|
|
247
|
+
var isVisitorIdentityChanged = updateVisitorIfIdentityChanged();
|
|
248
|
+
if (isVisitorIdentityChanged) {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
if (state.fsSdk && state.fsSdk.config.decisionMode === 'Bucketing') {
|
|
252
|
+
state.fsSdk.stopBucketingPolling();
|
|
253
|
+
state.log.info('Bucketing automatically stopped because a setting props from FlagshipProvider has changed. Bucketing will restart automatically if decisionMode is still "Bucketing"');
|
|
254
|
+
state.fsSdk.eventEmitter.removeAllListeners();
|
|
255
|
+
previousBucketing = ((_a = state.fsSdk.bucket) === null || _a === void 0 ? void 0 : _a.data) || null;
|
|
256
|
+
}
|
|
257
|
+
var fsSdk = initSdk(previousBucketing);
|
|
258
|
+
postInitSdkForClientSide(fsSdk);
|
|
259
|
+
}, [envId, id, isAuthenticated, JSON.stringify(configuration) + JSON.stringify(context)]);
|
|
260
|
+
react_1.useEffect(function () {
|
|
261
|
+
var isSdkReady = state.status.isVisitorDefined && state.status.firstInitSuccess !== null;
|
|
262
|
+
if (onUpdate) {
|
|
263
|
+
tryCatchCallback(function () {
|
|
264
|
+
var _a;
|
|
265
|
+
onUpdate({
|
|
266
|
+
status: __assign(__assign({}, state.status), { isSdkReady: isSdkReady }),
|
|
267
|
+
fsModifications: state.fsModifications,
|
|
268
|
+
config: __assign(__assign({}, state.config), (_a = state.fsVisitor) === null || _a === void 0 ? void 0 : _a.config)
|
|
269
|
+
}, state.fsVisitor);
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
}, [state === null || state === void 0 ? void 0 : state.config, state === null || state === void 0 ? void 0 : state.fsModifications, state.status]);
|
|
273
|
+
react_1.useEffect(function () {
|
|
274
|
+
if (onInitDone && !!firstInitSuccess && firstInitSuccess === lastRefresh && !isLoading) {
|
|
275
|
+
tryCatchCallback(onInitDone);
|
|
276
|
+
}
|
|
277
|
+
}, [state === null || state === void 0 ? void 0 : state.status]);
|
|
278
|
+
var handleDisplay = function () {
|
|
279
|
+
var isFirstInit = !fsVisitor || !firstInitSuccess;
|
|
280
|
+
if (isLoading && loadingComponent && isFirstInit && fetchNow) {
|
|
281
|
+
return react_1.default.createElement(react_1.default.Fragment, null, loadingComponent);
|
|
282
|
+
}
|
|
283
|
+
return react_1.default.createElement(react_1.default.Fragment, null, children);
|
|
284
|
+
};
|
|
285
|
+
return (react_1.default.createElement(FlagshipContext.Provider, { value: { state: state, setState: setState, hasError: errorData.hasError } }, enableSafeMode ? (react_1.default.createElement(FlagshipErrorBoundary_1.default, { customerChildren: children, onError: handleError, error: errorData.error, sdkSettings: configuration, handleDisplay: handleErrorDisplay, log: state.log }, handleDisplay())) : (handleDisplay())));
|
|
286
|
+
};
|
|
287
|
+
exports.FlagshipProvider.defaultProps = {
|
|
288
|
+
loadingComponent: undefined,
|
|
289
|
+
fetchNow: true,
|
|
290
|
+
activateNow: false,
|
|
291
|
+
decisionMode: 'API',
|
|
292
|
+
pollingInterval: undefined,
|
|
293
|
+
enableConsoleLogs: false,
|
|
294
|
+
enableErrorLayout: false,
|
|
295
|
+
enableSafeMode: false,
|
|
296
|
+
nodeEnv: 'production',
|
|
297
|
+
flagshipApi: undefined,
|
|
298
|
+
apiKey: undefined,
|
|
299
|
+
initialModifications: undefined,
|
|
300
|
+
onInitStart: function () {
|
|
301
|
+
},
|
|
302
|
+
onInitDone: function () {
|
|
303
|
+
},
|
|
304
|
+
onSavingModificationsInCache: function () {
|
|
305
|
+
},
|
|
306
|
+
onUpdate: function () {
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
exports.FlagshipConsumer = FlagshipContext.Consumer;
|
|
310
|
+
exports.default = FlagshipContext;
|
|
311
|
+
exports.useFlagshipContext = function () { return react_1.useContext(FlagshipContext); };
|
|
312
|
+
//# sourceMappingURL=FlagshipContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlagshipContext.js","sourceRoot":"","sources":["../src/FlagshipContext.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAiG;AAEjG,+DAU6B;AAC7B,oDAA6B;AAE7B,oEAA8C;AAE9C,kFAA4F;AAC5F,qCAAmD;AA6CtC,QAAA,SAAS,GAAY;IAC9B,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI;IACf,GAAG,EAAE,IAAI;IACT,eAAe,EAAE,IAAI;IACrB,MAAM,EAAE;QACJ,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,KAAK;QACjB,gBAAgB,EAAE,KAAK;QACvB,gBAAgB,EAAE,IAAI;QACtB,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,KAAK;KAClB;IACD,OAAO,EAAE;QACL,4BAA4B,EAAE,SAAS;KAC1C;CACJ,CAAC;AASF,IAAM,eAAe,GAAG,eAAK,CAAC,aAAa,CAAY,EAAE,KAAK,eAAO,iBAAS,CAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AA6CxG,QAAA,gBAAgB,GAAqC,UAAC,EA0B3C;QAzBpB,QAAQ,cAAA,EACR,WAAW,iBAAA,EACX,KAAK,WAAA,EACL,WAAW,iBAAA,EACX,gBAAgB,sBAAA,EAChB,oBAAoB,0BAAA,EACpB,gBAAgB,sBAAA,EAChB,4BAA4B,kCAAA,EAC5B,WAAW,iBAAA,EACX,UAAU,gBAAA,EACV,kBAAkB,wBAAA,EAClB,eAAe,qBAAA,EACf,QAAQ,cAAA,EACR,OAAO,aAAA,EACP,QAAQ,cAAA,EACR,WAAW,iBAAA,EACX,iBAAiB,uBAAA,EACjB,iBAAiB,uBAAA,EACjB,cAAc,oBAAA,EACd,iBAAiB,uBAAA,EACjB,OAAO,aAAA,EACP,WAAW,iBAAA,EACX,MAAM,YAAA,EACN,YAAY,kBAAA,EACZ,eAAe,qBAAA;IAEf,IAAM,EAAE,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,EAAE,CAAC;IAC3B,IAAM,OAAO,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,CAAC;IACrC,IAAM,eAAe,GAAG,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,eAAe,KAAI,KAAK,CAAC;IAC9D,IAAM,uBAAuB,GAAG,cAAM,CAAU,eAAe,CAAC,CAAC;IACjE,IAAM,UAAU,GAAG,cAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAA,KAAoC,iBAAM,EAAE,EAA1C,SAAS,eAAA,EAAE,QAAQ,cAAA,EAAE,QAAQ,cAAa,CAAC;IACnD,IAAM,MAAM,GAAG,4BAAoB,EAAE,CAAC;IACtC,IAAM,oBAAoB,GAAG,cAA8B,OAAA,CAAC;QACxD,QAAQ,EAAE,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;QACzD,YAAY,EAAE,YAAY,IAAI,KAAK;QACnC,eAAe,EAAE,eAAe,IAAI,IAAI;QACxC,WAAW,EAAE,OAAO,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW;QACnE,OAAO,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;QAC1D,iBAAiB,EAAE,OAAO,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB;QACrF,iBAAiB,EAAE,OAAO,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB;QACrF,cAAc,EAAE,OAAO,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc;QAC5E,iBAAiB,EAAE,OAAO,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB;QACpF,OAAO,EAAE,OAAO,IAAI,YAAY;QAChC,gBAAgB,EAAE,gBAAgB,IAAI,IAAI;QAC1C,WAAW,aAAA;QACX,MAAM,QAAA;KACT,CAAC,EAdyD,CAczD,CAAC;IACH,IAAM,aAAa,GAAG,oBAAoB,EAAE,CAAC;IACvC,IAAA,KAAoB,gBAAQ,uBAC3B,iBAAS,KACZ,GAAG,EAAE,sBAAY,CAAC,SAAS,CAAC,aAAgE,CAAC,EAC7F,MAAM,EAAE,aAAa,EACrB,OAAO,wBACA,iBAAS,CAAC,OAAO,KACpB,4BAA4B,EAAE,oBAAoB,OAExD,EARK,KAAK,QAAA,EAAE,QAAQ,QAQpB,CAAC;IACG,IAAA,KAAwB,gBAAQ,CAGnC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAH7B,SAAS,QAAA,EAAE,QAAQ,QAGU,CAAC;IAErC,IAAM,WAAW,GAAG,UAAC,KAAY;QAC7B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,YAAU,KAAK,CAAC,KAAO,CAAC,CAAC;QACzC,QAAQ,CAAC,EAAE,KAAK,OAAA,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEE,IAAA,KAEA,KAAK,OAFiE,EAA5D,SAAS,eAAA,EAAE,gBAAgB,sBAAA,EAAE,gBAAgB,sBAAA,EAAE,WAAW,iBAAA,EACpE,SAAS,GACT,KAAK,UADI,CACH;IAEV,IAAM,gBAAgB,GAAG,UAAC,QAAa;QACnC,IAAI;YACA,QAAQ,EAAE,CAAC;SACd;QAAC,OAAO,KAAK,EAAE;YACZ,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,YAAU,KAAK,CAAC,KAAO,CAAC,CAAC;YACzC,QAAQ,CAAC,EAAE,KAAK,OAAA,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;SACvC;IACL,CAAC,CAAC;IACF,IAAM,aAAa,GAAG;QAClB,IAAM,SAAS,GAAG;YACd,QAAQ,EAAE;gBACN,KAAK,EAAE,EAAE;gBACT,WAAW,EAAE;oBACT,YAAY,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,YAAY;iBAC1C;aACJ;SACJ,CAAC;QACF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAC,EAAE;YAC3D,sCACO,aAAa,GACb,SAAS,KACZ,oBAAoB,iBAAM,KAAK,CAAC,OAAO,CAAC,4BAA4B,KACtE;SACL;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,4BAA4B,EAAE;YAC5C,KAAK,CAAC,GAAG,CAAC,IAAI,CACV,uGAAuG,CAC1G,CAAC;SACL;QACD,6BAAY,aAAa,GAAK,SAAS,EAAG;IAC9C,CAAC,CAAC;IACF,IAAM,cAAc,GAAsB,aAAa,EAAE,CAAC;IAE1D,IAAM,kBAAkB,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,kBAAkB,CAAC;IAE3D,IAAM,OAAO,GAAG,UAAC,iBAA2D;QAChE,IAAQ,SAAS,GAA6B,cAAc,OAA3C,EAAK,mBAAmB,UAAK,cAAc,EAA9D,UAA6C,CAAF,CAAoB;QACrE,OAAO,gBAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,wBAC/B,mBAAmB,KACtB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,EACzD,gBAAgB,EACZ,cAAc,CAAC,gBAAgB,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,IACpG,CAAC;IACP,CAAC,CAAC;IAEF,IAAM,yBAAyB,GAAG,UAAC,KAAgB;;QAC/C,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,KAAI,KAAK,CAAC,SAAS,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE;YACxF,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,KAAK,OAAO,EAAE;gBACrC,KAAK,CAAC,GAAG,CAAC,KAAK,CACX,sFAAoF,IAAI,CAAC,SAAS,OAC9F,KAAK,CAAC,SAAS,0CAAE,OAAO,CAC3B,YAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAG,CACrC,CAAC;aACL;iBAAM;gBACH,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;aACrD;YACD,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,EAAE;YAClB,KAAK,CAAC,GAAG,CAAC,KAAK,CACX,mGAA0F,KAAK,CAAC,SAAS,0CAAE,KAAK,aAAO,KAAK,CAAC,KAAK,yBAAa,KAAK,CAAC,SAAS,0CAAE,EAAE,aAAO,EAAE,MAAG,CACjL,CAAC;SACL;QACD,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEF,IAAM,wBAAwB,GAAG,UAAC,KAAgB;QAC9C,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,sBAAsB,EAAE,UAAC,EAAyC;gBAAvC,MAAM,YAAA,EAAE,OAAO,aAAA;YAC5D,IAAI,kBAAkB,EAAE;gBACpB,kBAAkB,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,OAAO,SAAA,EAAE,CAAC,CAAC;aAC9D;QACL,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,qBAAqB,EAAE,UAAC,KAAY;YACtD,IAAI,eAAe,EAAE;gBACjB,eAAe,CAAC,KAAK,CAAC,CAAC;aAC1B;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,WAAW,IAAI,CAAC,gBAAgB,EAAE;YAClC,gBAAgB,CAAC,WAAW,CAAC,CAAC;SACjC;QAGD,IAAM,kBAAkB,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAE5D,IAAM,eAAe,GAAG,kBAAkB;YACtC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,OAAiC,CAAC;YACzD,CAAC,CAAE,KAAa,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,OAAO,SAAA,EAAE,CAAC,CAAC;QACjE,QAAQ,CAAC,UAAC,CAAC,IAAK,OAAA,uBACT,CAAC,KACJ,MAAM,wBACC,CAAC,CAAC,MAAM,KACX,gBAAgB,EAAE,CAAC,CAAC,eAAe,EACnC,SAAS,EAAE,IAAI,KAEnB,SAAS,EAAE,eAAe,EAC1B,eAAe,EAAE,eAAe,CAAC,oBAAoB,IAAI,IAAI,EAC7D,KAAK,OAAA,IACP,EAVc,CAUd,CAAC,CAAC;QACJ,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,SAA8B;YAC/C,IAAA,SAAS,GAAK,SAAS,UAAd,CAAe;YAChC,QAAQ,CAAC,UAAC,CAAC,IAAK,OAAA,uBACT,CAAC,KACJ,MAAM,wBACC,CAAC,CAAC,MAAM,KACX,gBAAgB,EAAE,CAAC,CAAC,eAAe,EACnC,SAAS,EAAE,KAAK,EAChB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EACrC,QAAQ,EAAE,SAAS,EACnB,gBAAgB,EAAE,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAEpG,SAAS,EAAE,eAAe,EAC1B,KAAK,OAAA,EACL,eAAe,EAAE,eAAe,CAAC,oBAAoB,IAAI,IAAI,EAC7D,OAAO,EAAE;oBACL,4BAA4B,EAAE,eAAe,CAAC,oBAAoB,IAAI,SAAS;iBAClF,IACH,EAhBc,CAgBd,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;QACH,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,UAAC,IAAmB;YAChD,IAAI,4BAA4B,EAAE;gBAC9B,gBAAgB,CAAC,cAAM,OAAA,4BAA4B,CAAC,IAAI,CAAC,EAAlC,CAAkC,CAAC,CAAC;aAC9D;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAGF,IAAI,CAAC,MAAM,IAAI,QAAQ,IAAI,CAAC,gBAAgB,EAAE;QAC1C,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACpD,IAAM,OAAK,GAAG,OAAO,EAAE,CAAC;QACxB,IAAM,iBAAe,GAAG,OAAK,CAAC,UAAU,CAAC,EAAE,EAAE,OAAiC,CAAC,CAAC;QAChF,QAAQ,CAAC,UAAC,CAAC,IAAK,OAAA,uBACT,CAAC,KACJ,MAAM,wBACC,CAAC,CAAC,MAAM,KACX,gBAAgB,EAAE,CAAC,CAAC,iBAAe,KAEvC,SAAS,EAAE,iBAAe,EAC1B,eAAe,EAAE,iBAAe,CAAC,oBAAoB,IAAI,IAAI,EAC7D,KAAK,SAAA,IACP,EATc,CASd,CAAC,CAAC;KACP;SAAM,IAAI,CAAC,MAAM,IAAI,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,KAAK,IAAI,EAAE;QAC5F,IAAM,KAAK,GAAG,OAAO,EAAE,CAAC;QACxB,wBAAwB,CAAC,KAAK,CAAC,CAAC;KACnC;IAED,IAAM,8BAA8B,GAAG;QACnC,IAAM,oBAAoB,GAAG,uBAAuB,CAAC,OAAO,KAAK,KAAK,IAAI,eAAe,KAAK,IAAI,CAAC;QACnG,IAAM,gBAAgB,GAAG,uBAAuB,CAAC,OAAO,KAAK,IAAI,IAAI,eAAe,KAAK,KAAK,CAAC;QAC/F,IAAM,wBAAwB,GAAG,gBAAgB,IAAI,oBAAoB,CAAC;QAC1E,IAAM,sBAAsB,GAAG,UAAC,GAAqB,EAAE,cAAuB;YAC1E,QAAQ,CAAC,UAAC,CAAC,IAAK,OAAA,uBACT,CAAC,KACJ,eAAe,EAAE,GAAG,CAAC,oBAAoB,EACzC,MAAM,wBACC,CAAC,CAAC,MAAM,KACX,SAAS,EAAE,cAAc,KAE7B,SAAS,EAAE,GAAG,IAChB,EARc,CAQd,CAAC,CAAC;QACR,CAAC,CAAC;QACF,IAAI,CAAC,SAAS,EAAE;YACZ,WAAW,CACP,IAAI,KAAK,CACL,mGAAmG,CACtG,CACJ,CAAC;SACL;aAAM;YACH,IAAI,wBAAwB,EAAE;gBAC1B,SAAS,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;aAC1C;YACD,IAAI,gBAAgB,EAAE;gBAElB,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;oBACxB,SAAS,CAAC,WAAW,GAAG,EAAE,CAAC;iBAC9B;gBACD,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,cAAM,OAAA,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,EAAxC,CAAwC,CAAC,CAAC;aACrF;iBAAM,IAAI,oBAAoB,EAAE;gBAC7B,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,cAAM,OAAA,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,EAAxC,CAAwC,CAAC,CAAC;aACnF;YAED,IAAI,wBAAwB,EAAE;gBAC1B,sBAAsB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;aAC3C;SACJ;QAED,uBAAuB,CAAC,OAAO,GAAG,eAAe,CAAC;QAElD,OAAO,wBAAwB,CAAC;IACpC,CAAC,CAAC;IAGF,iBAAS,CAAC;;QAEN,IAAI,UAAU,CAAC,OAAO,EAAE;YACpB,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;YAC3B,OAAO;SACV;QACD,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC5B,IAAM,QAAQ,GACV,0JAA0J,CAAC;YAC/J,WAAW,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjC,OAAO;SACV;QACD,IAAI,QAAQ,EAAE;YACV,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;YAC5E,OAAO;SACV;QACD,IAAI,iBAAiB,GAAQ,IAAI,CAAC;QAGlC,IAAM,wBAAwB,GAAG,8BAA8B,EAAE,CAAC;QAClE,IAAI,wBAAwB,EAAE;YAC1B,OAAO;SACV;QAGD,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,KAAK,WAAW,EAAE;YAChE,KAAK,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;YACnC,KAAK,CAAC,GAAG,CAAC,IAAI,CACV,sKAAsK,CACzK,CAAC;YAEF,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;YAE9C,iBAAiB,GAAG,OAAA,KAAK,CAAC,KAAK,CAAC,MAAM,0CAAE,IAAI,KAAI,IAAI,CAAC;SACxD;QAGD,IAAM,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAGzC,wBAAwB,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAE1F,iBAAS,CAAC;QACN,IAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,CAAC,gBAAgB,KAAK,IAAI,CAAC;QAC3F,IAAI,QAAQ,EAAE;YACV,gBAAgB,CAAC;;gBACb,QAAQ,CACJ;oBACI,MAAM,wBAAO,KAAK,CAAC,MAAM,KAAE,UAAU,YAAA,GAAE;oBACvC,eAAe,EAAE,KAAK,CAAC,eAAe;oBACtC,MAAM,wBAAO,KAAK,CAAC,MAAM,SAAK,KAAK,CAAC,SAAS,0CAAE,MAAM,CAAE;iBAC1D,EACD,KAAK,CAAC,SAAS,CAClB,CAAC;YACN,CAAC,CAAC,CAAC;SACN;IACL,CAAC,EAAE,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAE1D,iBAAS,CAAC;QACN,IAAI,UAAU,IAAI,CAAC,CAAC,gBAAgB,IAAI,gBAAgB,KAAK,WAAW,IAAI,CAAC,SAAS,EAAE;YACpF,gBAAgB,CAAC,UAAU,CAAC,CAAC;SAChC;IACL,CAAC,EAAE,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,CAAC,CAAC;IAOpB,IAAM,aAAa,GAAG;QAClB,IAAM,WAAW,GAAG,CAAC,SAAS,IAAI,CAAC,gBAAgB,CAAC;QACpD,IAAI,SAAS,IAAI,gBAAgB,IAAI,WAAW,IAAI,QAAQ,EAAE;YAC1D,OAAO,8DAAG,gBAAgB,CAAI,CAAC;SAClC;QACD,OAAO,8DAAG,QAAQ,CAAI,CAAC;IAC3B,CAAC,CAAC;IACF,OAAO,CACH,8BAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,KAAK,OAAA,EAAE,QAAQ,UAAA,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,IAC7E,cAAc,CAAC,CAAC,CAAC,CACd,8BAAC,+BAAqB,IAClB,gBAAgB,EAAE,QAAQ,EAC1B,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,SAAS,CAAC,KAAK,EACtB,WAAW,EAAE,aAAuC,EACpD,aAAa,EAAE,kBAAkB,EACjC,GAAG,EAAE,KAAK,CAAC,GAAG,IAEb,aAAa,EAAE,CACI,CAC3B,CAAC,CAAC,CAAC,CACA,aAAa,EAAE,CAClB,CACsB,CAC9B,CAAC;AACN,CAAC,CAAC;AAEF,wBAAgB,CAAC,YAAY,GAAG;IAC5B,gBAAgB,EAAE,SAAS;IAC3B,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,KAAK;IAClB,YAAY,EAAE,KAAK;IACnB,eAAe,EAAE,SAAS;IAC1B,iBAAiB,EAAE,KAAK;IACxB,iBAAiB,EAAE,KAAK;IACxB,cAAc,EAAE,KAAK;IACrB,OAAO,EAAE,YAAY;IACrB,WAAW,EAAE,SAAS;IACtB,MAAM,EAAE,SAAS;IACjB,oBAAoB,EAAE,SAAS;IAC/B,WAAW,EAAE;IAEb,CAAC;IACD,UAAU,EAAE;IAEZ,CAAC;IACD,4BAA4B,EAAE;IAE9B,CAAC;IACD,QAAQ,EAAE;IAEV,CAAC;CACJ,CAAC;AAEW,QAAA,gBAAgB,GAAG,eAAe,CAAC,QAAQ,CAAC;AACzD,kBAAe,eAAe,CAAC;AAClB,QAAA,kBAAkB,GAAG,cAAW,OAAA,kBAAU,CAAC,eAAe,CAAC,EAA3B,CAA2B,CAAC"}
|