Giter Site home page Giter Site logo

Circular import about fakeindexeddb HOT 7 OPEN

dumbmatter avatar dumbmatter commented on June 10, 2024
Circular import

from fakeindexeddb.

Comments (7)

dumbmatter avatar dumbmatter commented on June 10, 2024

That looks like a TypeScript import. What is the actual Node.js code it gets compiled to? Importing like this should work:

const FDBCursor = require("fake-indexeddb/lib/FDBCursor");

from fakeindexeddb.

TvoroG avatar TvoroG commented on June 10, 2024

It gets compiled to this:

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const FDBCursor = require("fake-indexeddb/lib/FDBCursor");

from fakeindexeddb.

TvoroG avatar TvoroG commented on June 10, 2024

I'm using following command to compile it:

tsc --skipLibCheck --target es6 --module commonjs --outDir ...

from fakeindexeddb.

dumbmatter avatar dumbmatter commented on June 10, 2024

Ah crap you're right, I get the same error even with my code! I'll look into this soon, thanks for the bug report.

from fakeindexeddb.

TvoroG avatar TvoroG commented on June 10, 2024

Cool! Thanks for quick response! :)

from fakeindexeddb.

dumbmatter avatar dumbmatter commented on June 10, 2024

You're right, it is related to circular imports. Probably nobody noticed it before because if you import fake-indexeddb first, it's not a problem. And there probably is not a reason to import FDBCursor without importing fake-indexeddb too.

So if you change from:

const FDBCursor = require("fake-indexeddb/lib/FDBCursor");

to:

const indexedDB = require("fake-indexeddb");
const FDBCursor = require("fake-indexeddb/lib/FDBCursor");

it will work. If you really have no use for the indexedDB variable, you could also do:

require("fake-indexeddb");
const FDBCursor = require("fake-indexeddb/lib/FDBCursor");

I'd still like to fix this, but I'm just posting the workaround in case I don't get around to it for a while.

from fakeindexeddb.

TvoroG avatar TvoroG commented on June 10, 2024

Thanks! It works this way.

About my use case: i'm writing custom testEnvironment for jest and want to extend this.global with fakeIndexedDB:

require("fake-indexeddb"); // workaround
import FDBCursor = require("fake-indexeddb/lib/FDBCursor");
import FDBCursorWithValue = require("fake-indexeddb/lib/FDBCursorWithValue");
import FDBFactory = require("fake-indexeddb/lib/FDBFactory");
...

export function makeIndexedDBEnv() {
    return {
        indexedDB: new FDBFactory(), // to not worry about resetting
        IDBCursor: FDBCursor,
        IDBCursorWithValue: FDBCursorWithValue,
        ...
    }
}
class CustomEnvironment extends NodeEnvironment {
  ...
  async setup() {
    await super.setup();
    const idbEnv = makeIndexedDBEnv();
    Object.assign(this.global, idbEnv);
    ...
  }
}

from fakeindexeddb.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.