123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- /**
- * SSR Window 4.0.2
- * Better handling for window object in SSR environment
- * https://github.com/nolimits4web/ssr-window
- *
- * Copyright 2021, Vladimir Kharlampidi
- *
- * Licensed under MIT
- *
- * Released on: December 13, 2021
- */
- /* eslint-disable no-param-reassign */
- function isObject(obj) {
- return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;
- }
- function extend(target, src) {
- if (target === void 0) {
- target = {};
- }
- if (src === void 0) {
- src = {};
- }
- Object.keys(src).forEach(key => {
- if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {
- extend(target[key], src[key]);
- }
- });
- }
- const ssrDocument = {
- body: {},
- addEventListener() {},
- removeEventListener() {},
- activeElement: {
- blur() {},
- nodeName: ''
- },
- querySelector() {
- return null;
- },
- querySelectorAll() {
- return [];
- },
- getElementById() {
- return null;
- },
- createEvent() {
- return {
- initEvent() {}
- };
- },
- createElement() {
- return {
- children: [],
- childNodes: [],
- style: {},
- setAttribute() {},
- getElementsByTagName() {
- return [];
- }
- };
- },
- createElementNS() {
- return {};
- },
- importNode() {
- return null;
- },
- location: {
- hash: '',
- host: '',
- hostname: '',
- href: '',
- origin: '',
- pathname: '',
- protocol: '',
- search: ''
- }
- };
- function getDocument() {
- const doc = typeof document !== 'undefined' ? document : {};
- extend(doc, ssrDocument);
- return doc;
- }
- const ssrWindow = {
- document: ssrDocument,
- navigator: {
- userAgent: ''
- },
- location: {
- hash: '',
- host: '',
- hostname: '',
- href: '',
- origin: '',
- pathname: '',
- protocol: '',
- search: ''
- },
- history: {
- replaceState() {},
- pushState() {},
- go() {},
- back() {}
- },
- CustomEvent: function CustomEvent() {
- return this;
- },
- addEventListener() {},
- removeEventListener() {},
- getComputedStyle() {
- return {
- getPropertyValue() {
- return '';
- }
- };
- },
- Image() {},
- Date() {},
- screen: {},
- setTimeout() {},
- clearTimeout() {},
- matchMedia() {
- return {};
- },
- requestAnimationFrame(callback) {
- if (typeof setTimeout === 'undefined') {
- callback();
- return null;
- }
- return setTimeout(callback, 0);
- },
- cancelAnimationFrame(id) {
- if (typeof setTimeout === 'undefined') {
- return;
- }
- clearTimeout(id);
- }
- };
- function getWindow() {
- const win = typeof window !== 'undefined' ? window : {};
- extend(win, ssrWindow);
- return win;
- }
- export { getWindow as a, getDocument as g };
|