@posthog/core 1.20.2 → 1.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/dist/featureFlagUtils.d.ts +2 -0
- package/dist/featureFlagUtils.d.ts.map +1 -1
- package/dist/featureFlagUtils.js +6 -0
- package/dist/featureFlagUtils.mjs +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -4
- package/dist/index.mjs +2 -1
- package/dist/posthog-core.d.ts +16 -1
- package/dist/posthog-core.d.ts.map +1 -1
- package/dist/posthog-core.js +55 -26
- package/dist/posthog-core.mjs +56 -27
- package/dist/surveys/validation.d.ts +20 -0
- package/dist/surveys/validation.d.ts.map +1 -0
- package/dist/surveys/validation.js +73 -0
- package/dist/surveys/validation.mjs +33 -0
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -0
- package/dist/types.mjs +6 -1
- package/package.json +1 -1
- package/src/featureFlagUtils.ts +2 -2
- package/src/index.ts +1 -0
- package/src/posthog-core.ts +82 -55
- package/src/surveys/validation.spec.ts +168 -0
- package/src/surveys/validation.ts +80 -0
- package/src/types.ts +28 -0
|
@@ -32,4 +32,6 @@ export declare const parsePayload: (response: any) => any;
|
|
|
32
32
|
*/
|
|
33
33
|
export declare const createFlagsResponseFromFlagsAndPayloads: (featureFlags: PostHogV1FlagsResponse["featureFlags"], featureFlagPayloads: PostHogV1FlagsResponse["featureFlagPayloads"]) => PostHogFeatureFlagsResponse;
|
|
34
34
|
export declare const updateFlagValue: (flag: FeatureFlagDetail, value: FeatureFlagValue) => FeatureFlagDetail;
|
|
35
|
+
export declare function getEnabledFromValue(value: FeatureFlagValue): boolean;
|
|
36
|
+
export declare function getVariantFromValue(value: FeatureFlagValue): string | undefined;
|
|
35
37
|
//# sourceMappingURL=featureFlagUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"featureFlagUtils.d.ts","sourceRoot":"","sources":["../src/featureFlagUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAEhB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EAEtB,mBAAmB,EACnB,2BAA2B,EAC5B,MAAM,SAAS,CAAA;AAEhB,eAAO,MAAM,sBAAsB,GACjC,eACI,mBAAmB,CAAC,sBAAsB,EAAE,OAAO,CAAC,GACpD,mBAAmB,CAAC,sBAAsB,EAAE,cAAc,GAAG,qBAAqB,CAAC,KACtF,2BAgCF,CAAA;AAqBD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,oBAAoB,CAAC,OAAO,CAAC,KAAG,oBAAoB,CAAC,cAAc,CAMhH,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,oBAAoB,CAAC,OAAO,CAAC,KACnC,oBAAoB,CAAC,qBAAqB,CAa5C,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,GAC7C,eAAe,2BAA2B,KACzC,oBAAoB,CAAC,OAAO,CAoB9B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,QAAQ,iBAAiB,GAAG,SAAS,KAAG,gBAAgB,GAAG,SAE9F,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,UAAU,GAAG,KAAG,GAU5C,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,uCAAuC,GAClD,cAAc,sBAAsB,CAAC,cAAc,CAAC,EACpD,qBAAqB,sBAAsB,CAAC,qBAAqB,CAAC,KACjE,2BAaF,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,MAAM,iBAAiB,EAAE,OAAO,gBAAgB,KAAG,iBAMlF,CAAA"}
|
|
1
|
+
{"version":3,"file":"featureFlagUtils.d.ts","sourceRoot":"","sources":["../src/featureFlagUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAEhB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EAEtB,mBAAmB,EACnB,2BAA2B,EAC5B,MAAM,SAAS,CAAA;AAEhB,eAAO,MAAM,sBAAsB,GACjC,eACI,mBAAmB,CAAC,sBAAsB,EAAE,OAAO,CAAC,GACpD,mBAAmB,CAAC,sBAAsB,EAAE,cAAc,GAAG,qBAAqB,CAAC,KACtF,2BAgCF,CAAA;AAqBD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,oBAAoB,CAAC,OAAO,CAAC,KAAG,oBAAoB,CAAC,cAAc,CAMhH,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,oBAAoB,CAAC,OAAO,CAAC,KACnC,oBAAoB,CAAC,qBAAqB,CAa5C,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,GAC7C,eAAe,2BAA2B,KACzC,oBAAoB,CAAC,OAAO,CAoB9B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,QAAQ,iBAAiB,GAAG,SAAS,KAAG,gBAAgB,GAAG,SAE9F,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,UAAU,GAAG,KAAG,GAU5C,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,uCAAuC,GAClD,cAAc,sBAAsB,CAAC,cAAc,CAAC,EACpD,qBAAqB,sBAAsB,CAAC,qBAAqB,CAAC,KACjE,2BAaF,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,MAAM,iBAAiB,EAAE,OAAO,gBAAgB,KAAG,iBAMlF,CAAA;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAEpE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAE/E"}
|
package/dist/featureFlagUtils.js
CHANGED
|
@@ -25,10 +25,12 @@ var __webpack_exports__ = {};
|
|
|
25
25
|
__webpack_require__.r(__webpack_exports__);
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
27
|
createFlagsResponseFromFlagsAndPayloads: ()=>createFlagsResponseFromFlagsAndPayloads,
|
|
28
|
+
getEnabledFromValue: ()=>getEnabledFromValue,
|
|
28
29
|
getFeatureFlagValue: ()=>getFeatureFlagValue,
|
|
29
30
|
getFlagDetailsFromFlagsAndPayloads: ()=>getFlagDetailsFromFlagsAndPayloads,
|
|
30
31
|
getFlagValuesFromFlags: ()=>getFlagValuesFromFlags,
|
|
31
32
|
getPayloadsFromFlags: ()=>getPayloadsFromFlags,
|
|
33
|
+
getVariantFromValue: ()=>getVariantFromValue,
|
|
32
34
|
normalizeFlagsResponse: ()=>normalizeFlagsResponse,
|
|
33
35
|
parsePayload: ()=>parsePayload,
|
|
34
36
|
updateFlagValue: ()=>updateFlagValue
|
|
@@ -146,19 +148,23 @@ function getVariantFromValue(value) {
|
|
|
146
148
|
return 'string' == typeof value ? value : void 0;
|
|
147
149
|
}
|
|
148
150
|
exports.createFlagsResponseFromFlagsAndPayloads = __webpack_exports__.createFlagsResponseFromFlagsAndPayloads;
|
|
151
|
+
exports.getEnabledFromValue = __webpack_exports__.getEnabledFromValue;
|
|
149
152
|
exports.getFeatureFlagValue = __webpack_exports__.getFeatureFlagValue;
|
|
150
153
|
exports.getFlagDetailsFromFlagsAndPayloads = __webpack_exports__.getFlagDetailsFromFlagsAndPayloads;
|
|
151
154
|
exports.getFlagValuesFromFlags = __webpack_exports__.getFlagValuesFromFlags;
|
|
152
155
|
exports.getPayloadsFromFlags = __webpack_exports__.getPayloadsFromFlags;
|
|
156
|
+
exports.getVariantFromValue = __webpack_exports__.getVariantFromValue;
|
|
153
157
|
exports.normalizeFlagsResponse = __webpack_exports__.normalizeFlagsResponse;
|
|
154
158
|
exports.parsePayload = __webpack_exports__.parsePayload;
|
|
155
159
|
exports.updateFlagValue = __webpack_exports__.updateFlagValue;
|
|
156
160
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
157
161
|
"createFlagsResponseFromFlagsAndPayloads",
|
|
162
|
+
"getEnabledFromValue",
|
|
158
163
|
"getFeatureFlagValue",
|
|
159
164
|
"getFlagDetailsFromFlagsAndPayloads",
|
|
160
165
|
"getFlagValuesFromFlags",
|
|
161
166
|
"getPayloadsFromFlags",
|
|
167
|
+
"getVariantFromValue",
|
|
162
168
|
"normalizeFlagsResponse",
|
|
163
169
|
"parsePayload",
|
|
164
170
|
"updateFlagValue"
|
|
@@ -110,4 +110,4 @@ function getEnabledFromValue(value) {
|
|
|
110
110
|
function getVariantFromValue(value) {
|
|
111
111
|
return 'string' == typeof value ? value : void 0;
|
|
112
112
|
}
|
|
113
|
-
export { createFlagsResponseFromFlagsAndPayloads, getFeatureFlagValue, getFlagDetailsFromFlagsAndPayloads, getFlagValuesFromFlags, getPayloadsFromFlags, normalizeFlagsResponse, parsePayload, updateFlagValue };
|
|
113
|
+
export { createFlagsResponseFromFlagsAndPayloads, getEnabledFromValue, getFeatureFlagValue, getFlagDetailsFromFlagsAndPayloads, getFlagValuesFromFlags, getPayloadsFromFlags, getVariantFromValue, normalizeFlagsResponse, parsePayload, updateFlagValue };
|
package/dist/index.d.ts
CHANGED
|
@@ -5,4 +5,5 @@ export { uuidv7 } from './vendor/uuidv7';
|
|
|
5
5
|
export * from './posthog-core';
|
|
6
6
|
export * from './posthog-core-stateless';
|
|
7
7
|
export * from './types';
|
|
8
|
+
export { getValidationError, getLengthFromRules, getRequirementsHint } from './surveys/validation';
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,cAAc,SAAS,CAAA;AACvB,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,0BAA0B,CAAA;AACxC,cAAc,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,cAAc,SAAS,CAAA;AACvB,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,0BAA0B,CAAA;AACxC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,9 @@ var __webpack_modules__ = {
|
|
|
12
12
|
"./posthog-core": function(module) {
|
|
13
13
|
module.exports = require("./posthog-core.js");
|
|
14
14
|
},
|
|
15
|
+
"./surveys/validation": function(module) {
|
|
16
|
+
module.exports = require("./surveys/validation.js");
|
|
17
|
+
},
|
|
15
18
|
"./types": function(module) {
|
|
16
19
|
module.exports = require("./types.js");
|
|
17
20
|
},
|
|
@@ -68,6 +71,9 @@ var __webpack_exports__ = {};
|
|
|
68
71
|
__webpack_require__.d(__webpack_exports__, {
|
|
69
72
|
ErrorTracking: ()=>_error_tracking__WEBPACK_IMPORTED_MODULE_2__,
|
|
70
73
|
getFeatureFlagValue: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.getFeatureFlagValue,
|
|
74
|
+
getLengthFromRules: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_7__.getLengthFromRules,
|
|
75
|
+
getRequirementsHint: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_7__.getRequirementsHint,
|
|
76
|
+
getValidationError: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_7__.getValidationError,
|
|
71
77
|
uuidv7: ()=>_vendor_uuidv7__WEBPACK_IMPORTED_MODULE_3__.uuidv7
|
|
72
78
|
});
|
|
73
79
|
var _featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./featureFlagUtils");
|
|
@@ -76,8 +82,11 @@ var __webpack_exports__ = {};
|
|
|
76
82
|
for(var __WEBPACK_IMPORT_KEY__ in _utils__WEBPACK_IMPORTED_MODULE_1__)if ([
|
|
77
83
|
"ErrorTracking",
|
|
78
84
|
"default",
|
|
85
|
+
"getLengthFromRules",
|
|
79
86
|
"getFeatureFlagValue",
|
|
80
|
-
"
|
|
87
|
+
"getRequirementsHint",
|
|
88
|
+
"uuidv7",
|
|
89
|
+
"getValidationError"
|
|
81
90
|
].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
|
|
82
91
|
return _utils__WEBPACK_IMPORTED_MODULE_1__[key];
|
|
83
92
|
}).bind(0, __WEBPACK_IMPORT_KEY__);
|
|
@@ -89,8 +98,11 @@ var __webpack_exports__ = {};
|
|
|
89
98
|
for(var __WEBPACK_IMPORT_KEY__ in _posthog_core__WEBPACK_IMPORTED_MODULE_4__)if ([
|
|
90
99
|
"ErrorTracking",
|
|
91
100
|
"default",
|
|
101
|
+
"getLengthFromRules",
|
|
92
102
|
"getFeatureFlagValue",
|
|
93
|
-
"
|
|
103
|
+
"getRequirementsHint",
|
|
104
|
+
"uuidv7",
|
|
105
|
+
"getValidationError"
|
|
94
106
|
].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
|
|
95
107
|
return _posthog_core__WEBPACK_IMPORTED_MODULE_4__[key];
|
|
96
108
|
}).bind(0, __WEBPACK_IMPORT_KEY__);
|
|
@@ -100,8 +112,11 @@ var __webpack_exports__ = {};
|
|
|
100
112
|
for(var __WEBPACK_IMPORT_KEY__ in _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_5__)if ([
|
|
101
113
|
"ErrorTracking",
|
|
102
114
|
"default",
|
|
115
|
+
"getLengthFromRules",
|
|
103
116
|
"getFeatureFlagValue",
|
|
104
|
-
"
|
|
117
|
+
"getRequirementsHint",
|
|
118
|
+
"uuidv7",
|
|
119
|
+
"getValidationError"
|
|
105
120
|
].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
|
|
106
121
|
return _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_5__[key];
|
|
107
122
|
}).bind(0, __WEBPACK_IMPORT_KEY__);
|
|
@@ -111,19 +126,29 @@ var __webpack_exports__ = {};
|
|
|
111
126
|
for(var __WEBPACK_IMPORT_KEY__ in _types__WEBPACK_IMPORTED_MODULE_6__)if ([
|
|
112
127
|
"ErrorTracking",
|
|
113
128
|
"default",
|
|
129
|
+
"getLengthFromRules",
|
|
114
130
|
"getFeatureFlagValue",
|
|
115
|
-
"
|
|
131
|
+
"getRequirementsHint",
|
|
132
|
+
"uuidv7",
|
|
133
|
+
"getValidationError"
|
|
116
134
|
].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
|
|
117
135
|
return _types__WEBPACK_IMPORTED_MODULE_6__[key];
|
|
118
136
|
}).bind(0, __WEBPACK_IMPORT_KEY__);
|
|
119
137
|
__webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
|
|
138
|
+
var _surveys_validation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("./surveys/validation");
|
|
120
139
|
})();
|
|
121
140
|
exports.ErrorTracking = __webpack_exports__.ErrorTracking;
|
|
122
141
|
exports.getFeatureFlagValue = __webpack_exports__.getFeatureFlagValue;
|
|
142
|
+
exports.getLengthFromRules = __webpack_exports__.getLengthFromRules;
|
|
143
|
+
exports.getRequirementsHint = __webpack_exports__.getRequirementsHint;
|
|
144
|
+
exports.getValidationError = __webpack_exports__.getValidationError;
|
|
123
145
|
exports.uuidv7 = __webpack_exports__.uuidv7;
|
|
124
146
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
125
147
|
"ErrorTracking",
|
|
126
148
|
"getFeatureFlagValue",
|
|
149
|
+
"getLengthFromRules",
|
|
150
|
+
"getRequirementsHint",
|
|
151
|
+
"getValidationError",
|
|
127
152
|
"uuidv7"
|
|
128
153
|
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
129
154
|
Object.defineProperty(exports, '__esModule', {
|
package/dist/index.mjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { getFeatureFlagValue } from "./featureFlagUtils.mjs";
|
|
2
2
|
import { uuidv7 } from "./vendor/uuidv7.mjs";
|
|
3
|
+
import { getLengthFromRules, getRequirementsHint, getValidationError } from "./surveys/validation.mjs";
|
|
3
4
|
export * from "./utils/index.mjs";
|
|
4
5
|
export * from "./posthog-core.mjs";
|
|
5
6
|
export * from "./posthog-core-stateless.mjs";
|
|
6
7
|
export * from "./types.mjs";
|
|
7
8
|
import * as __WEBPACK_EXTERNAL_MODULE__error_tracking_index_mjs_b3406d6f__ from "./error-tracking/index.mjs";
|
|
8
|
-
export { __WEBPACK_EXTERNAL_MODULE__error_tracking_index_mjs_b3406d6f__ as ErrorTracking, getFeatureFlagValue, uuidv7 };
|
|
9
|
+
export { __WEBPACK_EXTERNAL_MODULE__error_tracking_index_mjs_b3406d6f__ as ErrorTracking, getFeatureFlagValue, getLengthFromRules, getRequirementsHint, getValidationError, uuidv7 };
|
package/dist/posthog-core.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PostHogAutocaptureElement, PostHogFlagsResponse, PostHogFeatureFlagsResponse, PostHogCoreOptions, PostHogEventProperties, PostHogCaptureOptions, JsonType, PostHogRemoteConfig, FeatureFlagValue, PostHogFeatureFlagDetails, PostHogGroupProperties } from './types';
|
|
1
|
+
import type { PostHogAutocaptureElement, PostHogFlagsResponse, PostHogFeatureFlagsResponse, PostHogCoreOptions, PostHogEventProperties, PostHogCaptureOptions, JsonType, PostHogRemoteConfig, FeatureFlagValue, FeatureFlagResult, FeatureFlagResultOptions, PostHogFeatureFlagDetails, PostHogGroupProperties } from './types';
|
|
2
2
|
import { PostHogPersistedProperty } from './types';
|
|
3
3
|
import { PostHogCoreStateless } from './posthog-core-stateless';
|
|
4
4
|
export declare abstract class PostHogCore extends PostHogCoreStateless {
|
|
@@ -98,6 +98,21 @@ export declare abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
98
98
|
private setBootstrappedFeatureFlagDetails;
|
|
99
99
|
private getBootstrappedFeatureFlags;
|
|
100
100
|
private getBootstrappedFeatureFlagPayloads;
|
|
101
|
+
getFeatureFlagResult(key: string, options?: FeatureFlagResultOptions): FeatureFlagResult | undefined;
|
|
102
|
+
protected _getFeatureFlagResult(key: string, options?: {
|
|
103
|
+
/** Whether to send an event that the flag was evaluated. This defaults to true,
|
|
104
|
+
* but will respect the instance-level sendFeatureFlagEvent setting.
|
|
105
|
+
*/
|
|
106
|
+
sendEvent?: boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Preserves the legacy missing-flag behavior of the named function.
|
|
109
|
+
* Each value matches how that function handled missing flags before getFeatureFlagResult existed:
|
|
110
|
+
* - 'getFeatureFlag': returns a default only when non-empty flags are cached
|
|
111
|
+
* - 'getFeatureFlagPayload': returns a default whenever any flags response was stored (even if empty, e.g. error/quota)
|
|
112
|
+
* Without this, missing flags simply return undefined (this is usually what you want).
|
|
113
|
+
*/
|
|
114
|
+
missingFlagBehavior?: 'getFeatureFlag' | 'getFeatureFlagPayload';
|
|
115
|
+
}): FeatureFlagResult | undefined;
|
|
101
116
|
getFeatureFlag(key: string): FeatureFlagValue | undefined;
|
|
102
117
|
getFeatureFlagPayload(key: string): JsonType | undefined;
|
|
103
118
|
getFeatureFlagPayloads(): PostHogFlagsResponse['featureFlagPayloads'] | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"posthog-core.d.ts","sourceRoot":"","sources":["../src/posthog-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,EAC3B,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,QAAQ,EACR,mBAAmB,EACnB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"posthog-core.d.ts","sourceRoot":"","sources":["../src/posthog-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,EAC3B,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,QAAQ,EACR,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EAGxB,yBAAyB,EAKzB,sBAAsB,EAGvB,MAAM,SAAS,CAAA;AAYhB,OAAO,EAAiC,wBAAwB,EAAE,MAAM,SAAS,CAAA;AACjF,OAAO,EAAY,oBAAoB,EAAuB,MAAM,0BAA0B,CAAA;AAY9F,8BAAsB,WAAY,SAAQ,oBAAoB;IAE5D,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,WAAW,CAAC,CAA+B;IAGnD,SAAS,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC,CAAA;IAClF,SAAS,CAAC,6BAA6B,EAAE,MAAM,CAAA;IAC/C,OAAO,CAAC,wBAAwB,CAAuB;IACvD,SAAS,CAAC,YAAY,EAAE,sBAAsB,CAAK;IAInD,OAAO,CAAC,oBAAoB,CAAC,CAAqB;IAGlD,SAAS,CAAC,eAAe,EAAE,QAAQ,GAAG,iBAAiB,GAAG,OAAO,CAAA;IAGjE,SAAS,CAAC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAO;gBAE3C,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB;IAexD,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAmDrE,OAAO,CAAC,UAAU;IAMlB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IAI3D,KAAK,CAAC,gBAAgB,CAAC,EAAE,wBAAwB,EAAE,GAAG,IAAI;IAoB1D,SAAS,CAAC,wBAAwB,IAAI,sBAAsB;IAgB5D,OAAO,CAAC,gBAAgB;IAUxB;;;;;;;;;;OAUG;IACH,YAAY,IAAI,MAAM;IAyBtB,cAAc,IAAI,IAAI;IAQtB;;;;;;;;;;;;;;;;;;OAkBG;IACH,cAAc,IAAI,MAAM;IAaxB;;OAEG;IACH,aAAa,IAAI,MAAM;IAQvB,kBAAkB,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI;IAO5D,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI5C;;SAEK;IAEL,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAkDzG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAwBlG,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAa1B,WAAW,CACT,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,yBAAyB,EAAE,EACrC,UAAU,GAAE,sBAA2B,EACvC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI;IAiBP;;SAEK;IAEL,MAAM,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI;IAsB5C,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,eAAe,CAAC,EAAE,sBAAsB,EACxC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI;IAYP,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,eAAe,CAAC,EAAE,sBAAsB,EACxC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI;IAYP;;SAEK;IACL,2BAA2B,CAAC,UAAU,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAA;KAAE,EAAE,kBAAkB,UAAO,GAAG,IAAI;IAiBtG,6BAA6B,IAAI,IAAI;IAMrC,0BAA0B,CAAC,UAAU,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,IAAI;IAwBxF,4BAA4B,IAAI,IAAI;YAMtB,iBAAiB;IAQ/B;;SAEK;cACW,UAAU,CACxB,kBAAkB,GAAE,OAAc,EAClC,WAAW,GAAE,OAAc,GAC1B,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC;IAkBnD,OAAO,CAAC,kBAAkB;YAaZ,kBAAkB;YA0ElB,WAAW;IAqGzB,OAAO,CAAC,0BAA0B;IAQlC,OAAO,CAAC,0BAA0B;IAyBlC,OAAO,CAAC,oBAAoB;IAI5B,SAAS,CAAC,oBAAoB,IAAI,oBAAoB,CAAC,cAAc,CAAC,GAAG,SAAS;IAQlF,OAAO,CAAC,iCAAiC;IAUzC,OAAO,CAAC,iCAAiC;IAIzC,OAAO,CAAC,2BAA2B;IAQnC,OAAO,CAAC,kCAAkC;IAQ1C,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,iBAAiB,GAAG,SAAS;IAIpG,SAAS,CAAC,qBAAqB,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;QACP;;WAEG;QACH,SAAS,CAAC,EAAE,OAAO,CAAA;QACnB;;;;;;WAMG;QACH,mBAAmB,CAAC,EAAE,gBAAgB,GAAG,uBAAuB,CAAA;KAC5D,GACL,iBAAiB,GAAG,SAAS;IAkFhC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAKzD,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAKxD,sBAAsB,IAAI,oBAAoB,CAAC,qBAAqB,CAAC,GAAG,SAAS;IAIjF,eAAe,IAAI,oBAAoB,CAAC,cAAc,CAAC,GAAG,SAAS;IAMnE,qBAAqB,IAAI,yBAAyB,GAAG,SAAS;IAgC9D,0BAA0B,IAAI;QAC5B,KAAK,EAAE,oBAAoB,CAAC,cAAc,CAAC,GAAG,SAAS,CAAA;QACvD,QAAQ,EAAE,oBAAoB,CAAC,qBAAqB,CAAC,GAAG,SAAS,CAAA;KAClE;IAUD,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IASlD,kBAAkB,CAAC,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,oBAAoB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;KAAE,GAAG,IAAI;IAa1G,uBAAuB,IAAI,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAInE,uBAAuB,CAC3B,kBAAkB,CAAC,EAAE,OAAO,GAC3B,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAI5D,cAAc,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,cAAc,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IASrF,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAAG,MAAM,IAAI;IASvE,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,CAAC,cAAc,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,oBAAoB,CAAC,EAAE,sBAAsB,GAAG,IAAI;IAmBrF;;;;;;;;;OASG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAO1E;;;;;;;;;;OAUG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;IAQ9G;;SAEK;IAEL;;;;;;;;;OASG;IACH,SAAS,CAAC,aAAa,IAAI,OAAO;IAuBlC;;;OAGG;IACH,SAAS,CAAC,UAAU,IAAI,sBAAsB;IAI9C;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,oBAAoB,IAAI,OAAO;IAmBzC;;;;;;;;;OASG;IACH,SAAS,CAAC,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAWjE;;;;;;;;OAQG;IACH,mBAAmB,IAAI,IAAI;IAa3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,mBAAmB,CACjB,mBAAmB,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;KAAE,EACjD,uBAAuB,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;KAAE,EACrD,kBAAkB,UAAO,GACxB,IAAI;IAiCP;;;;;;;;OAQG;IACH,SAAS,CAAC,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,GAAG,sBAAsB,GAAG,IAAI;IA+C9F;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;CAsBvB"}
|
package/dist/posthog-core.js
CHANGED
|
@@ -463,36 +463,36 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
|
|
|
463
463
|
if (!details) return;
|
|
464
464
|
return (0, external_featureFlagUtils_js_namespaceObject.getPayloadsFromFlags)(details.flags);
|
|
465
465
|
}
|
|
466
|
-
|
|
466
|
+
getFeatureFlagResult(key, options) {
|
|
467
|
+
return this._getFeatureFlagResult(key, options);
|
|
468
|
+
}
|
|
469
|
+
_getFeatureFlagResult(key, options = {}) {
|
|
467
470
|
const storedDetails = this.getStoredFlagDetails();
|
|
468
471
|
const details = this.getFeatureFlagDetails();
|
|
469
|
-
const errors = [];
|
|
470
472
|
const isQuotaLimited = storedDetails?.quotaLimited?.includes(external_posthog_core_stateless_js_namespaceObject.QuotaLimitedFeature.FeatureFlags);
|
|
471
|
-
if (storedDetails?.requestError) {
|
|
472
|
-
const { type, statusCode } = storedDetails.requestError;
|
|
473
|
-
if ('timeout' === type) errors.push(external_types_js_namespaceObject.FeatureFlagError.TIMEOUT);
|
|
474
|
-
else if ('api_error' === type && void 0 !== statusCode) errors.push(external_types_js_namespaceObject.FeatureFlagError.apiError(statusCode));
|
|
475
|
-
else if ('connection_error' === type) errors.push(external_types_js_namespaceObject.FeatureFlagError.CONNECTION_ERROR);
|
|
476
|
-
else errors.push(external_types_js_namespaceObject.FeatureFlagError.UNKNOWN_ERROR);
|
|
477
|
-
} else if (storedDetails) {
|
|
478
|
-
if (storedDetails.errorsWhileComputingFlags) errors.push(external_types_js_namespaceObject.FeatureFlagError.ERRORS_WHILE_COMPUTING);
|
|
479
|
-
if (isQuotaLimited) errors.push(external_types_js_namespaceObject.FeatureFlagError.QUOTA_LIMITED);
|
|
480
|
-
}
|
|
481
473
|
const featureFlag = details?.flags[key];
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
if (
|
|
487
|
-
|
|
488
|
-
|
|
474
|
+
const sendEvent = (options.sendEvent ?? this.sendFeatureFlagEvent) && !this.flagCallReported[key];
|
|
475
|
+
const flagValue = (0, external_featureFlagUtils_js_namespaceObject.getFeatureFlagValue)(featureFlag);
|
|
476
|
+
if (sendEvent) {
|
|
477
|
+
const errors = [];
|
|
478
|
+
if (storedDetails?.requestError) {
|
|
479
|
+
const { type, statusCode } = storedDetails.requestError;
|
|
480
|
+
if ('timeout' === type) errors.push(external_types_js_namespaceObject.FeatureFlagError.TIMEOUT);
|
|
481
|
+
else if ('api_error' === type && void 0 !== statusCode) errors.push(external_types_js_namespaceObject.FeatureFlagError.apiError(statusCode));
|
|
482
|
+
else if ('connection_error' === type) errors.push(external_types_js_namespaceObject.FeatureFlagError.CONNECTION_ERROR);
|
|
483
|
+
else errors.push(external_types_js_namespaceObject.FeatureFlagError.UNKNOWN_ERROR);
|
|
484
|
+
} else if (storedDetails) {
|
|
485
|
+
if (storedDetails.errorsWhileComputingFlags) errors.push(external_types_js_namespaceObject.FeatureFlagError.ERRORS_WHILE_COMPUTING);
|
|
486
|
+
if (isQuotaLimited) errors.push(external_types_js_namespaceObject.FeatureFlagError.QUOTA_LIMITED);
|
|
487
|
+
else if (void 0 === flagValue && !featureFlag) errors.push(external_types_js_namespaceObject.FeatureFlagError.FLAG_MISSING);
|
|
488
|
+
}
|
|
489
489
|
const bootstrappedResponse = this.getBootstrappedFeatureFlags()?.[key];
|
|
490
490
|
const bootstrappedPayload = this.getBootstrappedFeatureFlagPayloads()?.[key];
|
|
491
491
|
const featureFlagError = errors.length > 0 ? errors.join(',') : void 0;
|
|
492
492
|
this.flagCallReported[key] = true;
|
|
493
493
|
const properties = {
|
|
494
494
|
$feature_flag: key,
|
|
495
|
-
$feature_flag_response:
|
|
495
|
+
$feature_flag_response: flagValue,
|
|
496
496
|
...(0, external_posthog_core_stateless_js_namespaceObject.maybeAdd)('$feature_flag_id', featureFlag?.metadata?.id),
|
|
497
497
|
...(0, external_posthog_core_stateless_js_namespaceObject.maybeAdd)('$feature_flag_version', featureFlag?.metadata?.version),
|
|
498
498
|
...(0, external_posthog_core_stateless_js_namespaceObject.maybeAdd)('$feature_flag_reason', featureFlag?.reason?.description ?? featureFlag?.reason?.code),
|
|
@@ -505,14 +505,43 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
|
|
|
505
505
|
};
|
|
506
506
|
this.capture('$feature_flag_called', properties);
|
|
507
507
|
}
|
|
508
|
-
|
|
508
|
+
if (void 0 === flagValue) switch(options.missingFlagBehavior){
|
|
509
|
+
case 'getFeatureFlagPayload':
|
|
510
|
+
return details ? {
|
|
511
|
+
key,
|
|
512
|
+
enabled: false,
|
|
513
|
+
payload: null
|
|
514
|
+
} : void 0;
|
|
515
|
+
case 'getFeatureFlag':
|
|
516
|
+
return details && Object.keys(details.flags).length ? {
|
|
517
|
+
key,
|
|
518
|
+
enabled: false,
|
|
519
|
+
payload: null
|
|
520
|
+
} : void 0;
|
|
521
|
+
case void 0:
|
|
522
|
+
return;
|
|
523
|
+
}
|
|
524
|
+
const rawPayload = featureFlag?.metadata?.payload;
|
|
525
|
+
const payload = void 0 !== rawPayload ? (0, external_featureFlagUtils_js_namespaceObject.parsePayload)(rawPayload) : null;
|
|
526
|
+
return {
|
|
527
|
+
key,
|
|
528
|
+
enabled: (0, external_featureFlagUtils_js_namespaceObject.getEnabledFromValue)(flagValue),
|
|
529
|
+
variant: (0, external_featureFlagUtils_js_namespaceObject.getVariantFromValue)(flagValue),
|
|
530
|
+
payload
|
|
531
|
+
};
|
|
532
|
+
}
|
|
533
|
+
getFeatureFlag(key) {
|
|
534
|
+
const result = this._getFeatureFlagResult(key, {
|
|
535
|
+
missingFlagBehavior: 'getFeatureFlag'
|
|
536
|
+
});
|
|
537
|
+
return result?.variant ?? result?.enabled;
|
|
509
538
|
}
|
|
510
539
|
getFeatureFlagPayload(key) {
|
|
511
|
-
const
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
return
|
|
540
|
+
const result = this._getFeatureFlagResult(key, {
|
|
541
|
+
missingFlagBehavior: 'getFeatureFlagPayload',
|
|
542
|
+
sendEvent: false
|
|
543
|
+
});
|
|
544
|
+
return result?.payload;
|
|
516
545
|
}
|
|
517
546
|
getFeatureFlagPayloads() {
|
|
518
547
|
return this.getFeatureFlagDetails()?.featureFlagPayloads;
|
package/dist/posthog-core.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createFlagsResponseFromFlagsAndPayloads, getFeatureFlagValue, getFlagValuesFromFlags, getPayloadsFromFlags, normalizeFlagsResponse, updateFlagValue } from "./featureFlagUtils.mjs";
|
|
1
|
+
import { createFlagsResponseFromFlagsAndPayloads, getEnabledFromValue, getFeatureFlagValue, getFlagValuesFromFlags, getPayloadsFromFlags, getVariantFromValue, normalizeFlagsResponse, parsePayload, updateFlagValue } from "./featureFlagUtils.mjs";
|
|
2
2
|
import { Compression, FeatureFlagError, PostHogPersistedProperty } from "./types.mjs";
|
|
3
3
|
import { PostHogCoreStateless, QuotaLimitedFeature, maybeAdd } from "./posthog-core-stateless.mjs";
|
|
4
4
|
import { uuidv7 } from "./vendor/uuidv7.mjs";
|
|
@@ -435,36 +435,36 @@ class PostHogCore extends PostHogCoreStateless {
|
|
|
435
435
|
if (!details) return;
|
|
436
436
|
return getPayloadsFromFlags(details.flags);
|
|
437
437
|
}
|
|
438
|
-
|
|
438
|
+
getFeatureFlagResult(key, options) {
|
|
439
|
+
return this._getFeatureFlagResult(key, options);
|
|
440
|
+
}
|
|
441
|
+
_getFeatureFlagResult(key, options = {}) {
|
|
439
442
|
const storedDetails = this.getStoredFlagDetails();
|
|
440
443
|
const details = this.getFeatureFlagDetails();
|
|
441
|
-
const errors = [];
|
|
442
444
|
const isQuotaLimited = storedDetails?.quotaLimited?.includes(QuotaLimitedFeature.FeatureFlags);
|
|
443
|
-
if (storedDetails?.requestError) {
|
|
444
|
-
const { type, statusCode } = storedDetails.requestError;
|
|
445
|
-
if ('timeout' === type) errors.push(FeatureFlagError.TIMEOUT);
|
|
446
|
-
else if ('api_error' === type && void 0 !== statusCode) errors.push(FeatureFlagError.apiError(statusCode));
|
|
447
|
-
else if ('connection_error' === type) errors.push(FeatureFlagError.CONNECTION_ERROR);
|
|
448
|
-
else errors.push(FeatureFlagError.UNKNOWN_ERROR);
|
|
449
|
-
} else if (storedDetails) {
|
|
450
|
-
if (storedDetails.errorsWhileComputingFlags) errors.push(FeatureFlagError.ERRORS_WHILE_COMPUTING);
|
|
451
|
-
if (isQuotaLimited) errors.push(FeatureFlagError.QUOTA_LIMITED);
|
|
452
|
-
}
|
|
453
445
|
const featureFlag = details?.flags[key];
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
if (
|
|
459
|
-
|
|
460
|
-
|
|
446
|
+
const sendEvent = (options.sendEvent ?? this.sendFeatureFlagEvent) && !this.flagCallReported[key];
|
|
447
|
+
const flagValue = getFeatureFlagValue(featureFlag);
|
|
448
|
+
if (sendEvent) {
|
|
449
|
+
const errors = [];
|
|
450
|
+
if (storedDetails?.requestError) {
|
|
451
|
+
const { type, statusCode } = storedDetails.requestError;
|
|
452
|
+
if ('timeout' === type) errors.push(FeatureFlagError.TIMEOUT);
|
|
453
|
+
else if ('api_error' === type && void 0 !== statusCode) errors.push(FeatureFlagError.apiError(statusCode));
|
|
454
|
+
else if ('connection_error' === type) errors.push(FeatureFlagError.CONNECTION_ERROR);
|
|
455
|
+
else errors.push(FeatureFlagError.UNKNOWN_ERROR);
|
|
456
|
+
} else if (storedDetails) {
|
|
457
|
+
if (storedDetails.errorsWhileComputingFlags) errors.push(FeatureFlagError.ERRORS_WHILE_COMPUTING);
|
|
458
|
+
if (isQuotaLimited) errors.push(FeatureFlagError.QUOTA_LIMITED);
|
|
459
|
+
else if (void 0 === flagValue && !featureFlag) errors.push(FeatureFlagError.FLAG_MISSING);
|
|
460
|
+
}
|
|
461
461
|
const bootstrappedResponse = this.getBootstrappedFeatureFlags()?.[key];
|
|
462
462
|
const bootstrappedPayload = this.getBootstrappedFeatureFlagPayloads()?.[key];
|
|
463
463
|
const featureFlagError = errors.length > 0 ? errors.join(',') : void 0;
|
|
464
464
|
this.flagCallReported[key] = true;
|
|
465
465
|
const properties = {
|
|
466
466
|
$feature_flag: key,
|
|
467
|
-
$feature_flag_response:
|
|
467
|
+
$feature_flag_response: flagValue,
|
|
468
468
|
...maybeAdd('$feature_flag_id', featureFlag?.metadata?.id),
|
|
469
469
|
...maybeAdd('$feature_flag_version', featureFlag?.metadata?.version),
|
|
470
470
|
...maybeAdd('$feature_flag_reason', featureFlag?.reason?.description ?? featureFlag?.reason?.code),
|
|
@@ -477,14 +477,43 @@ class PostHogCore extends PostHogCoreStateless {
|
|
|
477
477
|
};
|
|
478
478
|
this.capture('$feature_flag_called', properties);
|
|
479
479
|
}
|
|
480
|
-
|
|
480
|
+
if (void 0 === flagValue) switch(options.missingFlagBehavior){
|
|
481
|
+
case 'getFeatureFlagPayload':
|
|
482
|
+
return details ? {
|
|
483
|
+
key,
|
|
484
|
+
enabled: false,
|
|
485
|
+
payload: null
|
|
486
|
+
} : void 0;
|
|
487
|
+
case 'getFeatureFlag':
|
|
488
|
+
return details && Object.keys(details.flags).length ? {
|
|
489
|
+
key,
|
|
490
|
+
enabled: false,
|
|
491
|
+
payload: null
|
|
492
|
+
} : void 0;
|
|
493
|
+
case void 0:
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
const rawPayload = featureFlag?.metadata?.payload;
|
|
497
|
+
const payload = void 0 !== rawPayload ? parsePayload(rawPayload) : null;
|
|
498
|
+
return {
|
|
499
|
+
key,
|
|
500
|
+
enabled: getEnabledFromValue(flagValue),
|
|
501
|
+
variant: getVariantFromValue(flagValue),
|
|
502
|
+
payload
|
|
503
|
+
};
|
|
504
|
+
}
|
|
505
|
+
getFeatureFlag(key) {
|
|
506
|
+
const result = this._getFeatureFlagResult(key, {
|
|
507
|
+
missingFlagBehavior: 'getFeatureFlag'
|
|
508
|
+
});
|
|
509
|
+
return result?.variant ?? result?.enabled;
|
|
481
510
|
}
|
|
482
511
|
getFeatureFlagPayload(key) {
|
|
483
|
-
const
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
return
|
|
512
|
+
const result = this._getFeatureFlagResult(key, {
|
|
513
|
+
missingFlagBehavior: 'getFeatureFlagPayload',
|
|
514
|
+
sendEvent: false
|
|
515
|
+
});
|
|
516
|
+
return result?.payload;
|
|
488
517
|
}
|
|
489
518
|
getFeatureFlagPayloads() {
|
|
490
519
|
return this.getFeatureFlagDetails()?.featureFlagPayloads;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SurveyValidationRule, SurveyValidationType } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Validates a survey open text response.
|
|
4
|
+
* Returns an error message string if invalid, or false if valid.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getValidationError(value: string, rules: SurveyValidationRule[] | undefined, optional: boolean | undefined): string | false;
|
|
7
|
+
/**
|
|
8
|
+
* Helper to extract a length value from validation rules by type
|
|
9
|
+
*/
|
|
10
|
+
export declare function getLengthFromRules(rules: SurveyValidationRule[] | undefined, type: SurveyValidationType): number | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Builds a requirements hint message for display to the user.
|
|
13
|
+
* Returns undefined if no hint should be shown.
|
|
14
|
+
*
|
|
15
|
+
* min=1 is always hidden because:
|
|
16
|
+
* - Required questions: min=1 is redundant (required already means "enter something")
|
|
17
|
+
* - Optional questions: min=1 is useless (user can skip, or if they type anything it's ≥1 char)
|
|
18
|
+
*/
|
|
19
|
+
export declare function getRequirementsHint(minLength: number | undefined, maxLength: number | undefined): string | undefined;
|
|
20
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/surveys/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAErE;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,oBAAoB,EAAE,GAAG,SAAS,EACzC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAC5B,MAAM,GAAG,KAAK,CAiChB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,oBAAoB,EAAE,GAAG,SAAS,EACzC,IAAI,EAAE,oBAAoB,GACzB,MAAM,GAAG,SAAS,CAIpB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAcpH"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
getRequirementsHint: ()=>getRequirementsHint,
|
|
28
|
+
getLengthFromRules: ()=>getLengthFromRules,
|
|
29
|
+
getValidationError: ()=>getValidationError
|
|
30
|
+
});
|
|
31
|
+
const external_types_js_namespaceObject = require("../types.js");
|
|
32
|
+
function getValidationError(value, rules, optional) {
|
|
33
|
+
const trimmed = value.trim();
|
|
34
|
+
if (!optional && '' === trimmed) return 'This field is required';
|
|
35
|
+
if ('' === trimmed) return false;
|
|
36
|
+
if (rules && rules.length > 0) for (const rule of rules)switch(rule.type){
|
|
37
|
+
case external_types_js_namespaceObject.SurveyValidationType.MinLength:
|
|
38
|
+
if (void 0 !== rule.value && trimmed.length < rule.value) return rule.errorMessage ?? `Please enter at least ${rule.value} characters`;
|
|
39
|
+
break;
|
|
40
|
+
case external_types_js_namespaceObject.SurveyValidationType.MaxLength:
|
|
41
|
+
if (void 0 !== rule.value && trimmed.length > rule.value) return rule.errorMessage ?? `Please enter no more than ${rule.value} characters`;
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
function getLengthFromRules(rules, type) {
|
|
47
|
+
if (!rules) return;
|
|
48
|
+
const rule = rules.find((r)=>r.type === type);
|
|
49
|
+
return rule?.value;
|
|
50
|
+
}
|
|
51
|
+
function getRequirementsHint(minLength, maxLength) {
|
|
52
|
+
const effectiveMin = 1 === minLength ? void 0 : minLength;
|
|
53
|
+
if (effectiveMin && maxLength) return `Enter ${effectiveMin}-${maxLength} characters`;
|
|
54
|
+
if (effectiveMin) {
|
|
55
|
+
const plural = 1 === effectiveMin ? 'character' : 'characters';
|
|
56
|
+
return `Enter at least ${effectiveMin} ${plural}`;
|
|
57
|
+
}
|
|
58
|
+
if (maxLength) {
|
|
59
|
+
const plural = 1 === maxLength ? 'character' : 'characters';
|
|
60
|
+
return `Maximum ${maxLength} ${plural}`;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.getLengthFromRules = __webpack_exports__.getLengthFromRules;
|
|
64
|
+
exports.getRequirementsHint = __webpack_exports__.getRequirementsHint;
|
|
65
|
+
exports.getValidationError = __webpack_exports__.getValidationError;
|
|
66
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
67
|
+
"getLengthFromRules",
|
|
68
|
+
"getRequirementsHint",
|
|
69
|
+
"getValidationError"
|
|
70
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
71
|
+
Object.defineProperty(exports, '__esModule', {
|
|
72
|
+
value: true
|
|
73
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { SurveyValidationType } from "../types.mjs";
|
|
2
|
+
function getValidationError(value, rules, optional) {
|
|
3
|
+
const trimmed = value.trim();
|
|
4
|
+
if (!optional && '' === trimmed) return 'This field is required';
|
|
5
|
+
if ('' === trimmed) return false;
|
|
6
|
+
if (rules && rules.length > 0) for (const rule of rules)switch(rule.type){
|
|
7
|
+
case SurveyValidationType.MinLength:
|
|
8
|
+
if (void 0 !== rule.value && trimmed.length < rule.value) return rule.errorMessage ?? `Please enter at least ${rule.value} characters`;
|
|
9
|
+
break;
|
|
10
|
+
case SurveyValidationType.MaxLength:
|
|
11
|
+
if (void 0 !== rule.value && trimmed.length > rule.value) return rule.errorMessage ?? `Please enter no more than ${rule.value} characters`;
|
|
12
|
+
break;
|
|
13
|
+
}
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
function getLengthFromRules(rules, type) {
|
|
17
|
+
if (!rules) return;
|
|
18
|
+
const rule = rules.find((r)=>r.type === type);
|
|
19
|
+
return rule?.value;
|
|
20
|
+
}
|
|
21
|
+
function getRequirementsHint(minLength, maxLength) {
|
|
22
|
+
const effectiveMin = 1 === minLength ? void 0 : minLength;
|
|
23
|
+
if (effectiveMin && maxLength) return `Enter ${effectiveMin}-${maxLength} characters`;
|
|
24
|
+
if (effectiveMin) {
|
|
25
|
+
const plural = 1 === effectiveMin ? 'character' : 'characters';
|
|
26
|
+
return `Enter at least ${effectiveMin} ${plural}`;
|
|
27
|
+
}
|
|
28
|
+
if (maxLength) {
|
|
29
|
+
const plural = 1 === maxLength ? 'character' : 'characters';
|
|
30
|
+
return `Maximum ${maxLength} ${plural}`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export { getLengthFromRules, getRequirementsHint, getValidationError };
|
package/dist/types.d.ts
CHANGED
|
@@ -210,6 +210,19 @@ export type PostHogRemoteConfig = {
|
|
|
210
210
|
hasFeatureFlags?: boolean;
|
|
211
211
|
};
|
|
212
212
|
export type FeatureFlagValue = string | boolean;
|
|
213
|
+
/**
|
|
214
|
+
* Result of evaluating a feature flag, including both the flag value and its payload.
|
|
215
|
+
*/
|
|
216
|
+
export type FeatureFlagResult = {
|
|
217
|
+
readonly key: string;
|
|
218
|
+
readonly enabled: boolean;
|
|
219
|
+
readonly variant?: string;
|
|
220
|
+
readonly payload?: JsonType;
|
|
221
|
+
};
|
|
222
|
+
export type FeatureFlagResultOptions = {
|
|
223
|
+
/** Whether to send a $feature_flag_called event. Defaults to true. */
|
|
224
|
+
sendEvent?: boolean;
|
|
225
|
+
};
|
|
213
226
|
export type PostHogFlagsResponse = Omit<PostHogRemoteConfig, 'hasFeatureFlags'> & {
|
|
214
227
|
featureFlags: {
|
|
215
228
|
[key: string]: FeatureFlagValue;
|
|
@@ -402,6 +415,15 @@ export declare enum SurveyQuestionDescriptionContentType {
|
|
|
402
415
|
Html = "html",
|
|
403
416
|
Text = "text"
|
|
404
417
|
}
|
|
418
|
+
export declare enum SurveyValidationType {
|
|
419
|
+
MinLength = "min_length",
|
|
420
|
+
MaxLength = "max_length"
|
|
421
|
+
}
|
|
422
|
+
export interface SurveyValidationRule {
|
|
423
|
+
type: SurveyValidationType;
|
|
424
|
+
value?: number;
|
|
425
|
+
errorMessage?: string;
|
|
426
|
+
}
|
|
405
427
|
type SurveyQuestionBase = {
|
|
406
428
|
question: string;
|
|
407
429
|
id: string;
|
|
@@ -411,6 +433,7 @@ type SurveyQuestionBase = {
|
|
|
411
433
|
buttonText?: string;
|
|
412
434
|
originalQuestionIndex: number;
|
|
413
435
|
branching?: NextQuestionBranching | EndBranching | ResponseBasedBranching | SpecificQuestionBranching;
|
|
436
|
+
validation?: SurveyValidationRule[];
|
|
414
437
|
};
|
|
415
438
|
export type BasicSurveyQuestion = SurveyQuestionBase & {
|
|
416
439
|
type: SurveyQuestionType.Open;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -36,6 +36,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
36
36
|
SurveyRatingDisplay: ()=>SurveyRatingDisplay,
|
|
37
37
|
SurveySchedule: ()=>SurveySchedule,
|
|
38
38
|
SurveyType: ()=>SurveyType,
|
|
39
|
+
SurveyValidationType: ()=>SurveyValidationType,
|
|
39
40
|
SurveyWidgetType: ()=>SurveyWidgetType,
|
|
40
41
|
knownUnsafeEditableEvent: ()=>knownUnsafeEditableEvent
|
|
41
42
|
});
|
|
@@ -113,6 +114,11 @@ var SurveyQuestionDescriptionContentType = /*#__PURE__*/ function(SurveyQuestion
|
|
|
113
114
|
SurveyQuestionDescriptionContentType["Text"] = "text";
|
|
114
115
|
return SurveyQuestionDescriptionContentType;
|
|
115
116
|
}({});
|
|
117
|
+
var SurveyValidationType = /*#__PURE__*/ function(SurveyValidationType) {
|
|
118
|
+
SurveyValidationType["MinLength"] = "min_length";
|
|
119
|
+
SurveyValidationType["MaxLength"] = "max_length";
|
|
120
|
+
return SurveyValidationType;
|
|
121
|
+
}({});
|
|
116
122
|
var SurveyRatingDisplay = /*#__PURE__*/ function(SurveyRatingDisplay) {
|
|
117
123
|
SurveyRatingDisplay["Number"] = "number";
|
|
118
124
|
SurveyRatingDisplay["Emoji"] = "emoji";
|
|
@@ -182,6 +188,7 @@ exports.SurveyQuestionType = __webpack_exports__.SurveyQuestionType;
|
|
|
182
188
|
exports.SurveyRatingDisplay = __webpack_exports__.SurveyRatingDisplay;
|
|
183
189
|
exports.SurveySchedule = __webpack_exports__.SurveySchedule;
|
|
184
190
|
exports.SurveyType = __webpack_exports__.SurveyType;
|
|
191
|
+
exports.SurveyValidationType = __webpack_exports__.SurveyValidationType;
|
|
185
192
|
exports.SurveyWidgetType = __webpack_exports__.SurveyWidgetType;
|
|
186
193
|
exports.knownUnsafeEditableEvent = __webpack_exports__.knownUnsafeEditableEvent;
|
|
187
194
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
@@ -197,6 +204,7 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
|
197
204
|
"SurveyRatingDisplay",
|
|
198
205
|
"SurveySchedule",
|
|
199
206
|
"SurveyType",
|
|
207
|
+
"SurveyValidationType",
|
|
200
208
|
"SurveyWidgetType",
|
|
201
209
|
"knownUnsafeEditableEvent"
|
|
202
210
|
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
package/dist/types.mjs
CHANGED
|
@@ -72,6 +72,11 @@ var types_SurveyQuestionDescriptionContentType = /*#__PURE__*/ function(SurveyQu
|
|
|
72
72
|
SurveyQuestionDescriptionContentType["Text"] = "text";
|
|
73
73
|
return SurveyQuestionDescriptionContentType;
|
|
74
74
|
}({});
|
|
75
|
+
var types_SurveyValidationType = /*#__PURE__*/ function(SurveyValidationType) {
|
|
76
|
+
SurveyValidationType["MinLength"] = "min_length";
|
|
77
|
+
SurveyValidationType["MaxLength"] = "max_length";
|
|
78
|
+
return SurveyValidationType;
|
|
79
|
+
}({});
|
|
75
80
|
var types_SurveyRatingDisplay = /*#__PURE__*/ function(SurveyRatingDisplay) {
|
|
76
81
|
SurveyRatingDisplay["Number"] = "number";
|
|
77
82
|
SurveyRatingDisplay["Emoji"] = "emoji";
|
|
@@ -129,4 +134,4 @@ const knownUnsafeEditableEvent = [
|
|
|
129
134
|
'$feature_enrollment_update',
|
|
130
135
|
'$feature_flag_called'
|
|
131
136
|
];
|
|
132
|
-
export { types_ActionStepStringMatching as ActionStepStringMatching, types_Compression as Compression, FeatureFlagError, types_PostHogPersistedProperty as PostHogPersistedProperty, types_SurveyMatchType as SurveyMatchType, types_SurveyPosition as SurveyPosition, types_SurveyQuestionBranchingType as SurveyQuestionBranchingType, types_SurveyQuestionDescriptionContentType as SurveyQuestionDescriptionContentType, types_SurveyQuestionType as SurveyQuestionType, types_SurveyRatingDisplay as SurveyRatingDisplay, types_SurveySchedule as SurveySchedule, types_SurveyType as SurveyType, types_SurveyWidgetType as SurveyWidgetType, knownUnsafeEditableEvent };
|
|
137
|
+
export { types_ActionStepStringMatching as ActionStepStringMatching, types_Compression as Compression, FeatureFlagError, types_PostHogPersistedProperty as PostHogPersistedProperty, types_SurveyMatchType as SurveyMatchType, types_SurveyPosition as SurveyPosition, types_SurveyQuestionBranchingType as SurveyQuestionBranchingType, types_SurveyQuestionDescriptionContentType as SurveyQuestionDescriptionContentType, types_SurveyQuestionType as SurveyQuestionType, types_SurveyRatingDisplay as SurveyRatingDisplay, types_SurveySchedule as SurveySchedule, types_SurveyType as SurveyType, types_SurveyValidationType as SurveyValidationType, types_SurveyWidgetType as SurveyWidgetType, knownUnsafeEditableEvent };
|
package/package.json
CHANGED
package/src/featureFlagUtils.ts
CHANGED
|
@@ -183,10 +183,10 @@ export const updateFlagValue = (flag: FeatureFlagDetail, value: FeatureFlagValue
|
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
-
function getEnabledFromValue(value: FeatureFlagValue): boolean {
|
|
186
|
+
export function getEnabledFromValue(value: FeatureFlagValue): boolean {
|
|
187
187
|
return typeof value === 'string' ? true : value
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
-
function getVariantFromValue(value: FeatureFlagValue): string | undefined {
|
|
190
|
+
export function getVariantFromValue(value: FeatureFlagValue): string | undefined {
|
|
191
191
|
return typeof value === 'string' ? value : undefined
|
|
192
192
|
}
|
package/src/index.ts
CHANGED
package/src/posthog-core.ts
CHANGED
|
@@ -8,6 +8,8 @@ import type {
|
|
|
8
8
|
JsonType,
|
|
9
9
|
PostHogRemoteConfig,
|
|
10
10
|
FeatureFlagValue,
|
|
11
|
+
FeatureFlagResult,
|
|
12
|
+
FeatureFlagResultOptions,
|
|
11
13
|
PostHogV2FlagsResponse,
|
|
12
14
|
PostHogV1FlagsResponse,
|
|
13
15
|
PostHogFeatureFlagDetails,
|
|
@@ -21,10 +23,13 @@ import type {
|
|
|
21
23
|
} from './types'
|
|
22
24
|
import {
|
|
23
25
|
createFlagsResponseFromFlagsAndPayloads,
|
|
26
|
+
getEnabledFromValue,
|
|
24
27
|
getFeatureFlagValue,
|
|
25
28
|
getFlagValuesFromFlags,
|
|
26
29
|
getPayloadsFromFlags,
|
|
30
|
+
getVariantFromValue,
|
|
27
31
|
normalizeFlagsResponse,
|
|
32
|
+
parsePayload,
|
|
28
33
|
updateFlagValue,
|
|
29
34
|
} from './featureFlagUtils'
|
|
30
35
|
import { Compression, FeatureFlagError, PostHogPersistedProperty } from './types'
|
|
@@ -806,61 +811,69 @@ export abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
806
811
|
return getPayloadsFromFlags(details.flags)
|
|
807
812
|
}
|
|
808
813
|
|
|
809
|
-
|
|
814
|
+
getFeatureFlagResult(key: string, options?: FeatureFlagResultOptions): FeatureFlagResult | undefined {
|
|
815
|
+
return this._getFeatureFlagResult(key, options)
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
protected _getFeatureFlagResult(
|
|
819
|
+
key: string,
|
|
820
|
+
options: {
|
|
821
|
+
/** Whether to send an event that the flag was evaluated. This defaults to true,
|
|
822
|
+
* but will respect the instance-level sendFeatureFlagEvent setting.
|
|
823
|
+
*/
|
|
824
|
+
sendEvent?: boolean
|
|
825
|
+
/**
|
|
826
|
+
* Preserves the legacy missing-flag behavior of the named function.
|
|
827
|
+
* Each value matches how that function handled missing flags before getFeatureFlagResult existed:
|
|
828
|
+
* - 'getFeatureFlag': returns a default only when non-empty flags are cached
|
|
829
|
+
* - 'getFeatureFlagPayload': returns a default whenever any flags response was stored (even if empty, e.g. error/quota)
|
|
830
|
+
* Without this, missing flags simply return undefined (this is usually what you want).
|
|
831
|
+
*/
|
|
832
|
+
missingFlagBehavior?: 'getFeatureFlag' | 'getFeatureFlagPayload'
|
|
833
|
+
} = {}
|
|
834
|
+
): FeatureFlagResult | undefined {
|
|
810
835
|
const storedDetails = this.getStoredFlagDetails()
|
|
811
836
|
const details = this.getFeatureFlagDetails()
|
|
812
|
-
const errors: string[] = []
|
|
813
837
|
const isQuotaLimited = storedDetails?.quotaLimited?.includes(QuotaLimitedFeature.FeatureFlags)
|
|
814
|
-
|
|
815
|
-
if (storedDetails?.requestError) {
|
|
816
|
-
const { type, statusCode } = storedDetails.requestError
|
|
817
|
-
if (type === 'timeout') {
|
|
818
|
-
errors.push(FeatureFlagError.TIMEOUT)
|
|
819
|
-
} else if (type === 'api_error' && statusCode !== undefined) {
|
|
820
|
-
errors.push(FeatureFlagError.apiError(statusCode))
|
|
821
|
-
} else if (type === 'connection_error') {
|
|
822
|
-
errors.push(FeatureFlagError.CONNECTION_ERROR)
|
|
823
|
-
} else {
|
|
824
|
-
errors.push(FeatureFlagError.UNKNOWN_ERROR)
|
|
825
|
-
}
|
|
826
|
-
} else if (storedDetails) {
|
|
827
|
-
if (storedDetails.errorsWhileComputingFlags) {
|
|
828
|
-
errors.push(FeatureFlagError.ERRORS_WHILE_COMPUTING)
|
|
829
|
-
}
|
|
830
|
-
if (isQuotaLimited) {
|
|
831
|
-
errors.push(FeatureFlagError.QUOTA_LIMITED)
|
|
832
|
-
}
|
|
833
|
-
}
|
|
834
|
-
|
|
835
838
|
const featureFlag = details?.flags[key]
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
if (
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
839
|
+
const sendEvent = (options.sendEvent ?? this.sendFeatureFlagEvent) && !this.flagCallReported[key]
|
|
840
|
+
const flagValue: FeatureFlagValue | undefined = getFeatureFlagValue(featureFlag)
|
|
841
|
+
|
|
842
|
+
if (sendEvent) {
|
|
843
|
+
const errors: string[] = []
|
|
844
|
+
if (storedDetails?.requestError) {
|
|
845
|
+
const { type, statusCode } = storedDetails.requestError
|
|
846
|
+
if (type === 'timeout') {
|
|
847
|
+
errors.push(FeatureFlagError.TIMEOUT)
|
|
848
|
+
} else if (type === 'api_error' && statusCode !== undefined) {
|
|
849
|
+
errors.push(FeatureFlagError.apiError(statusCode))
|
|
850
|
+
} else if (type === 'connection_error') {
|
|
851
|
+
errors.push(FeatureFlagError.CONNECTION_ERROR)
|
|
852
|
+
} else {
|
|
853
|
+
errors.push(FeatureFlagError.UNKNOWN_ERROR)
|
|
854
|
+
}
|
|
855
|
+
} else if (storedDetails) {
|
|
856
|
+
if (storedDetails.errorsWhileComputingFlags) {
|
|
857
|
+
errors.push(FeatureFlagError.ERRORS_WHILE_COMPUTING)
|
|
858
|
+
}
|
|
859
|
+
if (isQuotaLimited) {
|
|
860
|
+
errors.push(FeatureFlagError.QUOTA_LIMITED)
|
|
861
|
+
} else if (flagValue === undefined && !featureFlag) {
|
|
862
|
+
// Track missing flags only when we had a successful, non-limited request.
|
|
863
|
+
// When quota limited or request failed, we cannot determine if the flag is truly missing.
|
|
864
|
+
errors.push(FeatureFlagError.FLAG_MISSING)
|
|
865
|
+
}
|
|
850
866
|
}
|
|
851
|
-
}
|
|
852
867
|
|
|
853
|
-
if (this.sendFeatureFlagEvent && !this.flagCallReported[key]) {
|
|
854
868
|
const bootstrappedResponse = this.getBootstrappedFeatureFlags()?.[key]
|
|
855
869
|
const bootstrappedPayload = this.getBootstrappedFeatureFlagPayloads()?.[key]
|
|
856
|
-
|
|
857
870
|
const featureFlagError = errors.length > 0 ? errors.join(',') : undefined
|
|
858
871
|
|
|
859
872
|
this.flagCallReported[key] = true
|
|
860
873
|
|
|
861
874
|
const properties: Record<string, any> = {
|
|
862
875
|
$feature_flag: key,
|
|
863
|
-
$feature_flag_response:
|
|
876
|
+
$feature_flag_response: flagValue,
|
|
864
877
|
...maybeAdd('$feature_flag_id', featureFlag?.metadata?.id),
|
|
865
878
|
...maybeAdd('$feature_flag_version', featureFlag?.metadata?.version),
|
|
866
879
|
...maybeAdd('$feature_flag_reason', featureFlag?.reason?.description ?? featureFlag?.reason?.code),
|
|
@@ -876,24 +889,38 @@ export abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
876
889
|
this.capture('$feature_flag_called', properties)
|
|
877
890
|
}
|
|
878
891
|
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
892
|
+
if (flagValue === undefined) {
|
|
893
|
+
// TRICKY: getFeatureFlagPayload and getFeatureFlag had different criteria for
|
|
894
|
+
// "missing flag" vs "flags not loaded" return values before
|
|
895
|
+
// _getFeatureFlagResult existed. Preserved for backward compatibility.
|
|
896
|
+
switch (options.missingFlagBehavior) {
|
|
897
|
+
case 'getFeatureFlagPayload':
|
|
898
|
+
return details ? { key, enabled: false, payload: null } : undefined
|
|
899
|
+
case 'getFeatureFlag':
|
|
900
|
+
return details && Object.keys(details.flags).length ? { key, enabled: false, payload: null } : undefined
|
|
901
|
+
case undefined:
|
|
902
|
+
return undefined
|
|
903
|
+
}
|
|
887
904
|
}
|
|
888
905
|
|
|
889
|
-
const
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
906
|
+
const rawPayload = featureFlag?.metadata?.payload
|
|
907
|
+
const payload = rawPayload !== undefined ? parsePayload(rawPayload) : null
|
|
908
|
+
return {
|
|
909
|
+
key,
|
|
910
|
+
enabled: getEnabledFromValue(flagValue),
|
|
911
|
+
variant: getVariantFromValue(flagValue),
|
|
912
|
+
payload,
|
|
894
913
|
}
|
|
914
|
+
}
|
|
895
915
|
|
|
896
|
-
|
|
916
|
+
getFeatureFlag(key: string): FeatureFlagValue | undefined {
|
|
917
|
+
const result = this._getFeatureFlagResult(key, { missingFlagBehavior: 'getFeatureFlag' })
|
|
918
|
+
return result?.variant ?? result?.enabled
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
getFeatureFlagPayload(key: string): JsonType | undefined {
|
|
922
|
+
const result = this._getFeatureFlagResult(key, { missingFlagBehavior: 'getFeatureFlagPayload', sendEvent: false })
|
|
923
|
+
return result?.payload
|
|
897
924
|
}
|
|
898
925
|
|
|
899
926
|
getFeatureFlagPayloads(): PostHogFlagsResponse['featureFlagPayloads'] | undefined {
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { getValidationError, getLengthFromRules, getRequirementsHint } from './validation'
|
|
2
|
+
import { SurveyValidationType, SurveyValidationRule } from '../types'
|
|
3
|
+
|
|
4
|
+
describe('getValidationError', () => {
|
|
5
|
+
describe('required field (trim fix)', () => {
|
|
6
|
+
it('returns error for empty string when required', () => {
|
|
7
|
+
expect(getValidationError('', undefined, false)).toBe('This field is required')
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
it('returns error for whitespace-only when required', () => {
|
|
11
|
+
expect(getValidationError(' ', undefined, false)).toBe('This field is required')
|
|
12
|
+
expect(getValidationError('\t\n', undefined, false)).toBe('This field is required')
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
it('returns false for valid content when required', () => {
|
|
16
|
+
expect(getValidationError('hello', undefined, false)).toBe(false)
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
it('returns false for empty when optional', () => {
|
|
20
|
+
expect(getValidationError('', undefined, true)).toBe(false)
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('returns false for whitespace when optional', () => {
|
|
24
|
+
expect(getValidationError(' ', undefined, true)).toBe(false)
|
|
25
|
+
})
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
describe('backwards compat - no validation rules', () => {
|
|
29
|
+
it('works when validation is undefined', () => {
|
|
30
|
+
expect(getValidationError('hello', undefined, false)).toBe(false)
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
it('works when validation is empty array', () => {
|
|
34
|
+
expect(getValidationError('hello', [], false)).toBe(false)
|
|
35
|
+
})
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
describe('minLength validation', () => {
|
|
39
|
+
const rules: SurveyValidationRule[] = [{ type: SurveyValidationType.MinLength, value: 5 }]
|
|
40
|
+
|
|
41
|
+
it('returns error when too short', () => {
|
|
42
|
+
expect(getValidationError('abc', rules, false)).toBe('Please enter at least 5 characters')
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
it('returns false when exact length', () => {
|
|
46
|
+
expect(getValidationError('abcde', rules, false)).toBe(false)
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
it('returns false when longer than min', () => {
|
|
50
|
+
expect(getValidationError('abcdefgh', rules, false)).toBe(false)
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
it('uses custom error message if provided', () => {
|
|
54
|
+
const customRules: SurveyValidationRule[] = [
|
|
55
|
+
{ type: SurveyValidationType.MinLength, value: 5, errorMessage: 'Too short!' },
|
|
56
|
+
]
|
|
57
|
+
expect(getValidationError('abc', customRules, false)).toBe('Too short!')
|
|
58
|
+
})
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
describe('maxLength validation', () => {
|
|
62
|
+
const rules: SurveyValidationRule[] = [{ type: SurveyValidationType.MaxLength, value: 10 }]
|
|
63
|
+
|
|
64
|
+
it('returns error when too long', () => {
|
|
65
|
+
expect(getValidationError('12345678901', rules, false)).toBe('Please enter no more than 10 characters')
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
it('returns false when exact length', () => {
|
|
69
|
+
expect(getValidationError('1234567890', rules, false)).toBe(false)
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
it('returns false when shorter than max', () => {
|
|
73
|
+
expect(getValidationError('12345', rules, false)).toBe(false)
|
|
74
|
+
})
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
describe('minLength + maxLength combined', () => {
|
|
78
|
+
const rules: SurveyValidationRule[] = [
|
|
79
|
+
{ type: SurveyValidationType.MinLength, value: 5 },
|
|
80
|
+
{ type: SurveyValidationType.MaxLength, value: 10 },
|
|
81
|
+
]
|
|
82
|
+
|
|
83
|
+
it('fails when too short', () => {
|
|
84
|
+
expect(getValidationError('abc', rules, false)).toContain('at least 5')
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
it('fails when too long', () => {
|
|
88
|
+
expect(getValidationError('12345678901', rules, false)).toContain('no more than 10')
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
it('passes when in range', () => {
|
|
92
|
+
expect(getValidationError('1234567', rules, false)).toBe(false)
|
|
93
|
+
})
|
|
94
|
+
})
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
describe('getLengthFromRules', () => {
|
|
98
|
+
it('returns undefined when no rules', () => {
|
|
99
|
+
expect(getLengthFromRules(undefined, SurveyValidationType.MinLength)).toBeUndefined()
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
it('returns undefined when requested type not present', () => {
|
|
103
|
+
expect(
|
|
104
|
+
getLengthFromRules([{ type: SurveyValidationType.MaxLength, value: 10 }], SurveyValidationType.MinLength)
|
|
105
|
+
).toBeUndefined()
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
it('returns minLength value when present', () => {
|
|
109
|
+
expect(
|
|
110
|
+
getLengthFromRules([{ type: SurveyValidationType.MinLength, value: 5 }], SurveyValidationType.MinLength)
|
|
111
|
+
).toBe(5)
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
it('returns maxLength value when present', () => {
|
|
115
|
+
expect(
|
|
116
|
+
getLengthFromRules([{ type: SurveyValidationType.MaxLength, value: 100 }], SurveyValidationType.MaxLength)
|
|
117
|
+
).toBe(100)
|
|
118
|
+
})
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
describe('getRequirementsHint', () => {
|
|
122
|
+
describe('min=1 edge case', () => {
|
|
123
|
+
it('returns undefined for min=1 (redundant/useless hint)', () => {
|
|
124
|
+
expect(getRequirementsHint(1, undefined)).toBeUndefined()
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
it('returns undefined for min=1 even with maxLength', () => {
|
|
128
|
+
// min=1 is still redundant, but maxLength hint should show
|
|
129
|
+
expect(getRequirementsHint(1, 100)).toBe('Maximum 100 characters')
|
|
130
|
+
})
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
describe('minLength only', () => {
|
|
134
|
+
it('returns hint for min > 1', () => {
|
|
135
|
+
expect(getRequirementsHint(5, undefined)).toBe('Enter at least 5 characters')
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
it('uses singular for min=2 (edge case after min=1 is hidden)', () => {
|
|
139
|
+
expect(getRequirementsHint(2, undefined)).toBe('Enter at least 2 characters')
|
|
140
|
+
})
|
|
141
|
+
})
|
|
142
|
+
|
|
143
|
+
describe('maxLength only', () => {
|
|
144
|
+
it('returns hint for maxLength', () => {
|
|
145
|
+
expect(getRequirementsHint(undefined, 100)).toBe('Maximum 100 characters')
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
it('uses singular for max=1', () => {
|
|
149
|
+
expect(getRequirementsHint(undefined, 1)).toBe('Maximum 1 character')
|
|
150
|
+
})
|
|
151
|
+
})
|
|
152
|
+
|
|
153
|
+
describe('minLength + maxLength', () => {
|
|
154
|
+
it('returns combined hint when both present', () => {
|
|
155
|
+
expect(getRequirementsHint(5, 100)).toBe('Enter 5-100 characters')
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
it('shows only maxLength when min=1', () => {
|
|
159
|
+
expect(getRequirementsHint(1, 50)).toBe('Maximum 50 characters')
|
|
160
|
+
})
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
describe('no constraints', () => {
|
|
164
|
+
it('returns undefined when no min or max', () => {
|
|
165
|
+
expect(getRequirementsHint(undefined, undefined)).toBeUndefined()
|
|
166
|
+
})
|
|
167
|
+
})
|
|
168
|
+
})
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { SurveyValidationRule, SurveyValidationType } from '../types'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Validates a survey open text response.
|
|
5
|
+
* Returns an error message string if invalid, or false if valid.
|
|
6
|
+
*/
|
|
7
|
+
export function getValidationError(
|
|
8
|
+
value: string,
|
|
9
|
+
rules: SurveyValidationRule[] | undefined,
|
|
10
|
+
optional: boolean | undefined
|
|
11
|
+
): string | false {
|
|
12
|
+
const trimmed = value.trim()
|
|
13
|
+
|
|
14
|
+
// Required check (with whitespace fix) - applies to ALL required questions
|
|
15
|
+
if (!optional && trimmed === '') {
|
|
16
|
+
return 'This field is required'
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// If optional and empty, skip other validations
|
|
20
|
+
if (trimmed === '') {
|
|
21
|
+
return false
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Apply validation rules (only if configured)
|
|
25
|
+
if (rules && rules.length > 0) {
|
|
26
|
+
for (const rule of rules) {
|
|
27
|
+
switch (rule.type) {
|
|
28
|
+
case SurveyValidationType.MinLength:
|
|
29
|
+
if (rule.value !== undefined && trimmed.length < rule.value) {
|
|
30
|
+
return rule.errorMessage ?? `Please enter at least ${rule.value} characters`
|
|
31
|
+
}
|
|
32
|
+
break
|
|
33
|
+
|
|
34
|
+
case SurveyValidationType.MaxLength:
|
|
35
|
+
if (rule.value !== undefined && trimmed.length > rule.value) {
|
|
36
|
+
return rule.errorMessage ?? `Please enter no more than ${rule.value} characters`
|
|
37
|
+
}
|
|
38
|
+
break
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return false
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Helper to extract a length value from validation rules by type
|
|
48
|
+
*/
|
|
49
|
+
export function getLengthFromRules(
|
|
50
|
+
rules: SurveyValidationRule[] | undefined,
|
|
51
|
+
type: SurveyValidationType
|
|
52
|
+
): number | undefined {
|
|
53
|
+
if (!rules) return undefined
|
|
54
|
+
const rule = rules.find((r) => r.type === type)
|
|
55
|
+
return rule?.value
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Builds a requirements hint message for display to the user.
|
|
60
|
+
* Returns undefined if no hint should be shown.
|
|
61
|
+
*
|
|
62
|
+
* min=1 is always hidden because:
|
|
63
|
+
* - Required questions: min=1 is redundant (required already means "enter something")
|
|
64
|
+
* - Optional questions: min=1 is useless (user can skip, or if they type anything it's ≥1 char)
|
|
65
|
+
*/
|
|
66
|
+
export function getRequirementsHint(minLength: number | undefined, maxLength: number | undefined): string | undefined {
|
|
67
|
+
// Skip showing hint for min=1 - it's always redundant/useless
|
|
68
|
+
const effectiveMin = minLength === 1 ? undefined : minLength
|
|
69
|
+
|
|
70
|
+
if (effectiveMin && maxLength) {
|
|
71
|
+
return `Enter ${effectiveMin}-${maxLength} characters`
|
|
72
|
+
} else if (effectiveMin) {
|
|
73
|
+
const plural = effectiveMin === 1 ? 'character' : 'characters'
|
|
74
|
+
return `Enter at least ${effectiveMin} ${plural}`
|
|
75
|
+
} else if (maxLength) {
|
|
76
|
+
const plural = maxLength === 1 ? 'character' : 'characters'
|
|
77
|
+
return `Maximum ${maxLength} ${plural}`
|
|
78
|
+
}
|
|
79
|
+
return undefined
|
|
80
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -229,6 +229,21 @@ export type PostHogRemoteConfig = {
|
|
|
229
229
|
|
|
230
230
|
export type FeatureFlagValue = string | boolean
|
|
231
231
|
|
|
232
|
+
/**
|
|
233
|
+
* Result of evaluating a feature flag, including both the flag value and its payload.
|
|
234
|
+
*/
|
|
235
|
+
export type FeatureFlagResult = {
|
|
236
|
+
readonly key: string
|
|
237
|
+
readonly enabled: boolean
|
|
238
|
+
readonly variant?: string
|
|
239
|
+
readonly payload?: JsonType
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
export type FeatureFlagResultOptions = {
|
|
243
|
+
/** Whether to send a $feature_flag_called event. Defaults to true. */
|
|
244
|
+
sendEvent?: boolean
|
|
245
|
+
}
|
|
246
|
+
|
|
232
247
|
export type PostHogFlagsResponse = Omit<PostHogRemoteConfig, 'hasFeatureFlags'> & {
|
|
233
248
|
featureFlags: {
|
|
234
249
|
[key: string]: FeatureFlagValue
|
|
@@ -460,6 +475,18 @@ export enum SurveyQuestionDescriptionContentType {
|
|
|
460
475
|
Text = 'text',
|
|
461
476
|
}
|
|
462
477
|
|
|
478
|
+
// Survey validation types
|
|
479
|
+
export enum SurveyValidationType {
|
|
480
|
+
MinLength = 'min_length',
|
|
481
|
+
MaxLength = 'max_length',
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
export interface SurveyValidationRule {
|
|
485
|
+
type: SurveyValidationType
|
|
486
|
+
value?: number
|
|
487
|
+
errorMessage?: string
|
|
488
|
+
}
|
|
489
|
+
|
|
463
490
|
type SurveyQuestionBase = {
|
|
464
491
|
question: string
|
|
465
492
|
id: string
|
|
@@ -469,6 +496,7 @@ type SurveyQuestionBase = {
|
|
|
469
496
|
buttonText?: string
|
|
470
497
|
originalQuestionIndex: number
|
|
471
498
|
branching?: NextQuestionBranching | EndBranching | ResponseBasedBranching | SpecificQuestionBranching
|
|
499
|
+
validation?: SurveyValidationRule[]
|
|
472
500
|
}
|
|
473
501
|
|
|
474
502
|
export type BasicSurveyQuestion = SurveyQuestionBase & {
|