@folklore/hooks 0.0.10 → 0.0.11

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 (3) hide show
  1. package/dist/cjs.js +71 -79
  2. package/dist/es.js +72 -80
  3. package/package.json +2 -2
package/dist/cjs.js CHANGED
@@ -88,7 +88,7 @@ function usePlayerCurrentTime(player) {
88
88
  function ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
89
89
 
90
90
  function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
91
- var noPlayerError$2 = new Error('No player');
91
+ var noPlayerError$1 = new Error('No player');
92
92
  var debug$3 = createDebug__default["default"]('folklore:video:youtube');
93
93
 
94
94
  var useDailymotionPlayer = function useDailymotionPlayer() {
@@ -121,7 +121,16 @@ var useDailymotionPlayer = function useDailymotionPlayer() {
121
121
  _params$timeUpdateInt = params.timeUpdateInterval,
122
122
  timeUpdateInterval = _params$timeUpdateInt === void 0 ? 1000 : _params$timeUpdateInt,
123
123
  _params$onTimeUpdate = params.onTimeUpdate,
124
- customOnTimeUpdate = _params$onTimeUpdate === void 0 ? null : _params$onTimeUpdate;
124
+ customOnTimeUpdate = _params$onTimeUpdate === void 0 ? null : _params$onTimeUpdate,
125
+ _params$getVideoId = params.getVideoId,
126
+ getVideoId = _params$getVideoId === void 0 ? function (url) {
127
+ if (url === null || url.match(/^https?:/) === null) {
128
+ return null;
129
+ }
130
+
131
+ var match = url.match(/\/video\/([^/?]+)/);
132
+ return match !== null ? match[1] : null;
133
+ } : _params$getVideoId;
125
134
 
126
135
  var _useState = react.useState(typeof window.DM !== 'undefined'),
127
136
  _useState2 = _slicedToArray__default["default"](_useState, 2),
@@ -142,6 +151,9 @@ var useDailymotionPlayer = function useDailymotionPlayer() {
142
151
  var elementRef = react.useRef(null);
143
152
  var playerRef = react.useRef(null);
144
153
  var ready = apiLoaded && playerReady;
154
+ var videoId = react.useMemo(function () {
155
+ return getVideoId(id);
156
+ }, [id]);
145
157
 
146
158
  var _useState7 = react.useState(initialMuted),
147
159
  _useState8 = _slicedToArray__default["default"](_useState7, 2),
@@ -200,7 +212,7 @@ var useDailymotionPlayer = function useDailymotionPlayer() {
200
212
  var _elementRef$current = elementRef.current,
201
213
  element = _elementRef$current === void 0 ? null : _elementRef$current;
202
214
 
203
- if (!apiLoaded || id === null || element === null) {
215
+ if (!apiLoaded || videoId === null || element === null) {
204
216
  return;
205
217
  }
206
218
 
@@ -223,7 +235,7 @@ var useDailymotionPlayer = function useDailymotionPlayer() {
223
235
  });
224
236
  } else {
225
237
  player = DM.player(element, {
226
- video: id,
238
+ video: videoId,
227
239
  width: width,
228
240
  height: height,
229
241
  params: playerParams
@@ -234,7 +246,7 @@ var useDailymotionPlayer = function useDailymotionPlayer() {
234
246
  if (!playerReady) {
235
247
  setPlayerReady(true);
236
248
  }
237
- }, [apiLoaded, elementRef.current, id, width, height, autoplay, muted, start, controls, queueAutoplayNext, queueEnable, sharingEnable, uiLogo, uiStartScreenInfo]);
249
+ }, [apiLoaded, elementRef.current, videoId, width, height, autoplay, muted, start, controls, queueAutoplayNext, queueEnable, sharingEnable, uiLogo, uiStartScreenInfo]);
238
250
  react.useEffect(function () {
239
251
  var _playerRef$current2 = playerRef.current,
240
252
  player = _playerRef$current2 === void 0 ? null : _playerRef$current2;
@@ -348,34 +360,34 @@ var useDailymotionPlayer = function useDailymotionPlayer() {
348
360
  player.removeEventListener('ad_start', onAdStart);
349
361
  player.removeEventListener('ad_end', onAdEnd);
350
362
  };
351
- }, [playerRef.current, playerReady, id, setLoaded, setPlayState, setMetadata, setVolumeState, setMuted]);
363
+ }, [playerRef.current, playerReady, videoId, setLoaded, setPlayState, setMetadata, setVolumeState, setMuted]);
352
364
  var play = react.useCallback(function () {
353
365
  var player = playerRef.current;
354
- return player !== null ? player.play() : Promise.reject(noPlayerError$2);
366
+ return player !== null ? player.play() : Promise.reject(noPlayerError$1);
355
367
  }, []);
356
368
  var pause = react.useCallback(function () {
357
369
  var player = playerRef.current;
358
- return player !== null ? player.pause() : Promise.reject(noPlayerError$2);
370
+ return player !== null ? player.pause() : Promise.reject(noPlayerError$1);
359
371
  }, []);
360
372
  var setVolume = react.useCallback(function (newVolume) {
361
373
  var player = playerRef.current;
362
- return player !== null ? player.setVolume(newVolume) : Promise.reject(noPlayerError$2);
374
+ return player !== null ? player.setVolume(newVolume) : Promise.reject(noPlayerError$1);
363
375
  }, []);
364
376
  var mute = react.useCallback(function () {
365
377
  var player = playerRef.current;
366
- return player !== null ? player.setMute(true) : Promise.reject(noPlayerError$2);
378
+ return player !== null ? player.setMute(true) : Promise.reject(noPlayerError$1);
367
379
  }, []);
368
380
  var unmute = react.useCallback(function () {
369
381
  var player = playerRef.current;
370
- return player !== null ? player.setMute(false) : Promise.reject(noPlayerError$2);
382
+ return player !== null ? player.setMute(false) : Promise.reject(noPlayerError$1);
371
383
  }, []);
372
384
  var seek = react.useCallback(function (time) {
373
385
  var player = playerRef.current;
374
- return player !== null ? player.seek(time) : Promise.reject(noPlayerError$2);
386
+ return player !== null ? player.seek(time) : Promise.reject(noPlayerError$1);
375
387
  }, []);
376
388
  var playing = playState.playing;
377
389
  var currentTime = usePlayerCurrentTime(playerRef.current, {
378
- id: id,
390
+ id: videoId,
379
391
  disabled: !playing || timeUpdateInterval === null,
380
392
  updateInterval: timeUpdateInterval,
381
393
  onUpdate: customOnTimeUpdate
@@ -455,7 +467,7 @@ function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if
455
467
 
456
468
  function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
457
469
  var debug$2 = createDebug__default["default"]('folklore:video:native');
458
- var noPlayerError$1 = new Error('No player');
470
+ var noPlayerError = new Error('No player');
459
471
 
460
472
  var useNativeVideoPlayer = function useNativeVideoPlayer(url) {
461
473
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
@@ -505,11 +517,11 @@ var useNativeVideoPlayer = function useNativeVideoPlayer(url) {
505
517
 
506
518
  var play = react.useCallback(function () {
507
519
  var player = elementRef.current;
508
- return player !== null ? player.play() : Promise.reject(noPlayerError$1);
520
+ return player !== null ? player.play() : Promise.reject(noPlayerError);
509
521
  }, []);
510
522
  var pause = react.useCallback(function () {
511
523
  var player = elementRef.current;
512
- return player !== null ? player.pause() : Promise.reject(noPlayerError$1);
524
+ return player !== null ? player.pause() : Promise.reject(noPlayerError);
513
525
  }, []);
514
526
  var setVolume = react.useCallback(function (newVolume) {
515
527
  var player = elementRef.current;
@@ -519,7 +531,7 @@ var useNativeVideoPlayer = function useNativeVideoPlayer(url) {
519
531
  return Promise.resolve(newVolume);
520
532
  }
521
533
 
522
- return Promise.reject(noPlayerError$1);
534
+ return Promise.reject(noPlayerError);
523
535
  }, []);
524
536
  var mute = react.useCallback(function () {
525
537
  var player = elementRef.current;
@@ -529,7 +541,7 @@ var useNativeVideoPlayer = function useNativeVideoPlayer(url) {
529
541
  return Promise.resolve(true);
530
542
  }
531
543
 
532
- return Promise.reject(noPlayerError$1);
544
+ return Promise.reject(noPlayerError);
533
545
  }, []);
534
546
  var unmute = react.useCallback(function () {
535
547
  var player = elementRef.current;
@@ -539,7 +551,7 @@ var useNativeVideoPlayer = function useNativeVideoPlayer(url) {
539
551
  return Promise.resolve(false);
540
552
  }
541
553
 
542
- return Promise.reject(noPlayerError$1);
554
+ return Promise.reject(noPlayerError);
543
555
  }, []);
544
556
  var seek = react.useCallback(function (newTime) {
545
557
  var player = elementRef.current;
@@ -549,7 +561,7 @@ var useNativeVideoPlayer = function useNativeVideoPlayer(url) {
549
561
  return Promise.resolve(newTime);
550
562
  }
551
563
 
552
- return Promise.reject(noPlayerError$1);
564
+ return Promise.reject(noPlayerError);
553
565
  }, []);
554
566
  var setLoop = react.useCallback(function (newLoop) {
555
567
  var player = elementRef.current;
@@ -559,7 +571,7 @@ var useNativeVideoPlayer = function useNativeVideoPlayer(url) {
559
571
  return Promise.resolve(newLoop);
560
572
  }
561
573
 
562
- return Promise.reject(noPlayerError$1);
574
+ return Promise.reject(noPlayerError);
563
575
  }, []); // Bind player events
564
576
 
565
577
  react.useEffect(function () {
@@ -897,30 +909,8 @@ var useResizeObserver = function useResizeObserver() {
897
909
  function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
898
910
 
899
911
  function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
900
- var NO_PLAYER_ERROR = new Error('No player');
901
-
902
- var getYoutubeVideoId = function getYoutubeVideoId(url) {
903
- var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/;
904
- var match = url.match(regExp);
905
- return match && match[7].length === 11 ? match[7] : false;
906
- };
907
-
912
+ var NO_PLAYER_ERROR$1 = new Error('No player');
908
913
  var debug$1 = createDebug__default["default"]('folklore:video:youtube');
909
- var isVideoId$1 = function isVideoId(url) {
910
- return url !== null && url.match(/^https?:/) === null;
911
- };
912
-
913
- var getVideoId$1 = function getVideoId(url) {
914
- if (url === null) {
915
- return null;
916
- }
917
-
918
- if (isVideoId$1(url)) {
919
- return url;
920
- }
921
-
922
- return getYoutubeVideoId(url);
923
- };
924
914
 
925
915
  function useYouTubePlayer(id) {
926
916
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
@@ -941,7 +931,17 @@ function useYouTubePlayer(id) {
941
931
  _ref$onVolumeChange = _ref.onVolumeChange,
942
932
  customOnVolumeChange = _ref$onVolumeChange === void 0 ? null : _ref$onVolumeChange,
943
933
  _ref$onTimeUpdate = _ref.onTimeUpdate,
944
- customOnTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate;
934
+ customOnTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate,
935
+ _ref$getVideoId = _ref.getVideoId,
936
+ getVideoId = _ref$getVideoId === void 0 ? function (url) {
937
+ if (url === null || url.match(/^https?:/) === null) {
938
+ return null;
939
+ }
940
+
941
+ var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/;
942
+ var match = url.match(regExp);
943
+ return match && match[7].length === 11 ? match[7] : null;
944
+ } : _ref$getVideoId;
945
945
 
946
946
  var _useState = react.useState(typeof window.YT !== 'undefined'),
947
947
  _useState2 = _slicedToArray__default["default"](_useState, 2),
@@ -953,7 +953,7 @@ function useYouTubePlayer(id) {
953
953
  var playerRef = react.useRef(null);
954
954
  var playerElementRef = react.useRef(elementRef.current);
955
955
  var videoId = react.useMemo(function () {
956
- return getVideoId$1(id);
956
+ return getVideoId(id);
957
957
  }, [id]);
958
958
 
959
959
  var _useState3 = react.useState(false),
@@ -1004,15 +1004,15 @@ function useYouTubePlayer(id) {
1004
1004
  }, [apiLoaded, videoId, setApiLoaded]);
1005
1005
  var play = react.useCallback(function () {
1006
1006
  var player = playerRef.current;
1007
- return player !== null && typeof player.playVideo !== 'undefined' ? Promise.resolve(player.playVideo()) : Promise.reject(NO_PLAYER_ERROR);
1007
+ return player !== null && typeof player.playVideo !== 'undefined' ? Promise.resolve(player.playVideo()) : Promise.reject(NO_PLAYER_ERROR$1);
1008
1008
  }, []);
1009
1009
  var pause = react.useCallback(function () {
1010
1010
  var player = playerRef.current;
1011
- return player !== null && typeof player.pauseVideo !== 'undefined' ? Promise.resolve(player.pauseVideo()) : Promise.reject(NO_PLAYER_ERROR);
1011
+ return player !== null && typeof player.pauseVideo !== 'undefined' ? Promise.resolve(player.pauseVideo()) : Promise.reject(NO_PLAYER_ERROR$1);
1012
1012
  }, []);
1013
1013
  var setVolume = react.useCallback(function (volume) {
1014
1014
  var player = playerRef.current;
1015
- var promise = player !== null && typeof player.setVolume !== 'undefined' ? Promise.resolve(player.setVolume(volume * 100)) : Promise.reject(NO_PLAYER_ERROR);
1015
+ var promise = player !== null && typeof player.setVolume !== 'undefined' ? Promise.resolve(player.setVolume(volume * 100)) : Promise.reject(NO_PLAYER_ERROR$1);
1016
1016
 
1017
1017
  if (customOnVolumeChange) {
1018
1018
  customOnVolumeChange(volume);
@@ -1022,23 +1022,23 @@ function useYouTubePlayer(id) {
1022
1022
  }, [customOnVolumeChange]);
1023
1023
  var mute = react.useCallback(function () {
1024
1024
  var player = playerRef.current;
1025
- return (player !== null && typeof player.mute !== 'undefined' ? Promise.resolve(player.mute()) : Promise.reject(NO_PLAYER_ERROR)).then(function () {
1025
+ return (player !== null && typeof player.mute !== 'undefined' ? Promise.resolve(player.mute()) : Promise.reject(NO_PLAYER_ERROR$1)).then(function () {
1026
1026
  return setMuted(true);
1027
1027
  });
1028
1028
  }, [setMuted]);
1029
1029
  var unmute = react.useCallback(function () {
1030
1030
  var player = playerRef.current;
1031
- return (player !== null && typeof player.unMute !== 'undefined' ? Promise.resolve(player.unMute()) : Promise.reject(NO_PLAYER_ERROR)).then(function () {
1031
+ return (player !== null && typeof player.unMute !== 'undefined' ? Promise.resolve(player.unMute()) : Promise.reject(NO_PLAYER_ERROR$1)).then(function () {
1032
1032
  return setMuted(false);
1033
1033
  });
1034
1034
  }, []);
1035
1035
  var seek = react.useCallback(function (time) {
1036
1036
  var player = playerRef.current;
1037
- return player !== null && typeof player.seekTo !== 'undefined' ? Promise.resolve(player.seekTo(time)) : Promise.reject(NO_PLAYER_ERROR);
1037
+ return player !== null && typeof player.seekTo !== 'undefined' ? Promise.resolve(player.seekTo(time)) : Promise.reject(NO_PLAYER_ERROR$1);
1038
1038
  }, []);
1039
1039
  var setLoop = react.useCallback(function (loop) {
1040
1040
  var player = playerRef.current;
1041
- return player !== null && typeof player.setLoop !== 'undefined' ? Promise.resolve(player.setLoop(loop)) : Promise.reject(NO_PLAYER_ERROR);
1041
+ return player !== null && typeof player.setLoop !== 'undefined' ? Promise.resolve(player.setLoop(loop)) : Promise.reject(NO_PLAYER_ERROR$1);
1042
1042
  }, []);
1043
1043
  var destroyPlayer = react.useCallback(function () {
1044
1044
  if (playerRef.current !== null) {
@@ -1175,24 +1175,7 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
1175
1175
 
1176
1176
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1177
1177
  var debug = createDebug__default["default"]('folklore:video:vimeo');
1178
- var isVideoId = function isVideoId(url) {
1179
- return url !== null && url.match(/^[0-9]+$/);
1180
- };
1181
-
1182
- var getVideoId = function getVideoId(url) {
1183
- if (url === null) {
1184
- return null;
1185
- }
1186
-
1187
- if (isVideoId(url)) {
1188
- return url;
1189
- }
1190
-
1191
- var match = url.match(/\/[0-9]+/);
1192
- return match !== null ? match[1] : null;
1193
- };
1194
-
1195
- var noPlayerError = new Error('No player');
1178
+ var NO_PLAYER_ERROR = new Error('No player');
1196
1179
 
1197
1180
  var useVimeoPlayer = function useVimeoPlayer(id) {
1198
1181
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
@@ -1215,7 +1198,16 @@ var useVimeoPlayer = function useVimeoPlayer(id) {
1215
1198
  _ref$timeUpdateInterv = _ref.timeUpdateInterval,
1216
1199
  timeUpdateInterval = _ref$timeUpdateInterv === void 0 ? 1000 : _ref$timeUpdateInterv,
1217
1200
  _ref$onTimeUpdate = _ref.onTimeUpdate,
1218
- customOnTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate;
1201
+ customOnTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate,
1202
+ _ref$getVideoId = _ref.getVideoId,
1203
+ getVideoId = _ref$getVideoId === void 0 ? function (url) {
1204
+ if (url === null || url.match(/^[0-9]+$/) !== null) {
1205
+ return url;
1206
+ }
1207
+
1208
+ var match = url.match(/\/[0-9]+/);
1209
+ return match !== null ? match[1] : null;
1210
+ } : _ref$getVideoId;
1219
1211
 
1220
1212
  var _useState = react.useState(false),
1221
1213
  _useState2 = _slicedToArray__default["default"](_useState, 2),
@@ -1283,31 +1275,31 @@ var useVimeoPlayer = function useVimeoPlayer(id) {
1283
1275
  }, [id]);
1284
1276
  var play = react.useCallback(function () {
1285
1277
  var player = playerRef.current;
1286
- return player !== null ? player.play() : Promise.reject(noPlayerError);
1278
+ return player !== null ? player.play() : Promise.reject(NO_PLAYER_ERROR);
1287
1279
  }, []);
1288
1280
  var pause = react.useCallback(function () {
1289
1281
  var player = playerRef.current;
1290
- return player !== null ? player.pause() : Promise.reject(noPlayerError);
1282
+ return player !== null ? player.pause() : Promise.reject(NO_PLAYER_ERROR);
1291
1283
  }, []);
1292
1284
  var setVolume = react.useCallback(function (newVolume) {
1293
1285
  var player = playerRef.current;
1294
- return player !== null ? player.setVolume(newVolume) : Promise.reject(noPlayerError);
1286
+ return player !== null ? player.setVolume(newVolume) : Promise.reject(NO_PLAYER_ERROR);
1295
1287
  }, []);
1296
1288
  var mute = react.useCallback(function () {
1297
1289
  var player = playerRef.current;
1298
- return player !== null ? player.setVolume(0) : Promise.reject(noPlayerError);
1290
+ return player !== null ? player.setVolume(0) : Promise.reject(NO_PLAYER_ERROR);
1299
1291
  }, []);
1300
1292
  var unmute = react.useCallback(function () {
1301
1293
  var player = playerRef.current;
1302
- return player !== null ? player.setVolume(1) : Promise.reject(noPlayerError);
1294
+ return player !== null ? player.setVolume(1) : Promise.reject(NO_PLAYER_ERROR);
1303
1295
  }, []);
1304
1296
  var seek = react.useCallback(function (time) {
1305
1297
  var player = playerRef.current;
1306
- return player !== null ? player.setCurrentTime(time) : Promise.reject(noPlayerError);
1298
+ return player !== null ? player.setCurrentTime(time) : Promise.reject(NO_PLAYER_ERROR);
1307
1299
  }, []);
1308
1300
  var setLoop = react.useCallback(function (loop) {
1309
1301
  var player = playerRef.current;
1310
- return player !== null ? player.setLoop(loop) : Promise.reject(noPlayerError);
1302
+ return player !== null ? player.setLoop(loop) : Promise.reject(NO_PLAYER_ERROR);
1311
1303
  }, []);
1312
1304
  var destroyVideo = react.useCallback(function () {
1313
1305
  var player = playerRef.current;
package/dist/es.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
3
- import { useState, useRef, useEffect, useCallback, useMemo } from 'react';
3
+ import { useState, useRef, useEffect, useMemo, useCallback } from 'react';
4
4
  import { loadDailymotion, loadYouTube, loadVimeo } from '@folklore/services';
5
5
  import createDebug from 'debug';
6
6
  import EventsManager from '@folklore/events';
@@ -76,7 +76,7 @@ function usePlayerCurrentTime(player) {
76
76
  function ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
77
77
 
78
78
  function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
79
- var noPlayerError$2 = new Error('No player');
79
+ var noPlayerError$1 = new Error('No player');
80
80
  var debug$3 = createDebug('folklore:video:youtube');
81
81
 
82
82
  var useDailymotionPlayer = function useDailymotionPlayer() {
@@ -109,7 +109,16 @@ var useDailymotionPlayer = function useDailymotionPlayer() {
109
109
  _params$timeUpdateInt = params.timeUpdateInterval,
110
110
  timeUpdateInterval = _params$timeUpdateInt === void 0 ? 1000 : _params$timeUpdateInt,
111
111
  _params$onTimeUpdate = params.onTimeUpdate,
112
- customOnTimeUpdate = _params$onTimeUpdate === void 0 ? null : _params$onTimeUpdate;
112
+ customOnTimeUpdate = _params$onTimeUpdate === void 0 ? null : _params$onTimeUpdate,
113
+ _params$getVideoId = params.getVideoId,
114
+ getVideoId = _params$getVideoId === void 0 ? function (url) {
115
+ if (url === null || url.match(/^https?:/) === null) {
116
+ return null;
117
+ }
118
+
119
+ var match = url.match(/\/video\/([^/?]+)/);
120
+ return match !== null ? match[1] : null;
121
+ } : _params$getVideoId;
113
122
 
114
123
  var _useState = useState(typeof window.DM !== 'undefined'),
115
124
  _useState2 = _slicedToArray(_useState, 2),
@@ -130,6 +139,9 @@ var useDailymotionPlayer = function useDailymotionPlayer() {
130
139
  var elementRef = useRef(null);
131
140
  var playerRef = useRef(null);
132
141
  var ready = apiLoaded && playerReady;
142
+ var videoId = useMemo(function () {
143
+ return getVideoId(id);
144
+ }, [id]);
133
145
 
134
146
  var _useState7 = useState(initialMuted),
135
147
  _useState8 = _slicedToArray(_useState7, 2),
@@ -188,7 +200,7 @@ var useDailymotionPlayer = function useDailymotionPlayer() {
188
200
  var _elementRef$current = elementRef.current,
189
201
  element = _elementRef$current === void 0 ? null : _elementRef$current;
190
202
 
191
- if (!apiLoaded || id === null || element === null) {
203
+ if (!apiLoaded || videoId === null || element === null) {
192
204
  return;
193
205
  }
194
206
 
@@ -211,7 +223,7 @@ var useDailymotionPlayer = function useDailymotionPlayer() {
211
223
  });
212
224
  } else {
213
225
  player = DM.player(element, {
214
- video: id,
226
+ video: videoId,
215
227
  width: width,
216
228
  height: height,
217
229
  params: playerParams
@@ -222,7 +234,7 @@ var useDailymotionPlayer = function useDailymotionPlayer() {
222
234
  if (!playerReady) {
223
235
  setPlayerReady(true);
224
236
  }
225
- }, [apiLoaded, elementRef.current, id, width, height, autoplay, muted, start, controls, queueAutoplayNext, queueEnable, sharingEnable, uiLogo, uiStartScreenInfo]);
237
+ }, [apiLoaded, elementRef.current, videoId, width, height, autoplay, muted, start, controls, queueAutoplayNext, queueEnable, sharingEnable, uiLogo, uiStartScreenInfo]);
226
238
  useEffect(function () {
227
239
  var _playerRef$current2 = playerRef.current,
228
240
  player = _playerRef$current2 === void 0 ? null : _playerRef$current2;
@@ -336,34 +348,34 @@ var useDailymotionPlayer = function useDailymotionPlayer() {
336
348
  player.removeEventListener('ad_start', onAdStart);
337
349
  player.removeEventListener('ad_end', onAdEnd);
338
350
  };
339
- }, [playerRef.current, playerReady, id, setLoaded, setPlayState, setMetadata, setVolumeState, setMuted]);
351
+ }, [playerRef.current, playerReady, videoId, setLoaded, setPlayState, setMetadata, setVolumeState, setMuted]);
340
352
  var play = useCallback(function () {
341
353
  var player = playerRef.current;
342
- return player !== null ? player.play() : Promise.reject(noPlayerError$2);
354
+ return player !== null ? player.play() : Promise.reject(noPlayerError$1);
343
355
  }, []);
344
356
  var pause = useCallback(function () {
345
357
  var player = playerRef.current;
346
- return player !== null ? player.pause() : Promise.reject(noPlayerError$2);
358
+ return player !== null ? player.pause() : Promise.reject(noPlayerError$1);
347
359
  }, []);
348
360
  var setVolume = useCallback(function (newVolume) {
349
361
  var player = playerRef.current;
350
- return player !== null ? player.setVolume(newVolume) : Promise.reject(noPlayerError$2);
362
+ return player !== null ? player.setVolume(newVolume) : Promise.reject(noPlayerError$1);
351
363
  }, []);
352
364
  var mute = useCallback(function () {
353
365
  var player = playerRef.current;
354
- return player !== null ? player.setMute(true) : Promise.reject(noPlayerError$2);
366
+ return player !== null ? player.setMute(true) : Promise.reject(noPlayerError$1);
355
367
  }, []);
356
368
  var unmute = useCallback(function () {
357
369
  var player = playerRef.current;
358
- return player !== null ? player.setMute(false) : Promise.reject(noPlayerError$2);
370
+ return player !== null ? player.setMute(false) : Promise.reject(noPlayerError$1);
359
371
  }, []);
360
372
  var seek = useCallback(function (time) {
361
373
  var player = playerRef.current;
362
- return player !== null ? player.seek(time) : Promise.reject(noPlayerError$2);
374
+ return player !== null ? player.seek(time) : Promise.reject(noPlayerError$1);
363
375
  }, []);
364
376
  var playing = playState.playing;
365
377
  var currentTime = usePlayerCurrentTime(playerRef.current, {
366
- id: id,
378
+ id: videoId,
367
379
  disabled: !playing || timeUpdateInterval === null,
368
380
  updateInterval: timeUpdateInterval,
369
381
  onUpdate: customOnTimeUpdate
@@ -443,7 +455,7 @@ function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if
443
455
 
444
456
  function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
445
457
  var debug$2 = createDebug('folklore:video:native');
446
- var noPlayerError$1 = new Error('No player');
458
+ var noPlayerError = new Error('No player');
447
459
 
448
460
  var useNativeVideoPlayer = function useNativeVideoPlayer(url) {
449
461
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
@@ -493,11 +505,11 @@ var useNativeVideoPlayer = function useNativeVideoPlayer(url) {
493
505
 
494
506
  var play = useCallback(function () {
495
507
  var player = elementRef.current;
496
- return player !== null ? player.play() : Promise.reject(noPlayerError$1);
508
+ return player !== null ? player.play() : Promise.reject(noPlayerError);
497
509
  }, []);
498
510
  var pause = useCallback(function () {
499
511
  var player = elementRef.current;
500
- return player !== null ? player.pause() : Promise.reject(noPlayerError$1);
512
+ return player !== null ? player.pause() : Promise.reject(noPlayerError);
501
513
  }, []);
502
514
  var setVolume = useCallback(function (newVolume) {
503
515
  var player = elementRef.current;
@@ -507,7 +519,7 @@ var useNativeVideoPlayer = function useNativeVideoPlayer(url) {
507
519
  return Promise.resolve(newVolume);
508
520
  }
509
521
 
510
- return Promise.reject(noPlayerError$1);
522
+ return Promise.reject(noPlayerError);
511
523
  }, []);
512
524
  var mute = useCallback(function () {
513
525
  var player = elementRef.current;
@@ -517,7 +529,7 @@ var useNativeVideoPlayer = function useNativeVideoPlayer(url) {
517
529
  return Promise.resolve(true);
518
530
  }
519
531
 
520
- return Promise.reject(noPlayerError$1);
532
+ return Promise.reject(noPlayerError);
521
533
  }, []);
522
534
  var unmute = useCallback(function () {
523
535
  var player = elementRef.current;
@@ -527,7 +539,7 @@ var useNativeVideoPlayer = function useNativeVideoPlayer(url) {
527
539
  return Promise.resolve(false);
528
540
  }
529
541
 
530
- return Promise.reject(noPlayerError$1);
542
+ return Promise.reject(noPlayerError);
531
543
  }, []);
532
544
  var seek = useCallback(function (newTime) {
533
545
  var player = elementRef.current;
@@ -537,7 +549,7 @@ var useNativeVideoPlayer = function useNativeVideoPlayer(url) {
537
549
  return Promise.resolve(newTime);
538
550
  }
539
551
 
540
- return Promise.reject(noPlayerError$1);
552
+ return Promise.reject(noPlayerError);
541
553
  }, []);
542
554
  var setLoop = useCallback(function (newLoop) {
543
555
  var player = elementRef.current;
@@ -547,7 +559,7 @@ var useNativeVideoPlayer = function useNativeVideoPlayer(url) {
547
559
  return Promise.resolve(newLoop);
548
560
  }
549
561
 
550
- return Promise.reject(noPlayerError$1);
562
+ return Promise.reject(noPlayerError);
551
563
  }, []); // Bind player events
552
564
 
553
565
  useEffect(function () {
@@ -885,30 +897,8 @@ var useResizeObserver = function useResizeObserver() {
885
897
  function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
886
898
 
887
899
  function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
888
- var NO_PLAYER_ERROR = new Error('No player');
889
-
890
- var getYoutubeVideoId = function getYoutubeVideoId(url) {
891
- var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/;
892
- var match = url.match(regExp);
893
- return match && match[7].length === 11 ? match[7] : false;
894
- };
895
-
900
+ var NO_PLAYER_ERROR$1 = new Error('No player');
896
901
  var debug$1 = createDebug('folklore:video:youtube');
897
- var isVideoId$1 = function isVideoId(url) {
898
- return url !== null && url.match(/^https?:/) === null;
899
- };
900
-
901
- var getVideoId$1 = function getVideoId(url) {
902
- if (url === null) {
903
- return null;
904
- }
905
-
906
- if (isVideoId$1(url)) {
907
- return url;
908
- }
909
-
910
- return getYoutubeVideoId(url);
911
- };
912
902
 
913
903
  function useYouTubePlayer(id) {
914
904
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
@@ -929,7 +919,17 @@ function useYouTubePlayer(id) {
929
919
  _ref$onVolumeChange = _ref.onVolumeChange,
930
920
  customOnVolumeChange = _ref$onVolumeChange === void 0 ? null : _ref$onVolumeChange,
931
921
  _ref$onTimeUpdate = _ref.onTimeUpdate,
932
- customOnTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate;
922
+ customOnTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate,
923
+ _ref$getVideoId = _ref.getVideoId,
924
+ getVideoId = _ref$getVideoId === void 0 ? function (url) {
925
+ if (url === null || url.match(/^https?:/) === null) {
926
+ return null;
927
+ }
928
+
929
+ var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/;
930
+ var match = url.match(regExp);
931
+ return match && match[7].length === 11 ? match[7] : null;
932
+ } : _ref$getVideoId;
933
933
 
934
934
  var _useState = useState(typeof window.YT !== 'undefined'),
935
935
  _useState2 = _slicedToArray(_useState, 2),
@@ -941,7 +941,7 @@ function useYouTubePlayer(id) {
941
941
  var playerRef = useRef(null);
942
942
  var playerElementRef = useRef(elementRef.current);
943
943
  var videoId = useMemo(function () {
944
- return getVideoId$1(id);
944
+ return getVideoId(id);
945
945
  }, [id]);
946
946
 
947
947
  var _useState3 = useState(false),
@@ -992,15 +992,15 @@ function useYouTubePlayer(id) {
992
992
  }, [apiLoaded, videoId, setApiLoaded]);
993
993
  var play = useCallback(function () {
994
994
  var player = playerRef.current;
995
- return player !== null && typeof player.playVideo !== 'undefined' ? Promise.resolve(player.playVideo()) : Promise.reject(NO_PLAYER_ERROR);
995
+ return player !== null && typeof player.playVideo !== 'undefined' ? Promise.resolve(player.playVideo()) : Promise.reject(NO_PLAYER_ERROR$1);
996
996
  }, []);
997
997
  var pause = useCallback(function () {
998
998
  var player = playerRef.current;
999
- return player !== null && typeof player.pauseVideo !== 'undefined' ? Promise.resolve(player.pauseVideo()) : Promise.reject(NO_PLAYER_ERROR);
999
+ return player !== null && typeof player.pauseVideo !== 'undefined' ? Promise.resolve(player.pauseVideo()) : Promise.reject(NO_PLAYER_ERROR$1);
1000
1000
  }, []);
1001
1001
  var setVolume = useCallback(function (volume) {
1002
1002
  var player = playerRef.current;
1003
- var promise = player !== null && typeof player.setVolume !== 'undefined' ? Promise.resolve(player.setVolume(volume * 100)) : Promise.reject(NO_PLAYER_ERROR);
1003
+ var promise = player !== null && typeof player.setVolume !== 'undefined' ? Promise.resolve(player.setVolume(volume * 100)) : Promise.reject(NO_PLAYER_ERROR$1);
1004
1004
 
1005
1005
  if (customOnVolumeChange) {
1006
1006
  customOnVolumeChange(volume);
@@ -1010,23 +1010,23 @@ function useYouTubePlayer(id) {
1010
1010
  }, [customOnVolumeChange]);
1011
1011
  var mute = useCallback(function () {
1012
1012
  var player = playerRef.current;
1013
- return (player !== null && typeof player.mute !== 'undefined' ? Promise.resolve(player.mute()) : Promise.reject(NO_PLAYER_ERROR)).then(function () {
1013
+ return (player !== null && typeof player.mute !== 'undefined' ? Promise.resolve(player.mute()) : Promise.reject(NO_PLAYER_ERROR$1)).then(function () {
1014
1014
  return setMuted(true);
1015
1015
  });
1016
1016
  }, [setMuted]);
1017
1017
  var unmute = useCallback(function () {
1018
1018
  var player = playerRef.current;
1019
- return (player !== null && typeof player.unMute !== 'undefined' ? Promise.resolve(player.unMute()) : Promise.reject(NO_PLAYER_ERROR)).then(function () {
1019
+ return (player !== null && typeof player.unMute !== 'undefined' ? Promise.resolve(player.unMute()) : Promise.reject(NO_PLAYER_ERROR$1)).then(function () {
1020
1020
  return setMuted(false);
1021
1021
  });
1022
1022
  }, []);
1023
1023
  var seek = useCallback(function (time) {
1024
1024
  var player = playerRef.current;
1025
- return player !== null && typeof player.seekTo !== 'undefined' ? Promise.resolve(player.seekTo(time)) : Promise.reject(NO_PLAYER_ERROR);
1025
+ return player !== null && typeof player.seekTo !== 'undefined' ? Promise.resolve(player.seekTo(time)) : Promise.reject(NO_PLAYER_ERROR$1);
1026
1026
  }, []);
1027
1027
  var setLoop = useCallback(function (loop) {
1028
1028
  var player = playerRef.current;
1029
- return player !== null && typeof player.setLoop !== 'undefined' ? Promise.resolve(player.setLoop(loop)) : Promise.reject(NO_PLAYER_ERROR);
1029
+ return player !== null && typeof player.setLoop !== 'undefined' ? Promise.resolve(player.setLoop(loop)) : Promise.reject(NO_PLAYER_ERROR$1);
1030
1030
  }, []);
1031
1031
  var destroyPlayer = useCallback(function () {
1032
1032
  if (playerRef.current !== null) {
@@ -1163,24 +1163,7 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
1163
1163
 
1164
1164
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1165
1165
  var debug = createDebug('folklore:video:vimeo');
1166
- var isVideoId = function isVideoId(url) {
1167
- return url !== null && url.match(/^[0-9]+$/);
1168
- };
1169
-
1170
- var getVideoId = function getVideoId(url) {
1171
- if (url === null) {
1172
- return null;
1173
- }
1174
-
1175
- if (isVideoId(url)) {
1176
- return url;
1177
- }
1178
-
1179
- var match = url.match(/\/[0-9]+/);
1180
- return match !== null ? match[1] : null;
1181
- };
1182
-
1183
- var noPlayerError = new Error('No player');
1166
+ var NO_PLAYER_ERROR = new Error('No player');
1184
1167
 
1185
1168
  var useVimeoPlayer = function useVimeoPlayer(id) {
1186
1169
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
@@ -1203,7 +1186,16 @@ var useVimeoPlayer = function useVimeoPlayer(id) {
1203
1186
  _ref$timeUpdateInterv = _ref.timeUpdateInterval,
1204
1187
  timeUpdateInterval = _ref$timeUpdateInterv === void 0 ? 1000 : _ref$timeUpdateInterv,
1205
1188
  _ref$onTimeUpdate = _ref.onTimeUpdate,
1206
- customOnTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate;
1189
+ customOnTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate,
1190
+ _ref$getVideoId = _ref.getVideoId,
1191
+ getVideoId = _ref$getVideoId === void 0 ? function (url) {
1192
+ if (url === null || url.match(/^[0-9]+$/) !== null) {
1193
+ return url;
1194
+ }
1195
+
1196
+ var match = url.match(/\/[0-9]+/);
1197
+ return match !== null ? match[1] : null;
1198
+ } : _ref$getVideoId;
1207
1199
 
1208
1200
  var _useState = useState(false),
1209
1201
  _useState2 = _slicedToArray(_useState, 2),
@@ -1271,31 +1263,31 @@ var useVimeoPlayer = function useVimeoPlayer(id) {
1271
1263
  }, [id]);
1272
1264
  var play = useCallback(function () {
1273
1265
  var player = playerRef.current;
1274
- return player !== null ? player.play() : Promise.reject(noPlayerError);
1266
+ return player !== null ? player.play() : Promise.reject(NO_PLAYER_ERROR);
1275
1267
  }, []);
1276
1268
  var pause = useCallback(function () {
1277
1269
  var player = playerRef.current;
1278
- return player !== null ? player.pause() : Promise.reject(noPlayerError);
1270
+ return player !== null ? player.pause() : Promise.reject(NO_PLAYER_ERROR);
1279
1271
  }, []);
1280
1272
  var setVolume = useCallback(function (newVolume) {
1281
1273
  var player = playerRef.current;
1282
- return player !== null ? player.setVolume(newVolume) : Promise.reject(noPlayerError);
1274
+ return player !== null ? player.setVolume(newVolume) : Promise.reject(NO_PLAYER_ERROR);
1283
1275
  }, []);
1284
1276
  var mute = useCallback(function () {
1285
1277
  var player = playerRef.current;
1286
- return player !== null ? player.setVolume(0) : Promise.reject(noPlayerError);
1278
+ return player !== null ? player.setVolume(0) : Promise.reject(NO_PLAYER_ERROR);
1287
1279
  }, []);
1288
1280
  var unmute = useCallback(function () {
1289
1281
  var player = playerRef.current;
1290
- return player !== null ? player.setVolume(1) : Promise.reject(noPlayerError);
1282
+ return player !== null ? player.setVolume(1) : Promise.reject(NO_PLAYER_ERROR);
1291
1283
  }, []);
1292
1284
  var seek = useCallback(function (time) {
1293
1285
  var player = playerRef.current;
1294
- return player !== null ? player.setCurrentTime(time) : Promise.reject(noPlayerError);
1286
+ return player !== null ? player.setCurrentTime(time) : Promise.reject(NO_PLAYER_ERROR);
1295
1287
  }, []);
1296
1288
  var setLoop = useCallback(function (loop) {
1297
1289
  var player = playerRef.current;
1298
- return player !== null ? player.setLoop(loop) : Promise.reject(noPlayerError);
1290
+ return player !== null ? player.setLoop(loop) : Promise.reject(NO_PLAYER_ERROR);
1299
1291
  }, []);
1300
1292
  var destroyVideo = useCallback(function () {
1301
1293
  var player = playerRef.current;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@folklore/hooks",
3
- "version": "0.0.10",
3
+ "version": "0.0.11",
4
4
  "description": "React hooks",
5
5
  "keywords": [
6
6
  "javascript",
@@ -48,7 +48,7 @@
48
48
  "publishConfig": {
49
49
  "access": "public"
50
50
  },
51
- "gitHead": "87715f95c9b18bede296108018d8b0210149e937",
51
+ "gitHead": "51583d6c6cca76094a241b2747415fea0ba30cfd",
52
52
  "dependencies": {
53
53
  "@folklore/events": "^0.0.3",
54
54
  "@folklore/services": "^0.1.32",