ipfs / js-ipfs

IPFS implementation in JavaScript
https://js.ipfs.tech
Other
7.43k stars 1.25k forks source link

ReferenceError: TextDecoder is not defined #3620

Closed ekumahost closed 1 year ago

ekumahost commented 3 years ago

My script been throwing this error no headways.. any idea

Severity: high

Description:

2021-04-09 12:22:05 at Function.Module._load (internal/modules/cjs/loader.js:585:3) 2021-04-09 12:22:05 at tryModuleLoad (internal/modules/cjs/loader.js:593:12) 2021-04-09 12:22:05 at Module.load (internal/modules/cjs/loader.js:653:32) 2021-04-09 12:22:05 at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10) 2021-04-09 12:22:05 at Module._compile (internal/modules/cjs/loader.js:776:30) 2021-04-09 12:22:05 at Object. (/www/node_modules/multibase/src/constants.js:4:14) 2021-04-09 12:22:05 at require (internal/modules/cjs/helpers.js:25:18) 2021-04-09 12:22:05 at Module.require (internal/modules/cjs/loader.js:690:17) 2021-04-09 12:22:05 at Function.Module._load (internal/modules/cjs/loader.js:585:3) 2021-04-09 12:22:05 at tryModuleLoad (internal/modules/cjs/loader.js:593:12) 2021-04-09 12:22:05 at Module.load (internal/modules/cjs/loader.js:653:32) 2021-04-09 12:22:05 at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10) 2021-04-09 12:22:05 at Module._compile (internal/modules/cjs/loader.js:776:30) 2021-04-09 12:22:05 at Object. (/www/node_modules/multibase/src/base.js:3:24) 2021-04-09 12:22:05 at require (internal/modules/cjs/helpers.js:25:18) 2021-04-09 12:22:05 at Module.require (internal/modules/cjs/loader.js:690:17) 2021-04-09 12:22:05 at Function.Module._load (internal/modules/cjs/loader.js:585:3) 2021-04-09 12:22:05 at tryModuleLoad (internal/modules/cjs/loader.js:593:12) 2021-04-09 12:22:05 at Module.load (internal/modules/cjs/loader.js:653:32) 2021-04-09 12:22:05 at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10) 2021-04-09 12:22:05 at Module._compile (internal/modules/cjs/loader.js:776:30) 2021-04-09 12:22:05 at Object. (/www/node_modules/multibase/src/util.js:3:21) 2021-04-09 12:22:05 ReferenceError: TextDecoder is not defined 2021-04-09 12:22:05 2021-04-09 12:22:05 ^ 2021-04-09 12:22:05 const textDecoder = new TextDecoder() 2021-04-09 12:22:05 /www/node_modules/multibase/src/util.js:3

Steps to reproduce the error:

welcome[bot] commented 3 years ago

Thank you for submitting your first issue to this repository! A maintainer will be here shortly to triage and review. In the meantime, please double-check that you have provided all the necessary information to make this process easy! Any information that can help save additional round trips is useful! We currently aim to give initial feedback within two business days. If this does not happen, feel free to leave a comment. Please keep an eye on how this issue will be labeled, as labels give an overview of priorities, assignments and additional actions requested by the maintainers:

Finally, remember to use https://discuss.ipfs.io if you just need general support.

danielcjacks commented 3 years ago

I'm having the same issue when running the Create React App example project

elmariachi111 commented 3 years ago

Same here. Created a massively simplified CRA repo to reproduce: https://github.com/elmariachi111/ipfs-textencoder-demo

achingbrain commented 3 years ago

What version of node are you running?

elmariachi111 commented 3 years ago

Built that with node 12.22, 14.15, 15.14 tried with yarn, npm, pnpm.

ekumahost commented 3 years ago

What version of node are you running?

node:10.16.0-alpine [Docker]

elmariachi111 commented 3 years ago

guess that's related to the latest multibase releases (https://github.com/multiformats/js-multibase/compare/v4.0.2...v4.0.4) they dropped the dependency on the generic web-encoding dependency lately: https://github.com/Gozala/web-encoding/compare/v1.1.3...v1.1.4 . Curiously, the error seems to be thrown in a multibase module @3.1.2, but the verison that ipfs-core 0.5.4 requires is definitely ^4.0.2... https://github.com/ipfs/js-ipfs/blob/74bfce3c12f743b8c1cda4b2160b25802f9f27d6/packages/ipfs-core/package.json#L114

image

achingbrain commented 3 years ago

@ekumahost please upgrade to a supported node version - 14 or 15.

@elmariachi111 you are running in a browser and likely have a different problem

elmariachi111 commented 3 years ago

it's very lkely an issue with CRA. Runs fine inside nextjs & parcel, created 2 PRs for that: https://github.com/elmariachi111/ipfs-textencoder-demo/pulls . It's quite likely that somewhen on the way CRA support broke. I just checked whether your official CRA sample (without Typescript) runs, but I found that by plainly building and running it, it shows the same error as above... (so https://github.com/ipfs/js-ipfs/tree/master/examples/browser-create-react-app is also not working here, node 14.15.3

RomarQ commented 3 years ago

I have a project that is also being affected by this.

Dependency tree

└─┬ ipfs-http-client@49.0.4
  ├─┬ cids@1.1.6
  │ └── multibase@4.0.4 deduped
  ├─┬ ipfs-core-types@0.3.1
  │ └─┬ peer-id@0.14.6
  │   └─┬ libp2p-crypto@0.19.2
  │     ├── multibase@3.1.2
  │     └─┬ uint8arrays@1.1.0
  │       └── multibase@3.1.2 deduped
  ├─┬ ipld-dag-pb@0.20.0
  │ ├─┬ protons@2.0.0
  │ │ └─┬ uint8arrays@1.1.0
  │ │   └── multibase@3.1.2
  │ └─┬ uint8arrays@1.1.0
  │   └── multibase@3.1.2
  ├─┬ ipld-raw@6.0.0
  │ └─┬ multicodec@2.1.3
  │   └─┬ uint8arrays@1.1.0
  │     └── multibase@3.1.2
  ├─┬ multiaddr@8.1.2
  │ ├── multibase@3.1.2
  │ └─┬ uint8arrays@1.1.0
  │   └── multibase@3.1.2 deduped
  ├── multibase@4.0.4
  ├─┬ multihashes@4.0.2
  │ └── multibase@4.0.4 deduped
  └─┬ uint8arrays@2.1.4
    └── multibase@4.0.4 deduped

Avoid using (^) in the dependencies, it is really dangerous.

RomarQ commented 3 years ago

A workaround, while it doesn't get fixed:

npm i --save-exact web-encoding@1.1.3

Commit that introduced the problem: https://github.com/Gozala/web-encoding/commit/3992702cefa89e3e2f67a0b29bed41d290c5e6a8

ekumahost commented 3 years ago

@ekumahost please upgrade to a supported node version - 14 or 15.

@elmariachi111 you are running in a browser and likely have a different problem

I think this is going to fix the issue. trying to test and verify.

elmariachi111 commented 3 years ago

A workaround, while it doesn't get fixed:

npm i --save web-encoding@1.1.3

Commit that introduced the problem: Gozala/web-encoding@3992702

@RomarQ think it's not helping if I install web-encoding locally ;) But you know what? When I add

  "resolutions": {
    "web-encoding": "1.1.3"
  },

to my package.json file, it just runs fine :) (might only work with yarn)

ekumahost commented 3 years ago

I have upgraded node to version >14.x and issue fixed.

yus1uf commented 3 years ago

I am facing the same while retrieving the data from mongodb.

SgtPooki commented 2 years ago

@achingbrain This is not working for me in ipfs-webui with node version 16.12.0 when I'm trying to upgrade dependencies: https://github.com/ipfs/ipfs-webui/issues/1965

> run-s -cl test:unit test:build test:e2e

[test:unit ]
[test:unit ] > ipfs-webui@2.17.3 test:unit /Users/sgtpooki/code/work/protocol.ai/ipfs/webui
[test:unit ] > react-scripts test --env=jsdom --runInBand --watchAll=false
[test:unit ]
[test:unit ] watchman warning:  Recrawled this watch 1513 times, most recently because:
[test:unit ] MustScanSubDirs UserDroppedTo resolve, please review the information on
[test:unit ] https://facebook.github.io/watchman/docs/troubleshooting.html#recrawl
[test:unit ] To clear this warning, run:
[test:unit ] `watchman watch-del '/Users/sgtpooki/code/work/protocol.ai/ipfs/webui' ; watchman watch-project '/Users/sgtpooki/code/work/protocol.ai/ipfs/webui'`
[test:unit ]
[test:unit ] PASS src/bundles/node-bandwidth-chart.test.js
[test:unit ] PASS src/bundles/peer-locations.test.js
[test:unit ] PASS src/loader/AsyncRequestLoader.test.js
[test:unit ] PASS src/lib/files.test.js
[test:unit ] PASS src/lib/dnd-backend.test.js
[test:unit ] PASS src/lib/count-dirs.test.js
[test:unit ] FAIL src/bundles/files.test.js
[test:unit ]   ● Test suite failed to run
[test:unit ]
[test:unit ]     ReferenceError: TextDecoder is not defined
[test:unit ]
[test:unit ]        8 | import map from 'it-map'
[test:unit ]        9 | import last from 'it-last'
[test:unit ]     > 10 | import CID from 'cids'
[test:unit ]          | ^
[test:unit ]       11 |
[test:unit ]       12 | import { spawn, perform, send, ensureMFS, Channel, sortFiles, infoFromPath } from './utils'
[test:unit ]       13 | import { IGNORED_FILES, ACTIONS } from './consts'
[test:unit ]
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multibase@4.0.6/node_modules/multibase/src/util.js:3:21)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multibase@4.0.6/node_modules/multibase/src/base.js:3:24)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multibase@4.0.6/node_modules/multibase/src/constants.js:4:14)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multibase@4.0.6/node_modules/multibase/src/index.js:7:19)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multihashes@4.0.3/node_modules/multihashes/src/index.js:6:19)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/cids@1.1.6/node_modules/cids/src/index.js:3:12)
[test:unit ]       at Object.<anonymous> (src/bundles/files/actions.js:10:1)
[test:unit ]       at Object.<anonymous> (src/bundles/files/index.js:4:1)
[test:unit ]       at Object.<anonymous> (src/bundles/files.test.js:3:1)
[test:unit ]
[test:unit ] FAIL src/bundles/peer-bandwidth.test.js
[test:unit ]   ● Test suite failed to run
[test:unit ]
[test:unit ]     ReferenceError: TextDecoder is not defined
[test:unit ]
[test:unit ]       1 | import multihashing from 'multihashing-async'
[test:unit ]     > 2 | import CID from 'cids'
[test:unit ]         | ^
[test:unit ]       3 | import { promisify } from 'util'
[test:unit ]       4 | import Crypto from 'crypto'
[test:unit ]       5 |
[test:unit ]
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multibase@4.0.6/node_modules/multibase/src/util.js:3:21)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multibase@4.0.6/node_modules/multibase/src/base.js:3:24)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multibase@4.0.6/node_modules/multibase/src/constants.js:4:14)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multibase@4.0.6/node_modules/multibase/src/index.js:7:19)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multihashes@4.0.3/node_modules/multihashes/src/index.js:6:19)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/cids@1.1.6/node_modules/cids/src/index.js:3:12)
[test:unit ]       at Object.<anonymous> (test/helpers/cid.js:2:1)
[test:unit ]       at Object.<anonymous> (src/bundles/peer-bandwidth.test.js:4:1)
[test:unit ]
[test:unit ] FAIL src/bundles/notify.test.js
[test:unit ]   ● Test suite failed to run
[test:unit ]
[test:unit ]     ReferenceError: TextDecoder is not defined
[test:unit ]
[test:unit ]        8 | import map from 'it-map'
[test:unit ]        9 | import last from 'it-last'
[test:unit ]     > 10 | import CID from 'cids'
[test:unit ]          | ^
[test:unit ]       11 |
[test:unit ]       12 | import { spawn, perform, send, ensureMFS, Channel, sortFiles, infoFromPath } from './utils'
[test:unit ]       13 | import { IGNORED_FILES, ACTIONS } from './consts'
[test:unit ]
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multibase@4.0.6/node_modules/multibase/src/util.js:3:21)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multibase@4.0.6/node_modules/multibase/src/base.js:3:24)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multibase@4.0.6/node_modules/multibase/src/constants.js:4:14)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multibase@4.0.6/node_modules/multibase/src/index.js:7:19)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multihashes@4.0.3/node_modules/multihashes/src/index.js:6:19)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/cids@1.1.6/node_modules/cids/src/index.js:3:12)
[test:unit ]       at Object.<anonymous> (src/bundles/files/actions.js:10:1)
[test:unit ]       at Object.<anonymous> (src/bundles/files/index.js:4:1)
[test:unit ]       at Object.<anonymous> (src/bundles/notify.js:3:1)
[test:unit ]       at Object.<anonymous> (src/bundles/notify.test.js:3:1)
[test:unit ]
[test:unit ] FAIL src/bundles/analytics.test.js
[test:unit ]   ● Test suite failed to run
[test:unit ]
[test:unit ]     ReferenceError: TextDecoder is not defined
[test:unit ]
[test:unit ]     > 1 | import multiaddr from 'multiaddr'
[test:unit ]         | ^
[test:unit ]       2 | import HttpClient from 'ipfs-http-client'
[test:unit ]       3 | // @ts-ignore
[test:unit ]       4 | import { getIpfs, providers } from 'ipfs-provider'
[test:unit ]
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multibase@4.0.6/node_modules/multibase/src/util.js:3:21)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multibase@4.0.6/node_modules/multibase/src/base.js:3:24)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multibase@4.0.6/node_modules/multibase/src/constants.js:4:14)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multibase@4.0.6/node_modules/multibase/src/index.js:7:19)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multihashes@4.0.3/node_modules/multihashes/src/index.js:6:19)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/cids@1.1.6/node_modules/cids/src/index.js:3:12)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multiaddr@8.1.2_node-fetch@3.2.9/node_modules/multiaddr/src/convert.js:5:13)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multiaddr@8.1.2_node-fetch@3.2.9/node_modules/multiaddr/src/codec.js:3:17)
[test:unit ]       at Object.<anonymous> (node_modules/.pnpm/multiaddr@8.1.2_node-fetch@3.2.9/node_modules/multiaddr/src/index.js:3:15)
[test:unit ]       at Object.<anonymous> (src/bundles/ipfs-provider.js:1:1)
[test:unit ]       at Object.<anonymous> (src/bundles/analytics.js:10:1)
[test:unit ]       at Object.<anonymous> (src/bundles/analytics.test.js:3:1)
[test:unit ]
[test:unit ] Test Suites: 4 failed, 1 skipped, 6 passed, 10 of 11 total
[test:unit ] Tests:       4 skipped, 35 passed, 39 total
[test:unit ] Snapshots:   0 total
[test:unit ] Time:        3.02 s
[test:unit ] Ran all test suites.
[test:unit ]  ELIFECYCLE  Command failed with exit code 1.

What is the fix for this?

achingbrain commented 2 years ago

This may be related to your use of JSDom in the test execution: https://github.com/jsdom/jsdom/issues/2524

SgtPooki commented 1 year ago

js-ipfs is being deprecated in favor of Helia. You can https://github.com/ipfs/js-ipfs/issues/4336 and read the migration guide.

Please feel to reopen with any comments by 2023-06-02. We will do a final pass on reopened issues afterward (see https://github.com/ipfs/js-ipfs/issues/4336).

FYI, my previous issue was resolved with a jsdom global setup file.