+7
-5
@@ -5,2 +5,3 @@ interface UseSSRReturn { | ||
| isNative: boolean; | ||
| device: Device; | ||
| canUseWorkers: boolean; | ||
@@ -11,7 +12,8 @@ canUseEventListeners: boolean; | ||
| export declare enum Device { | ||
| BROWSER = "BROWSER", | ||
| SERVER = "SERVER", | ||
| NATIVE = "NATIVE" | ||
| Browser = "browser", | ||
| Server = "server", | ||
| Native = "native" | ||
| } | ||
| export default function useSSR(): UseSSRReturn; | ||
| export {}; | ||
| export declare const weAreServer: () => void; | ||
| export declare const useSSR: () => UseSSRReturn; | ||
| export default useSSR; |
+22
-26
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| const react_1 = require("react"); | ||
| var Device; | ||
| (function (Device) { | ||
| Device["BROWSER"] = "BROWSER"; | ||
| Device["SERVER"] = "SERVER"; | ||
| Device["NATIVE"] = "NATIVE"; | ||
| Device["Browser"] = "browser"; | ||
| Device["Server"] = "server"; | ||
| Device["Native"] = "native"; | ||
| })(Device = exports.Device || (exports.Device = {})); | ||
| const { BROWSER, SERVER, NATIVE } = Device; | ||
| const { Browser, Server, Native } = Device; | ||
| const canUseDOM = !!(typeof window !== 'undefined' && | ||
@@ -15,23 +14,20 @@ window.document && | ||
| const canUseNative = typeof navigator != 'undefined' && navigator.product == 'ReactNative'; | ||
| const location = canUseNative ? NATIVE : canUseDOM ? BROWSER : SERVER; | ||
| function useSSR() { | ||
| const [whereAmI, setWhereAmI] = react_1.useState(location); | ||
| const mounted = react_1.useRef(false); | ||
| react_1.useEffect(() => { | ||
| if (mounted.current) | ||
| return; | ||
| mounted.current = true; | ||
| setWhereAmI(location); | ||
| }); | ||
| const useSSRObject = react_1.useMemo(() => ({ | ||
| isBrowser: whereAmI === BROWSER, | ||
| isServer: whereAmI === SERVER, | ||
| isNative: whereAmI === NATIVE, | ||
| canUseWorkers: typeof Worker !== 'undefined', | ||
| canUseEventListeners: whereAmI === BROWSER && !!window.addEventListener, | ||
| canUseViewport: whereAmI === BROWSER && !!window.screen | ||
| }), [whereAmI]); | ||
| return react_1.useMemo(() => Object.assign(Object.values(useSSRObject), useSSRObject), [whereAmI]); | ||
| } | ||
| exports.default = useSSR; | ||
| const device = canUseNative ? Native : canUseDOM ? Browser : Server; | ||
| const SSRObject = { | ||
| isBrowser: device === Browser, | ||
| isServer: device === Server, | ||
| isNative: device === Native, | ||
| device, | ||
| canUseWorkers: typeof Worker !== 'undefined', | ||
| canUseEventListeners: device === Browser && !!window.addEventListener, | ||
| canUseViewport: device === Browser && !!window.screen, | ||
| }; | ||
| const toArrayObject = () => Object.assign(Object.values(SSRObject), SSRObject); | ||
| let useSSRObject = toArrayObject(); | ||
| exports.weAreServer = () => { | ||
| SSRObject.isServer = true; | ||
| useSSRObject = toArrayObject(); | ||
| }; | ||
| exports.useSSR = () => useSSRObject; | ||
| exports.default = exports.useSSR; | ||
| //# sourceMappingURL=useSSR.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"useSSR.js","sourceRoot":"","sources":["../useSSR.ts"],"names":[],"mappings":";;AAAA,iCAA4D;AAW5D,IAAY,MAIX;AAJD,WAAY,MAAM;IAChB,6BAAmB,CAAA;IACnB,2BAAiB,CAAA;IACjB,2BAAiB,CAAA;AACnB,CAAC,EAJW,MAAM,GAAN,cAAM,KAAN,cAAM,QAIjB;AAGD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;AAE1C,MAAM,SAAS,GAAY,CAAC,CAAC,CAC3B,OAAO,MAAM,KAAK,WAAW;IAC7B,MAAM,CAAC,QAAQ;IACf,MAAM,CAAC,QAAQ,CAAC,aAAa,CAC9B,CAAA;AAED,MAAM,YAAY,GAAY,OAAO,SAAS,IAAI,WAAW,IAAI,SAAS,CAAC,OAAO,IAAI,aAAa,CAAA;AAEnG,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAA;AAGrE,SAAwB,MAAM;IAC5B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,gBAAQ,CAAC,QAAQ,CAAC,CAAA;IAElD,MAAM,OAAO,GAAG,cAAM,CAAC,KAAK,CAAC,CAAA;IAC7B,iBAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,CAAC,OAAO;YAAE,OAAM;QAC3B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAA;QACtB,WAAW,CAAC,QAAQ,CAAC,CAAA;IACvB,CAAC,CAAC,CAAA;IAEF,MAAM,YAAY,GAAG,eAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAClC,SAAS,EAAE,QAAQ,KAAK,OAAO;QAC/B,QAAQ,EAAE,QAAQ,KAAK,MAAM;QAC7B,QAAQ,EAAE,QAAQ,KAAK,MAAM;QAC7B,aAAa,EAAE,OAAO,MAAM,KAAK,WAAW;QAC5C,oBAAoB,EAAE,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,gBAAgB;QACvE,cAAc,EAAE,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM;KACxD,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEf,OAAO,eAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;AAC5F,CAAC;AApBD,yBAoBC"} | ||
| {"version":3,"file":"useSSR.js","sourceRoot":"","sources":["../useSSR.ts"],"names":[],"mappings":";;AAUA,IAAY,MAIX;AAJD,WAAY,MAAM;IAChB,6BAAmB,CAAA;IACnB,2BAAiB,CAAA;IACjB,2BAAiB,CAAA;AACnB,CAAC,EAJW,MAAM,GAAN,cAAM,KAAN,cAAM,QAIjB;AAED,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;AAE1C,MAAM,SAAS,GAAY,CAAC,CAAC,CAC3B,OAAO,MAAM,KAAK,WAAW;IAC7B,MAAM,CAAC,QAAQ;IACf,MAAM,CAAC,QAAQ,CAAC,aAAa,CAC9B,CAAA;AAED,MAAM,YAAY,GAAY,OAAO,SAAS,IAAI,WAAW,IAAI,SAAS,CAAC,OAAO,IAAI,aAAa,CAAA;AAEnG,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAA;AAEnE,MAAM,SAAS,GAAG;IAChB,SAAS,EAAE,MAAM,KAAK,OAAO;IAC7B,QAAQ,EAAE,MAAM,KAAK,MAAM;IAC3B,QAAQ,EAAE,MAAM,KAAK,MAAM;IAC3B,MAAM;IACN,aAAa,EAAE,OAAO,MAAM,KAAK,WAAW;IAC5C,oBAAoB,EAAE,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,gBAAgB;IACrE,cAAc,EAAE,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM;CACtD,CAAA;AAED,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAA;AAE9E,IAAI,YAAY,GAAG,aAAa,EAAE,CAAA;AAErB,QAAA,WAAW,GAAG,GAAG,EAAE;IAC9B,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAA;IACzB,YAAY,GAAG,aAAa,EAAE,CAAA;AAChC,CAAC,CAAA;AAEY,QAAA,MAAM,GAAG,GAAiB,EAAE,CAAC,YAAY,CAAA;AACtD,kBAAe,cAAM,CAAA"} |
+1
-1
| { | ||
| "name": "use-ssr", | ||
| "version": "1.0.19", | ||
| "version": "1.0.21", | ||
| "description": "☯️ React hook to determine if you're on the server or browser", | ||
@@ -5,0 +5,0 @@ "main": "dist/useSSR.js", |
+3
-1
| <h1 align="center">useSSR</h1> | ||
| <p align="center">☯️ React hook to determine if you are on the server, in the browser, or in react native</p> | ||
| <p align="center">☯️ React hook to determine if you are on the server, browser, or react native</p> | ||
| <p align="center"> | ||
@@ -101,2 +101,3 @@ <a href="https://github.com/alex-cory/use-ssr/pulls"> | ||
| isNative, | ||
| device, // 'server', 'browser', or 'native' | ||
| canUseWorkers, | ||
@@ -111,2 +112,3 @@ canUseEventListeners, | ||
| isNative, | ||
| device, // 'server', 'browser', or 'native' | ||
| canUseWorkers, | ||
@@ -113,0 +115,0 @@ canUseEventListeners, |
127
1.6%11351
-2.06%48
-4%