Error [ERR_REQUIRE_ESM]: require() of ES Module /home/sky/Documents/hourlypets/node_modules/tsl-mastodon-api/lib/index.js from /home/sky/Documents/hourlypets/src/mastodon.ts not supported. Instead change the require of index.js in /home/sky/Documents/hourlypets/src/mastodon.ts to a dynamic import() which is available in all CommonJS modules. at require.extensions. [as .js] (/usr/lib/node_modules/ts-node/dist/index.js:851:20) at Object. (/home/sky/Documents/hourlypets/src/mastodon.ts:36:31) at m._compile (/usr/lib/node_modules/ts-node/dist/index.js:857:29) at require.extensions. [as .ts] (/usr/lib/node_modules/ts-node/dist/index.js:859:16) at Object. (/home/sky/Documents/hourlypets/src/bot.ts:13:20) at m._compile (/usr/lib/node_modules/ts-node/dist/index.js:857:29) at require.extensions. [as .ts] (/usr/lib/node_modules/ts-node/dist/index.js:859:16) at phase4 (/usr/lib/node_modules/ts-node/dist/bin.js:466:20) at bootstrap (/usr/lib/node_modules/ts-node/dist/bin.js:54:12) at main (/usr/lib/node_modules/ts-node/dist/bin.js:33:12) at Object. (/usr/lib/node_modules/ts-node/dist/bin.js:579:5) { code: ‘ERR_REQUIRE_ESM’ } I am importing the lib like this

import * as Mastodon from ‘tsl-mastodon-api’;

  • clif@lemmy.world
    link
    fedilink
    arrow-up
    3
    ·
    1 year ago

    Hehe, this is the same type of answer I get from clients when I ask more than one question at a time 😆

    Do you have answers to the other questions? Or, much better, can you post the code including your package.json and tsconfig to github/etc?

      • clif@lemmy.world
        link
        fedilink
        arrow-up
        2
        ·
        edit-2
        1 year ago

        Try simply adding the following to your package.json: "type": "module"

        I tested this with import * as Mastodon from 'tsl-mastodon-api'; in a test.js file using the example from their readme, executing with ts-node test.js (NOTE THAT THIS IS A JS FILE! Not a .ts file) and it works. It times out, of course, because the example URL doesn’t exist, but you get the idea. Minimal example (package.json is default from npm init -y but with the "type": "module" added. I also tested with your package.json [adding type:module] and tsconfig.json):

        test.js :

        import * as Mastodon from 'tsl-mastodon-api';
        
        const mastodon = new Mastodon.API({
            access_token: 'ABC',
            api_url: 'https://mastodon.example/api/v1/'
        });
        
        const result = await mastodon.postStatus({
            sensitive: true,
            spoiler_text: 'Hello',
            status: 'World'
        });
        console.log(JSON.stringify(result));
        

        Full package.json that you provided with the “type” property added :

          {
            "name": "hourlypets",
            "type": "module",
            "version": "1.0.0",
            "description": "A bot for displaying hourly pets",
            "main": "dist/index.js", 
            "scripts": {
              "start": "node dist/index.js", 
              "test": "echo \"Error: no test specified\" && exit 1"
            },
            "keywords": [],
            "author": "",
            "license": "ISC",
            "devDependencies": {
              "@types/node": "^20.5.1",
              "typescript": "^5.1.6"
            },
            "dependencies": {
              "@petfinder/petfinder-js": "^1.0.6",
              "dotenv": "^16.3.1",
              "tsl-mastodon-api": "^0.4.0"
            }
          }
        

        On the note that I used test.js - if this was instead test.ts and you tried to execute it directly with ts-node like ts-node test.ts it will throw the error TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for test.ts. So, I made the assumption that your file is a JS based solely on that fact.

        If you still have problems, post a super simplified script like my test.js above that causes the issue for you and I’ll test with yours. You can exclude all private code - just enough to trigger the module error… meaning you could probably just have the import and console.log('hi'); and that would be sufficient.

        • skymtfOP
          link
          fedilink
          arrow-up
          1
          ·
          1 year ago

          so attempting this causes all typescript stuff to break, sadly some of my code depends on typescript specific things.

        • skymtfOP
          link
          fedilink
          arrow-up
          1
          ·
          1 year ago

          I am using TS for pretty much the entire project, but I know TS and JS are pretty much the same with a few added rules.

    • skymtfOP
      link
      fedilink
      arrow-up
      1
      ·
      1 year ago

      just posted it here, the code is currently not public but I posted the ts-config and package.json

      • skymtfOP
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        At one point I did have if set to commonJS too, but it seemed to cause issues. Sending the one the is updated as a suggestion