orbitdb / orbitdb

Peer-to-Peer Databases for the Decentralized Web

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Orbitdb does not work on Nest.js.

ismail-bs opened this issue · comments

Show two errors

const core_1 = require("@orbitdb/core");
               ^
Error [ERR_REQUIRE_ESM]: require() of ES Module /home/Projects/orbitdb_test/node_modules/@orbitdb/core/src/index.js from /home/Projects/orbitdb_test/dist/modules/db.service.js not supported.

and

Error: No "exports" main defined in /home/Projects/orbitdb_test/node_modules/ipfs-core/package.json

My orbitdb service code

import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common';
import * as IFRS from 'ipfs-core';
import { createOrbitDB } from '@orbitdb/core';

@Injectable()
export class DBService implements OnModuleInit, OnModuleDestroy {
  private ipfs: any;
  private orbitdb: any;

  async onModuleInit() {
    this.ipfs = await IFRS.create();
    this.orbitdb = await createOrbitDB({ ipfs: this.ipfs });

    const db = await this.orbitdb.open('hello');

    db.events.on('update', async (entry) => {
      console.log(entry);
      const all = await db.all();
      console.log(all);
    });
  }

  async onModuleDestroy() {
    await this.orbitdb.stop();
    await this.ipfs.stop();
  }

  async addData(data: string) {
    const db = await this.orbitdb.open('hello');
    const hash = await db.add(data);
    console.log('Hash:', hash);
    await db.close();
  }

  async getAllData() {
    const db = await this.orbitdb.open('hello');
    const allData = await db.all();
    await db.close();
    return allData;
  }
}

my package.json file

{
  "name": "orbitdb_esm_test",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^10.0.0",
    "@nestjs/core": "^10.0.0",
    "@nestjs/platform-express": "^10.0.0",
    "@orbitdb/core": "^1.0.0",
    "ipfs-core": "^0.18.1",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.8.1"
  },
  "devDependencies": {
    "@nestjs/cli": "^10.0.0",
    "@nestjs/schematics": "^10.0.0",
    "@nestjs/testing": "^10.0.0",
    "@types/express": "^4.17.17",
    "@types/jest": "^29.5.2",
    "@types/node": "^20.3.1",
    "@types/supertest": "^2.0.12",
    "@typescript-eslint/eslint-plugin": "^6.0.0",
    "@typescript-eslint/parser": "^6.0.0",
    "eslint": "^8.42.0",
    "eslint-config-prettier": "^9.0.0",
    "eslint-plugin-prettier": "^5.0.0",
    "jest": "^29.5.0",
    "prettier": "^3.0.0",
    "source-map-support": "^0.5.21",
    "supertest": "^6.3.3",
    "ts-jest": "^29.1.0",
    "ts-loader": "^9.4.3",
    "ts-node": "^10.9.1",
    "tsconfig-paths": "^4.2.0",
    "typescript": "^5.1.3"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}

const core_1 = require("@orbitdb/core");

You will need to use ES's import() with OrbitDB. require is not supported.

Error: No "exports" main defined in /home/Projects/orbitdb_test/node_modules/ipfs-core/package.json

Looks like an IPFS issue. You may get better support directly from IPFS.

const core_1 = require("@orbitdb/core");

You will need to use ES's import() with OrbitDB. require is not supported.

Error: No "exports" main defined in /home/Projects/orbitdb_test/node_modules/ipfs-core/package.json

Looks like an IPFS issue. You may get better support directly from IPFS.

@haydenyoung

I already used the import statement
import { createOrbitDB } from '@orbitdb/core';

When I run the NestJS project, it gives this error.

If you would like to create a small project I can take a quick look but I have no experience with NestJS and this looks more like a build problem rather than an issue with the OrbitDB package.

You may want to reach out to NestJS because the require error you report looks out of place.

It may also be worth asking around in the OrbitDB lobby and seeing if other community members have had success or are experiencing similar issues.

I also notice that a similar error has been reported on NestJS's Github issues. Perhaps related?

Closing due to inactivity.