@ninetailed/experience.js 3.7.0-beta.0 → 3.8.1
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/index.cjs +48 -0
- package/index.js +48 -0
- package/lib/experience/constants.d.ts +4 -0
- package/lib/experience/isExperienceMatch.d.ts +4 -0
- package/lib/experience/selectActiveExperiments.d.ts +4 -0
- package/lib/experience/selectBaselineWithVariants.d.ts +4 -0
- package/lib/experience/selectDistribution.d.ts +4 -0
- package/lib/experience/selectEligibleExperiences.d.ts +4 -0
- package/lib/experience/selectExperience.d.ts +4 -0
- package/lib/experience/selectHasVariants.d.ts +4 -0
- package/lib/experience/selectVariant.d.ts +4 -0
- package/lib/experience/selectVariants.d.ts +4 -0
- package/lib/experience/types/Baseline.d.ts +4 -0
- package/lib/experience/types/BaselineWithVariants.d.ts +4 -0
- package/lib/experience/types/Distribution.d.ts +4 -0
- package/lib/experience/types/ExperienceConfiguration.d.ts +8 -0
- package/lib/experience/types/Reference.d.ts +4 -0
- package/lib/experience/types/VariantRef.d.ts +4 -0
- package/lib/experience/utils.d.ts +8 -0
- package/package.json +3 -3
package/index.cjs
CHANGED
|
@@ -3488,13 +3488,25 @@ const selectVariant$1 = (baseline, variants, {
|
|
|
3488
3488
|
};
|
|
3489
3489
|
};
|
|
3490
3490
|
|
|
3491
|
+
/**
|
|
3492
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
3493
|
+
* This wil get removed in the next major release
|
|
3494
|
+
*/
|
|
3491
3495
|
const EXPERIENCE_TRAIT_PREFIX = 'nt_experiment_';
|
|
3492
3496
|
|
|
3497
|
+
/**
|
|
3498
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
3499
|
+
* This wil get removed in the next major release
|
|
3500
|
+
*/
|
|
3493
3501
|
const selectBaselineWithVariants = (experience, baseline) => {
|
|
3494
3502
|
var _a;
|
|
3495
3503
|
return (_a = experience.components.find(baselineWithVariants => baselineWithVariants.baseline.id === baseline.id)) !== null && _a !== void 0 ? _a : null;
|
|
3496
3504
|
};
|
|
3497
3505
|
|
|
3506
|
+
/**
|
|
3507
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
3508
|
+
* This wil get removed in the next major release
|
|
3509
|
+
*/
|
|
3498
3510
|
const selectVariants = (experience, baseline) => {
|
|
3499
3511
|
const baselineWithVariants = selectBaselineWithVariants(experience, baseline);
|
|
3500
3512
|
if (!baselineWithVariants) {
|
|
@@ -3503,6 +3515,10 @@ const selectVariants = (experience, baseline) => {
|
|
|
3503
3515
|
return baselineWithVariants.variants;
|
|
3504
3516
|
};
|
|
3505
3517
|
|
|
3518
|
+
/**
|
|
3519
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
3520
|
+
* This wil get removed in the next major release
|
|
3521
|
+
*/
|
|
3506
3522
|
const selectHasVariants = (experience, baseline) => {
|
|
3507
3523
|
const variants = selectVariants(experience, baseline);
|
|
3508
3524
|
return variants.length > 0;
|
|
@@ -4045,6 +4061,10 @@ fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNa
|
|
|
4045
4061
|
];
|
|
4046
4062
|
}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);
|
|
4047
4063
|
|
|
4064
|
+
/**
|
|
4065
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4066
|
+
* This wil get removed in the next major release
|
|
4067
|
+
*/
|
|
4048
4068
|
const selectActiveExperiments = (experiments, profile) => {
|
|
4049
4069
|
const experimentTraits = pickBy__default["default"](profile.traits, (value, key) => key.startsWith(EXPERIENCE_TRAIT_PREFIX) && value === true);
|
|
4050
4070
|
const experimentTraitsIds = Object.keys(experimentTraits).map(id => id.replace(EXPERIENCE_TRAIT_PREFIX, ''));
|
|
@@ -4058,6 +4078,10 @@ const selectActiveExperiments = (experiments, profile) => {
|
|
|
4058
4078
|
* When going for an experiment we can only select a active experiment when 1 or more experiments are active
|
|
4059
4079
|
* If the profile is not in any active experiments, we can select any expermiment
|
|
4060
4080
|
*/
|
|
4081
|
+
/**
|
|
4082
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4083
|
+
* This wil get removed in the next major release
|
|
4084
|
+
*/
|
|
4061
4085
|
const selectEligibleExperiences = ({
|
|
4062
4086
|
experiences,
|
|
4063
4087
|
activeExperiments
|
|
@@ -4075,9 +4099,21 @@ const getRandom = text => {
|
|
|
4075
4099
|
const random = normalize(hash, LOWER_BOUND, UPPER_BOUND);
|
|
4076
4100
|
return random;
|
|
4077
4101
|
};
|
|
4102
|
+
/**
|
|
4103
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4104
|
+
* This wil get removed in the next major release
|
|
4105
|
+
*/
|
|
4078
4106
|
const getTrafficRandom = (profile, experience) => getRandom(`traffic-${experience.id}-${profile.id}`);
|
|
4107
|
+
/**
|
|
4108
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4109
|
+
* This wil get removed in the next major release
|
|
4110
|
+
*/
|
|
4079
4111
|
const getDistributionRandom = (profile, experience) => getRandom(`distribution-${experience.id}-${profile.id}`);
|
|
4080
4112
|
|
|
4113
|
+
/**
|
|
4114
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4115
|
+
* This wil get removed in the next major release
|
|
4116
|
+
*/
|
|
4081
4117
|
const isExperienceMatch = ({
|
|
4082
4118
|
experience,
|
|
4083
4119
|
activeExperiments,
|
|
@@ -4099,6 +4135,10 @@ const isExperienceMatch = ({
|
|
|
4099
4135
|
hasActiveExperiment);
|
|
4100
4136
|
};
|
|
4101
4137
|
|
|
4138
|
+
/**
|
|
4139
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4140
|
+
* This wil get removed in the next major release
|
|
4141
|
+
*/
|
|
4102
4142
|
const selectExperience = ({
|
|
4103
4143
|
experiences,
|
|
4104
4144
|
activeExperiments,
|
|
@@ -4116,6 +4156,10 @@ const selectExperience = ({
|
|
|
4116
4156
|
return selectedExperience !== null && selectedExperience !== void 0 ? selectedExperience : null;
|
|
4117
4157
|
};
|
|
4118
4158
|
|
|
4159
|
+
/**
|
|
4160
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4161
|
+
* This wil get removed in the next major release
|
|
4162
|
+
*/
|
|
4119
4163
|
const selectDistribution = ({
|
|
4120
4164
|
experience,
|
|
4121
4165
|
profile
|
|
@@ -4139,6 +4183,10 @@ const selectDistribution = ({
|
|
|
4139
4183
|
return distribution;
|
|
4140
4184
|
};
|
|
4141
4185
|
|
|
4186
|
+
/**
|
|
4187
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4188
|
+
* This wil get removed in the next major release
|
|
4189
|
+
*/
|
|
4142
4190
|
const selectVariant = ({
|
|
4143
4191
|
baseline,
|
|
4144
4192
|
experience,
|
package/index.js
CHANGED
|
@@ -3475,13 +3475,25 @@ const selectVariant$1 = (baseline, variants, {
|
|
|
3475
3475
|
};
|
|
3476
3476
|
};
|
|
3477
3477
|
|
|
3478
|
+
/**
|
|
3479
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
3480
|
+
* This wil get removed in the next major release
|
|
3481
|
+
*/
|
|
3478
3482
|
const EXPERIENCE_TRAIT_PREFIX = 'nt_experiment_';
|
|
3479
3483
|
|
|
3484
|
+
/**
|
|
3485
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
3486
|
+
* This wil get removed in the next major release
|
|
3487
|
+
*/
|
|
3480
3488
|
const selectBaselineWithVariants = (experience, baseline) => {
|
|
3481
3489
|
var _a;
|
|
3482
3490
|
return (_a = experience.components.find(baselineWithVariants => baselineWithVariants.baseline.id === baseline.id)) !== null && _a !== void 0 ? _a : null;
|
|
3483
3491
|
};
|
|
3484
3492
|
|
|
3493
|
+
/**
|
|
3494
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
3495
|
+
* This wil get removed in the next major release
|
|
3496
|
+
*/
|
|
3485
3497
|
const selectVariants = (experience, baseline) => {
|
|
3486
3498
|
const baselineWithVariants = selectBaselineWithVariants(experience, baseline);
|
|
3487
3499
|
if (!baselineWithVariants) {
|
|
@@ -3490,6 +3502,10 @@ const selectVariants = (experience, baseline) => {
|
|
|
3490
3502
|
return baselineWithVariants.variants;
|
|
3491
3503
|
};
|
|
3492
3504
|
|
|
3505
|
+
/**
|
|
3506
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
3507
|
+
* This wil get removed in the next major release
|
|
3508
|
+
*/
|
|
3493
3509
|
const selectHasVariants = (experience, baseline) => {
|
|
3494
3510
|
const variants = selectVariants(experience, baseline);
|
|
3495
3511
|
return variants.length > 0;
|
|
@@ -4032,6 +4048,10 @@ fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNa
|
|
|
4032
4048
|
];
|
|
4033
4049
|
}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);
|
|
4034
4050
|
|
|
4051
|
+
/**
|
|
4052
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4053
|
+
* This wil get removed in the next major release
|
|
4054
|
+
*/
|
|
4035
4055
|
const selectActiveExperiments = (experiments, profile) => {
|
|
4036
4056
|
const experimentTraits = pickBy(profile.traits, (value, key) => key.startsWith(EXPERIENCE_TRAIT_PREFIX) && value === true);
|
|
4037
4057
|
const experimentTraitsIds = Object.keys(experimentTraits).map(id => id.replace(EXPERIENCE_TRAIT_PREFIX, ''));
|
|
@@ -4045,6 +4065,10 @@ const selectActiveExperiments = (experiments, profile) => {
|
|
|
4045
4065
|
* When going for an experiment we can only select a active experiment when 1 or more experiments are active
|
|
4046
4066
|
* If the profile is not in any active experiments, we can select any expermiment
|
|
4047
4067
|
*/
|
|
4068
|
+
/**
|
|
4069
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4070
|
+
* This wil get removed in the next major release
|
|
4071
|
+
*/
|
|
4048
4072
|
const selectEligibleExperiences = ({
|
|
4049
4073
|
experiences,
|
|
4050
4074
|
activeExperiments
|
|
@@ -4062,9 +4086,21 @@ const getRandom = text => {
|
|
|
4062
4086
|
const random = normalize(hash, LOWER_BOUND, UPPER_BOUND);
|
|
4063
4087
|
return random;
|
|
4064
4088
|
};
|
|
4089
|
+
/**
|
|
4090
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4091
|
+
* This wil get removed in the next major release
|
|
4092
|
+
*/
|
|
4065
4093
|
const getTrafficRandom = (profile, experience) => getRandom(`traffic-${experience.id}-${profile.id}`);
|
|
4094
|
+
/**
|
|
4095
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4096
|
+
* This wil get removed in the next major release
|
|
4097
|
+
*/
|
|
4066
4098
|
const getDistributionRandom = (profile, experience) => getRandom(`distribution-${experience.id}-${profile.id}`);
|
|
4067
4099
|
|
|
4100
|
+
/**
|
|
4101
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4102
|
+
* This wil get removed in the next major release
|
|
4103
|
+
*/
|
|
4068
4104
|
const isExperienceMatch = ({
|
|
4069
4105
|
experience,
|
|
4070
4106
|
activeExperiments,
|
|
@@ -4086,6 +4122,10 @@ const isExperienceMatch = ({
|
|
|
4086
4122
|
hasActiveExperiment);
|
|
4087
4123
|
};
|
|
4088
4124
|
|
|
4125
|
+
/**
|
|
4126
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4127
|
+
* This wil get removed in the next major release
|
|
4128
|
+
*/
|
|
4089
4129
|
const selectExperience = ({
|
|
4090
4130
|
experiences,
|
|
4091
4131
|
activeExperiments,
|
|
@@ -4103,6 +4143,10 @@ const selectExperience = ({
|
|
|
4103
4143
|
return selectedExperience !== null && selectedExperience !== void 0 ? selectedExperience : null;
|
|
4104
4144
|
};
|
|
4105
4145
|
|
|
4146
|
+
/**
|
|
4147
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4148
|
+
* This wil get removed in the next major release
|
|
4149
|
+
*/
|
|
4106
4150
|
const selectDistribution = ({
|
|
4107
4151
|
experience,
|
|
4108
4152
|
profile
|
|
@@ -4126,6 +4170,10 @@ const selectDistribution = ({
|
|
|
4126
4170
|
return distribution;
|
|
4127
4171
|
};
|
|
4128
4172
|
|
|
4173
|
+
/**
|
|
4174
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4175
|
+
* This wil get removed in the next major release
|
|
4176
|
+
*/
|
|
4129
4177
|
const selectVariant = ({
|
|
4130
4178
|
baseline,
|
|
4131
4179
|
experience,
|
|
@@ -5,5 +5,9 @@ type IsExperienceMatchArgs = {
|
|
|
5
5
|
activeExperiments: ExperienceConfiguration<any>[];
|
|
6
6
|
profile: Profile;
|
|
7
7
|
};
|
|
8
|
+
/**
|
|
9
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
10
|
+
* This wil get removed in the next major release
|
|
11
|
+
*/
|
|
8
12
|
export declare const isExperienceMatch: ({ experience, activeExperiments, profile, }: IsExperienceMatchArgs) => boolean;
|
|
9
13
|
export {};
|
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import { Profile } from '@ninetailed/experience.js-shared';
|
|
2
2
|
import { ExperienceConfiguration, Reference } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
5
|
+
* This wil get removed in the next major release
|
|
6
|
+
*/
|
|
3
7
|
export declare const selectActiveExperiments: <Variant extends Reference>(experiments: ExperienceConfiguration<Variant>[], profile: Profile) => ExperienceConfiguration<Variant>[];
|
|
@@ -1,2 +1,6 @@
|
|
|
1
1
|
import { Baseline, BaselineWithVariants, ExperienceConfiguration, Reference } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4
|
+
* This wil get removed in the next major release
|
|
5
|
+
*/
|
|
2
6
|
export declare const selectBaselineWithVariants: <Variant extends Reference>(experience: ExperienceConfiguration<Variant>, baseline: Baseline) => BaselineWithVariants<Variant> | null;
|
|
@@ -4,5 +4,9 @@ type SelectDistributionArgs<Variant extends Reference> = {
|
|
|
4
4
|
experience: ExperienceConfiguration<Variant>;
|
|
5
5
|
profile: Profile;
|
|
6
6
|
};
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
9
|
+
* This wil get removed in the next major release
|
|
10
|
+
*/
|
|
7
11
|
export declare const selectDistribution: <Variant extends Reference>({ experience, profile, }: SelectDistributionArgs<Variant>) => Distribution;
|
|
8
12
|
export {};
|
|
@@ -8,5 +8,9 @@ type SelectEligibleExperiencesArgs<Variant extends Reference> = {
|
|
|
8
8
|
* When going for an experiment we can only select a active experiment when 1 or more experiments are active
|
|
9
9
|
* If the profile is not in any active experiments, we can select any expermiment
|
|
10
10
|
*/
|
|
11
|
+
/**
|
|
12
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
13
|
+
* This wil get removed in the next major release
|
|
14
|
+
*/
|
|
11
15
|
export declare const selectEligibleExperiences: <Variant extends Reference>({ experiences, activeExperiments, }: SelectEligibleExperiencesArgs<Variant>) => ExperienceConfiguration<Variant>[];
|
|
12
16
|
export {};
|
|
@@ -5,5 +5,9 @@ type SelectExprienceArgs<Variant extends Reference> = {
|
|
|
5
5
|
activeExperiments: ExperienceConfiguration<Variant>[];
|
|
6
6
|
profile: Profile;
|
|
7
7
|
};
|
|
8
|
+
/**
|
|
9
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
10
|
+
* This wil get removed in the next major release
|
|
11
|
+
*/
|
|
8
12
|
export declare const selectExperience: <Variant extends Reference>({ experiences, activeExperiments, profile, }: SelectExprienceArgs<Variant>) => ExperienceConfiguration<Variant> | null;
|
|
9
13
|
export {};
|
|
@@ -1,2 +1,6 @@
|
|
|
1
1
|
import { Baseline, ExperienceConfiguration, Reference } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4
|
+
* This wil get removed in the next major release
|
|
5
|
+
*/
|
|
2
6
|
export declare const selectHasVariants: <Variant extends Reference>(experience: ExperienceConfiguration<Variant>, baseline: Baseline) => boolean;
|
|
@@ -5,5 +5,9 @@ type SelectVariantArgs<Variant extends Reference> = {
|
|
|
5
5
|
experience: ExperienceConfiguration<Variant>;
|
|
6
6
|
profile: Profile;
|
|
7
7
|
};
|
|
8
|
+
/**
|
|
9
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
10
|
+
* This wil get removed in the next major release
|
|
11
|
+
*/
|
|
8
12
|
export declare const selectVariant: <Variant extends Reference>({ baseline, experience, profile, }: SelectVariantArgs<Variant>) => Variant | VariantRef | null;
|
|
9
13
|
export {};
|
|
@@ -1,2 +1,6 @@
|
|
|
1
1
|
import { Baseline, ExperienceConfiguration, Reference, VariantRef } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
4
|
+
* This wil get removed in the next major release
|
|
5
|
+
*/
|
|
2
6
|
export declare const selectVariants: <Variant extends Reference>(experience: ExperienceConfiguration<Variant>, baseline: Baseline) => (Variant | VariantRef)[];
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { Baseline } from './Baseline';
|
|
2
2
|
import { Reference } from './Reference';
|
|
3
3
|
import { VariantRef } from './VariantRef';
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
6
|
+
* This wil get removed in the next major release
|
|
7
|
+
*/
|
|
4
8
|
export type BaselineWithVariants<Variant extends Reference> = {
|
|
5
9
|
baseline: Baseline;
|
|
6
10
|
variants: (Variant | VariantRef)[];
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import { BaselineWithVariants } from './BaselineWithVariants';
|
|
2
2
|
import { Distribution } from './Distribution';
|
|
3
3
|
import { Reference } from './Reference';
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
6
|
+
* This wil get removed in the next major release
|
|
7
|
+
*/
|
|
4
8
|
export type ExperienceType = 'nt_personalization' | 'nt_experiment';
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
11
|
+
* This wil get removed in the next major release
|
|
12
|
+
*/
|
|
5
13
|
export type ExperienceConfiguration<Variant extends Reference = Reference> = {
|
|
6
14
|
id: string;
|
|
7
15
|
type: ExperienceType;
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import { Profile } from '@ninetailed/experience.js-shared';
|
|
2
2
|
import { ExperienceConfiguration } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
5
|
+
* This wil get removed in the next major release
|
|
6
|
+
*/
|
|
3
7
|
export declare const getTrafficRandom: (profile: Profile, experience: ExperienceConfiguration<any>) => number;
|
|
8
|
+
/**
|
|
9
|
+
* @deprecated use @ninetailed/experience.js-shared instead
|
|
10
|
+
* This wil get removed in the next major release
|
|
11
|
+
*/
|
|
4
12
|
export declare const getDistributionRandom: (profile: Profile, experience: ExperienceConfiguration<any>) => number;
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ninetailed/experience.js",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.8.1",
|
|
4
4
|
"module": "./index.js",
|
|
5
5
|
"main": "./index.cjs",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"types": "./index.d.ts",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@ninetailed/experience.js-shared": "3.
|
|
9
|
+
"@ninetailed/experience.js-shared": "3.8.1",
|
|
10
10
|
"analytics": "0.8.1",
|
|
11
11
|
"lodash": "4.17.21",
|
|
12
12
|
"murmurhash-js": "1.0.0",
|
|
13
|
-
"@ninetailed/experience.js-plugin-analytics": "3.
|
|
13
|
+
"@ninetailed/experience.js-plugin-analytics": "3.8.1"
|
|
14
14
|
},
|
|
15
15
|
"peerDependencies": {}
|
|
16
16
|
}
|