@kaspernj/api-maker 1.0.2038 → 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=
@@ -1,16 +1,22 @@
1
- import { useCallback, useLayoutEffect } from "react";
1
+ import { useCallback, useEffect, useLayoutEffect } from "react";
2
+ import useSSR from "use-ssr";
2
3
  const ApiMakerUseEventListener = (target, event, onCalled) => {
4
+ const {
5
+ isServer
6
+ } = useSSR();
7
+ const useWorkingEffect = isServer ? useEffect : useLayoutEffect;
3
8
  const onCalledCallback = useCallback((...args) => {
4
9
  onCalled.apply(null, args);
5
10
  }, [target, event, onCalled]);
6
- useLayoutEffect(() => {
11
+ useWorkingEffect(() => {
7
12
  if (target) {
8
- target.addEventListener(event, onCalledCallback);
13
+ const eventListener = target.addEventListener(event, onCalledCallback);
9
14
  return () => {
10
- target.removeEventListener(event, onCalledCallback);
15
+ if (eventListener?.remove) eventListener.remove(); // This is how its done in Expo + Jest.
16
+ if (target.removeEventListener) target.removeEventListener(event, onCalledCallback); // This is the "old" way in browsers.
11
17
  };
12
18
  }
13
19
  }, [target, event, onCalled]);
14
20
  };
15
21
  export default ApiMakerUseEventListener;
16
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUxheW91dEVmZmVjdCIsIkFwaU1ha2VyVXNlRXZlbnRMaXN0ZW5lciIsInRhcmdldCIsImV2ZW50Iiwib25DYWxsZWQiLCJvbkNhbGxlZENhbGxiYWNrIiwiYXJncyIsImFwcGx5IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSwic291cmNlcyI6WyIuLi9zcmMvdXNlLWV2ZW50LWxpc3RlbmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZUxheW91dEVmZmVjdH0gZnJvbSBcInJlYWN0XCJcblxuY29uc3QgQXBpTWFrZXJVc2VFdmVudExpc3RlbmVyID0gKHRhcmdldCwgZXZlbnQsIG9uQ2FsbGVkKSA9PiB7XG4gIGNvbnN0IG9uQ2FsbGVkQ2FsbGJhY2sgPSB1c2VDYWxsYmFjaygoLi4uYXJncykgPT4ge1xuICAgIG9uQ2FsbGVkLmFwcGx5KG51bGwsIGFyZ3MpXG4gIH0sIFt0YXJnZXQsIGV2ZW50LCBvbkNhbGxlZF0pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgb25DYWxsZWRDYWxsYmFjaylcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uQ2FsbGVkQ2FsbGJhY2spXG4gICAgICB9XG4gICAgfVxuICB9LCBbdGFyZ2V0LCBldmVudCwgb25DYWxsZWRdKVxufVxuXG5leHBvcnQgZGVmYXVsdCBBcGlNYWtlclVzZUV2ZW50TGlzdGVuZXJcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsV0FBVyxFQUFFQyxlQUFlLFFBQU8sT0FBTztBQUVsRCxNQUFNQyx3QkFBd0IsR0FBR0EsQ0FBQ0MsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsS0FBSztFQUM1RCxNQUFNQyxnQkFBZ0IsR0FBR04sV0FBVyxDQUFDLENBQUMsR0FBR08sSUFBSSxLQUFLO0lBQ2hERixRQUFRLENBQUNHLEtBQUssQ0FBQyxJQUFJLEVBQUVELElBQUksQ0FBQztFQUM1QixDQUFDLEVBQUUsQ0FBQ0osTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO0VBRTdCSixlQUFlLENBQUMsTUFBTTtJQUNwQixJQUFJRSxNQUFNLEVBQUU7TUFDVkEsTUFBTSxDQUFDTSxnQkFBZ0IsQ0FBQ0wsS0FBSyxFQUFFRSxnQkFBZ0IsQ0FBQztNQUVoRCxPQUFPLE1BQU07UUFDWEgsTUFBTSxDQUFDTyxtQkFBbUIsQ0FBQ04sS0FBSyxFQUFFRSxnQkFBZ0IsQ0FBQztNQUNyRCxDQUFDO0lBQ0g7RUFDRixDQUFDLEVBQUUsQ0FBQ0gsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxlQUFlSCx3QkFBd0IiLCJpZ25vcmVMaXN0IjpbXX0=
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVNTUiIsIkFwaU1ha2VyVXNlRXZlbnRMaXN0ZW5lciIsInRhcmdldCIsImV2ZW50Iiwib25DYWxsZWQiLCJpc1NlcnZlciIsInVzZVdvcmtpbmdFZmZlY3QiLCJvbkNhbGxlZENhbGxiYWNrIiwiYXJncyIsImFwcGx5IiwiZXZlbnRMaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIl0sInNvdXJjZXMiOlsiLi4vc3JjL3VzZS1ldmVudC1saXN0ZW5lci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB1c2VTU1IgZnJvbSBcInVzZS1zc3JcIlxuXG5jb25zdCBBcGlNYWtlclVzZUV2ZW50TGlzdGVuZXIgPSAodGFyZ2V0LCBldmVudCwgb25DYWxsZWQpID0+IHtcbiAgY29uc3Qge2lzU2VydmVyfSA9IHVzZVNTUigpXG4gIGNvbnN0IHVzZVdvcmtpbmdFZmZlY3QgPSBpc1NlcnZlciA/IHVzZUVmZmVjdCA6IHVzZUxheW91dEVmZmVjdFxuICBjb25zdCBvbkNhbGxlZENhbGxiYWNrID0gdXNlQ2FsbGJhY2soKC4uLmFyZ3MpID0+IHtcbiAgICBvbkNhbGxlZC5hcHBseShudWxsLCBhcmdzKVxuICB9LCBbdGFyZ2V0LCBldmVudCwgb25DYWxsZWRdKVxuXG4gIHVzZVdvcmtpbmdFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgb25DYWxsZWRDYWxsYmFjaylcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50TGlzdGVuZXI/LnJlbW92ZSkgZXZlbnRMaXN0ZW5lci5yZW1vdmUoKSAvLyBUaGlzIGlzIGhvdyBpdHMgZG9uZSBpbiBFeHBvICsgSmVzdC5cbiAgICAgICAgaWYgKHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKSB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgb25DYWxsZWRDYWxsYmFjaykgLy8gVGhpcyBpcyB0aGUgXCJvbGRcIiB3YXkgaW4gYnJvd3NlcnMuXG4gICAgICB9XG4gICAgfVxuICB9LCBbdGFyZ2V0LCBldmVudCwgb25DYWxsZWRdKVxufVxuXG5leHBvcnQgZGVmYXVsdCBBcGlNYWtlclVzZUV2ZW50TGlzdGVuZXJcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLGVBQWUsUUFBTyxPQUFPO0FBQzdELE9BQU9DLE1BQU0sTUFBTSxTQUFTO0FBRTVCLE1BQU1DLHdCQUF3QixHQUFHQSxDQUFDQyxNQUFNLEVBQUVDLEtBQUssRUFBRUMsUUFBUSxLQUFLO0VBQzVELE1BQU07SUFBQ0M7RUFBUSxDQUFDLEdBQUdMLE1BQU0sQ0FBQyxDQUFDO0VBQzNCLE1BQU1NLGdCQUFnQixHQUFHRCxRQUFRLEdBQUdQLFNBQVMsR0FBR0MsZUFBZTtFQUMvRCxNQUFNUSxnQkFBZ0IsR0FBR1YsV0FBVyxDQUFDLENBQUMsR0FBR1csSUFBSSxLQUFLO0lBQ2hESixRQUFRLENBQUNLLEtBQUssQ0FBQyxJQUFJLEVBQUVELElBQUksQ0FBQztFQUM1QixDQUFDLEVBQUUsQ0FBQ04sTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO0VBRTdCRSxnQkFBZ0IsQ0FBQyxNQUFNO0lBQ3JCLElBQUlKLE1BQU0sRUFBRTtNQUNWLE1BQU1RLGFBQWEsR0FBR1IsTUFBTSxDQUFDUyxnQkFBZ0IsQ0FBQ1IsS0FBSyxFQUFFSSxnQkFBZ0IsQ0FBQztNQUV0RSxPQUFPLE1BQU07UUFDWCxJQUFJRyxhQUFhLEVBQUVFLE1BQU0sRUFBRUYsYUFBYSxDQUFDRSxNQUFNLENBQUMsQ0FBQyxFQUFDO1FBQ2xELElBQUlWLE1BQU0sQ0FBQ1csbUJBQW1CLEVBQUVYLE1BQU0sQ0FBQ1csbUJBQW1CLENBQUNWLEtBQUssRUFBRUksZ0JBQWdCLENBQUMsRUFBQztNQUN0RixDQUFDO0lBQ0g7RUFDRixDQUFDLEVBQUUsQ0FBQ0wsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxlQUFlSCx3QkFBd0IiLCJpZ25vcmVMaXN0IjpbXX0=
package/link.sh ADDED
@@ -0,0 +1,8 @@
1
+ #!/bin/sh
2
+
3
+ cd node_modules
4
+
5
+ rm -rf react
6
+ ln -s ../../../gratisbyggetilbud_rails/node_modules/react
7
+
8
+ yarn link i18n-on-steroids
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaspernj/api-maker",
3
- "version": "1.0.2038",
3
+ "version": "1.0.2040",
4
4
  "description": "My new module",
5
5
  "main": "build/index.js",
6
6
  "scripts": {
@@ -57,6 +57,7 @@
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",
60
61
  "wake-event": ">= 0.0.1"
61
62
  },
62
63
  "devDependencies": {
@@ -68,7 +69,7 @@
68
69
  "eslint-find-rules": "^5.0.0",
69
70
  "eslint-plugin-jest": "^28.2.0",
70
71
  "eslint-plugin-react": "^7.23.2",
71
- "expo": "~52.0.0",
72
+ "expo": "~53.0.9",
72
73
  "expo-module-scripts": "^4.0.2",
73
74
  "jest": "^29.0.1"
74
75
  },
@@ -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)
@@ -1,16 +1,20 @@
1
- import {useCallback, useLayoutEffect} from "react"
1
+ import {useCallback, useEffect, useLayoutEffect} from "react"
2
+ import useSSR from "use-ssr"
2
3
 
3
4
  const ApiMakerUseEventListener = (target, event, onCalled) => {
5
+ const {isServer} = useSSR()
6
+ const useWorkingEffect = isServer ? useEffect : useLayoutEffect
4
7
  const onCalledCallback = useCallback((...args) => {
5
8
  onCalled.apply(null, args)
6
9
  }, [target, event, onCalled])
7
10
 
8
- useLayoutEffect(() => {
11
+ useWorkingEffect(() => {
9
12
  if (target) {
10
- target.addEventListener(event, onCalledCallback)
13
+ const eventListener = target.addEventListener(event, onCalledCallback)
11
14
 
12
15
  return () => {
13
- target.removeEventListener(event, onCalledCallback)
16
+ if (eventListener?.remove) eventListener.remove() // This is how its done in Expo + Jest.
17
+ if (target.removeEventListener) target.removeEventListener(event, onCalledCallback) // This is the "old" way in browsers.
14
18
  }
15
19
  }
16
20
  }, [target, event, onCalled])