@cxpinsight/react-native 0.3.0 → 0.5.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/CHANGELOG.md +90 -0
- package/README.md +70 -0
- package/lib/CXPinsight.d.ts +33 -0
- package/lib/CXPinsight.d.ts.map +1 -1
- package/lib/CXPinsight.js +115 -3
- package/lib/CXPinsight.js.map +1 -1
- package/lib/CXPinsightProvider.d.ts.map +1 -1
- package/lib/CXPinsightProvider.js +40 -10
- package/lib/CXPinsightProvider.js.map +1 -1
- package/lib/core/attribution.d.ts +54 -0
- package/lib/core/attribution.d.ts.map +1 -0
- package/lib/core/attribution.js +112 -0
- package/lib/core/attribution.js.map +1 -0
- package/lib/core/autoTapCapture.d.ts +15 -0
- package/lib/core/autoTapCapture.d.ts.map +1 -0
- package/lib/core/autoTapCapture.js +242 -0
- package/lib/core/autoTapCapture.js.map +1 -0
- package/lib/core/experiments.d.ts +59 -0
- package/lib/core/experiments.d.ts.map +1 -0
- package/lib/core/experiments.js +201 -0
- package/lib/core/experiments.js.map +1 -0
- package/lib/core/networkCapture.d.ts +7 -1
- package/lib/core/networkCapture.d.ts.map +1 -1
- package/lib/core/networkCapture.js +13 -1
- package/lib/core/networkCapture.js.map +1 -1
- package/lib/core/triggerEngine.d.ts +5 -3
- package/lib/core/triggerEngine.d.ts.map +1 -1
- package/lib/core/triggerEngine.js +19 -5
- package/lib/core/triggerEngine.js.map +1 -1
- package/lib/instrumented/Pressable.js +4 -0
- package/lib/instrumented/Pressable.js.map +1 -1
- package/lib/instrumented/ScrollView.js +4 -0
- package/lib/instrumented/ScrollView.js.map +1 -1
- package/lib/instrumented/TextInput.js +4 -0
- package/lib/instrumented/TextInput.js.map +1 -1
- package/lib/instrumented/TouchableOpacity.js +4 -0
- package/lib/instrumented/TouchableOpacity.js.map +1 -1
- package/lib/setup/index.d.ts +0 -1
- package/lib/setup/index.d.ts.map +1 -1
- package/lib/setup/index.js +4 -6
- package/lib/setup/index.js.map +1 -1
- package/lib/survey/definitionCache.d.ts +15 -0
- package/lib/survey/definitionCache.d.ts.map +1 -0
- package/lib/survey/definitionCache.js +80 -0
- package/lib/survey/definitionCache.js.map +1 -0
- package/lib/survey/expressionEval.d.ts +13 -9
- package/lib/survey/expressionEval.d.ts.map +1 -1
- package/lib/survey/expressionEval.js +16 -289
- package/lib/survey/expressionEval.js.map +1 -1
- package/lib/survey/interpolate.d.ts.map +1 -1
- package/lib/survey/interpolate.js +9 -27
- package/lib/survey/interpolate.js.map +1 -1
- package/lib/survey/validate.js +10 -0
- package/lib/survey/validate.js.map +1 -1
- package/lib/types.d.ts +2 -1
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js.map +1 -1
- package/package.json +5 -2
- package/lib/setup/TouchPatcher.d.ts +0 -28
- package/lib/setup/TouchPatcher.d.ts.map +0 -1
- package/lib/setup/TouchPatcher.js +0 -188
- package/lib/setup/TouchPatcher.js.map +0 -1
package/lib/setup/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.inferElementType = exports.matchesIdentifier = exports.identifierQuality = exports.extractLabel = exports.buildIdentifier = exports.setScannerDebugMode = exports.buildElementsFromTestIDs = exports.uploadScreenSnapshot = exports.scanReactTree = exports.scanNativeViewHierarchy = exports.clearSetupState = exports.restoreSetupState = exports.getDeviceId = exports.onSetupStateChange = exports.isSetupActive = exports.getSetupState = exports.endSetup = exports.claimSetup = exports.clearRegistry = exports.onRegistryChange = exports.getRegisteredElements = exports.registerElement = exports.useCXPElement = exports.
|
|
3
|
+
exports.inferElementType = exports.matchesIdentifier = exports.identifierQuality = exports.extractLabel = exports.buildIdentifier = exports.setScannerDebugMode = exports.buildElementsFromTestIDs = exports.uploadScreenSnapshot = exports.scanReactTree = exports.scanNativeViewHierarchy = exports.clearSetupState = exports.restoreSetupState = exports.getDeviceId = exports.onSetupStateChange = exports.isSetupActive = exports.getSetupState = exports.endSetup = exports.claimSetup = exports.clearRegistry = exports.onRegistryChange = exports.getRegisteredElements = exports.registerElement = exports.useCXPElement = exports.TouchObserver = exports.TapInterceptor = exports.SetupCodeEntry = exports.SetupOverlay = void 0;
|
|
4
4
|
var SetupOverlay_1 = require("./SetupOverlay");
|
|
5
5
|
Object.defineProperty(exports, "SetupOverlay", { enumerable: true, get: function () { return SetupOverlay_1.SetupOverlay; } });
|
|
6
6
|
var SetupCodeEntry_1 = require("./SetupCodeEntry");
|
|
@@ -9,11 +9,9 @@ var TapInterceptor_1 = require("./TapInterceptor");
|
|
|
9
9
|
Object.defineProperty(exports, "TapInterceptor", { enumerable: true, get: function () { return TapInterceptor_1.TapInterceptor; } });
|
|
10
10
|
var TouchObserver_1 = require("./TouchObserver");
|
|
11
11
|
Object.defineProperty(exports, "TouchObserver", { enumerable: true, get: function () { return TouchObserver_1.TouchObserver; } });
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
Object.defineProperty(exports, "patchCreateElement", { enumerable: true, get: function () { return TouchPatcher_1.patchCreateElement; } });
|
|
16
|
-
Object.defineProperty(exports, "unpatchCreateElement", { enumerable: true, get: function () { return TouchPatcher_1.unpatchCreateElement; } });
|
|
12
|
+
// TouchPatcher removed: it was never called, and it patched React.createElement,
|
|
13
|
+
// which the automatic JSX runtime bypasses. core/autoTapCapture.ts does this job
|
|
14
|
+
// against the runtime React Native actually uses.
|
|
17
15
|
var useCXPElement_1 = require("./useCXPElement");
|
|
18
16
|
Object.defineProperty(exports, "useCXPElement", { enumerable: true, get: function () { return useCXPElement_1.useCXPElement; } });
|
|
19
17
|
var ElementRegistry_1 = require("./ElementRegistry");
|
package/lib/setup/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/setup/index.ts"],"names":[],"mappings":";;;AAAA,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/setup/index.ts"],"names":[],"mappings":";;;AAAA,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,iFAAiF;AACjF,iFAAiF;AACjF,kDAAkD;AAClD,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,qDAA4G;AAAnG,kHAAA,eAAe,OAAA;AAAE,wHAAA,qBAAqB,OAAA;AAAE,mHAAA,gBAAgB,OAAA;AAAE,gHAAA,aAAa,OAAA;AAChF,qDAS2B;AARzB,6GAAA,UAAU,OAAA;AACV,2GAAA,QAAQ,OAAA;AACR,gHAAA,aAAa,OAAA;AACb,gHAAA,aAAa,OAAA;AACb,qHAAA,kBAAkB,OAAA;AAClB,8GAAA,WAAW,OAAA;AACX,oHAAA,iBAAiB,OAAA;AACjB,kHAAA,eAAe,OAAA;AAGjB,+DAMgC;AAL9B,+HAAA,uBAAuB,OAAA;AACvB,qHAAA,aAAa,OAAA;AACb,4HAAA,oBAAoB,OAAA;AACpB,gIAAA,wBAAwB,OAAA;AACxB,2HAAA,YAAY,OAAuB;AAErC,yDAM6B;AAL3B,oHAAA,eAAe,OAAA;AACf,iHAAA,YAAY,OAAA;AACZ,sHAAA,iBAAiB,OAAA;AACjB,sHAAA,iBAAiB,OAAA;AACjB,qHAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How stale a cached definition may be before it is refused.
|
|
3
|
+
*
|
|
4
|
+
* Not unlimited. A definition cached months ago can be missing questions that
|
|
5
|
+
* were added since, and answers collected against it are recorded against a
|
|
6
|
+
* survey that no longer looks like that — which is harder to notice, and worse,
|
|
7
|
+
* than a survey that failed to appear.
|
|
8
|
+
*/
|
|
9
|
+
export declare const MAX_AGE_MS: number;
|
|
10
|
+
export declare function cacheDefinition(surveyId: string, definition: Record<string, unknown>): Promise<void>;
|
|
11
|
+
/** A cached definition, or null when absent or too old. */
|
|
12
|
+
export declare function getCachedDefinition(surveyId: string, now?: number): Promise<Record<string, unknown> | null>;
|
|
13
|
+
/** Used by reset(): a cached definition outlives the identity that fetched it. */
|
|
14
|
+
export declare function clearCachedDefinitions(): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=definitionCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitionCache.d.ts","sourceRoot":"","sources":["../../src/survey/definitionCache.ts"],"names":[],"mappings":"AAeA;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,QAA0B,CAAC;AAOlD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,2DAA2D;AAC3D,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAmB,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAKzC;AAED,kFAAkF;AAClF,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG5D"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.MAX_AGE_MS = void 0;
|
|
37
|
+
exports.cacheDefinition = cacheDefinition;
|
|
38
|
+
exports.getCachedDefinition = getCachedDefinition;
|
|
39
|
+
exports.clearCachedDefinitions = clearCachedDefinitions;
|
|
40
|
+
/**
|
|
41
|
+
* Cached survey definitions, so a trigger that fires offline can still show.
|
|
42
|
+
*
|
|
43
|
+
* A native app is offline routinely — a lift, a plane, a bad cell — and the
|
|
44
|
+
* survey definition arrives over the network at the moment the trigger fires.
|
|
45
|
+
* Without a cache, an invitation that comes due offline simply does not appear.
|
|
46
|
+
*
|
|
47
|
+
* Used ONLY when the fetch fails. A successful fetch always wins, so a survey
|
|
48
|
+
* edited in the dashboard reaches respondents on their next online launch
|
|
49
|
+
* rather than being pinned to whatever was cached.
|
|
50
|
+
*/
|
|
51
|
+
const storage = __importStar(require("../core/storage"));
|
|
52
|
+
const PREFIX = '@cxpinsight:surveydef:';
|
|
53
|
+
/**
|
|
54
|
+
* How stale a cached definition may be before it is refused.
|
|
55
|
+
*
|
|
56
|
+
* Not unlimited. A definition cached months ago can be missing questions that
|
|
57
|
+
* were added since, and answers collected against it are recorded against a
|
|
58
|
+
* survey that no longer looks like that — which is harder to notice, and worse,
|
|
59
|
+
* than a survey that failed to appear.
|
|
60
|
+
*/
|
|
61
|
+
exports.MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;
|
|
62
|
+
async function cacheDefinition(surveyId, definition) {
|
|
63
|
+
await storage.set(PREFIX + surveyId, { cachedAt: Date.now(), definition });
|
|
64
|
+
}
|
|
65
|
+
/** A cached definition, or null when absent or too old. */
|
|
66
|
+
async function getCachedDefinition(surveyId, now = Date.now()) {
|
|
67
|
+
const entry = await storage.get(PREFIX + surveyId);
|
|
68
|
+
if (!entry?.definition)
|
|
69
|
+
return null;
|
|
70
|
+
if (now - entry.cachedAt > exports.MAX_AGE_MS)
|
|
71
|
+
return null;
|
|
72
|
+
return entry.definition;
|
|
73
|
+
}
|
|
74
|
+
/** Used by reset(): a cached definition outlives the identity that fetched it. */
|
|
75
|
+
async function clearCachedDefinitions() {
|
|
76
|
+
const keys = await storage.getKeysWithPrefix(PREFIX);
|
|
77
|
+
if (keys.length)
|
|
78
|
+
await storage.multiRemove(keys);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=definitionCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitionCache.js","sourceRoot":"","sources":["../../src/survey/definitionCache.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;GAUG;AACH,MAAY,OAAO,4CAAwB;AAE3C,MAAM,MAAM,GAAG,wBAAwB,CAAC;AAExC;;;;;;;GAOG;AACU,QAAA,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAO3C,KAAK,0BACV,QAAgB,EAChB,UAAmC;IAEnC,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU,EAAW,CAAC,CAAC;AACtF,CAAC;AAED,2DAA2D;AACpD,KAAK,8BACV,QAAgB,EAChB,GAAG,GAAW,IAAI,CAAC,GAAG,EAAE;IAExB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAQ,MAAM,GAAG,QAAQ,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,EAAE,UAAU;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,GAAG,GAAG,KAAK,CAAC,QAAQ,GAAG,QAAA,UAAU;QAAE,OAAO,IAAI,CAAC;IACnD,OAAO,KAAK,CAAC,UAAU,CAAC;AAC1B,CAAC;AAED,kFAAkF;AAC3E,KAAK;IACV,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,IAAI,CAAC,MAAM;QAAE,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Expression evaluation now lives in @cxpinsight/survey-spec.
|
|
3
|
+
*
|
|
4
|
+
* This file was a fork of the React renderer's copy. It had already fixed a
|
|
5
|
+
* tokenizer bug that the original still carried — every showWhen using <=, >=,
|
|
6
|
+
* ==, <>, && or || silently hid its question on link surveys — and nothing
|
|
7
|
+
* propagated that fix back, because there was nothing connecting the two copies.
|
|
8
|
+
*
|
|
9
|
+
* A respondent's experience must not depend on how they arrived, so the
|
|
10
|
+
* behaviour lives in one place. tools/survey-conformance proves it stays there.
|
|
11
|
+
*/
|
|
12
|
+
export { evaluateExpression, evaluateCondition, isParseable, } from '@cxpinsight/survey-spec';
|
|
13
|
+
export type { AnswersMap, VariablesMap, EvalContext } from '@cxpinsight/survey-spec';
|
|
10
14
|
//# sourceMappingURL=expressionEval.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expressionEval.d.ts","sourceRoot":"","sources":["../../src/survey/expressionEval.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"expressionEval.d.ts","sourceRoot":"","sources":["../../src/survey/expressionEval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,GACZ,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,292 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// Mobile SDK port of the web renderer's expressionEval — spec §7 §22.
|
|
3
|
-
// See apps/frontend/src/components/survey/renderer/lib/expressionEval.ts
|
|
4
|
-
// for the authoritative implementation; this file is a byte-mostly copy
|
|
5
|
-
// with the type imports swapped for local ones so the RN SDK doesn't
|
|
6
|
-
// take a build-time dep on the web renderer package.
|
|
7
|
-
//
|
|
8
|
-
// KEEP THESE IN LOCKSTEP. When you change the grammar, change both.
|
|
9
|
-
// Divergence between web and mobile evaluators produces surveys that
|
|
10
|
-
// branch differently on the two runtimes — very hard to debug.
|
|
11
|
-
//
|
|
12
|
-
// Supported subset (matches web):
|
|
13
|
-
// Comparators: = != < > <= >= == <>
|
|
14
|
-
// Boolean: and or not && || !
|
|
15
|
-
// Arithmetic: + - * /
|
|
16
|
-
// Refs: {q_id} the respondent's answer to q_id
|
|
17
|
-
// {{variable}} resolved variable value
|
|
18
|
-
// {{q_id.answer}} answer via variable-style ref
|
|
19
|
-
// 'string' / "string"
|
|
20
|
-
// 42 / -3.14
|
|
21
|
-
// true / false / null
|
|
22
|
-
// contains array/string membership
|
|
23
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
-
exports.evaluateExpression =
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
return undefined;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
// showWhen/enabledWhen coerce to boolean. No condition = true (visible).
|
|
44
|
-
// NOTE: this comment used to claim a parse error returns true (fail-open) and
|
|
45
|
-
// that this "matches web semantics". The conformance harness
|
|
46
|
-
// (tools/survey-conformance) disproves both halves: evaluateExpression returns
|
|
47
|
-
// undefined on a parse error, truthy(undefined) is false, so this fails CLOSED
|
|
48
|
-
// and hides the question — while the web SDK's new Function() path throws, is
|
|
49
|
-
// caught, and returns true. Which behaviour is correct is a spec decision, but
|
|
50
|
-
// the comment should not assert a parity that does not exist.
|
|
51
|
-
function evaluateCondition(source, ctx) {
|
|
52
|
-
if (!source)
|
|
53
|
-
return true;
|
|
54
|
-
const result = evaluateExpression(source, ctx);
|
|
55
|
-
return truthy(result);
|
|
56
|
-
}
|
|
57
|
-
function tokenize(src) {
|
|
58
|
-
const tokens = [];
|
|
59
|
-
let i = 0;
|
|
60
|
-
const len = src.length;
|
|
61
|
-
while (i < len) {
|
|
62
|
-
const c = src[i];
|
|
63
|
-
if (c === ' ' || c === '\t' || c === '\n' || c === '\r') {
|
|
64
|
-
i++;
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
if (c === "'" || c === '"') {
|
|
68
|
-
const quote = c;
|
|
69
|
-
let out = '';
|
|
70
|
-
i++;
|
|
71
|
-
while (i < len && src[i] !== quote) {
|
|
72
|
-
if (src[i] === '\\' && i + 1 < len) {
|
|
73
|
-
out += src[i + 1];
|
|
74
|
-
i += 2;
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
out += src[i];
|
|
78
|
-
i++;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
i++;
|
|
82
|
-
tokens.push({ kind: 'str', value: out });
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
if ((c >= '0' && c <= '9') || (c === '-' && src[i + 1] >= '0' && src[i + 1] <= '9' && !prevExpectsBinary(tokens))) {
|
|
86
|
-
let j = i;
|
|
87
|
-
if (src[j] === '-')
|
|
88
|
-
j++;
|
|
89
|
-
while (j < len && ((src[j] >= '0' && src[j] <= '9') || src[j] === '.'))
|
|
90
|
-
j++;
|
|
91
|
-
tokens.push({ kind: 'num', value: parseFloat(src.slice(i, j)) });
|
|
92
|
-
i = j;
|
|
93
|
-
continue;
|
|
94
|
-
}
|
|
95
|
-
if (c === '{' && src[i + 1] === '{') {
|
|
96
|
-
const end = src.indexOf('}}', i + 2);
|
|
97
|
-
if (end < 0)
|
|
98
|
-
throw new Error('unterminated {{');
|
|
99
|
-
const inner = src.slice(i + 2, end).trim();
|
|
100
|
-
const dot = inner.indexOf('.');
|
|
101
|
-
if (dot > 0) {
|
|
102
|
-
tokens.push({ kind: 'variable_ref', name: inner.slice(0, dot).trim(), suffix: inner.slice(dot + 1).trim() });
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
tokens.push({ kind: 'variable_ref', name: inner });
|
|
106
|
-
}
|
|
107
|
-
i = end + 2;
|
|
108
|
-
continue;
|
|
109
|
-
}
|
|
110
|
-
if (c === '{') {
|
|
111
|
-
const end = src.indexOf('}', i + 1);
|
|
112
|
-
if (end < 0)
|
|
113
|
-
throw new Error('unterminated {');
|
|
114
|
-
tokens.push({ kind: 'answer_ref', name: src.slice(i + 1, end).trim() });
|
|
115
|
-
i = end + 1;
|
|
116
|
-
continue;
|
|
117
|
-
}
|
|
118
|
-
if (c === '(') {
|
|
119
|
-
tokens.push({ kind: 'lparen' });
|
|
120
|
-
i++;
|
|
121
|
-
continue;
|
|
122
|
-
}
|
|
123
|
-
if (c === ')') {
|
|
124
|
-
tokens.push({ kind: 'rparen' });
|
|
125
|
-
i++;
|
|
126
|
-
continue;
|
|
127
|
-
}
|
|
128
|
-
let matchedMulti = false;
|
|
129
|
-
for (const op of ['<=', '>=', '!=', '<>', '&&', '||', '==']) {
|
|
130
|
-
if (src.slice(i, i + op.length) === op) {
|
|
131
|
-
tokens.push({ kind: 'op', value: op === '==' ? '=' : op });
|
|
132
|
-
i += op.length;
|
|
133
|
-
matchedMulti = true;
|
|
134
|
-
break;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
if (matchedMulti)
|
|
138
|
-
continue;
|
|
139
|
-
if ('=<>+-*/!'.includes(c)) {
|
|
140
|
-
tokens.push({ kind: 'op', value: c });
|
|
141
|
-
i++;
|
|
142
|
-
continue;
|
|
143
|
-
}
|
|
144
|
-
const kw = src.slice(i).match(/^[a-zA-Z_][a-zA-Z_0-9]*/);
|
|
145
|
-
if (kw) {
|
|
146
|
-
const word = kw[0];
|
|
147
|
-
i += word.length;
|
|
148
|
-
const lower = word.toLowerCase();
|
|
149
|
-
if (lower === 'true')
|
|
150
|
-
tokens.push({ kind: 'bool', value: true });
|
|
151
|
-
else if (lower === 'false')
|
|
152
|
-
tokens.push({ kind: 'bool', value: false });
|
|
153
|
-
else if (lower === 'null')
|
|
154
|
-
tokens.push({ kind: 'null' });
|
|
155
|
-
else if (lower === 'and')
|
|
156
|
-
tokens.push({ kind: 'op', value: '&&' });
|
|
157
|
-
else if (lower === 'or')
|
|
158
|
-
tokens.push({ kind: 'op', value: '||' });
|
|
159
|
-
else if (lower === 'not')
|
|
160
|
-
tokens.push({ kind: 'op', value: '!' });
|
|
161
|
-
else if (lower === 'contains')
|
|
162
|
-
tokens.push({ kind: 'op', value: 'contains' });
|
|
163
|
-
else
|
|
164
|
-
throw new Error('unknown identifier "' + word + '" — refs must be wrapped in {}');
|
|
165
|
-
continue;
|
|
166
|
-
}
|
|
167
|
-
throw new Error('unexpected character "' + c + '" at position ' + i);
|
|
168
|
-
}
|
|
169
|
-
return tokens;
|
|
170
|
-
}
|
|
171
|
-
function prevExpectsBinary(tokens) {
|
|
172
|
-
const prev = tokens[tokens.length - 1];
|
|
173
|
-
if (!prev)
|
|
174
|
-
return false;
|
|
175
|
-
return prev.kind === 'num' || prev.kind === 'str' || prev.kind === 'bool'
|
|
176
|
-
|| prev.kind === 'answer_ref' || prev.kind === 'variable_ref'
|
|
177
|
-
|| prev.kind === 'rparen';
|
|
178
|
-
}
|
|
179
|
-
const PREC = {
|
|
180
|
-
'||': 1, '&&': 2,
|
|
181
|
-
'=': 3, '!=': 3, '<>': 3, 'contains': 3,
|
|
182
|
-
'<': 4, '>': 4, '<=': 4, '>=': 4,
|
|
183
|
-
'+': 5, '-': 5,
|
|
184
|
-
'*': 6, '/': 6,
|
|
185
|
-
};
|
|
186
|
-
function parseExpression(tokens, pos, ctx, minPrec = 1) {
|
|
187
|
-
let [lhs, next] = parseUnary(tokens, pos, ctx);
|
|
188
|
-
while (next < tokens.length) {
|
|
189
|
-
const t = tokens[next];
|
|
190
|
-
if (t.kind !== 'op')
|
|
191
|
-
break;
|
|
192
|
-
const prec = PREC[t.value];
|
|
193
|
-
if (prec === undefined || prec < minPrec)
|
|
194
|
-
break;
|
|
195
|
-
const op = t.value;
|
|
196
|
-
const [rhs, after] = parseExpression(tokens, next + 1, ctx, prec + 1);
|
|
197
|
-
lhs = applyBinary(op, lhs, rhs);
|
|
198
|
-
next = after;
|
|
199
|
-
}
|
|
200
|
-
return [lhs, next];
|
|
201
|
-
}
|
|
202
|
-
function parseUnary(tokens, pos, ctx) {
|
|
203
|
-
const t = tokens[pos];
|
|
204
|
-
if (!t)
|
|
205
|
-
throw new Error('unexpected end of expression');
|
|
206
|
-
if (t.kind === 'op' && t.value === '!') {
|
|
207
|
-
const [inner, after] = parseUnary(tokens, pos + 1, ctx);
|
|
208
|
-
return [!truthy(inner), after];
|
|
209
|
-
}
|
|
210
|
-
if (t.kind === 'op' && t.value === '-') {
|
|
211
|
-
const [inner, after] = parseUnary(tokens, pos + 1, ctx);
|
|
212
|
-
return [-Number(inner), after];
|
|
213
|
-
}
|
|
214
|
-
return parsePrimary(tokens, pos, ctx);
|
|
215
|
-
}
|
|
216
|
-
function parsePrimary(tokens, pos, ctx) {
|
|
217
|
-
const t = tokens[pos];
|
|
218
|
-
if (!t)
|
|
219
|
-
throw new Error('unexpected end of expression');
|
|
220
|
-
switch (t.kind) {
|
|
221
|
-
case 'num': return [t.value, pos + 1];
|
|
222
|
-
case 'str': return [t.value, pos + 1];
|
|
223
|
-
case 'bool': return [t.value, pos + 1];
|
|
224
|
-
case 'null': return [null, pos + 1];
|
|
225
|
-
case 'answer_ref': return [ctx.answers[t.name], pos + 1];
|
|
226
|
-
case 'variable_ref': {
|
|
227
|
-
// Resolution rules for {{name.suffix}}:
|
|
228
|
-
// • {{q1.answer}} → ctx.answers.q1 (legacy special-case)
|
|
229
|
-
// • {{customer_name}} → ctx.variables.customer_name
|
|
230
|
-
// • {{device.theme}} → walk dotted path into ctx.variables.device
|
|
231
|
-
// • {{a.b.c.d}} → walk into ctx.variables.a.b.c.d
|
|
232
|
-
// A dotted suffix that hits a non-object mid-walk returns undefined,
|
|
233
|
-
// which then compares falsy in showWhen. Lets SDKs expose structured
|
|
234
|
-
// runtime signals (device, session, …) under variables.* without
|
|
235
|
-
// adding new token kinds. Kept in lockstep with the web evaluator at
|
|
236
|
-
// apps/frontend/src/components/survey/renderer/lib/expressionEval.ts.
|
|
237
|
-
if (t.suffix === 'answer')
|
|
238
|
-
return [ctx.answers[t.name], pos + 1];
|
|
239
|
-
const root = ctx.variables[t.name];
|
|
240
|
-
if (!t.suffix)
|
|
241
|
-
return [root, pos + 1];
|
|
242
|
-
let cursor = root;
|
|
243
|
-
for (const seg of t.suffix.split('.')) {
|
|
244
|
-
if (cursor == null || typeof cursor !== 'object') {
|
|
245
|
-
cursor = undefined;
|
|
246
|
-
break;
|
|
247
|
-
}
|
|
248
|
-
cursor = cursor[seg];
|
|
249
|
-
}
|
|
250
|
-
return [cursor, pos + 1];
|
|
251
|
-
}
|
|
252
|
-
case 'lparen': {
|
|
253
|
-
const [inner, after] = parseExpression(tokens, pos + 1, ctx, 1);
|
|
254
|
-
if (tokens[after]?.kind !== 'rparen')
|
|
255
|
-
throw new Error('missing closing paren');
|
|
256
|
-
return [inner, after + 1];
|
|
257
|
-
}
|
|
258
|
-
default: throw new Error('unexpected token: ' + JSON.stringify(t));
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
function applyBinary(op, lhs, rhs) {
|
|
262
|
-
switch (op) {
|
|
263
|
-
case '=': return String(lhs) === String(rhs);
|
|
264
|
-
case '!=':
|
|
265
|
-
case '<>': return String(lhs) !== String(rhs);
|
|
266
|
-
case '<': return Number(lhs) < Number(rhs);
|
|
267
|
-
case '>': return Number(lhs) > Number(rhs);
|
|
268
|
-
case '<=': return Number(lhs) <= Number(rhs);
|
|
269
|
-
case '>=': return Number(lhs) >= Number(rhs);
|
|
270
|
-
case '&&': return truthy(lhs) && truthy(rhs);
|
|
271
|
-
case '||': return truthy(lhs) || truthy(rhs);
|
|
272
|
-
case '+': return typeof lhs === 'string' || typeof rhs === 'string'
|
|
273
|
-
? String(lhs) + String(rhs)
|
|
274
|
-
: Number(lhs) + Number(rhs);
|
|
275
|
-
case '-': return Number(lhs) - Number(rhs);
|
|
276
|
-
case '*': return Number(lhs) * Number(rhs);
|
|
277
|
-
case '/': return Number(lhs) / Number(rhs);
|
|
278
|
-
case 'contains':
|
|
279
|
-
if (Array.isArray(lhs))
|
|
280
|
-
return lhs.includes(rhs);
|
|
281
|
-
return String(lhs ?? '').includes(String(rhs));
|
|
282
|
-
default: return undefined;
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
function truthy(v) {
|
|
286
|
-
if (v === false || v === null || v === undefined || v === 0 || v === '')
|
|
287
|
-
return false;
|
|
288
|
-
if (Array.isArray(v))
|
|
289
|
-
return v.length > 0;
|
|
290
|
-
return true;
|
|
291
|
-
}
|
|
3
|
+
exports.isParseable = exports.evaluateCondition = exports.evaluateExpression = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Expression evaluation now lives in @cxpinsight/survey-spec.
|
|
6
|
+
*
|
|
7
|
+
* This file was a fork of the React renderer's copy. It had already fixed a
|
|
8
|
+
* tokenizer bug that the original still carried — every showWhen using <=, >=,
|
|
9
|
+
* ==, <>, && or || silently hid its question on link surveys — and nothing
|
|
10
|
+
* propagated that fix back, because there was nothing connecting the two copies.
|
|
11
|
+
*
|
|
12
|
+
* A respondent's experience must not depend on how they arrived, so the
|
|
13
|
+
* behaviour lives in one place. tools/survey-conformance proves it stays there.
|
|
14
|
+
*/
|
|
15
|
+
var survey_spec_1 = require("@cxpinsight/survey-spec");
|
|
16
|
+
Object.defineProperty(exports, "evaluateExpression", { enumerable: true, get: function () { return survey_spec_1.evaluateExpression; } });
|
|
17
|
+
Object.defineProperty(exports, "evaluateCondition", { enumerable: true, get: function () { return survey_spec_1.evaluateCondition; } });
|
|
18
|
+
Object.defineProperty(exports, "isParseable", { enumerable: true, get: function () { return survey_spec_1.isParseable; } });
|
|
292
19
|
//# sourceMappingURL=expressionEval.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expressionEval.js","sourceRoot":"","sources":["../../src/survey/expressionEval.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"expressionEval.js","sourceRoot":"","sources":["../../src/survey/expressionEval.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;GAUG;AACH,uDAIiC;AAH/B,iHAAA,kBAAkB,OAAA;AAClB,gHAAA,iBAAiB,OAAA;AACjB,0GAAA,WAAW,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../src/survey/interpolate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../src/survey/interpolate.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,EAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAID,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAO1F"}
|
|
@@ -1,23 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// Mobile SDK port of the web renderer's interpolate — spec §22.
|
|
3
|
-
// Kept lockstep with apps/frontend/src/components/survey/renderer/lib/interpolate.ts
|
|
4
|
-
// but stripped down: React Native has no dangerouslySetInnerHTML sink,
|
|
5
|
-
// so the HTML-escape variant isn't needed. All mobile substitutions
|
|
6
|
-
// land in plain <Text> nodes; RN escapes text content automatically.
|
|
7
|
-
//
|
|
8
|
-
// Supported forms (matches web):
|
|
9
|
-
// {{name}} — variable lookup
|
|
10
|
-
// {{q_id.answer}} — answer via variable-style ref
|
|
11
|
-
// \{{name}} — literal {{name}}, escape not consumed
|
|
12
|
-
//
|
|
13
|
-
// Unresolved refs render as empty string per spec §22.2 — NEVER the
|
|
14
|
-
// literal `{{name}}` (that reads as broken UI to the respondent).
|
|
15
|
-
//
|
|
16
|
-
// Variables map on mobile is currently empty (Phase 4.5 variables
|
|
17
|
-
// resolver is a follow-up); {{q_id.answer}} refs work today via the
|
|
18
|
-
// answers map that showWhen/hideWhen already reads.
|
|
19
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
3
|
exports.interpolatePlain = interpolatePlain;
|
|
4
|
+
// Mobile SDK port of the web renderer's interpolate — spec §22.
|
|
5
|
+
const survey_spec_1 = require("@cxpinsight/survey-spec");
|
|
21
6
|
const REF_RE = /(\\)?\{\{\s*([a-zA-Z_][a-zA-Z_0-9]*)(?:\.([a-zA-Z_][a-zA-Z_0-9]*))?\s*\}\}/g;
|
|
22
7
|
function interpolatePlain(text, ctx) {
|
|
23
8
|
if (!text)
|
|
@@ -32,16 +17,13 @@ function interpolatePlain(text, ctx) {
|
|
|
32
17
|
function resolveRef(name, suffix, ctx) {
|
|
33
18
|
if (suffix === 'answer')
|
|
34
19
|
return ctx.answers[name];
|
|
35
|
-
//
|
|
36
|
-
//
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return dotted;
|
|
43
|
-
}
|
|
44
|
-
return ctx.variables[name];
|
|
20
|
+
// One rule, shared with the expression evaluator (@cxpinsight/survey-spec).
|
|
21
|
+
// This used to try a flat dotted key and, when that missed, fall back to
|
|
22
|
+
// ctx.variables[name] — which for a nested bag is the NAMESPACE OBJECT. So
|
|
23
|
+
// "Hi {{user.name}}" rendered the entire user object as JSON, every field of
|
|
24
|
+
// it, on screen to the respondent. Conditions had always walked the path;
|
|
25
|
+
// only text did not.
|
|
26
|
+
return (0, survey_spec_1.resolveVariable)(ctx.variables, name, suffix);
|
|
45
27
|
}
|
|
46
28
|
function displayString(v) {
|
|
47
29
|
if (v === undefined || v === null)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpolate.js","sourceRoot":"","sources":["../../src/survey/interpolate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interpolate.js","sourceRoot":"","sources":["../../src/survey/interpolate.ts"],"names":[],"mappings":";;;AAAA,gEAAgE;AAChE,yDAA0D;AAuB1D,MAAM,MAAM,GAAG,6EAA6E,CAAC;AAE7F,0BAAiC,IAAwB,EAAE,GAAuB;IAChF,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAC1D,IAAI,MAAM;YAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5C,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,MAA0B,EAAE,GAAuB;IACnF,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,4EAA4E;IAC5E,yEAAyE;IACzE,2EAA2E;IAC3E,6EAA6E;IAC7E,0EAA0E;IAC1E,qBAAqB;IACrB,OAAO,IAAA,6BAAe,EAAC,GAAG,CAAC,SAAoC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,aAAa,CAAC,CAAU;IAC/B,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC;YAAC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,EAAE,CAAC;QAAC,CAAC;IACxD,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC"}
|
package/lib/survey/validate.js
CHANGED
|
@@ -78,6 +78,16 @@ function validateTextish(question, value) {
|
|
|
78
78
|
if (maxLength !== undefined && trimmed.length > maxLength) {
|
|
79
79
|
return `Please keep this under ${maxLength} characters`;
|
|
80
80
|
}
|
|
81
|
+
// minLength was only honoured through the rules[] array, never as a direct
|
|
82
|
+
// question property — so a question with minLength set in the builder was
|
|
83
|
+
// enforced on links and silently ignored here. Same survey, different rules,
|
|
84
|
+
// depending on how the respondent arrived.
|
|
85
|
+
const minLength = typeof question.minLength === 'number'
|
|
86
|
+
? question.minLength
|
|
87
|
+
: undefined;
|
|
88
|
+
if (minLength !== undefined && trimmed.length < minLength) {
|
|
89
|
+
return `Please enter at least ${minLength} characters`;
|
|
90
|
+
}
|
|
81
91
|
return null;
|
|
82
92
|
}
|
|
83
93
|
function validateCheckbox(question, value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/survey/validate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/survey/validate.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export interface CXPinsightConfig {
|
|
|
15
15
|
debugIp?: string;
|
|
16
16
|
captureNetwork?: boolean;
|
|
17
17
|
requireConsent?: boolean;
|
|
18
|
+
autoCaptureTaps?: boolean;
|
|
18
19
|
theme?: string;
|
|
19
20
|
primaryColor?: string;
|
|
20
21
|
brandingPalette?: {
|
|
@@ -105,7 +106,7 @@ export interface FunnelStepOptions {
|
|
|
105
106
|
export interface ExperimentOptions {
|
|
106
107
|
experimentName?: string;
|
|
107
108
|
variantName?: string;
|
|
108
|
-
assignmentMethod?: 'random' | 'targeted' | 'manual';
|
|
109
|
+
assignmentMethod?: 'auto' | 'random' | 'targeted' | 'manual';
|
|
109
110
|
[key: string]: unknown;
|
|
110
111
|
}
|
|
111
112
|
/** Conversion tracking options */
|