@cuemath/web-utils 1.0.0-beta.14 → 1.0.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.
Files changed (237) hide show
  1. package/.husky/pre-commit +0 -1
  2. package/dist/cookie/index.d.ts +1 -1
  3. package/dist/cookie/index.js +2 -3
  4. package/dist/cookie/index.js.map +1 -1
  5. package/dist/growth-source/index.d.ts +6 -0
  6. package/dist/growth-source/index.js +151 -0
  7. package/dist/growth-source/index.js.map +1 -0
  8. package/dist/growth-source/types.d.ts +25 -0
  9. package/dist/growth-source/types.js +3 -0
  10. package/dist/growth-source/types.js.map +1 -0
  11. package/dist/index.d.ts +1 -6
  12. package/dist/index.js +1 -6
  13. package/dist/index.js.map +1 -1
  14. package/package.json +3 -7
  15. package/src/cookie/index.ts +10 -4
  16. package/src/growth-source/index.ts +191 -0
  17. package/src/growth-source/types.ts +33 -0
  18. package/src/index.ts +1 -6
  19. package/.eslintignore +0 -2
  20. package/.huskyrc +0 -5
  21. package/.lintstagedrc.yml +0 -5
  22. package/dist/constants/country/index.d.ts +0 -2
  23. package/dist/constants/country/index.js +0 -7
  24. package/dist/constants/country/index.js.map +0 -1
  25. package/dist/constants/country/iso-country-code.d.ts +0 -248
  26. package/dist/constants/country/iso-country-code.js +0 -252
  27. package/dist/constants/country/iso-country-code.js.map +0 -1
  28. package/dist/constants/date-time/index.d.ts +0 -17
  29. package/dist/constants/date-time/index.js +0 -42
  30. package/dist/constants/date-time/index.js.map +0 -1
  31. package/dist/constants/date-time/international-timezones.d.ts +0 -7
  32. package/dist/constants/date-time/international-timezones.js +0 -155
  33. package/dist/constants/date-time/international-timezones.js.map +0 -1
  34. package/dist/constants/e-cna/index.d.ts +0 -41
  35. package/dist/constants/e-cna/index.js +0 -45
  36. package/dist/constants/e-cna/index.js.map +0 -1
  37. package/dist/constants/index.d.ts +0 -2
  38. package/dist/constants/index.js +0 -19
  39. package/dist/constants/index.js.map +0 -1
  40. package/dist/country/index.d.ts +0 -1
  41. package/dist/country/index.js +0 -13
  42. package/dist/country/index.js.map +0 -1
  43. package/dist/date-time-helper/e-cna.d.ts +0 -32
  44. package/dist/date-time-helper/e-cna.js +0 -153
  45. package/dist/date-time-helper/e-cna.js.map +0 -1
  46. package/dist/date-time-helper/index.d.ts +0 -54
  47. package/dist/date-time-helper/index.js +0 -290
  48. package/dist/date-time-helper/index.js.map +0 -1
  49. package/dist/e-cna/flow/aggregator.d.ts +0 -473
  50. package/dist/e-cna/flow/aggregator.js +0 -17
  51. package/dist/e-cna/flow/aggregator.js.map +0 -1
  52. package/dist/e-cna/flow/index.d.ts +0 -1
  53. package/dist/e-cna/flow/index.js +0 -18
  54. package/dist/e-cna/flow/index.js.map +0 -1
  55. package/dist/e-cna/flow/variants/default.d.ts +0 -734
  56. package/dist/e-cna/flow/variants/default.js +0 -95
  57. package/dist/e-cna/flow/variants/default.js.map +0 -1
  58. package/dist/e-cna/flow/variants/index.d.ts +0 -1
  59. package/dist/e-cna/flow/variants/index.js +0 -18
  60. package/dist/e-cna/flow/variants/index.js.map +0 -1
  61. package/dist/e-cna/index.d.ts +0 -43
  62. package/dist/e-cna/index.js +0 -221
  63. package/dist/e-cna/index.js.map +0 -1
  64. package/dist/e-cna/slides/child_hobbies/index.d.ts +0 -1
  65. package/dist/e-cna/slides/child_hobbies/index.js +0 -18
  66. package/dist/e-cna/slides/child_hobbies/index.js.map +0 -1
  67. package/dist/e-cna/slides/child_hobbies/variants.d.ts +0 -22
  68. package/dist/e-cna/slides/child_hobbies/variants.js +0 -26
  69. package/dist/e-cna/slides/child_hobbies/variants.js.map +0 -1
  70. package/dist/e-cna/slides/child_info/index.d.ts +0 -1
  71. package/dist/e-cna/slides/child_info/index.js +0 -18
  72. package/dist/e-cna/slides/child_info/index.js.map +0 -1
  73. package/dist/e-cna/slides/child_info/variants.d.ts +0 -17
  74. package/dist/e-cna/slides/child_info/variants.js +0 -22
  75. package/dist/e-cna/slides/child_info/variants.js.map +0 -1
  76. package/dist/e-cna/slides/child_personality/index.d.ts +0 -1
  77. package/dist/e-cna/slides/child_personality/index.js +0 -18
  78. package/dist/e-cna/slides/child_personality/index.js.map +0 -1
  79. package/dist/e-cna/slides/child_personality/variants.d.ts +0 -12
  80. package/dist/e-cna/slides/child_personality/variants.js +0 -16
  81. package/dist/e-cna/slides/child_personality/variants.js.map +0 -1
  82. package/dist/e-cna/slides/curriculum/index.d.ts +0 -1
  83. package/dist/e-cna/slides/curriculum/index.js +0 -18
  84. package/dist/e-cna/slides/curriculum/index.js.map +0 -1
  85. package/dist/e-cna/slides/curriculum/variants.d.ts +0 -12
  86. package/dist/e-cna/slides/curriculum/variants.js +0 -17
  87. package/dist/e-cna/slides/curriculum/variants.js.map +0 -1
  88. package/dist/e-cna/slides/grade/index.d.ts +0 -1
  89. package/dist/e-cna/slides/grade/index.js +0 -18
  90. package/dist/e-cna/slides/grade/index.js.map +0 -1
  91. package/dist/e-cna/slides/grade/variants.d.ts +0 -14
  92. package/dist/e-cna/slides/grade/variants.js +0 -31
  93. package/dist/e-cna/slides/grade/variants.js.map +0 -1
  94. package/dist/e-cna/slides/index.d.ts +0 -19
  95. package/dist/e-cna/slides/index.js +0 -36
  96. package/dist/e-cna/slides/index.js.map +0 -1
  97. package/dist/e-cna/slides/intro/index.d.ts +0 -1
  98. package/dist/e-cna/slides/intro/index.js +0 -18
  99. package/dist/e-cna/slides/intro/index.js.map +0 -1
  100. package/dist/e-cna/slides/intro/variants.d.ts +0 -7
  101. package/dist/e-cna/slides/intro/variants.js +0 -11
  102. package/dist/e-cna/slides/intro/variants.js.map +0 -1
  103. package/dist/e-cna/slides/key_need_l1/index.d.ts +0 -1
  104. package/dist/e-cna/slides/key_need_l1/index.js +0 -18
  105. package/dist/e-cna/slides/key_need_l1/index.js.map +0 -1
  106. package/dist/e-cna/slides/key_need_l1/variants.d.ts +0 -26
  107. package/dist/e-cna/slides/key_need_l1/variants.js +0 -57
  108. package/dist/e-cna/slides/key_need_l1/variants.js.map +0 -1
  109. package/dist/e-cna/slides/key_need_l2/index.d.ts +0 -1
  110. package/dist/e-cna/slides/key_need_l2/index.js +0 -18
  111. package/dist/e-cna/slides/key_need_l2/index.js.map +0 -1
  112. package/dist/e-cna/slides/key_need_l2/variants.d.ts +0 -67
  113. package/dist/e-cna/slides/key_need_l2/variants.js +0 -139
  114. package/dist/e-cna/slides/key_need_l2/variants.js.map +0 -1
  115. package/dist/e-cna/slides/key_need_l3/index.d.ts +0 -1
  116. package/dist/e-cna/slides/key_need_l3/index.js +0 -18
  117. package/dist/e-cna/slides/key_need_l3/index.js.map +0 -1
  118. package/dist/e-cna/slides/key_need_l3/variants.d.ts +0 -11
  119. package/dist/e-cna/slides/key_need_l3/variants.js +0 -15
  120. package/dist/e-cna/slides/key_need_l3/variants.js.map +0 -1
  121. package/dist/e-cna/slides/math-perception/index.d.ts +0 -1
  122. package/dist/e-cna/slides/math-perception/index.js +0 -18
  123. package/dist/e-cna/slides/math-perception/index.js.map +0 -1
  124. package/dist/e-cna/slides/math-perception/variants.d.ts +0 -15
  125. package/dist/e-cna/slides/math-perception/variants.js +0 -32
  126. package/dist/e-cna/slides/math-perception/variants.js.map +0 -1
  127. package/dist/e-cna/slides/other_curriculum/index.d.ts +0 -1
  128. package/dist/e-cna/slides/other_curriculum/index.js +0 -18
  129. package/dist/e-cna/slides/other_curriculum/index.js.map +0 -1
  130. package/dist/e-cna/slides/other_curriculum/variants.d.ts +0 -12
  131. package/dist/e-cna/slides/other_curriculum/variants.js +0 -17
  132. package/dist/e-cna/slides/other_curriculum/variants.js.map +0 -1
  133. package/dist/e-cna/slides/school_performance_5_12/index.d.ts +0 -1
  134. package/dist/e-cna/slides/school_performance_5_12/index.js +0 -18
  135. package/dist/e-cna/slides/school_performance_5_12/index.js.map +0 -1
  136. package/dist/e-cna/slides/school_performance_5_12/variants.d.ts +0 -15
  137. package/dist/e-cna/slides/school_performance_5_12/variants.js +0 -26
  138. package/dist/e-cna/slides/school_performance_5_12/variants.js.map +0 -1
  139. package/dist/e-cna/slides/school_performance_kg_4/index.d.ts +0 -1
  140. package/dist/e-cna/slides/school_performance_kg_4/index.js +0 -18
  141. package/dist/e-cna/slides/school_performance_kg_4/index.js.map +0 -1
  142. package/dist/e-cna/slides/school_performance_kg_4/variants.d.ts +0 -14
  143. package/dist/e-cna/slides/school_performance_kg_4/variants.js +0 -28
  144. package/dist/e-cna/slides/school_performance_kg_4/variants.js.map +0 -1
  145. package/dist/e-cna/slides/secondary_needs/index.d.ts +0 -1
  146. package/dist/e-cna/slides/secondary_needs/index.js +0 -18
  147. package/dist/e-cna/slides/secondary_needs/index.js.map +0 -1
  148. package/dist/e-cna/slides/secondary_needs/variants.d.ts +0 -14
  149. package/dist/e-cna/slides/secondary_needs/variants.js +0 -28
  150. package/dist/e-cna/slides/secondary_needs/variants.js.map +0 -1
  151. package/dist/e-cna/slides/signup/index.d.ts +0 -1
  152. package/dist/e-cna/slides/signup/index.js +0 -18
  153. package/dist/e-cna/slides/signup/index.js.map +0 -1
  154. package/dist/e-cna/slides/signup/variants.d.ts +0 -7
  155. package/dist/e-cna/slides/signup/variants.js +0 -11
  156. package/dist/e-cna/slides/signup/variants.js.map +0 -1
  157. package/dist/e-cna/slides/signup_refer/index.d.ts +0 -1
  158. package/dist/e-cna/slides/signup_refer/index.js +0 -18
  159. package/dist/e-cna/slides/signup_refer/index.js.map +0 -1
  160. package/dist/e-cna/slides/signup_refer/variants.d.ts +0 -12
  161. package/dist/e-cna/slides/signup_refer/variants.js +0 -20
  162. package/dist/e-cna/slides/signup_refer/variants.js.map +0 -1
  163. package/dist/e-cna/slides/slot_pick/index.d.ts +0 -1
  164. package/dist/e-cna/slides/slot_pick/index.js +0 -18
  165. package/dist/e-cna/slides/slot_pick/index.js.map +0 -1
  166. package/dist/e-cna/slides/slot_pick/variants.d.ts +0 -12
  167. package/dist/e-cna/slides/slot_pick/variants.js +0 -16
  168. package/dist/e-cna/slides/slot_pick/variants.js.map +0 -1
  169. package/dist/e-cna/slides/teacher_intro/index.d.ts +0 -1
  170. package/dist/e-cna/slides/teacher_intro/index.js +0 -18
  171. package/dist/e-cna/slides/teacher_intro/index.js.map +0 -1
  172. package/dist/e-cna/slides/teacher_intro/variants.d.ts +0 -78
  173. package/dist/e-cna/slides/teacher_intro/variants.js +0 -116
  174. package/dist/e-cna/slides/teacher_intro/variants.js.map +0 -1
  175. package/dist/e-cna/utils/index.d.ts +0 -4
  176. package/dist/e-cna/utils/index.js +0 -28
  177. package/dist/e-cna/utils/index.js.map +0 -1
  178. package/dist/local-storage/index.d.ts +0 -13
  179. package/dist/local-storage/index.js +0 -172
  180. package/dist/local-storage/index.js.map +0 -1
  181. package/dist/object/index.d.ts +0 -6
  182. package/dist/object/index.js +0 -24
  183. package/dist/object/index.js.map +0 -1
  184. package/src/constants/country/index.ts +0 -2
  185. package/src/constants/country/iso-country-code.ts +0 -248
  186. package/src/constants/date-time/index.ts +0 -43
  187. package/src/constants/date-time/international-timezones.ts +0 -157
  188. package/src/constants/e-cna/index.ts +0 -55
  189. package/src/constants/index.ts +0 -2
  190. package/src/country/index.ts +0 -9
  191. package/src/date-time-helper/e-cna.ts +0 -205
  192. package/src/date-time-helper/index.ts +0 -365
  193. package/src/e-cna/flow/aggregator.ts +0 -12
  194. package/src/e-cna/flow/index.ts +0 -1
  195. package/src/e-cna/flow/variants/default.ts +0 -113
  196. package/src/e-cna/flow/variants/index.ts +0 -1
  197. package/src/e-cna/index.ts +0 -249
  198. package/src/e-cna/slides/child_hobbies/index.ts +0 -1
  199. package/src/e-cna/slides/child_hobbies/variants.ts +0 -24
  200. package/src/e-cna/slides/child_info/index.ts +0 -1
  201. package/src/e-cna/slides/child_info/variants.ts +0 -18
  202. package/src/e-cna/slides/child_personality/index.ts +0 -1
  203. package/src/e-cna/slides/child_personality/variants.ts +0 -12
  204. package/src/e-cna/slides/curriculum/index.ts +0 -1
  205. package/src/e-cna/slides/curriculum/variants.ts +0 -14
  206. package/src/e-cna/slides/grade/index.ts +0 -1
  207. package/src/e-cna/slides/grade/variants.ts +0 -29
  208. package/src/e-cna/slides/index.ts +0 -19
  209. package/src/e-cna/slides/intro/index.ts +0 -1
  210. package/src/e-cna/slides/intro/variants.ts +0 -7
  211. package/src/e-cna/slides/key_need_l1/index.ts +0 -1
  212. package/src/e-cna/slides/key_need_l1/variants.ts +0 -57
  213. package/src/e-cna/slides/key_need_l2/index.ts +0 -1
  214. package/src/e-cna/slides/key_need_l2/variants.ts +0 -143
  215. package/src/e-cna/slides/key_need_l3/index.ts +0 -1
  216. package/src/e-cna/slides/key_need_l3/variants.ts +0 -13
  217. package/src/e-cna/slides/math-perception/index.ts +0 -1
  218. package/src/e-cna/slides/math-perception/variants.ts +0 -30
  219. package/src/e-cna/slides/other_curriculum/index.ts +0 -1
  220. package/src/e-cna/slides/other_curriculum/variants.ts +0 -14
  221. package/src/e-cna/slides/school_performance_5_12/index.ts +0 -1
  222. package/src/e-cna/slides/school_performance_5_12/variants.ts +0 -23
  223. package/src/e-cna/slides/school_performance_kg_4/index.ts +0 -1
  224. package/src/e-cna/slides/school_performance_kg_4/variants.ts +0 -25
  225. package/src/e-cna/slides/secondary_needs/index.ts +0 -1
  226. package/src/e-cna/slides/secondary_needs/variants.ts +0 -26
  227. package/src/e-cna/slides/signup/index.ts +0 -1
  228. package/src/e-cna/slides/signup/variants.ts +0 -7
  229. package/src/e-cna/slides/signup_refer/index.ts +0 -1
  230. package/src/e-cna/slides/signup_refer/variants.ts +0 -16
  231. package/src/e-cna/slides/slot_pick/index.ts +0 -1
  232. package/src/e-cna/slides/slot_pick/variants.ts +0 -12
  233. package/src/e-cna/slides/teacher_intro/index.ts +0 -1
  234. package/src/e-cna/slides/teacher_intro/variants.ts +0 -114
  235. package/src/e-cna/utils/index.ts +0 -32
  236. package/src/local-storage/index.ts +0 -186
  237. package/src/object/index.ts +0 -26
package/.husky/pre-commit CHANGED
@@ -2,4 +2,3 @@
2
2
  . "$(dirname -- "$0")/_/husky.sh"
3
3
 
4
4
  yarn lint
5
- npx lint-staged
@@ -1,4 +1,4 @@
1
1
  export declare const getCookie: (name: string, cookie?: string) => string;
2
2
  export declare function removeCookie(name: string): void;
3
- export declare function createCookie(name: string, value: string, days: number): void;
3
+ export declare function createCookie(name: string, value: string, days: number, subdomain: boolean): void;
4
4
  export declare function createCookieWithMidnightExp(name: string, value: string): void;
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createCookieWithMidnightExp = exports.createCookie = exports.removeCookie = exports.getCookie = void 0;
4
- /* eslint-disable @typescript-eslint/no-explicit-any */
5
4
  const getCookie = (name, cookie = document.cookie) => {
6
5
  if (!cookie) {
7
6
  return '';
@@ -26,14 +25,14 @@ function removeCookie(name) {
26
25
  document.cookie = `${name}=; expires=${date.toUTCString()}; path=/`;
27
26
  }
28
27
  exports.removeCookie = removeCookie;
29
- function createCookie(name, value, days) {
28
+ function createCookie(name, value, days, subdomain) {
30
29
  let expires = '';
31
30
  if (days) {
32
31
  const date = new Date();
33
32
  date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
34
33
  expires = `; expires=${date.toUTCString()}`;
35
34
  }
36
- document.cookie = `${name}=${encodeURIComponent(value)}${expires}; path=/`;
35
+ document.cookie = `${name}=${encodeURIComponent(value)}${expires}; path=/${subdomain ? '; domain=cuemath.com' : ''}`;
37
36
  }
38
37
  exports.createCookie = createCookie;
39
38
  function createCookieWithMidnightExp(name, value) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cookie/index.ts"],"names":[],"mappings":";;;AAAA,uDAAuD;AAChD,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,SAAiB,QAAQ,CAAC,MAAM,EAAU,EAAE;IAClF,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,EAAE,CAAC;KACX;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QAC1C,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;YACd,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE3C,IAAI,GAAG,KAAK,IAAI,EAAE;gBAChB,OAAO,KAAK,CAAC;aACd;SACF;KACF;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAlBW,QAAA,SAAS,aAkBpB;AAEF,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAExB,2BAA2B;IAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAExD,SAAS;IACT,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,cAAc,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;AACtE,CAAC;AARD,oCAQC;AAED,SAAgB,YAAY,CAAC,IAAY,EAAE,KAAa,EAAE,IAAY;IACpE,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,IAAI,IAAI,EAAE;QACR,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAExB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1D,OAAO,GAAG,aAAa,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;KAC7C;IACD,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,GAAG,OAAO,UAAU,CAAC;AAC7E,CAAC;AAVD,oCAUC;AAED,SAAgB,2BAA2B,CAAC,IAAY,EAAE,KAAa;IACrE,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAExB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,aAAa,IAAI,EAAE,CAAC;IAEpC,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,KAAK,GAAG,OAAO,UAAU,CAAC;AACzD,CAAC;AAPD,kEAOC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cookie/index.ts"],"names":[],"mappings":";;;AAAO,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,SAAiB,QAAQ,CAAC,MAAM,EAAU,EAAE;IAClF,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,EAAE,CAAC;KACX;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QAC1C,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;YACd,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE3C,IAAI,GAAG,KAAK,IAAI,EAAE;gBAChB,OAAO,KAAK,CAAC;aACd;SACF;KACF;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAlBW,QAAA,SAAS,aAkBpB;AAEF,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAExB,2BAA2B;IAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAExD,SAAS;IACT,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,cAAc,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;AACtE,CAAC;AARD,oCAQC;AAED,SAAgB,YAAY,CAC1B,IAAY,EACZ,KAAa,EACb,IAAY,EACZ,SAAkB;IAElB,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,IAAI,IAAI,EAAE;QACR,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAExB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1D,OAAO,GAAG,aAAa,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;KAC7C;IACD,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,GAAG,OAAO,WAC9D,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EACvC,EAAE,CAAC;AACL,CAAC;AAjBD,oCAiBC;AAED,SAAgB,2BAA2B,CAAC,IAAY,EAAE,KAAa;IACrE,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAExB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,aAAa,IAAI,EAAE,CAAC;IAEpC,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,KAAK,GAAG,OAAO,UAAU,CAAC;AACzD,CAAC;AAPD,kEAOC"}
@@ -0,0 +1,6 @@
1
+ import type { SourceDetails } from './types';
2
+ export declare const readSourceCookie: () => SourceDetails;
3
+ export declare const isSourcePresent: () => boolean;
4
+ export declare const initSourceDetails: ({ platform, experiments, flow, affiliateChannel, offlineChannel, organicChannel, performanceChannel, revenueChannel, }: SourceDetails) => Promise<void>;
5
+ export declare const setLastPage: (pagePath: string) => Promise<void>;
6
+ export declare const setFlowEntryPoint: (flowEntry: string) => Promise<void>;
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setFlowEntryPoint = exports.setLastPage = exports.initSourceDetails = exports.isSourcePresent = exports.readSourceCookie = void 0;
4
+ const cookie_1 = require("../cookie");
5
+ const SOURCE_DETAILS_COOKIE = 'source_details';
6
+ const UTM_PARAMS = [
7
+ 'utm_source',
8
+ 'utm_medium',
9
+ 'utm_campaign',
10
+ 'utm_term',
11
+ ];
12
+ const readSourceCookie = () => {
13
+ const sourceDetails = (0, cookie_1.getCookie)(SOURCE_DETAILS_COOKIE);
14
+ return sourceDetails ? JSON.parse(decodeURIComponent(sourceDetails)) : undefined;
15
+ };
16
+ exports.readSourceCookie = readSourceCookie;
17
+ const writeSourceCookie = (sourceDetails) => {
18
+ (0, cookie_1.createCookie)(SOURCE_DETAILS_COOKIE, JSON.stringify(sourceDetails), 365, true);
19
+ };
20
+ const isSourcePresent = () => {
21
+ return !!(0, cookie_1.getCookie)(SOURCE_DETAILS_COOKIE);
22
+ };
23
+ exports.isSourcePresent = isSourcePresent;
24
+ const updateSourceCookie = (sourceDetail) => {
25
+ if (!exports.isSourcePresent)
26
+ return;
27
+ const sourceDetails = (0, exports.readSourceCookie)();
28
+ const updatedDetails = {
29
+ ...sourceDetails,
30
+ ...sourceDetail,
31
+ };
32
+ writeSourceCookie(updatedDetails);
33
+ };
34
+ const getRevenueChannel = (platform, utmParams) => {
35
+ let revenueChannel = 'unknown';
36
+ // set defaults for WEBSITE and ASTRO
37
+ if (platform === 'website') {
38
+ revenueChannel = 'organic';
39
+ }
40
+ else if (platform === 'astro') {
41
+ revenueChannel = 'performance';
42
+ }
43
+ if (utmParams) {
44
+ const { utm_source: utmSource = '' } = utmParams;
45
+ switch (true) {
46
+ case /^affiliate-/.test(utmSource):
47
+ revenueChannel = 'affiliate';
48
+ break;
49
+ case /^offline-/.test(utmSource):
50
+ revenueChannel = 'offline';
51
+ break;
52
+ case /^referral-/.test(utmSource):
53
+ revenueChannel = 'referral';
54
+ break;
55
+ case /^performance-/.test(utmSource):
56
+ revenueChannel = 'performance';
57
+ break;
58
+ }
59
+ }
60
+ return revenueChannel;
61
+ };
62
+ /*
63
+ if Platform = website, then decide based on experiment key
64
+ if Platform = Astro, decide logic once BAU is started
65
+ if Platform = APP, decide logic
66
+ if Platform = chatbot, decide based on chatbot experiment key
67
+ */
68
+ const getFlow = (platform, experiments) => {
69
+ let flow = 'regular';
70
+ if (platform === 'website') {
71
+ if (experiments) {
72
+ const ecnaExp = Object.keys(experiments).find(experiment => experiment.indexOf('ecna') !== -1);
73
+ flow = ecnaExp && experiments[ecnaExp] === 'b' ? 'e-cna' : 'regular';
74
+ }
75
+ }
76
+ return flow;
77
+ };
78
+ const getUTMParams = () => {
79
+ if (typeof window === undefined)
80
+ return;
81
+ const search = new URLSearchParams(window.location.search);
82
+ const utmParams = UTM_PARAMS.reduce((acc, param) => {
83
+ const utmParam = search.get(param);
84
+ if (utmParam) {
85
+ acc[param] = utmParam;
86
+ }
87
+ return acc;
88
+ }, {});
89
+ return utmParams;
90
+ };
91
+ const getFirstPage = () => {
92
+ if (typeof window === undefined)
93
+ return '';
94
+ return window.location.pathname;
95
+ };
96
+ /* TODO: Align Marketing Team on UTM source convention
97
+ affiliate-<channel>
98
+ performance-<channel>
99
+ organic-<channel>
100
+ offline-<channel>
101
+ */
102
+ const getChannel = (utmParams) => {
103
+ // TODO: UTM source patter for FB, GOOGLE...
104
+ if (!utmParams)
105
+ return '';
106
+ const { utm_source: utmSource = '' } = utmParams;
107
+ return utmSource.split('-')[1];
108
+ };
109
+ /*
110
+ Set Static Source Details of user on Visit of Platform
111
+ */
112
+ const initSourceDetails = async ({ platform, experiments, flow, affiliateChannel, offlineChannel, organicChannel, performanceChannel, revenueChannel, }) => {
113
+ if (!(0, exports.isSourcePresent)()) {
114
+ const utmParams = getUTMParams();
115
+ const leadChannel = getChannel(utmParams);
116
+ revenueChannel = revenueChannel || getRevenueChannel(platform, utmParams);
117
+ affiliateChannel =
118
+ revenueChannel === 'affiliate' ? affiliateChannel || leadChannel : undefined;
119
+ offlineChannel =
120
+ revenueChannel === 'offline' ? offlineChannel || leadChannel : undefined;
121
+ organicChannel =
122
+ revenueChannel === 'organic' ? organicChannel || leadChannel : undefined;
123
+ performanceChannel =
124
+ revenueChannel === 'performance' ? performanceChannel || leadChannel : undefined;
125
+ const sourceDetails = {
126
+ platform,
127
+ experiments,
128
+ utmParams: getUTMParams(),
129
+ flow: flow || getFlow(platform, experiments),
130
+ affiliateChannel,
131
+ offlineChannel,
132
+ organicChannel,
133
+ performanceChannel,
134
+ revenueChannel: revenueChannel,
135
+ firstPage: getFirstPage(),
136
+ };
137
+ writeSourceCookie(sourceDetails);
138
+ }
139
+ };
140
+ exports.initSourceDetails = initSourceDetails;
141
+ // Last Page which user visited signup before
142
+ const setLastPage = async (pagePath) => {
143
+ updateSourceCookie({ lastPage: pagePath });
144
+ };
145
+ exports.setLastPage = setLastPage;
146
+ // set Entry point where user clicked to Signup
147
+ const setFlowEntryPoint = async (flowEntry) => {
148
+ updateSourceCookie({ flowEntry });
149
+ };
150
+ exports.setFlowEntryPoint = setFlowEntryPoint;
151
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/growth-source/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export type Platform = 'website' | 'app' | 'astro' | 'leap-teacher' | 'leap-admin';
2
+ export type RevenueChannel = 'organic' | 'performance' | 'affiliate' | 'offline' | 'referral' | 'unknown';
3
+ export type SignupFlow = 'regular' | 'e-cna' | 'e-sales';
4
+ export type Experiments = Record<string, unknown>;
5
+ export type UTMParams = {
6
+ utm_source?: string;
7
+ utm_medium?: string;
8
+ utm_campaign?: string;
9
+ utm_term?: string;
10
+ };
11
+ export type UTMParamsKeys = keyof UTMParams;
12
+ export type SourceDetails = {
13
+ platform: Platform;
14
+ experiments?: Experiments;
15
+ flow?: SignupFlow;
16
+ utmParams?: UTMParams;
17
+ affiliateChannel?: string;
18
+ offlineChannel?: string;
19
+ performanceChannel?: string;
20
+ revenueChannel: RevenueChannel;
21
+ organicChannel?: string;
22
+ flowEntry?: string;
23
+ firstPage?: string;
24
+ lastPage?: string;
25
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/growth-source/types.ts"],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,2 @@
1
1
  export * from './cookie';
2
- export * from './constants';
3
- export * from './local-storage';
4
- export * from './e-cna';
5
- export * from './date-time-helper';
6
- export * from './country';
7
- export * from './object';
2
+ export * from './growth-source';
package/dist/index.js CHANGED
@@ -15,10 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./cookie"), exports);
18
- __exportStar(require("./constants"), exports);
19
- __exportStar(require("./local-storage"), exports);
20
- __exportStar(require("./e-cna"), exports);
21
- __exportStar(require("./date-time-helper"), exports);
22
- __exportStar(require("./country"), exports);
23
- __exportStar(require("./object"), exports);
18
+ __exportStar(require("./growth-source"), exports);
24
19
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,8CAA4B;AAC5B,kDAAgC;AAChC,0CAAwB;AACxB,qDAAmC;AACnC,4CAA0B;AAC1B,2CAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,kDAAgC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cuemath/web-utils",
3
- "version": "1.0.0-beta.14",
3
+ "version": "1.0.0",
4
4
  "description": "Shared web utils package",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -8,9 +8,7 @@
8
8
  "build": "tsc",
9
9
  "build-watch": "tsc -w",
10
10
  "prepublishOnly": "rm -rf dist && yarn build",
11
- "prepare": "husky install",
12
- "precommit": "lint-staged",
13
- "release": "lerna publish from-package"
11
+ "prepare": "husky install"
14
12
  },
15
13
  "repository": {
16
14
  "type": "git",
@@ -39,8 +37,6 @@
39
37
  "prettier": "2.4.1",
40
38
  "typescript": "4.9.4"
41
39
  },
42
- "dependencies": {
43
- "dayjs": "^1.11.7"
44
- },
40
+ "dependencies": {},
45
41
  "side-effects": false
46
42
  }
@@ -1,4 +1,3 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
1
  export const getCookie = (name: string, cookie: string = document.cookie): string => {
3
2
  if (!cookie) {
4
3
  return '';
@@ -29,7 +28,12 @@ export function removeCookie(name: string): void {
29
28
  document.cookie = `${name}=; expires=${date.toUTCString()}; path=/`;
30
29
  }
31
30
 
32
- export function createCookie(name: string, value: string, days: number): void {
31
+ export function createCookie(
32
+ name: string,
33
+ value: string,
34
+ days: number,
35
+ subdomain: boolean,
36
+ ): void {
33
37
  let expires = '';
34
38
 
35
39
  if (days) {
@@ -38,7 +42,9 @@ export function createCookie(name: string, value: string, days: number): void {
38
42
  date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
39
43
  expires = `; expires=${date.toUTCString()}`;
40
44
  }
41
- document.cookie = `${name}=${encodeURIComponent(value)}${expires}; path=/`;
45
+ document.cookie = `${name}=${encodeURIComponent(value)}${expires}; path=/${
46
+ subdomain ? '; domain=cuemath.com' : ''
47
+ }`;
42
48
  }
43
49
 
44
50
  export function createCookieWithMidnightExp(name: string, value: string): void {
@@ -48,4 +54,4 @@ export function createCookieWithMidnightExp(name: string, value: string): void {
48
54
  const expires = `; expires=${date}`;
49
55
 
50
56
  document.cookie = `${name}=${value}${expires}; path=/`;
51
- }
57
+ }
@@ -0,0 +1,191 @@
1
+ import type {
2
+ SourceDetails,
3
+ Platform,
4
+ SignupFlow,
5
+ UTMParams,
6
+ Experiments,
7
+ RevenueChannel,
8
+ UTMParamsKeys,
9
+ } from './types';
10
+
11
+ import { createCookie, getCookie } from '../cookie';
12
+
13
+ const SOURCE_DETAILS_COOKIE = 'source_details';
14
+ const UTM_PARAMS: UTMParamsKeys[] = [
15
+ 'utm_source',
16
+ 'utm_medium',
17
+ 'utm_campaign',
18
+ 'utm_term',
19
+ ];
20
+
21
+ export const readSourceCookie = (): SourceDetails => {
22
+ const sourceDetails = getCookie(SOURCE_DETAILS_COOKIE);
23
+
24
+ return sourceDetails ? JSON.parse(decodeURIComponent(sourceDetails)) : undefined;
25
+ };
26
+
27
+ const writeSourceCookie = (sourceDetails: SourceDetails): void => {
28
+ createCookie(SOURCE_DETAILS_COOKIE, JSON.stringify(sourceDetails), 365, true);
29
+ };
30
+
31
+ export const isSourcePresent = (): boolean => {
32
+ return !!getCookie(SOURCE_DETAILS_COOKIE);
33
+ };
34
+
35
+ const updateSourceCookie = (sourceDetail: Partial<SourceDetails>): void => {
36
+ if (!isSourcePresent) return;
37
+
38
+ const sourceDetails: SourceDetails = readSourceCookie();
39
+ const updatedDetails: SourceDetails = {
40
+ ...sourceDetails,
41
+ ...sourceDetail,
42
+ };
43
+
44
+ writeSourceCookie(updatedDetails);
45
+ };
46
+
47
+ const getRevenueChannel = (platform: Platform, utmParams?: UTMParams): RevenueChannel => {
48
+ let revenueChannel: RevenueChannel = 'unknown';
49
+
50
+ // set defaults for WEBSITE and ASTRO
51
+ if (platform === 'website') {
52
+ revenueChannel = 'organic';
53
+ } else if (platform === 'astro') {
54
+ revenueChannel = 'performance';
55
+ }
56
+
57
+ if (utmParams) {
58
+ const { utm_source: utmSource = '' } = utmParams;
59
+
60
+ switch (true) {
61
+ case /^affiliate-/.test(utmSource):
62
+ revenueChannel = 'affiliate';
63
+ break;
64
+ case /^offline-/.test(utmSource):
65
+ revenueChannel = 'offline';
66
+ break;
67
+ case /^referral-/.test(utmSource):
68
+ revenueChannel = 'referral';
69
+ break;
70
+ case /^performance-/.test(utmSource):
71
+ revenueChannel = 'performance';
72
+ break;
73
+ }
74
+ }
75
+
76
+ return revenueChannel;
77
+ };
78
+
79
+ /*
80
+ if Platform = website, then decide based on experiment key
81
+ if Platform = Astro, decide logic once BAU is started
82
+ if Platform = APP, decide logic
83
+ if Platform = chatbot, decide based on chatbot experiment key
84
+ */
85
+ const getFlow = (platform: Platform, experiments?: Experiments): SignupFlow => {
86
+ let flow: SignupFlow = 'regular';
87
+
88
+ if (platform === 'website') {
89
+ if (experiments) {
90
+ const ecnaExp = Object.keys(experiments).find(
91
+ experiment => experiment.indexOf('ecna') !== -1,
92
+ );
93
+
94
+ flow = ecnaExp && experiments[ecnaExp] === 'b' ? 'e-cna' : 'regular';
95
+ }
96
+ }
97
+
98
+ return flow;
99
+ };
100
+
101
+ const getUTMParams = (): UTMParams | undefined => {
102
+ if (typeof window === undefined) return;
103
+
104
+ const search = new URLSearchParams(window.location.search);
105
+ const utmParams = UTM_PARAMS.reduce((acc: UTMParams, param) => {
106
+ const utmParam = search.get(param) as string;
107
+
108
+ if (utmParam) {
109
+ acc[param] = utmParam;
110
+ }
111
+
112
+ return acc;
113
+ }, {});
114
+
115
+ return utmParams;
116
+ };
117
+
118
+ const getFirstPage = (): string => {
119
+ if (typeof window === undefined) return '';
120
+
121
+ return window.location.pathname;
122
+ };
123
+
124
+ /* TODO: Align Marketing Team on UTM source convention
125
+ affiliate-<channel>
126
+ performance-<channel>
127
+ organic-<channel>
128
+ offline-<channel>
129
+ */
130
+ const getChannel = (utmParams: UTMParams | undefined): string => {
131
+ // TODO: UTM source patter for FB, GOOGLE...
132
+ if (!utmParams) return '';
133
+
134
+ const { utm_source: utmSource = '' } = utmParams;
135
+
136
+ return utmSource.split('-')[1];
137
+ };
138
+
139
+ /*
140
+ Set Static Source Details of user on Visit of Platform
141
+ */
142
+ export const initSourceDetails = async ({
143
+ platform,
144
+ experiments,
145
+ flow,
146
+ affiliateChannel,
147
+ offlineChannel,
148
+ organicChannel,
149
+ performanceChannel,
150
+ revenueChannel,
151
+ }: SourceDetails): Promise<void> => {
152
+ if (!isSourcePresent()) {
153
+ const utmParams = getUTMParams();
154
+ const leadChannel = getChannel(utmParams);
155
+
156
+ revenueChannel = revenueChannel || getRevenueChannel(platform, utmParams);
157
+ affiliateChannel =
158
+ revenueChannel === 'affiliate' ? affiliateChannel || leadChannel : undefined;
159
+ offlineChannel =
160
+ revenueChannel === 'offline' ? offlineChannel || leadChannel : undefined;
161
+ organicChannel =
162
+ revenueChannel === 'organic' ? organicChannel || leadChannel : undefined;
163
+ performanceChannel =
164
+ revenueChannel === 'performance' ? performanceChannel || leadChannel : undefined;
165
+
166
+ const sourceDetails: SourceDetails = {
167
+ platform,
168
+ experiments,
169
+ utmParams: getUTMParams(),
170
+ flow: flow || getFlow(platform, experiments),
171
+ affiliateChannel,
172
+ offlineChannel,
173
+ organicChannel,
174
+ performanceChannel,
175
+ revenueChannel: revenueChannel,
176
+ firstPage: getFirstPage(),
177
+ };
178
+
179
+ writeSourceCookie(sourceDetails);
180
+ }
181
+ };
182
+
183
+ // Last Page which user visited signup before
184
+ export const setLastPage = async (pagePath: string): Promise<void> => {
185
+ updateSourceCookie({ lastPage: pagePath });
186
+ };
187
+
188
+ // set Entry point where user clicked to Signup
189
+ export const setFlowEntryPoint = async (flowEntry: string): Promise<void> => {
190
+ updateSourceCookie({ flowEntry });
191
+ };
@@ -0,0 +1,33 @@
1
+ export type Platform = 'website' | 'app' | 'astro' | 'leap-teacher' | 'leap-admin';
2
+ export type RevenueChannel =
3
+ | 'organic'
4
+ | 'performance'
5
+ | 'affiliate'
6
+ | 'offline'
7
+ | 'referral'
8
+ | 'unknown';
9
+ export type SignupFlow = 'regular' | 'e-cna' | 'e-sales';
10
+ export type Experiments = Record<string, unknown>;
11
+ export type UTMParams = {
12
+ utm_source?: string;
13
+ utm_medium?: string;
14
+ utm_campaign?: string;
15
+ utm_term?: string;
16
+ };
17
+
18
+ export type UTMParamsKeys = keyof UTMParams;
19
+
20
+ export type SourceDetails = {
21
+ platform: Platform;
22
+ experiments?: Experiments;
23
+ flow?: SignupFlow;
24
+ utmParams?: UTMParams;
25
+ affiliateChannel?: string;
26
+ offlineChannel?: string;
27
+ performanceChannel?: string;
28
+ revenueChannel: RevenueChannel;
29
+ organicChannel?: string;
30
+ flowEntry?: string;
31
+ firstPage?: string;
32
+ lastPage?: string;
33
+ };
package/src/index.ts CHANGED
@@ -1,7 +1,2 @@
1
1
  export * from './cookie';
2
- export * from './constants';
3
- export * from './local-storage';
4
- export * from './e-cna';
5
- export * from './date-time-helper';
6
- export * from './country';
7
- export * from './object';
2
+ export * from './growth-source';
package/.eslintignore DELETED
@@ -1,2 +0,0 @@
1
- .next
2
- /dist
package/.huskyrc DELETED
@@ -1,5 +0,0 @@
1
- {
2
- "hooks": {
3
- "pre-commit": "lint-staged"
4
- }
5
- }
package/.lintstagedrc.yml DELETED
@@ -1,5 +0,0 @@
1
- linters:
2
- ./**/*.ts:
3
- - prettier --write
4
- - eslint
5
- - git add
@@ -1,2 +0,0 @@
1
- export { COUNTRY_NAME_COUNTRY_CODE_MAP as ISO_COUNTRY_CODE } from './iso-country-code';
2
- export declare const CUE_COUNTRY_CODE_KEY = "cue_country_code";
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CUE_COUNTRY_CODE_KEY = exports.ISO_COUNTRY_CODE = void 0;
4
- var iso_country_code_1 = require("./iso-country-code");
5
- Object.defineProperty(exports, "ISO_COUNTRY_CODE", { enumerable: true, get: function () { return iso_country_code_1.COUNTRY_NAME_COUNTRY_CODE_MAP; } });
6
- exports.CUE_COUNTRY_CODE_KEY = 'cue_country_code';
7
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/constants/country/index.ts"],"names":[],"mappings":";;;AAAA,uDAAuF;AAA9E,oHAAA,6BAA6B,OAAoB;AAC7C,QAAA,oBAAoB,GAAG,kBAAkB,CAAC"}