1234567891011121314151617181920212223242526272829303132333435363738394041 |
- import { useState, useEffect } from 'react';
- import { env } from './env';
- var cache = new WeakMap();
- var NO_OPTIONS = {};
- export function useSidecar(importer, effect) {
- var options = (effect && effect.options) || NO_OPTIONS;
- if (env.isNode && !options.ssr) {
- return [null, null];
- }
- // eslint-disable-next-line react-hooks/rules-of-hooks
- return useRealSidecar(importer, effect);
- }
- function useRealSidecar(importer, effect) {
- var options = (effect && effect.options) || NO_OPTIONS;
- var couldUseCache = env.forceCache || (env.isNode && !!options.ssr) || !options.async;
- var _a = useState(couldUseCache ? function () { return cache.get(importer); } : undefined), Car = _a[0], setCar = _a[1];
- var _b = useState(null), error = _b[0], setError = _b[1];
- useEffect(function () {
- if (!Car) {
- importer().then(function (car) {
- var resolved = effect ? effect.read() : car.default || car;
- if (!resolved) {
- console.error('Sidecar error: with importer', importer);
- var error_1;
- if (effect) {
- console.error('Sidecar error: with medium', effect);
- error_1 = new Error('Sidecar medium was not found');
- }
- else {
- error_1 = new Error('Sidecar was not found in exports');
- }
- setError(function () { return error_1; });
- throw error_1;
- }
- cache.set(importer, resolved);
- setCar(function () { return resolved; });
- }, function (e) { return setError(function () { return e; }); });
- }
- }, []);
- return [Car, error];
- }
|