@kaspernj/api-maker 1.0.2039 → 1.0.2041

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,12 @@
1
+ let isBrowser = false;
2
+ let isNative = false;
3
+ let isServer = false;
4
+ if (navigator === undefined && navigator.product == "ReactNative") {
5
+ isNative = true;
6
+ } else if (window === undefined && window.document?.createElement) {
7
+ isBrowser = true;
8
+ } else {
9
+ isServer = true;
10
+ }
11
+ export { isBrowser, isNative, isServer };
12
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0Jyb3dzZXIiLCJpc05hdGl2ZSIsImlzU2VydmVyIiwibmF2aWdhdG9yIiwidW5kZWZpbmVkIiwicHJvZHVjdCIsIndpbmRvdyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9lbnZpcm9ubWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgaXNCcm93c2VyID0gZmFsc2VcbmxldCBpc05hdGl2ZSA9IGZhbHNlXG5sZXQgaXNTZXJ2ZXIgPSBmYWxzZVxuXG5pZiAobmF2aWdhdG9yID09PSB1bmRlZmluZWQgJiYgbmF2aWdhdG9yLnByb2R1Y3QgPT0gXCJSZWFjdE5hdGl2ZVwiKSB7XG4gIGlzTmF0aXZlID0gdHJ1ZVxufSBlbHNlIGlmICh3aW5kb3cgPT09IHVuZGVmaW5lZCAmJiB3aW5kb3cuZG9jdW1lbnQ/LmNyZWF0ZUVsZW1lbnQpIHtcbiAgaXNCcm93c2VyID0gdHJ1ZVxufSBlbHNlIHtcbiAgaXNTZXJ2ZXIgPSB0cnVlXG59XG5cbmV4cG9ydCB7aXNCcm93c2VyLCBpc05hdGl2ZSwgaXNTZXJ2ZXJ9XG4iXSwibWFwcGluZ3MiOiJBQUFBLElBQUlBLFNBQVMsR0FBRyxLQUFLO0FBQ3JCLElBQUlDLFFBQVEsR0FBRyxLQUFLO0FBQ3BCLElBQUlDLFFBQVEsR0FBRyxLQUFLO0FBRXBCLElBQUlDLFNBQVMsS0FBS0MsU0FBUyxJQUFJRCxTQUFTLENBQUNFLE9BQU8sSUFBSSxhQUFhLEVBQUU7RUFDakVKLFFBQVEsR0FBRyxJQUFJO0FBQ2pCLENBQUMsTUFBTSxJQUFJSyxNQUFNLEtBQUtGLFNBQVMsSUFBSUUsTUFBTSxDQUFDQyxRQUFRLEVBQUVDLGFBQWEsRUFBRTtFQUNqRVIsU0FBUyxHQUFHLElBQUk7QUFDbEIsQ0FBQyxNQUFNO0VBQ0xFLFFBQVEsR0FBRyxJQUFJO0FBQ2pCO0FBRUEsU0FBUUYsU0FBUyxFQUFFQyxRQUFRLEVBQUVDLFFBQVEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -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,8 @@
1
- import { useLayoutEffect, useMemo } from "react";
1
+ import { useEffect, useLayoutEffect, useMemo } from "react";
2
+ import { isServer } from "./environment";
2
3
  const ApiMakerUseEventEmitter = (events, event, onCalled) => {
4
+ const useWorkingEffect = isServer ? useEffect : useLayoutEffect;
5
+
3
6
  // useMemo to instantly connect
4
7
  useMemo(() => {
5
8
  if (events) {
@@ -8,7 +11,7 @@ const ApiMakerUseEventEmitter = (events, event, onCalled) => {
8
11
  }, [events, event, onCalled]);
9
12
 
10
13
  // useLayoutEffect to disconnect when unmounted or changed
11
- useLayoutEffect(() => {
14
+ useWorkingEffect(() => {
12
15
  if (events) {
13
16
  return () => {
14
17
  events.removeListener(event, onCalled);
@@ -17,4 +20,4 @@ const ApiMakerUseEventEmitter = (events, event, onCalled) => {
17
20
  }, [events, event, onCalled]);
18
21
  };
19
22
  export default ApiMakerUseEventEmitter;
20
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VNZW1vIiwiQXBpTWFrZXJVc2VFdmVudEVtaXR0ZXIiLCJldmVudHMiLCJldmVudCIsIm9uQ2FsbGVkIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciJdLCJzb3VyY2VzIjpbIi4uL3NyYy91c2UtZXZlbnQtZW1pdHRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZUxheW91dEVmZmVjdCwgdXNlTWVtb30gZnJvbSBcInJlYWN0XCJcblxuY29uc3QgQXBpTWFrZXJVc2VFdmVudEVtaXR0ZXIgPSAoZXZlbnRzLCBldmVudCwgb25DYWxsZWQpID0+IHtcbiAgLy8gdXNlTWVtbyB0byBpbnN0YW50bHkgY29ubmVjdFxuICB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoZXZlbnRzKSB7XG4gICAgICBldmVudHMuYWRkTGlzdGVuZXIoZXZlbnQsIG9uQ2FsbGVkKVxuICAgIH1cbiAgfSwgW2V2ZW50cywgZXZlbnQsIG9uQ2FsbGVkXSlcblxuICAvLyB1c2VMYXlvdXRFZmZlY3QgdG8gZGlzY29ubmVjdCB3aGVuIHVubW91bnRlZCBvciBjaGFuZ2VkXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGV2ZW50cykge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZXZlbnRzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBvbkNhbGxlZClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtldmVudHMsIGV2ZW50LCBvbkNhbGxlZF0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwaU1ha2VyVXNlRXZlbnRFbWl0dGVyXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLGVBQWUsRUFBRUMsT0FBTyxRQUFPLE9BQU87QUFFOUMsTUFBTUMsdUJBQXVCLEdBQUdBLENBQUNDLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxRQUFRLEtBQUs7RUFDM0Q7RUFDQUosT0FBTyxDQUFDLE1BQU07SUFDWixJQUFJRSxNQUFNLEVBQUU7TUFDVkEsTUFBTSxDQUFDRyxXQUFXLENBQUNGLEtBQUssRUFBRUMsUUFBUSxDQUFDO0lBQ3JDO0VBQ0YsQ0FBQyxFQUFFLENBQUNGLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxRQUFRLENBQUMsQ0FBQzs7RUFFN0I7RUFDQUwsZUFBZSxDQUFDLE1BQU07SUFDcEIsSUFBSUcsTUFBTSxFQUFFO01BQ1YsT0FBTyxNQUFNO1FBQ1hBLE1BQU0sQ0FBQ0ksY0FBYyxDQUFDSCxLQUFLLEVBQUVDLFFBQVEsQ0FBQztNQUN4QyxDQUFDO0lBQ0g7RUFDRixDQUFDLEVBQUUsQ0FBQ0YsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxlQUFlSCx1QkFBdUIiLCJpZ25vcmVMaXN0IjpbXX0=
23
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VNZW1vIiwiaXNTZXJ2ZXIiLCJBcGlNYWtlclVzZUV2ZW50RW1pdHRlciIsImV2ZW50cyIsImV2ZW50Iiwib25DYWxsZWQiLCJ1c2VXb3JraW5nRWZmZWN0IiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciJdLCJzb3VyY2VzIjpbIi4uL3NyYy91c2UtZXZlbnQtZW1pdHRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtpc1NlcnZlcn0gZnJvbSBcIi4vZW52aXJvbm1lbnRcIlxuXG5jb25zdCBBcGlNYWtlclVzZUV2ZW50RW1pdHRlciA9IChldmVudHMsIGV2ZW50LCBvbkNhbGxlZCkgPT4ge1xuICBjb25zdCB1c2VXb3JraW5nRWZmZWN0ID0gaXNTZXJ2ZXIgPyB1c2VFZmZlY3QgOiB1c2VMYXlvdXRFZmZlY3RcblxuICAvLyB1c2VNZW1vIHRvIGluc3RhbnRseSBjb25uZWN0XG4gIHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChldmVudHMpIHtcbiAgICAgIGV2ZW50cy5hZGRMaXN0ZW5lcihldmVudCwgb25DYWxsZWQpXG4gICAgfVxuICB9LCBbZXZlbnRzLCBldmVudCwgb25DYWxsZWRdKVxuXG4gIC8vIHVzZUxheW91dEVmZmVjdCB0byBkaXNjb25uZWN0IHdoZW4gdW5tb3VudGVkIG9yIGNoYW5nZWRcbiAgdXNlV29ya2luZ0VmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGV2ZW50cykge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZXZlbnRzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBvbkNhbGxlZClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtldmVudHMsIGV2ZW50LCBvbkNhbGxlZF0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwaU1ha2VyVXNlRXZlbnRFbWl0dGVyXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLFNBQVMsRUFBRUMsZUFBZSxFQUFFQyxPQUFPLFFBQU8sT0FBTztBQUN6RCxTQUFRQyxRQUFRLFFBQU8sZUFBZTtBQUV0QyxNQUFNQyx1QkFBdUIsR0FBR0EsQ0FBQ0MsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsS0FBSztFQUMzRCxNQUFNQyxnQkFBZ0IsR0FBR0wsUUFBUSxHQUFHSCxTQUFTLEdBQUdDLGVBQWU7O0VBRS9EO0VBQ0FDLE9BQU8sQ0FBQyxNQUFNO0lBQ1osSUFBSUcsTUFBTSxFQUFFO01BQ1ZBLE1BQU0sQ0FBQ0ksV0FBVyxDQUFDSCxLQUFLLEVBQUVDLFFBQVEsQ0FBQztJQUNyQztFQUNGLENBQUMsRUFBRSxDQUFDRixNQUFNLEVBQUVDLEtBQUssRUFBRUMsUUFBUSxDQUFDLENBQUM7O0VBRTdCO0VBQ0FDLGdCQUFnQixDQUFDLE1BQU07SUFDckIsSUFBSUgsTUFBTSxFQUFFO01BQ1YsT0FBTyxNQUFNO1FBQ1hBLE1BQU0sQ0FBQ0ssY0FBYyxDQUFDSixLQUFLLEVBQUVDLFFBQVEsQ0FBQztNQUN4QyxDQUFDO0lBQ0g7RUFDRixDQUFDLEVBQUUsQ0FBQ0YsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxlQUFlSCx1QkFBdUIiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,9 +1,6 @@
1
1
  import { useCallback, useEffect, useLayoutEffect } from "react";
2
- import useSSR from "use-ssr";
2
+ import { isServer } from "./environment";
3
3
  const ApiMakerUseEventListener = (target, event, onCalled) => {
4
- const {
5
- isServer
6
- } = useSSR();
7
4
  const useWorkingEffect = isServer ? useEffect : useLayoutEffect;
8
5
  const onCalledCallback = useCallback((...args) => {
9
6
  onCalled.apply(null, args);
@@ -12,11 +9,11 @@ const ApiMakerUseEventListener = (target, event, onCalled) => {
12
9
  if (target) {
13
10
  const eventListener = target.addEventListener(event, onCalledCallback);
14
11
  return () => {
15
- if (eventListener) eventListener.remove(); // This is how its done in Expo + Jest.
12
+ if (eventListener?.remove) eventListener.remove(); // This is how its done in Expo + Jest.
16
13
  if (target.removeEventListener) target.removeEventListener(event, onCalledCallback); // This is the "old" way in browsers.
17
14
  };
18
15
  }
19
16
  }, [target, event, onCalled]);
20
17
  };
21
18
  export default ApiMakerUseEventListener;
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVNTUiIsIkFwaU1ha2VyVXNlRXZlbnRMaXN0ZW5lciIsInRhcmdldCIsImV2ZW50Iiwib25DYWxsZWQiLCJpc1NlcnZlciIsInVzZVdvcmtpbmdFZmZlY3QiLCJvbkNhbGxlZENhbGxiYWNrIiwiYXJncyIsImFwcGx5IiwiZXZlbnRMaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIl0sInNvdXJjZXMiOlsiLi4vc3JjL3VzZS1ldmVudC1saXN0ZW5lci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB1c2VTU1IgZnJvbSBcInVzZS1zc3JcIlxuXG5jb25zdCBBcGlNYWtlclVzZUV2ZW50TGlzdGVuZXIgPSAodGFyZ2V0LCBldmVudCwgb25DYWxsZWQpID0+IHtcbiAgY29uc3Qge2lzU2VydmVyfSA9IHVzZVNTUigpXG4gIGNvbnN0IHVzZVdvcmtpbmdFZmZlY3QgPSBpc1NlcnZlciA/IHVzZUVmZmVjdCA6IHVzZUxheW91dEVmZmVjdFxuXG4gIGNvbnN0IG9uQ2FsbGVkQ2FsbGJhY2sgPSB1c2VDYWxsYmFjaygoLi4uYXJncykgPT4ge1xuICAgIG9uQ2FsbGVkLmFwcGx5KG51bGwsIGFyZ3MpXG4gIH0sIFt0YXJnZXQsIGV2ZW50LCBvbkNhbGxlZF0pXG5cbiAgdXNlV29ya2luZ0VmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBvbkNhbGxlZENhbGxiYWNrKVxuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnRMaXN0ZW5lcikgZXZlbnRMaXN0ZW5lci5yZW1vdmUoKSAvLyBUaGlzIGlzIGhvdyBpdHMgZG9uZSBpbiBFeHBvICsgSmVzdC5cbiAgICAgICAgaWYgKHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKSB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgb25DYWxsZWRDYWxsYmFjaykgLy8gVGhpcyBpcyB0aGUgXCJvbGRcIiB3YXkgaW4gYnJvd3NlcnMuXG4gICAgICB9XG4gICAgfVxuICB9LCBbdGFyZ2V0LCBldmVudCwgb25DYWxsZWRdKVxufVxuXG5leHBvcnQgZGVmYXVsdCBBcGlNYWtlclVzZUV2ZW50TGlzdGVuZXJcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLGVBQWUsUUFBTyxPQUFPO0FBQzdELE9BQU9DLE1BQU0sTUFBTSxTQUFTO0FBRTVCLE1BQU1DLHdCQUF3QixHQUFHQSxDQUFDQyxNQUFNLEVBQUVDLEtBQUssRUFBRUMsUUFBUSxLQUFLO0VBQzVELE1BQU07SUFBQ0M7RUFBUSxDQUFDLEdBQUdMLE1BQU0sQ0FBQyxDQUFDO0VBQzNCLE1BQU1NLGdCQUFnQixHQUFHRCxRQUFRLEdBQUdQLFNBQVMsR0FBR0MsZUFBZTtFQUUvRCxNQUFNUSxnQkFBZ0IsR0FBR1YsV0FBVyxDQUFDLENBQUMsR0FBR1csSUFBSSxLQUFLO0lBQ2hESixRQUFRLENBQUNLLEtBQUssQ0FBQyxJQUFJLEVBQUVELElBQUksQ0FBQztFQUM1QixDQUFDLEVBQUUsQ0FBQ04sTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO0VBRTdCRSxnQkFBZ0IsQ0FBQyxNQUFNO0lBQ3JCLElBQUlKLE1BQU0sRUFBRTtNQUNWLE1BQU1RLGFBQWEsR0FBR1IsTUFBTSxDQUFDUyxnQkFBZ0IsQ0FBQ1IsS0FBSyxFQUFFSSxnQkFBZ0IsQ0FBQztNQUV0RSxPQUFPLE1BQU07UUFDWCxJQUFJRyxhQUFhLEVBQUVBLGFBQWEsQ0FBQ0UsTUFBTSxDQUFDLENBQUMsRUFBQztRQUMxQyxJQUFJVixNQUFNLENBQUNXLG1CQUFtQixFQUFFWCxNQUFNLENBQUNXLG1CQUFtQixDQUFDVixLQUFLLEVBQUVJLGdCQUFnQixDQUFDLEVBQUM7TUFDdEYsQ0FBQztJQUNIO0VBQ0YsQ0FBQyxFQUFFLENBQUNMLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxRQUFRLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQsZUFBZUgsd0JBQXdCIiwiaWdub3JlTGlzdCI6W119
19
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsImlzU2VydmVyIiwiQXBpTWFrZXJVc2VFdmVudExpc3RlbmVyIiwidGFyZ2V0IiwiZXZlbnQiLCJvbkNhbGxlZCIsInVzZVdvcmtpbmdFZmZlY3QiLCJvbkNhbGxlZENhbGxiYWNrIiwiYXJncyIsImFwcGx5IiwiZXZlbnRMaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIl0sInNvdXJjZXMiOlsiLi4vc3JjL3VzZS1ldmVudC1saXN0ZW5lci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7aXNTZXJ2ZXJ9IGZyb20gXCIuL2Vudmlyb25tZW50XCJcblxuY29uc3QgQXBpTWFrZXJVc2VFdmVudExpc3RlbmVyID0gKHRhcmdldCwgZXZlbnQsIG9uQ2FsbGVkKSA9PiB7XG4gIGNvbnN0IHVzZVdvcmtpbmdFZmZlY3QgPSBpc1NlcnZlciA/IHVzZUVmZmVjdCA6IHVzZUxheW91dEVmZmVjdFxuICBjb25zdCBvbkNhbGxlZENhbGxiYWNrID0gdXNlQ2FsbGJhY2soKC4uLmFyZ3MpID0+IHtcbiAgICBvbkNhbGxlZC5hcHBseShudWxsLCBhcmdzKVxuICB9LCBbdGFyZ2V0LCBldmVudCwgb25DYWxsZWRdKVxuXG4gIHVzZVdvcmtpbmdFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgb25DYWxsZWRDYWxsYmFjaylcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50TGlzdGVuZXI/LnJlbW92ZSkgZXZlbnRMaXN0ZW5lci5yZW1vdmUoKSAvLyBUaGlzIGlzIGhvdyBpdHMgZG9uZSBpbiBFeHBvICsgSmVzdC5cbiAgICAgICAgaWYgKHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKSB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgb25DYWxsZWRDYWxsYmFjaykgLy8gVGhpcyBpcyB0aGUgXCJvbGRcIiB3YXkgaW4gYnJvd3NlcnMuXG4gICAgICB9XG4gICAgfVxuICB9LCBbdGFyZ2V0LCBldmVudCwgb25DYWxsZWRdKVxufVxuXG5leHBvcnQgZGVmYXVsdCBBcGlNYWtlclVzZUV2ZW50TGlzdGVuZXJcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLGVBQWUsUUFBTyxPQUFPO0FBQzdELFNBQVFDLFFBQVEsUUFBTyxlQUFlO0FBRXRDLE1BQU1DLHdCQUF3QixHQUFHQSxDQUFDQyxNQUFNLEVBQUVDLEtBQUssRUFBRUMsUUFBUSxLQUFLO0VBQzVELE1BQU1DLGdCQUFnQixHQUFHTCxRQUFRLEdBQUdGLFNBQVMsR0FBR0MsZUFBZTtFQUMvRCxNQUFNTyxnQkFBZ0IsR0FBR1QsV0FBVyxDQUFDLENBQUMsR0FBR1UsSUFBSSxLQUFLO0lBQ2hESCxRQUFRLENBQUNJLEtBQUssQ0FBQyxJQUFJLEVBQUVELElBQUksQ0FBQztFQUM1QixDQUFDLEVBQUUsQ0FBQ0wsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO0VBRTdCQyxnQkFBZ0IsQ0FBQyxNQUFNO0lBQ3JCLElBQUlILE1BQU0sRUFBRTtNQUNWLE1BQU1PLGFBQWEsR0FBR1AsTUFBTSxDQUFDUSxnQkFBZ0IsQ0FBQ1AsS0FBSyxFQUFFRyxnQkFBZ0IsQ0FBQztNQUV0RSxPQUFPLE1BQU07UUFDWCxJQUFJRyxhQUFhLEVBQUVFLE1BQU0sRUFBRUYsYUFBYSxDQUFDRSxNQUFNLENBQUMsQ0FBQyxFQUFDO1FBQ2xELElBQUlULE1BQU0sQ0FBQ1UsbUJBQW1CLEVBQUVWLE1BQU0sQ0FBQ1UsbUJBQW1CLENBQUNULEtBQUssRUFBRUcsZ0JBQWdCLENBQUMsRUFBQztNQUN0RixDQUFDO0lBQ0g7RUFDRixDQUFDLEVBQUUsQ0FBQ0osTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxlQUFlSCx3QkFBd0IiLCJpZ25vcmVMaXN0IjpbXX0=
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.2041",
4
4
  "description": "My new module",
5
5
  "main": "build/index.js",
6
6
  "scripts": {
@@ -57,7 +57,6 @@
57
57
  "strftime": ">= 0.10.0",
58
58
  "uniqunize": "^1.0.1",
59
59
  "url-parse": "^1.5.10",
60
- "use-ssr": "^1.0.25",
61
60
  "wake-event": ">= 0.0.1"
62
61
  },
63
62
  "devDependencies": {
@@ -79,5 +78,6 @@
79
78
  "react": "*",
80
79
  "react-native": "*",
81
80
  "react-native-vector-icons": "*"
82
- }
81
+ },
82
+ "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
83
83
  }
@@ -0,0 +1,13 @@
1
+ let isBrowser = false
2
+ let isNative = false
3
+ let isServer = false
4
+
5
+ if (navigator === undefined && navigator.product == "ReactNative") {
6
+ isNative = true
7
+ } else if (window === undefined && window.document?.createElement) {
8
+ isBrowser = true
9
+ } else {
10
+ isServer = true
11
+ }
12
+
13
+ export {isBrowser, isNative, isServer}
@@ -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,9 @@
1
- import {useLayoutEffect, useMemo} from "react"
1
+ import {useEffect, useLayoutEffect, useMemo} from "react"
2
+ import {isServer} from "./environment"
2
3
 
3
4
  const ApiMakerUseEventEmitter = (events, event, onCalled) => {
5
+ const useWorkingEffect = isServer ? useEffect : useLayoutEffect
6
+
4
7
  // useMemo to instantly connect
5
8
  useMemo(() => {
6
9
  if (events) {
@@ -9,7 +12,7 @@ const ApiMakerUseEventEmitter = (events, event, onCalled) => {
9
12
  }, [events, event, onCalled])
10
13
 
11
14
  // useLayoutEffect to disconnect when unmounted or changed
12
- useLayoutEffect(() => {
15
+ useWorkingEffect(() => {
13
16
  if (events) {
14
17
  return () => {
15
18
  events.removeListener(event, onCalled)
@@ -1,10 +1,8 @@
1
1
  import {useCallback, useEffect, useLayoutEffect} from "react"
2
- import useSSR from "use-ssr"
2
+ import {isServer} from "./environment"
3
3
 
4
4
  const ApiMakerUseEventListener = (target, event, onCalled) => {
5
- const {isServer} = useSSR()
6
5
  const useWorkingEffect = isServer ? useEffect : useLayoutEffect
7
-
8
6
  const onCalledCallback = useCallback((...args) => {
9
7
  onCalled.apply(null, args)
10
8
  }, [target, event, onCalled])
@@ -14,7 +12,7 @@ const ApiMakerUseEventListener = (target, event, onCalled) => {
14
12
  const eventListener = target.addEventListener(event, onCalledCallback)
15
13
 
16
14
  return () => {
17
- 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.
18
16
  if (target.removeEventListener) target.removeEventListener(event, onCalledCallback) // This is the "old" way in browsers.
19
17
  }
20
18
  }