@escapenavigator/types 2.0.6 → 2.0.8

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.
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getDimensionsForKind = exports.WIDGET_FUNNEL_DIMENSIONS = void 0;
4
+ const players_select_mode_enum_1 = require("../questroom/enum/players-select-mode.enum");
4
5
  const widget_funnel_kind_enum_1 = require("./widget-funnel-kind.enum");
5
6
  const widget_funnel_step_enum_1 = require("./widget-funnel-step.enum");
6
7
  /** Бакетер чисел по списку правил «первое подходящее». */
@@ -19,6 +20,8 @@ const boolBucketizer = (raw) => {
19
20
  return raw === 'true' ? 'yes' : 'no';
20
21
  return null;
21
22
  };
23
+ /** Бакетер строкового enum'а: значение валидно, только если есть в списке. */
24
+ const enumBucketizer = (allowed) => (raw) => typeof raw === 'string' && allowed.includes(raw) ? raw : null;
22
25
  const YES_NO_BUCKETS = [
23
26
  { value: 'yes', label: 'Есть' },
24
27
  { value: 'no', label: 'Нет' },
@@ -55,6 +58,26 @@ exports.WIDGET_FUNNEL_DIMENSIONS = [
55
58
  buckets: YES_NO_BUCKETS,
56
59
  bucketize: boolBucketizer,
57
60
  },
61
+ {
62
+ /**
63
+ * Детализация seatsUrgency: КАКОЙ призыв показан. «Последний слот»
64
+ * и «осталось 2» — разные уровни дефицита с разной селекцией
65
+ * трафика (мало выбора времени ≠ эффект текста), а weekend-нудж —
66
+ * вообще не про дефицит. Агрегированный yes/no их смешивает.
67
+ */
68
+ id: 'seatsMessageKind',
69
+ kind: widget_funnel_kind_enum_1.WidgetFunnelKindEnum.BOOKING,
70
+ step: widget_funnel_step_enum_1.WidgetFunnelStepEnum.PLAYERS_STEP,
71
+ metaKey: 'seatsMessageKind',
72
+ label: 'Какой призыв показан на экране игроков',
73
+ buckets: [
74
+ { value: 'last-slot', label: '«Последний слот»' },
75
+ { value: 'two-slots', label: '«Осталось 2 слота»' },
76
+ { value: 'weekend-nudge', label: '«Бронируйте заранее» (выходной)' },
77
+ { value: 'none', label: 'Без призыва' },
78
+ ],
79
+ bucketize: enumBucketizer(['last-slot', 'two-slots', 'weekend-nudge', 'none']),
80
+ },
58
81
  {
59
82
  id: 'slotDiscount',
60
83
  kind: widget_funnel_kind_enum_1.WidgetFunnelKindEnum.BOOKING,
@@ -64,6 +87,47 @@ exports.WIDGET_FUNNEL_DIMENSIONS = [
64
87
  buckets: YES_NO_BUCKETS,
65
88
  bucketize: boolBucketizer,
66
89
  },
90
+ {
91
+ /**
92
+ * Тест гипотезы «не знают, сколько человек»: чем шире выбор числа
93
+ * игроков (и чем сильнее от него зависит цена), тем выше
94
+ * неопределённость состава группы на этом шаге. Если бакеты «4+»
95
+ * проседают против «фиксировано» — неопределённость реальна.
96
+ */
97
+ id: 'playersChoiceCount',
98
+ kind: widget_funnel_kind_enum_1.WidgetFunnelKindEnum.BOOKING,
99
+ step: widget_funnel_step_enum_1.WidgetFunnelStepEnum.PLAYERS_STEP,
100
+ metaKey: 'playersChoiceCount',
101
+ label: 'Вариантов числа игроков',
102
+ buckets: [
103
+ { value: '1', label: 'Фиксировано (1 вариант)' },
104
+ { value: '2-3', label: '2–3 варианта' },
105
+ { value: '4+', label: '4 и более' },
106
+ ],
107
+ bucketize: numberBucketizer([
108
+ { test: (n) => n <= 1, value: '1' },
109
+ { test: (n) => n <= 3, value: '2-3' },
110
+ { test: () => true, value: '4+' },
111
+ ]),
112
+ },
113
+ {
114
+ /**
115
+ * Тест гипотезы «не спрашивать количество → выше конверсия»: режим
116
+ * выбора числа игроков квеста. Сравнение конверсии трёх режимов —
117
+ * прямое измерение эффекта «Определимся на месте» / скрытого выбора.
118
+ */
119
+ id: 'playersSelectMode',
120
+ kind: widget_funnel_kind_enum_1.WidgetFunnelKindEnum.BOOKING,
121
+ step: widget_funnel_step_enum_1.WidgetFunnelStepEnum.PLAYERS_STEP,
122
+ metaKey: 'playersSelectMode',
123
+ label: 'Режим выбора числа игроков',
124
+ buckets: [
125
+ { value: players_select_mode_enum_1.PlayersSelectModeEnum.REQUIRED, label: 'Обязательный выбор' },
126
+ { value: players_select_mode_enum_1.PlayersSelectModeEnum.OPTIONAL, label: 'Можно «определиться на месте»' },
127
+ { value: players_select_mode_enum_1.PlayersSelectModeEnum.HIDDEN, label: 'Без выбора (скрыт)' },
128
+ ],
129
+ bucketize: enumBucketizer(Object.values(players_select_mode_enum_1.PlayersSelectModeEnum)),
130
+ },
67
131
  {
68
132
  id: 'modesOffered',
69
133
  kind: widget_funnel_kind_enum_1.WidgetFunnelKindEnum.BOOKING,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@escapenavigator/types",
3
- "version": "2.0.6",
3
+ "version": "2.0.8",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -23,7 +23,7 @@
23
23
  "reflect-metadata": "^0.1.13",
24
24
  "rxjs": "^7.5.5"
25
25
  },
26
- "gitHead": "fd770a651244014b1282f5da4b51f6f43785ead2",
26
+ "gitHead": "f88105efecc1893d1eb103e8b2069161b0e6dd0a",
27
27
  "devDependencies": {
28
28
  "@types/validator": "13.0.0",
29
29
  "typescript": "^5.6"