nylas / nylas-nodejs

A NodeJS wrapper for the Nylas REST API for email, contacts, and calendar.
MIT License
166 stars 116 forks source link

TypeScript Not Working When Package.json type is "module" #549

Open Lozoute opened 4 months ago

Lozoute commented 4 months ago

Describe the bug When installing Nylas SDK 7 to a new repo, using TypeScript 5 and type "module" in package.json, TypeScript throws the error This expression is not constructable. adding type: "module" into the package.json of Nylas fixes the problem but then commonjs requires do not work anymore.

To Reproduce 1 Create a new repo

2 Add this package.json

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "type": "module",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "tsc && node nylas.mjs"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "nylas": "^7.2.1"
  },
  "devDependencies": {
    "typescript": "^5.4.2"
  }
}

3. Add this tsconfig.json

{
  "compilerOptions": {
    "target": "esnext",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "declaration": true,
    "esModuleInterop": false,
    "forceConsistentCasingInFileNames": true,
    "strict": false,
    "noImplicitAny": false,
    "strictNullChecks": false,
    "strictFunctionTypes": false,
    "strictBindCallApply": false,
    "strictPropertyInitialization": false,
    "skipLibCheck": true,
    "resolvePackageJsonExports": true,
  },
  "exclude": ["modules/clients/**/*"]
}

4. Add this nylas.mts file

import Nylas from 'nylas';

const apiKey = 'YOUR_API_KEY';
const apiUri = 'https://api.eu.nylas.com';

const nylas = new Nylas({
  apiKey: apiKey,
  apiUri: apiUri
});

const result = await nylas.messages.list({
  identifier: "YOUR_GRANT",
  queryParams: {
    limit: 20,
  },
});

console.log(result);

5. npm install && npm start

Expected behavior Well I guess we should have no error but the tsc compiler throws the error This expression is not constructable.

SDK Version: 7.2.1

Additional context Add any other context about the problem here.

mrashed-dev commented 4 months ago

Thanks for opening this issue @Lozoute, we'll take a look and provide you an update as soon as we get one.

mrashed-dev commented 2 months ago

Hey @Lozoute, we're still looking into this internally and trying to find the best course of action here that won't break anything for cjs users. Until then, during my testing I found that if you use new Nylas.default({... it should work and it does give you full typing support. I'm not suggesting this as a final solution, but only a temporary workaround until we have something flushed out that can satisfy everyone. Hybrid projects in TS are always a little tricky. Sorry for the delay on this, but we're looking to resolve this fully soon.