@builder.io/react 5.0.2-8 → 5.0.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/.yarnrc.yml +1 -0
- package/CHANGELOG.md +8 -0
- package/dist/builder-react-lite.cjs.js +1 -1
- package/dist/builder-react-lite.cjs.js.map +1 -1
- package/dist/builder-react-lite.esm.js +1 -1
- package/dist/builder-react-lite.esm.js.map +1 -1
- package/dist/builder-react.browser.js +2 -2
- package/dist/builder-react.browser.js.map +1 -1
- package/dist/builder-react.cjs.js +1 -1
- package/dist/builder-react.cjs.js.map +1 -1
- package/dist/builder-react.es5.js +1 -1
- package/dist/builder-react.es5.js.map +1 -1
- package/dist/builder-react.unpkg.js +2 -2
- package/dist/builder-react.unpkg.js.map +1 -1
- package/dist/lib/package.json +3 -3
- package/dist/lib/src/blocks/PersonalizationContainer.js +37 -18
- package/dist/lib/src/blocks/PersonalizationContainer.js.map +1 -1
- package/dist/lib/src/functions/filter-with-custom-targeting.js +3 -1
- package/dist/lib/src/functions/filter-with-custom-targeting.js.map +1 -1
- package/dist/types/src/blocks/PersonalizationContainer.d.ts +0 -1
- package/dist/types/src/functions/filter-with-custom-targeting.d.ts +1 -0
- package/package.json +6 -7
- package/scripts/fix-core-version.sh +0 -0
- package/src/blocks/PersonalizationContainer.tsx +170 -54
- package/src/functions/filter-with-custom-targeting.ts +119 -117
- package/.npmrc +0 -1
|
@@ -1,127 +1,129 @@
|
|
|
1
1
|
type UserAttributes = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
2
|
+
date?: string | Date;
|
|
3
|
+
urlPath?: string;
|
|
4
|
+
[key: string]: any; // Allow any other properties
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
// Query type
|
|
8
|
+
type QueryOperator =
|
|
9
|
+
| 'is'
|
|
10
|
+
| 'isNot'
|
|
11
|
+
| 'contains'
|
|
12
|
+
| 'startsWith'
|
|
13
|
+
| 'endsWith'
|
|
14
|
+
| 'greaterThan'
|
|
15
|
+
| 'lessThan'
|
|
16
|
+
| 'greaterThanOrEqualTo'
|
|
17
|
+
| 'lessThanOrEqualTo';
|
|
18
|
+
|
|
19
|
+
type QueryValue = string | number | boolean | Array<string | number | boolean>;
|
|
20
|
+
|
|
21
|
+
export type Query = {
|
|
22
|
+
property: string;
|
|
23
|
+
operator: QueryOperator;
|
|
24
|
+
value: QueryValue;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// minified version of the function need to be added to the script
|
|
28
|
+
export const filterWithCustomTargetingScript = `function filterWithCustomTargeting(e,t,n,r){var i={query:t,startDate:n,endDate:r},o=e.date&&new Date(e.date)||new Date;return!(i.startDate&&new Date(i.startDate)>o)&&(!(i.endDate&&new Date(i.endDate)<o)&&(!i.query||!i.query.length||i.query.every((function(t){return objectMatchesQuery(e,t)}))))}function isString(e){return"string"==typeof e}function isNumber(e){return"number"==typeof e}function objectMatchesQuery(e,t){return function(){var n=t.property,r=t.operator,i=t.value;if(t&&"urlPath"===t.property&&t.value&&"string"==typeof t.value&&"/"!==t.value&&t.value.endsWith("/")&&(i=t.value.slice(0,-1)),!n||!r)return!0;if(Array.isArray(i))return"isNot"===r?i.every((function(t){return objectMatchesQuery(e,{property:n,operator:r,value:t})})):!!i.find((function(t){return objectMatchesQuery(e,{property:n,operator:r,value:t})}));var o=e[n];if(Array.isArray(o))return o.includes(i);switch(r){case"is":return o===i;case"isNot":return o!==i;case"contains":return(isString(o)||Array.isArray(o))&&o.includes(String(i));case"startsWith":return isString(o)&&o.startsWith(String(i));case"endsWith":return isString(o)&&o.endsWith(String(i));case"greaterThan":return isNumber(o)&&isNumber(i)&&o>i;case"lessThan":return isNumber(o)&&isNumber(i)&&o<i;case"greaterThanOrEqualTo":return isNumber(o)&&isNumber(i)&&o>=i;case"lessThanOrEqualTo":return isNumber(o)&&isNumber(i)&&o<=i}return!1}()}`;
|
|
26
29
|
|
|
27
30
|
export function filterWithCustomTargeting(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
31
|
+
userAttributes: UserAttributes,
|
|
32
|
+
query: Query[],
|
|
33
|
+
startDate?: string,
|
|
34
|
+
endDate?: string
|
|
35
|
+
) {
|
|
36
|
+
const item = {
|
|
37
|
+
query,
|
|
38
|
+
startDate,
|
|
39
|
+
endDate,
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const now = (userAttributes.date && new Date(userAttributes.date)) || new Date();
|
|
43
|
+
|
|
44
|
+
if (item.startDate && new Date(item.startDate) > now) {
|
|
45
|
+
return false;
|
|
46
|
+
} else if (item.endDate && new Date(item.endDate) < now) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (!item.query || !item.query.length) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return item.query.every((filter: Query) => {
|
|
55
|
+
return objectMatchesQuery(userAttributes, filter);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function isString(val: unknown): val is string {
|
|
60
|
+
return typeof val === 'string';
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function isNumber(val: unknown): val is number {
|
|
64
|
+
return typeof val === 'number';
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function objectMatchesQuery(userattr: UserAttributes, query: Query): boolean {
|
|
68
|
+
const result = (() => {
|
|
69
|
+
const property = query.property;
|
|
70
|
+
const operator = query.operator;
|
|
71
|
+
let testValue = query.value;
|
|
72
|
+
|
|
73
|
+
if (
|
|
74
|
+
query &&
|
|
75
|
+
query.property === 'urlPath' &&
|
|
76
|
+
query.value &&
|
|
77
|
+
typeof query.value === 'string' &&
|
|
78
|
+
query.value !== '/' &&
|
|
79
|
+
query.value.endsWith('/')
|
|
80
|
+
) {
|
|
81
|
+
testValue = query.value.slice(0, -1);
|
|
45
82
|
}
|
|
46
|
-
|
|
47
|
-
|
|
83
|
+
|
|
84
|
+
// Check is query property is present in userAttributes. Proceed only if it is present.
|
|
85
|
+
if (!(property && operator)) {
|
|
48
86
|
return true;
|
|
49
87
|
}
|
|
50
|
-
|
|
51
|
-
return item.query.every((filter: Query) => {
|
|
52
|
-
return objectMatchesQuery(userAttributes, filter);
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
function isString(val: unknown): val is string {
|
|
57
|
-
return typeof val === 'string';
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
function isNumber(val: unknown): val is number {
|
|
61
|
-
return typeof val === 'number';
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
function objectMatchesQuery(userattr: UserAttributes, query: Query): boolean {
|
|
65
|
-
const result = (() => {
|
|
66
|
-
const property = query.property;
|
|
67
|
-
const operator = query.operator;
|
|
68
|
-
let testValue = query.value;
|
|
69
|
-
|
|
70
|
-
if (
|
|
71
|
-
query &&
|
|
72
|
-
query.property === 'urlPath' &&
|
|
73
|
-
query.value &&
|
|
74
|
-
typeof query.value === 'string' &&
|
|
75
|
-
query.value !== '/' &&
|
|
76
|
-
query.value.endsWith('/')
|
|
77
|
-
) {
|
|
78
|
-
testValue = query.value.slice(0, -1);
|
|
79
|
-
}
|
|
80
88
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
return true;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
if (Array.isArray(testValue)) {
|
|
88
|
-
if (operator === 'isNot') {
|
|
89
|
-
return testValue.every(val =>
|
|
90
|
-
objectMatchesQuery(userattr, { property, operator, value: val })
|
|
91
|
-
);
|
|
92
|
-
}
|
|
93
|
-
return !!testValue.find(val =>
|
|
89
|
+
if (Array.isArray(testValue)) {
|
|
90
|
+
if (operator === 'isNot') {
|
|
91
|
+
return testValue.every(val =>
|
|
94
92
|
objectMatchesQuery(userattr, { property, operator, value: val })
|
|
95
93
|
);
|
|
96
94
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
95
|
+
return !!testValue.find(val =>
|
|
96
|
+
objectMatchesQuery(userattr, { property, operator, value: val })
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
const value = userattr[property];
|
|
100
|
+
|
|
101
|
+
if (Array.isArray(value)) {
|
|
102
|
+
return value.includes(testValue);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
switch (operator) {
|
|
106
|
+
case 'is':
|
|
107
|
+
return value === testValue;
|
|
108
|
+
case 'isNot':
|
|
109
|
+
return value !== testValue;
|
|
110
|
+
case 'contains':
|
|
111
|
+
return (isString(value) || Array.isArray(value)) && value.includes(String(testValue));
|
|
112
|
+
case 'startsWith':
|
|
113
|
+
return isString(value) && value.startsWith(String(testValue));
|
|
114
|
+
case 'endsWith':
|
|
115
|
+
return isString(value) && value.endsWith(String(testValue));
|
|
116
|
+
case 'greaterThan':
|
|
117
|
+
return isNumber(value) && isNumber(testValue) && value > testValue;
|
|
118
|
+
case 'lessThan':
|
|
119
|
+
return isNumber(value) && isNumber(testValue) && value < testValue;
|
|
120
|
+
case 'greaterThanOrEqualTo':
|
|
121
|
+
return isNumber(value) && isNumber(testValue) && value >= testValue;
|
|
122
|
+
case 'lessThanOrEqualTo':
|
|
123
|
+
return isNumber(value) && isNumber(testValue) && value <= testValue;
|
|
124
|
+
}
|
|
125
|
+
return false;
|
|
126
|
+
})();
|
|
127
|
+
|
|
128
|
+
return result;
|
|
129
|
+
}
|
package/.npmrc
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
git-tag-version=false
|