@escapenavigator/types 2.0.6 → 2.0.7

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.
@@ -19,6 +19,8 @@ const boolBucketizer = (raw) => {
19
19
  return raw === 'true' ? 'yes' : 'no';
20
20
  return null;
21
21
  };
22
+ /** Бакетер строкового enum'а: значение валидно, только если есть в списке. */
23
+ const enumBucketizer = (allowed) => (raw) => typeof raw === 'string' && allowed.includes(raw) ? raw : null;
22
24
  const YES_NO_BUCKETS = [
23
25
  { value: 'yes', label: 'Есть' },
24
26
  { value: 'no', label: 'Нет' },
@@ -55,6 +57,26 @@ exports.WIDGET_FUNNEL_DIMENSIONS = [
55
57
  buckets: YES_NO_BUCKETS,
56
58
  bucketize: boolBucketizer,
57
59
  },
60
+ {
61
+ /**
62
+ * Детализация seatsUrgency: КАКОЙ призыв показан. «Последний слот»
63
+ * и «осталось 2» — разные уровни дефицита с разной селекцией
64
+ * трафика (мало выбора времени ≠ эффект текста), а weekend-нудж —
65
+ * вообще не про дефицит. Агрегированный yes/no их смешивает.
66
+ */
67
+ id: 'seatsMessageKind',
68
+ kind: widget_funnel_kind_enum_1.WidgetFunnelKindEnum.BOOKING,
69
+ step: widget_funnel_step_enum_1.WidgetFunnelStepEnum.PLAYERS_STEP,
70
+ metaKey: 'seatsMessageKind',
71
+ label: 'Какой призыв показан на экране игроков',
72
+ buckets: [
73
+ { value: 'last-slot', label: '«Последний слот»' },
74
+ { value: 'two-slots', label: '«Осталось 2 слота»' },
75
+ { value: 'weekend-nudge', label: '«Бронируйте заранее» (выходной)' },
76
+ { value: 'none', label: 'Без призыва' },
77
+ ],
78
+ bucketize: enumBucketizer(['last-slot', 'two-slots', 'weekend-nudge', 'none']),
79
+ },
58
80
  {
59
81
  id: 'slotDiscount',
60
82
  kind: widget_funnel_kind_enum_1.WidgetFunnelKindEnum.BOOKING,
@@ -64,6 +86,38 @@ exports.WIDGET_FUNNEL_DIMENSIONS = [
64
86
  buckets: YES_NO_BUCKETS,
65
87
  bucketize: boolBucketizer,
66
88
  },
89
+ {
90
+ /**
91
+ * Тест гипотезы «не знают, сколько человек»: чем шире выбор числа
92
+ * игроков (и чем сильнее от него зависит цена), тем выше
93
+ * неопределённость состава группы на этом шаге. Если бакеты «4+»
94
+ * проседают против «фиксировано» — неопределённость реальна.
95
+ */
96
+ id: 'playersChoiceCount',
97
+ kind: widget_funnel_kind_enum_1.WidgetFunnelKindEnum.BOOKING,
98
+ step: widget_funnel_step_enum_1.WidgetFunnelStepEnum.PLAYERS_STEP,
99
+ metaKey: 'playersChoiceCount',
100
+ label: 'Вариантов числа игроков',
101
+ buckets: [
102
+ { value: '1', label: 'Фиксировано (1 вариант)' },
103
+ { value: '2-3', label: '2–3 варианта' },
104
+ { value: '4+', label: '4 и более' },
105
+ ],
106
+ bucketize: numberBucketizer([
107
+ { test: (n) => n <= 1, value: '1' },
108
+ { test: (n) => n <= 3, value: '2-3' },
109
+ { test: () => true, value: '4+' },
110
+ ]),
111
+ },
112
+ {
113
+ id: 'flexPlayersSelect',
114
+ kind: widget_funnel_kind_enum_1.WidgetFunnelKindEnum.BOOKING,
115
+ step: widget_funnel_step_enum_1.WidgetFunnelStepEnum.PLAYERS_STEP,
116
+ metaKey: 'flexPlayersSelect',
117
+ label: 'Без выбора числа игроков (flex-квест)',
118
+ buckets: YES_NO_BUCKETS,
119
+ bucketize: boolBucketizer,
120
+ },
67
121
  {
68
122
  id: 'modesOffered',
69
123
  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.7",
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": "1205192b8db237aeb156697754bced60b39197f8",
27
27
  "devDependencies": {
28
28
  "@types/validator": "13.0.0",
29
29
  "typescript": "^5.6"