Open wojpawlik opened 3 years ago
If deno
provides a stream
module itself, the best option would be to exclude stream
from the bundle somehow.
Alternatively, esm.sh could use the readable-stream
module directly. stream-browserify
uses that, but adds support for some very old Node.js APIs for backwards compatibility. That is necessary for browserify which supports many legacy projects that are many years old, but maybe not for esm.sh which (presumably) targets more modern runtimes.
i have a plan to provide all polyfills of nodejs internal module from deno.land/std/node/**
to get better deno compatibility, currently i just added the fs
polyfill since the std lib doesn't implement all of them.
FYI: https://github.com/postui/esm.sh/tree/master/third_party/polyfills
I believe readable stream is getting (kind of) built in Deno support from it's maintainers. Might be something to look at.
still happens on v47
➜ deno eval 'import "https://esm.sh/telegraf@4.0.2?dev"'
Download https://cdn.esm.sh/v47/@types/node/http
Download https://cdn.esm.sh/v47/@types/node/tls
Download https://cdn.esm.sh/v47/@types/node/url
error: Uncaught SyntaxError: The requested module '/v47/stream-browserify@3.0.0/deno/stream-browserify.development.js' does not provide an export named 'Readable'
import { Readable } from "/v47/stream-browserify@3.0.0/deno/stream-browserify.development.js";
~~~~~~~~
at <anonymous> (https://cdn.esm.sh/v47/sandwich-stream@2.0.2/deno/sandwich-stream.development.js:3:10)
on v50 I see this instead:
error: Uncaught TypeError: Class extends value undefined is not a constructor or null
var MultipartStream = class extends sandwich_stream_1.default {
^
at ../../../../../tmp/esm-build-e948e7e0c235eccfffa26ffd75dac27c9851089e/node_modules/telegraf/lib/core/network/multipart-stream.js (http://localhost:3333/v50/telegraf@4.0.2/deno/telegraf.development.js:1034:59)
at __require2 (http://localhost:3333/v50/telegraf@4.0.2/deno/telegraf.development.js:31:44)
at ../../../../../tmp/esm-build-e948e7e0c235eccfffa26ffd75dac27c9851089e/node_modules/telegraf/lib/core/network/client.js (http://localhost:3333/v50/telegraf@4.0.2/deno/telegraf.development.js:1075:30)
at __require2 (http://localhost:3333/v50/telegraf@4.0.2/deno/telegraf.development.js:31:44)
at ../../../../../tmp/esm-build-e948e7e0c235eccfffa26ffd75dac27c9851089e/node_modules/telegraf/lib/telegram.js (http://localhost:3333/v50/telegraf@4.0.2/deno/telegraf.development.js:1300:20)
at __require2 (http://localhost:3333/v50/telegraf@4.0.2/deno/telegraf.development.js:31:44)
at ../../../../../tmp/esm-build-e948e7e0c235eccfffa26ffd75dac27c9851089e/node_modules/telegraf/lib/telegraf.js (http://localhost:3333/v50/telegraf@4.0.2/deno/telegraf.development.js:1764:22)
at __require2 (http://localhost:3333/v50/telegraf@4.0.2/deno/telegraf.development.js:31:44)
at ../../../../../tmp/esm-build-e948e7e0c235eccfffa26ffd75dac27c9851089e/node_modules/telegraf/lib/index.js (http://localhost:3333/v50/telegraf@4.0.2/deno/telegraf.development.js:2445:22)
at __require2 (http://localhost:3333/v50/telegraf@4.0.2/deno/telegraf.development.js:31:44)
on v55 it's this:
error: Uncaught TypeError: Class extends value undefined is not a constructor or null
at https://cdn.esm.sh/v55/telegraf@4.0.2/deno/telegraf.js:3:22
at https://cdn.esm.sh/v55/telegraf@4.0.2/deno/telegraf.js:2:1405
at https://cdn.esm.sh/v55/telegraf@4.0.2/deno/telegraf.js:3:559
at https://cdn.esm.sh/v55/telegraf@4.0.2/deno/telegraf.js:2:1405
at https://cdn.esm.sh/v55/telegraf@4.0.2/deno/telegraf.js:3:4797
at https://cdn.esm.sh/v55/telegraf@4.0.2/deno/telegraf.js:2:1405
at https://cdn.esm.sh/v55/telegraf@4.0.2/deno/telegraf.js:3:12296
at https://cdn.esm.sh/v55/telegraf@4.0.2/deno/telegraf.js:2:1405
at https://cdn.esm.sh/v55/telegraf@4.0.2/deno/telegraf.js:3:24524
at https://cdn.esm.sh/v55/telegraf@4.0.2/deno/telegraf.js:2:1405
same error on v57:
deno eval 'import "https://esm.sh/telegraf@4.0.2?dev&pin=v57"'
error: Uncaught TypeError: Class extends value undefined is not a constructor or null
var MultipartStream = class extends sandwich_stream_1.default {
^
at esm-build-3a32e3194a944ce6ceab7e19c7552bc1abaff33e-3acba49b/node_modules/telegraf/lib/core/network/multipart-stream.js (https://cdn.esm.sh/v57/telegraf@4.0.2/deno/telegraf.development.js:1036:59)
at __require2 (https://cdn.esm.sh/v57/telegraf@4.0.2/deno/telegraf.development.js:33:44)
at esm-build-3a32e3194a944ce6ceab7e19c7552bc1abaff33e-3acba49b/node_modules/telegraf/lib/core/network/client.js (https://cdn.esm.sh/v57/telegraf@4.0.2/deno/telegraf.development.js:1077:30)
at __require2 (https://cdn.esm.sh/v57/telegraf@4.0.2/deno/telegraf.development.js:33:44)
at esm-build-3a32e3194a944ce6ceab7e19c7552bc1abaff33e-3acba49b/node_modules/telegraf/lib/telegram.js (https://cdn.esm.sh/v57/telegraf@4.0.2/deno/telegraf.development.js:1302:20)
at __require2 (https://cdn.esm.sh/v57/telegraf@4.0.2/deno/telegraf.development.js:33:44)
at esm-build-3a32e3194a944ce6ceab7e19c7552bc1abaff33e-3acba49b/node_modules/telegraf/lib/telegraf.js (https://cdn.esm.sh/v57/telegraf@4.0.2/deno/telegraf.development.js:1766:22)
at __require2 (https://cdn.esm.sh/v57/telegraf@4.0.2/deno/telegraf.development.js:33:44)
at esm-build-3a32e3194a944ce6ceab7e19c7552bc1abaff33e-3acba49b/node_modules/telegraf/lib/index.js (https://cdn.esm.sh/v57/telegraf@4.0.2/deno/telegraf.development.js:2447:22)
at __require2 (https://cdn.esm.sh/v57/telegraf@4.0.2/deno/telegraf.development.js:33:44)
Thank you for esm.sh, of all the things I tried this gets me the closest to running
telegraf
on Deno. But not close enough:telegraf
depends onsandwich-stream
, which has an.mjs
entry whichimport { Readable } from 'stream'
. This is legal:However,
stream-browserify
, used by esm.sh to ponyfillstream
, doesn't support it. I can open a PR, but only if @goto-bus-stop or another maintainer promises to actually review it.Otherwise, esm.sh should switch to better maintained ponyfill, perhaps https://deno.land/std/node/stream.ts?