Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

deno server-side-render error #573

Open
frenetic43 opened this issue Dec 7, 2023 · 1 comment
Open

deno server-side-render error #573

frenetic43 opened this issue Dec 7, 2023 · 1 comment

Comments

@frenetic43
Copy link

Error

Any attempt to render goober styles within a deno instance results in ReferenceError: document is not defined

Environment

I'm the first to admit the problem might be a configuration problem on my end.

OS:  Ubuntu 20.04.6 LTS
deno:  1.38.4 (release, x86_64-unknown-linux-gnu)
v8:  12.0.267.1
typescript:  5.2.2
goober:  2.1.13

Steps to reproduce

  • install deno
  • copy any goober example source to file
  • deno run example.js

Investigation

Apparently, there is an empty? window object in the global namespace within the deno environment. I don't know why, other than deno is aiming towards creating a browser environment on the server (somewhat) for cross-compatible code. However, there is no default document-object/DOM.

Hence, in src/core/get-sheet.js

export let getSheet = (target) => {
    if (typeof window === 'object') {   // THIS TRIGGERS AS TRUE
        return (...
            Object.assign((target || document.head)... )   // THIS CAUSES REFERENCE ERROR
        ).firstChild;
    }

Note: It still works fine in node.js because node does not have a window object—and obviously the browser which has both.

Suggested Fix

export let getSheet = (target) => {
    if (typeof window === 'object' && typeof document === 'object') {

I just don't know if that would break something somewhere, like if target has a passed value.

Urgency

Low: For my own uses I cloned the repo and hacked a local copy, then bundled the official version for client-side. Doesn't help anyone else, but...

@ksbrooksjr
Copy link

ksbrooksjr commented Mar 12, 2024

I dealt with the exact same issue today. I fixed it in my use case by simply deleting the window object if the document object is undefined but the window object isn't.

if (typeof window !== 'undefined' && typeof document === 'undefined')
  delete globalThis.window

EDIT: You can set the DENO_FUTURE=1 environment variable to disable the window global in Deno 1.42, and apparently it'll be removed altogether in version 2.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants