@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.
@@ -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"}
@@ -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
@@ -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
- "uuidv7"
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
- "uuidv7"
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
- "uuidv7"
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
- "uuidv7"
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 };
@@ -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":"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"}
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"}
@@ -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
- getFeatureFlag(key) {
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
- let response = (0, external_featureFlagUtils_js_namespaceObject.getFeatureFlagValue)(featureFlag);
483
- if (void 0 === response) {
484
- const hasCachedFlags = details && Object.keys(details.flags).length > 0;
485
- if (hasCachedFlags) response = false;
486
- if (details && !featureFlag && !storedDetails?.requestError && !isQuotaLimited) errors.push(external_types_js_namespaceObject.FeatureFlagError.FLAG_MISSING);
487
- }
488
- if (this.sendFeatureFlagEvent && !this.flagCallReported[key]) {
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: 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
- return response;
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 payloads = this.getFeatureFlagPayloads();
512
- if (!payloads) return;
513
- const response = payloads[key];
514
- if (void 0 === response) return null;
515
- return response;
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;
@@ -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
- getFeatureFlag(key) {
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
- let response = getFeatureFlagValue(featureFlag);
455
- if (void 0 === response) {
456
- const hasCachedFlags = details && Object.keys(details.flags).length > 0;
457
- if (hasCachedFlags) response = false;
458
- if (details && !featureFlag && !storedDetails?.requestError && !isQuotaLimited) errors.push(FeatureFlagError.FLAG_MISSING);
459
- }
460
- if (this.sendFeatureFlagEvent && !this.flagCallReported[key]) {
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: 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
- return response;
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 payloads = this.getFeatureFlagPayloads();
484
- if (!payloads) return;
485
- const response = payloads[key];
486
- if (void 0 === response) return null;
487
- return response;
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;
@@ -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":"AAAA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oHAAoH;IACpH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,4HAA4H;IAC5H,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,mFAAmF;IACnF,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,4DAA4D;IAC5D,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,8EAA8E;IAC9E,SAAS,CAAC,EAAE;QACV,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,cAAc,CAAC,EAAE,OAAO,CAAA;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;QAC/C,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;KAC/C,CAAA;IACD,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,qEAAqE;IACrE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gIAAgI;IAChI,4BAA4B,CAAC,EAAE,MAAM,CAAA;IACrC,8EAA8E;IAC9E,4BAA4B,CAAC,EAAE,MAAM,CAAA;IACrC,qFAAqF;IACrF,4BAA4B,CAAC,EAAE,MAAM,CAAA;IACrC,0CAA0C;IAC1C,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,4EAA4E;IAC5E,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;;;;;;OASG;IACH,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC;;;OAGG;IACH,sBAAsB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;IACH,cAAc,CAAC,EAAE,QAAQ,GAAG,iBAAiB,GAAG,OAAO,CAAA;IAEvD;;;;OAIG;IACH,WAAW,CAAC,EAAE,YAAY,GAAG,YAAY,EAAE,CAAA;CAC5C,CAAA;AAED,oBAAY,wBAAwB;IAClC,WAAW,iBAAiB;IAC5B,UAAU,gBAAgB;IAC1B,KAAK,UAAU;IACf,sBAAsB,6BAA6B;IACnD,UAAU,gBAAgB,CAAE,6BAA6B;IACzD,kBAAkB,yBAAyB;IAC3C,YAAY,kBAAkB;IAC9B,mBAAmB,0BAA0B;IAC7C,2BAA2B,mCAAmC;IAC9D,qBAAqB,4BAA4B;IACjD,4BAA4B,oCAAoC;IAChE,oBAAoB,2BAA2B;IAC/C,KAAK,UAAU;IACf,QAAQ,cAAc;IACtB,SAAS,eAAe;IACxB,qBAAqB,4BAA4B;IACjD,oBAAoB,sBAAsB;IAC1C,gBAAgB,sBAAsB;IACtC,eAAe,qBAAqB;IACpC,iBAAiB,wBAAwB,CAAE,oCAAoC;IAC/E,mBAAmB,0BAA0B,CAAE,oCAAoC;IACnF,aAAa,mBAAmB,CAAE,oCAAoC;IACtE,kBAAkB,0BAA0B,CAAE,oCAAoC;IAClF,WAAW,iBAAiB,CAAE,oCAAoC;IAClE,OAAO,YAAY,CAAE,oCAAoC;IACzD,YAAY,kBAAkB;IAC9B,mBAAmB,2BAA2B;CAC/C;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAA;IACxC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;IAClC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,CAAA;AAGD,MAAM,MAAM,qBAAqB,GAAG;IAClC,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,yDAAyD;IACzD,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAA;IACxB,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KACjC,CAAA;CACF,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,GAAG,CAAA;IACZ,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,sBAAsB,CAAA;AAG1B,oBAAY,WAAW;IACrB,MAAM,YAAY;IAClB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,gBAAgB,CAAC,EACb,OAAO,GACP;QACE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;KACxB,CAAA;IAEL;;OAEG;IACH,oBAAoB,CAAC,EAAE,WAAW,EAAE,CAAA;IAEpC;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAAA;IAE5B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAA;AAE/C;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,GAAG;IAChF,YAAY,EAAE;QACZ,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAAA;KAChC,CAAA;IACD,mBAAmB,EAAE;QACnB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;KACxB,CAAA;IACD,KAAK,EAAE;QACL,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAA;KACjC,CAAA;IACD,yBAAyB,EAAE,OAAO,CAAA;IAClC,gBAAgB,CAAC,EACb,OAAO,GACP;QACE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;KACxB,CAAA;IACL,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG,mBAAmB,CAC3D,oBAAoB,EACpB,OAAO,GAAG,cAAc,GAAG,qBAAqB,GAAG,WAAW,CAC/D,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI;KACrD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACf,GAAG;KACD,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAClC,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,mBAAmB,CACzD,oBAAoB,EACpB,OAAO,GAAG,cAAc,GAAG,qBAAqB,GAAG,WAAW,CAC/D,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAA;AAExE;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,oBAAoB,EAAE,cAAc,GAAG,qBAAqB,CAAC,CAAA;AAEvG;;;;;GAKG;AACH,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC,GAC9E,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,aAAa,CAAC,CAAC,GAAG;IACjE,yBAAyB,CAAC,EAAE,OAAO,CAAA;IACnC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,YAAY,CAAC,EAAE,uBAAuB,CAAA;CACvC,CAAA;AAEH;;GAEG;AACH,MAAM,MAAM,+BAA+B,GAAG,OAAO,CACnD,IAAI,CAAC,oBAAoB,EAAE,cAAc,GAAG,qBAAqB,CAAC,CACnE,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;CAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,QAAQ,EAAE,CAAA;AAEpH,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;AAEpG;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB;;;;;;;gCAOR,MAAM,KAAG,MAAM;CAC1B,CAAA;AAEV,MAAM,MAAM,oBAAoB,GAC5B,CAAC,OAAO,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,OAAO,gBAAgB,EAAE,UAAU,CAAC,CAAC,GAC7E,UAAU,CAAC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,GAC5C,MAAM,CAAA;AAEV;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,SAAS,GAAG,kBAAkB,GAAG,WAAW,GAAG,eAAe,CAAA;IACpE,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,2BAA2B,CAAA;CAAE,GACxD;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,uBAAuB,CAAA;CAAE,CAAA;AAEtD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAA;IACpC,QAAQ,EAAE,mBAAmB,GAAG,SAAS,CAAA;IACzC,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAA;IACtB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IAE/B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;CAChC,CAAA;AAGD,MAAM,MAAM,gBAAgB,GAAG;IAE7B,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,0BAA0B,CAAC,EAAE,MAAM,CAAA;IACnC,qCAAqC,CAAC,EAAE,oCAAoC,CAAA;IAC5E,8BAA8B,CAAC,EAAE,MAAM,CAAA;IACvC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAEhC,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,oBAAY,cAAc;IACxB,OAAO,aAAa;IACpB,SAAS,eAAe;IACxB,QAAQ,cAAc;IACtB,UAAU,gBAAgB;IAC1B,YAAY,kBAAkB;IAC9B,WAAW,iBAAiB;IAC5B,IAAI,SAAS;IACb,KAAK,UAAU;IACf,MAAM,WAAW;CAClB;AAED,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,QAAQ,aAAa;CACtB;AAED,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,cAAc,oBAAoB;CACnC;AAED,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,oBAAoB,GAAG,sBAAsB,CAAA;AAErH,oBAAY,oCAAoC;IAC9C,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAGD,oBAAY,oBAAoB;IAC9B,SAAS,eAAe;IACxB,SAAS,eAAe;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,oBAAoB,CAAA;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,KAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sBAAsB,CAAC,EAAE,oCAAoC,CAAA;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,SAAS,CAAC,EAAE,qBAAqB,GAAG,YAAY,GAAG,sBAAsB,GAAG,yBAAyB,CAAA;IACrG,UAAU,CAAC,EAAE,oBAAoB,EAAE,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG;IACrD,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,kBAAkB,GAAG;IACpD,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAA;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,GAAG;IACtD,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAA;IAC/B,OAAO,EAAE,mBAAmB,CAAA;IAC5B,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;IACzB,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,oBAAY,mBAAmB;IAC7B,MAAM,WAAW;IACjB,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,GAAG;IACxD,IAAI,EAAE,kBAAkB,CAAC,YAAY,GAAG,kBAAkB,CAAC,cAAc,CAAA;IACzE,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,oBAAY,kBAAkB;IAC5B,IAAI,SAAS;IACb,cAAc,oBAAoB;IAClC,YAAY,kBAAkB;IAC9B,MAAM,WAAW;IACjB,IAAI,SAAS;CACd;AAED,oBAAY,2BAA2B;IACrC,YAAY,kBAAkB;IAC9B,GAAG,QAAQ;IACX,aAAa,mBAAmB;IAChC,gBAAgB,sBAAsB;CACvC;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,2BAA2B,CAAC,YAAY,CAAA;CAC/C,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,2BAA2B,CAAC,GAAG,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,2BAA2B,CAAC,aAAa,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,2BAA2B,CAAC,gBAAgB,CAAA;IAClD,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;AAExD,oBAAY,eAAe;IACzB,KAAK,UAAU;IACf,QAAQ,cAAc;IACtB,KAAK,UAAU;IACf,KAAK,WAAW;IAChB,SAAS,cAAc;IACvB,YAAY,kBAAkB;CAC/B;AAED,oBAAY,cAAc;IACxB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AACD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IAEnB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,UAAU,CAAA;IAChB,iBAAiB,CAAC,EAAE;QAClB,GAAG,EAAE,MAAM,CAAA;QACX,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,EAAE,CAAA;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,2BAA2B,CAAC,EAAE,MAAM,CAAA;IACpC,SAAS,EAAE,cAAc,EAAE,CAAA;IAC3B,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAC7B,UAAU,CAAC,EAAE;QACX,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,0BAA0B,CAAC,EAAE,MAAM,CAAA;QACnC,YAAY,CAAC,EAAE,eAAe,CAAA;QAC9B,MAAM,CAAC,EAAE;YACP,kBAAkB,CAAC,EAAE,OAAO,CAAA;YAC5B,MAAM,CAAC,EAAE;gBACP,IAAI,EAAE,MAAM,CAAA;aACb,EAAE,CAAA;SACJ,CAAA;QACD,OAAO,CAAC,EAAE;YACR,MAAM,EAAE,gBAAgB,EAAE,CAAA;SAC3B,CAAA;QACD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;QACtB,oBAAoB,CAAC,EAAE,eAAe,CAAA;QACtC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAC3B,CAAA;IACD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,4BAA4B,CAAC,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,cAAc,EAAE,CAAA;CACzB,CAAA;AAED,2CAA2C;AAC3C,oBAAY,wBAAwB;IAClC,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oCAAoC;IACpC,aAAa,CAAC,EAAE,wBAAwB,CAAA;IACxC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,8CAA8C;IAC9C,aAAa,CAAC,EAAE,wBAAwB,CAAA;IACxC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,uCAAuC;IACvC,YAAY,CAAC,EAAE,wBAAwB,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IAC9B,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IAC9B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IAC/B,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IAClC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAA;CACzC,CAAA;AAED,eAAO,MAAM,wBAAwB,6QAe3B,CAAA;AAEV;;;;;GAKG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEhF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,wFAAwF;IACxF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,0GAA0G;IAC1G,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,kEAAkE;IAClE,IAAI,CAAC,EAAE,sBAAsB,CAAA;IAC7B,oFAAoF;IACpF,SAAS,CAAC,EAAE,sBAAsB,CAAA;IAClC,8BAA8B;IAC9B,SAAS,CAAC,EAAE,IAAI,CAAA;CACjB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,KAAK,YAAY,GAAG,IAAI,CAAA"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@posthog/core",
3
- "version": "1.20.2",
3
+ "version": "1.22.0",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -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
@@ -5,3 +5,4 @@ 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,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
- getFeatureFlag(key: string): FeatureFlagValue | undefined {
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
- let response: FeatureFlagValue | undefined = getFeatureFlagValue(featureFlag)
838
-
839
- if (response === undefined) {
840
- // Return false for missing flags when we have successfully loaded flags.
841
- const hasCachedFlags = details && Object.keys(details.flags).length > 0
842
- if (hasCachedFlags) {
843
- response = false
844
- }
845
-
846
- // Track missing flags only when we had a successful, non-limited request.
847
- // When quota limited or request failed, we cannot determine if the flag is truly missing.
848
- if (details && !featureFlag && !storedDetails?.requestError && !isQuotaLimited) {
849
- errors.push(FeatureFlagError.FLAG_MISSING)
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: 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
- return response
880
- }
881
-
882
- getFeatureFlagPayload(key: string): JsonType | undefined {
883
- const payloads = this.getFeatureFlagPayloads()
884
-
885
- if (!payloads) {
886
- return undefined
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 response = payloads[key]
890
-
891
- // Undefined means a loading or missing data issue. Null means evaluation happened and there was no match
892
- if (response === undefined) {
893
- return null
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
- return response
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 & {