@kaspernj/api-maker 1.0.2039 → 1.0.2040

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.
@@ -0,0 +1,8 @@
1
+ const restPropsValidator = restProps => {
2
+ const restPropsKeys = Object.keys(restProps);
3
+ if (restPropsKeys.length > 0) {
4
+ throw new Error(`Invalid props: ${restPropsKeys.join(", ")}`);
5
+ }
6
+ };
7
+ export default restPropsValidator;
8
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXN0UHJvcHNWYWxpZGF0b3IiLCJyZXN0UHJvcHMiLCJyZXN0UHJvcHNLZXlzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIkVycm9yIiwiam9pbiJdLCJzb3VyY2VzIjpbIi4uL3NyYy9yZXN0LXByb3BzLXZhbGlkYXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCByZXN0UHJvcHNWYWxpZGF0b3IgPSAocmVzdFByb3BzKSA9PiB7XG4gIGNvbnN0IHJlc3RQcm9wc0tleXMgPSBPYmplY3Qua2V5cyhyZXN0UHJvcHMpXG5cbiAgaWYgKHJlc3RQcm9wc0tleXMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcm9wczogJHtyZXN0UHJvcHNLZXlzLmpvaW4oXCIsIFwiKX1gKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlc3RQcm9wc1ZhbGlkYXRvclxuIl0sIm1hcHBpbmdzIjoiQUFBQSxNQUFNQSxrQkFBa0IsR0FBSUMsU0FBUyxJQUFLO0VBQ3hDLE1BQU1DLGFBQWEsR0FBR0MsTUFBTSxDQUFDQyxJQUFJLENBQUNILFNBQVMsQ0FBQztFQUU1QyxJQUFJQyxhQUFhLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDNUIsTUFBTSxJQUFJQyxLQUFLLENBQUMsa0JBQWtCSixhQUFhLENBQUNLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQy9EO0FBQ0YsQ0FBQztBQUVELGVBQWVQLGtCQUFrQiIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1,5 +1,11 @@
1
- import { useLayoutEffect, useMemo } from "react";
1
+ import { useEffect, useLayoutEffect, useMemo } from "react";
2
+ import useSSR from "use-ssr";
2
3
  const ApiMakerUseEventEmitter = (events, event, onCalled) => {
4
+ const {
5
+ isServer
6
+ } = useSSR();
7
+ const useWorkingEffect = isServer ? useEffect : useLayoutEffect;
8
+
3
9
  // useMemo to instantly connect
4
10
  useMemo(() => {
5
11
  if (events) {
@@ -8,7 +14,7 @@ const ApiMakerUseEventEmitter = (events, event, onCalled) => {
8
14
  }, [events, event, onCalled]);
9
15
 
10
16
  // useLayoutEffect to disconnect when unmounted or changed
11
- useLayoutEffect(() => {
17
+ useWorkingEffect(() => {
12
18
  if (events) {
13
19
  return () => {
14
20
  events.removeListener(event, onCalled);
@@ -17,4 +23,4 @@ const ApiMakerUseEventEmitter = (events, event, onCalled) => {
17
23
  }, [events, event, onCalled]);
18
24
  };
19
25
  export default ApiMakerUseEventEmitter;
20
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VNZW1vIiwiQXBpTWFrZXJVc2VFdmVudEVtaXR0ZXIiLCJldmVudHMiLCJldmVudCIsIm9uQ2FsbGVkIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciJdLCJzb3VyY2VzIjpbIi4uL3NyYy91c2UtZXZlbnQtZW1pdHRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZUxheW91dEVmZmVjdCwgdXNlTWVtb30gZnJvbSBcInJlYWN0XCJcblxuY29uc3QgQXBpTWFrZXJVc2VFdmVudEVtaXR0ZXIgPSAoZXZlbnRzLCBldmVudCwgb25DYWxsZWQpID0+IHtcbiAgLy8gdXNlTWVtbyB0byBpbnN0YW50bHkgY29ubmVjdFxuICB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoZXZlbnRzKSB7XG4gICAgICBldmVudHMuYWRkTGlzdGVuZXIoZXZlbnQsIG9uQ2FsbGVkKVxuICAgIH1cbiAgfSwgW2V2ZW50cywgZXZlbnQsIG9uQ2FsbGVkXSlcblxuICAvLyB1c2VMYXlvdXRFZmZlY3QgdG8gZGlzY29ubmVjdCB3aGVuIHVubW91bnRlZCBvciBjaGFuZ2VkXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGV2ZW50cykge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZXZlbnRzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBvbkNhbGxlZClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtldmVudHMsIGV2ZW50LCBvbkNhbGxlZF0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwaU1ha2VyVXNlRXZlbnRFbWl0dGVyXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLGVBQWUsRUFBRUMsT0FBTyxRQUFPLE9BQU87QUFFOUMsTUFBTUMsdUJBQXVCLEdBQUdBLENBQUNDLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxRQUFRLEtBQUs7RUFDM0Q7RUFDQUosT0FBTyxDQUFDLE1BQU07SUFDWixJQUFJRSxNQUFNLEVBQUU7TUFDVkEsTUFBTSxDQUFDRyxXQUFXLENBQUNGLEtBQUssRUFBRUMsUUFBUSxDQUFDO0lBQ3JDO0VBQ0YsQ0FBQyxFQUFFLENBQUNGLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxRQUFRLENBQUMsQ0FBQzs7RUFFN0I7RUFDQUwsZUFBZSxDQUFDLE1BQU07SUFDcEIsSUFBSUcsTUFBTSxFQUFFO01BQ1YsT0FBTyxNQUFNO1FBQ1hBLE1BQU0sQ0FBQ0ksY0FBYyxDQUFDSCxLQUFLLEVBQUVDLFFBQVEsQ0FBQztNQUN4QyxDQUFDO0lBQ0g7RUFDRixDQUFDLEVBQUUsQ0FBQ0YsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxlQUFlSCx1QkFBdUIiLCJpZ25vcmVMaXN0IjpbXX0=
26
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VNZW1vIiwidXNlU1NSIiwiQXBpTWFrZXJVc2VFdmVudEVtaXR0ZXIiLCJldmVudHMiLCJldmVudCIsIm9uQ2FsbGVkIiwiaXNTZXJ2ZXIiLCJ1c2VXb3JraW5nRWZmZWN0IiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciJdLCJzb3VyY2VzIjpbIi4uL3NyYy91c2UtZXZlbnQtZW1pdHRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHVzZVNTUiBmcm9tIFwidXNlLXNzclwiXG5cbmNvbnN0IEFwaU1ha2VyVXNlRXZlbnRFbWl0dGVyID0gKGV2ZW50cywgZXZlbnQsIG9uQ2FsbGVkKSA9PiB7XG4gIGNvbnN0IHtpc1NlcnZlcn0gPSB1c2VTU1IoKVxuICBjb25zdCB1c2VXb3JraW5nRWZmZWN0ID0gaXNTZXJ2ZXIgPyB1c2VFZmZlY3QgOiB1c2VMYXlvdXRFZmZlY3RcblxuICAvLyB1c2VNZW1vIHRvIGluc3RhbnRseSBjb25uZWN0XG4gIHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChldmVudHMpIHtcbiAgICAgIGV2ZW50cy5hZGRMaXN0ZW5lcihldmVudCwgb25DYWxsZWQpXG4gICAgfVxuICB9LCBbZXZlbnRzLCBldmVudCwgb25DYWxsZWRdKVxuXG4gIC8vIHVzZUxheW91dEVmZmVjdCB0byBkaXNjb25uZWN0IHdoZW4gdW5tb3VudGVkIG9yIGNoYW5nZWRcbiAgdXNlV29ya2luZ0VmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGV2ZW50cykge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZXZlbnRzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBvbkNhbGxlZClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtldmVudHMsIGV2ZW50LCBvbkNhbGxlZF0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwaU1ha2VyVXNlRXZlbnRFbWl0dGVyXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLFNBQVMsRUFBRUMsZUFBZSxFQUFFQyxPQUFPLFFBQU8sT0FBTztBQUN6RCxPQUFPQyxNQUFNLE1BQU0sU0FBUztBQUU1QixNQUFNQyx1QkFBdUIsR0FBR0EsQ0FBQ0MsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsS0FBSztFQUMzRCxNQUFNO0lBQUNDO0VBQVEsQ0FBQyxHQUFHTCxNQUFNLENBQUMsQ0FBQztFQUMzQixNQUFNTSxnQkFBZ0IsR0FBR0QsUUFBUSxHQUFHUixTQUFTLEdBQUdDLGVBQWU7O0VBRS9EO0VBQ0FDLE9BQU8sQ0FBQyxNQUFNO0lBQ1osSUFBSUcsTUFBTSxFQUFFO01BQ1ZBLE1BQU0sQ0FBQ0ssV0FBVyxDQUFDSixLQUFLLEVBQUVDLFFBQVEsQ0FBQztJQUNyQztFQUNGLENBQUMsRUFBRSxDQUFDRixNQUFNLEVBQUVDLEtBQUssRUFBRUMsUUFBUSxDQUFDLENBQUM7O0VBRTdCO0VBQ0FFLGdCQUFnQixDQUFDLE1BQU07SUFDckIsSUFBSUosTUFBTSxFQUFFO01BQ1YsT0FBTyxNQUFNO1FBQ1hBLE1BQU0sQ0FBQ00sY0FBYyxDQUFDTCxLQUFLLEVBQUVDLFFBQVEsQ0FBQztNQUN4QyxDQUFDO0lBQ0g7RUFDRixDQUFDLEVBQUUsQ0FBQ0YsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxlQUFlSCx1QkFBdUIiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -12,11 +12,11 @@ const ApiMakerUseEventListener = (target, event, onCalled) => {
12
12
  if (target) {
13
13
  const eventListener = target.addEventListener(event, onCalledCallback);
14
14
  return () => {
15
- if (eventListener) eventListener.remove(); // This is how its done in Expo + Jest.
15
+ if (eventListener?.remove) eventListener.remove(); // This is how its done in Expo + Jest.
16
16
  if (target.removeEventListener) target.removeEventListener(event, onCalledCallback); // This is the "old" way in browsers.
17
17
  };
18
18
  }
19
19
  }, [target, event, onCalled]);
20
20
  };
21
21
  export default ApiMakerUseEventListener;
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVNTUiIsIkFwaU1ha2VyVXNlRXZlbnRMaXN0ZW5lciIsInRhcmdldCIsImV2ZW50Iiwib25DYWxsZWQiLCJpc1NlcnZlciIsInVzZVdvcmtpbmdFZmZlY3QiLCJvbkNhbGxlZENhbGxiYWNrIiwiYXJncyIsImFwcGx5IiwiZXZlbnRMaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIl0sInNvdXJjZXMiOlsiLi4vc3JjL3VzZS1ldmVudC1saXN0ZW5lci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB1c2VTU1IgZnJvbSBcInVzZS1zc3JcIlxuXG5jb25zdCBBcGlNYWtlclVzZUV2ZW50TGlzdGVuZXIgPSAodGFyZ2V0LCBldmVudCwgb25DYWxsZWQpID0+IHtcbiAgY29uc3Qge2lzU2VydmVyfSA9IHVzZVNTUigpXG4gIGNvbnN0IHVzZVdvcmtpbmdFZmZlY3QgPSBpc1NlcnZlciA/IHVzZUVmZmVjdCA6IHVzZUxheW91dEVmZmVjdFxuXG4gIGNvbnN0IG9uQ2FsbGVkQ2FsbGJhY2sgPSB1c2VDYWxsYmFjaygoLi4uYXJncykgPT4ge1xuICAgIG9uQ2FsbGVkLmFwcGx5KG51bGwsIGFyZ3MpXG4gIH0sIFt0YXJnZXQsIGV2ZW50LCBvbkNhbGxlZF0pXG5cbiAgdXNlV29ya2luZ0VmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBvbkNhbGxlZENhbGxiYWNrKVxuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnRMaXN0ZW5lcikgZXZlbnRMaXN0ZW5lci5yZW1vdmUoKSAvLyBUaGlzIGlzIGhvdyBpdHMgZG9uZSBpbiBFeHBvICsgSmVzdC5cbiAgICAgICAgaWYgKHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKSB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgb25DYWxsZWRDYWxsYmFjaykgLy8gVGhpcyBpcyB0aGUgXCJvbGRcIiB3YXkgaW4gYnJvd3NlcnMuXG4gICAgICB9XG4gICAgfVxuICB9LCBbdGFyZ2V0LCBldmVudCwgb25DYWxsZWRdKVxufVxuXG5leHBvcnQgZGVmYXVsdCBBcGlNYWtlclVzZUV2ZW50TGlzdGVuZXJcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLGVBQWUsUUFBTyxPQUFPO0FBQzdELE9BQU9DLE1BQU0sTUFBTSxTQUFTO0FBRTVCLE1BQU1DLHdCQUF3QixHQUFHQSxDQUFDQyxNQUFNLEVBQUVDLEtBQUssRUFBRUMsUUFBUSxLQUFLO0VBQzVELE1BQU07SUFBQ0M7RUFBUSxDQUFDLEdBQUdMLE1BQU0sQ0FBQyxDQUFDO0VBQzNCLE1BQU1NLGdCQUFnQixHQUFHRCxRQUFRLEdBQUdQLFNBQVMsR0FBR0MsZUFBZTtFQUUvRCxNQUFNUSxnQkFBZ0IsR0FBR1YsV0FBVyxDQUFDLENBQUMsR0FBR1csSUFBSSxLQUFLO0lBQ2hESixRQUFRLENBQUNLLEtBQUssQ0FBQyxJQUFJLEVBQUVELElBQUksQ0FBQztFQUM1QixDQUFDLEVBQUUsQ0FBQ04sTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO0VBRTdCRSxnQkFBZ0IsQ0FBQyxNQUFNO0lBQ3JCLElBQUlKLE1BQU0sRUFBRTtNQUNWLE1BQU1RLGFBQWEsR0FBR1IsTUFBTSxDQUFDUyxnQkFBZ0IsQ0FBQ1IsS0FBSyxFQUFFSSxnQkFBZ0IsQ0FBQztNQUV0RSxPQUFPLE1BQU07UUFDWCxJQUFJRyxhQUFhLEVBQUVBLGFBQWEsQ0FBQ0UsTUFBTSxDQUFDLENBQUMsRUFBQztRQUMxQyxJQUFJVixNQUFNLENBQUNXLG1CQUFtQixFQUFFWCxNQUFNLENBQUNXLG1CQUFtQixDQUFDVixLQUFLLEVBQUVJLGdCQUFnQixDQUFDLEVBQUM7TUFDdEYsQ0FBQztJQUNIO0VBQ0YsQ0FBQyxFQUFFLENBQUNMLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxRQUFRLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQsZUFBZUgsd0JBQXdCIiwiaWdub3JlTGlzdCI6W119
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVNTUiIsIkFwaU1ha2VyVXNlRXZlbnRMaXN0ZW5lciIsInRhcmdldCIsImV2ZW50Iiwib25DYWxsZWQiLCJpc1NlcnZlciIsInVzZVdvcmtpbmdFZmZlY3QiLCJvbkNhbGxlZENhbGxiYWNrIiwiYXJncyIsImFwcGx5IiwiZXZlbnRMaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIl0sInNvdXJjZXMiOlsiLi4vc3JjL3VzZS1ldmVudC1saXN0ZW5lci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB1c2VTU1IgZnJvbSBcInVzZS1zc3JcIlxuXG5jb25zdCBBcGlNYWtlclVzZUV2ZW50TGlzdGVuZXIgPSAodGFyZ2V0LCBldmVudCwgb25DYWxsZWQpID0+IHtcbiAgY29uc3Qge2lzU2VydmVyfSA9IHVzZVNTUigpXG4gIGNvbnN0IHVzZVdvcmtpbmdFZmZlY3QgPSBpc1NlcnZlciA/IHVzZUVmZmVjdCA6IHVzZUxheW91dEVmZmVjdFxuICBjb25zdCBvbkNhbGxlZENhbGxiYWNrID0gdXNlQ2FsbGJhY2soKC4uLmFyZ3MpID0+IHtcbiAgICBvbkNhbGxlZC5hcHBseShudWxsLCBhcmdzKVxuICB9LCBbdGFyZ2V0LCBldmVudCwgb25DYWxsZWRdKVxuXG4gIHVzZVdvcmtpbmdFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgb25DYWxsZWRDYWxsYmFjaylcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50TGlzdGVuZXI/LnJlbW92ZSkgZXZlbnRMaXN0ZW5lci5yZW1vdmUoKSAvLyBUaGlzIGlzIGhvdyBpdHMgZG9uZSBpbiBFeHBvICsgSmVzdC5cbiAgICAgICAgaWYgKHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKSB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgb25DYWxsZWRDYWxsYmFjaykgLy8gVGhpcyBpcyB0aGUgXCJvbGRcIiB3YXkgaW4gYnJvd3NlcnMuXG4gICAgICB9XG4gICAgfVxuICB9LCBbdGFyZ2V0LCBldmVudCwgb25DYWxsZWRdKVxufVxuXG5leHBvcnQgZGVmYXVsdCBBcGlNYWtlclVzZUV2ZW50TGlzdGVuZXJcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLGVBQWUsUUFBTyxPQUFPO0FBQzdELE9BQU9DLE1BQU0sTUFBTSxTQUFTO0FBRTVCLE1BQU1DLHdCQUF3QixHQUFHQSxDQUFDQyxNQUFNLEVBQUVDLEtBQUssRUFBRUMsUUFBUSxLQUFLO0VBQzVELE1BQU07SUFBQ0M7RUFBUSxDQUFDLEdBQUdMLE1BQU0sQ0FBQyxDQUFDO0VBQzNCLE1BQU1NLGdCQUFnQixHQUFHRCxRQUFRLEdBQUdQLFNBQVMsR0FBR0MsZUFBZTtFQUMvRCxNQUFNUSxnQkFBZ0IsR0FBR1YsV0FBVyxDQUFDLENBQUMsR0FBR1csSUFBSSxLQUFLO0lBQ2hESixRQUFRLENBQUNLLEtBQUssQ0FBQyxJQUFJLEVBQUVELElBQUksQ0FBQztFQUM1QixDQUFDLEVBQUUsQ0FBQ04sTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO0VBRTdCRSxnQkFBZ0IsQ0FBQyxNQUFNO0lBQ3JCLElBQUlKLE1BQU0sRUFBRTtNQUNWLE1BQU1RLGFBQWEsR0FBR1IsTUFBTSxDQUFDUyxnQkFBZ0IsQ0FBQ1IsS0FBSyxFQUFFSSxnQkFBZ0IsQ0FBQztNQUV0RSxPQUFPLE1BQU07UUFDWCxJQUFJRyxhQUFhLEVBQUVFLE1BQU0sRUFBRUYsYUFBYSxDQUFDRSxNQUFNLENBQUMsQ0FBQyxFQUFDO1FBQ2xELElBQUlWLE1BQU0sQ0FBQ1csbUJBQW1CLEVBQUVYLE1BQU0sQ0FBQ1csbUJBQW1CLENBQUNWLEtBQUssRUFBRUksZ0JBQWdCLENBQUMsRUFBQztNQUN0RixDQUFDO0lBQ0g7RUFDRixDQUFDLEVBQUUsQ0FBQ0wsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxlQUFlSCx3QkFBd0IiLCJpZ25vcmVMaXN0IjpbXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaspernj/api-maker",
3
- "version": "1.0.2039",
3
+ "version": "1.0.2040",
4
4
  "description": "My new module",
5
5
  "main": "build/index.js",
6
6
  "scripts": {
@@ -0,0 +1,9 @@
1
+ const restPropsValidator = (restProps) => {
2
+ const restPropsKeys = Object.keys(restProps)
3
+
4
+ if (restPropsKeys.length > 0) {
5
+ throw new Error(`Invalid props: ${restPropsKeys.join(", ")}`)
6
+ }
7
+ }
8
+
9
+ export default restPropsValidator
@@ -1,6 +1,10 @@
1
- import {useLayoutEffect, useMemo} from "react"
1
+ import {useEffect, useLayoutEffect, useMemo} from "react"
2
+ import useSSR from "use-ssr"
2
3
 
3
4
  const ApiMakerUseEventEmitter = (events, event, onCalled) => {
5
+ const {isServer} = useSSR()
6
+ const useWorkingEffect = isServer ? useEffect : useLayoutEffect
7
+
4
8
  // useMemo to instantly connect
5
9
  useMemo(() => {
6
10
  if (events) {
@@ -9,7 +13,7 @@ const ApiMakerUseEventEmitter = (events, event, onCalled) => {
9
13
  }, [events, event, onCalled])
10
14
 
11
15
  // useLayoutEffect to disconnect when unmounted or changed
12
- useLayoutEffect(() => {
16
+ useWorkingEffect(() => {
13
17
  if (events) {
14
18
  return () => {
15
19
  events.removeListener(event, onCalled)
@@ -4,7 +4,6 @@ import useSSR from "use-ssr"
4
4
  const ApiMakerUseEventListener = (target, event, onCalled) => {
5
5
  const {isServer} = useSSR()
6
6
  const useWorkingEffect = isServer ? useEffect : useLayoutEffect
7
-
8
7
  const onCalledCallback = useCallback((...args) => {
9
8
  onCalled.apply(null, args)
10
9
  }, [target, event, onCalled])
@@ -14,7 +13,7 @@ const ApiMakerUseEventListener = (target, event, onCalled) => {
14
13
  const eventListener = target.addEventListener(event, onCalledCallback)
15
14
 
16
15
  return () => {
17
- if (eventListener) eventListener.remove() // This is how its done in Expo + Jest.
16
+ if (eventListener?.remove) eventListener.remove() // This is how its done in Expo + Jest.
18
17
  if (target.removeEventListener) target.removeEventListener(event, onCalledCallback) // This is the "old" way in browsers.
19
18
  }
20
19
  }