Error related to node.tryGetContext

I’m seeing the output below and I don’t know what to do with it.
I’m used to building with the AWS provider NPM package without problems.
For the Mongodb Atlas provider I am using the generated typescript and this is the result from “cdktf synth”.

Using:
cdktf --version:
0.13.0
package.json
“cdktf”: “^0.13.0”,
“constructs”: “^10.1.122”

> @myCompany/myCompany-infra-platform-dev@0.1.0 synth
> env-cmd cdktf synth


⠴  Synthesizing
[2022-10-09T19:18:03.250] [ERROR] default - /Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/node_modules/cdktf/lib/terraform-stack.ts:207
    if (node.tryGetContext(EXCLUDE_STACK_ID_FROM_LOGICAL_IDS)) {
             ^

[2022-10-09T19:18:03.252] [ERROR] default - TypeError: node.tryGetContext is not a function
    at DataEnvStack.allocateLogicalId (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/node_modules/cdktf/lib/terraform-stack.ts:207:14)
    at DataEnvStack.getLogicalId (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/node_modules/cdktf/lib/terraform-stack.ts:190:17)
    at Project.get friendlyUniqueId [as friendlyUniqueId] (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-mongo/node_modules/cdktf/lib/terraform-element.ts:74:50)
    at Project.interpolationForAttribute (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-mongo/node_modules/cdktf/lib/terraform-resource.ts:212:45)
    at Project.getStringAttribute (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-mongo/node_modules/cdktf/lib/terraform-resource.ts:106:32)
    at Project.get id [as id] (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-mongo/.gen/providers/mongodbatlas/project/index.ts:370:17)
    at new DataEnvStack (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/src/stacks.ts:34:103)
    at Object.<anonymous> (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/src/index.ts:37:1)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
ERROR: cdktf encountered an error while synthesizing

Synth command: npx ts-node src/index.ts
Error:         non-zero exit code 1

Command output on stderr:

    /Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/node_modules/cdktf/lib/terraform-stack.ts:207
        if (node.tryGetContext(EXCLUDE_STACK_ID_FROM_LOGICAL_IDS)) {
                 ^
    TypeError: node.tryGetContext is not a function
        at DataEnvStack.allocateLogicalId (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/node_modules/cdktf/lib/terraform-stack.ts:207:14)
        at DataEnvStack.getLogicalId (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/node_modules/cdktf/lib/terraform-stack.ts:190:17)
        at Project.get friendlyUniqueId [as friendlyUniqueId] (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-mongo/node_modules/cdktf/lib/terraform-element.ts:74:50)
        at Project.interpolationForAttribute (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-mongo/node_modules/cdktf/lib/terraform-resource.ts:212:45)
        at Project.getStringAttribute (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-mongo/node_modules/cdktf/lib/terraform-resource.ts:106:32)
        at Project.get id [as id] (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-mongo/.gen/providers/mongodbatlas/project/index.ts:370:17)
        at new DataEnvStack (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/src/stacks.ts:34:103)
        at Object.<anonymous> (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/src/index.ts:37:1)
        at Module._compile (node:internal/modules/cjs/loader:1105:14)
        at Module.m._compile (/Users/myName/code/myCompany/myCompany-devops/node_modules/ts-node/src/index.ts:1618:23)


My complete Typescript code looks like this

import { App, S3Backend, S3BackendProps, TerraformOutput, TerraformStack } from 'cdktf'
import { Construct } from 'constructs'

import { AdvancedCluster, AdvancedClusterConfig } from '../.gen/providers/mongodbatlas/advanced-cluster'
import { Project, ProjectConfig } from '../.gen/providers/mongodbatlas/project'
import {MongodbatlasProvider, MongodbatlasProviderConfig} from '../.gen/providers/mongodbatlas/provider'


import { name as packageNameWithScope } from "../package.json"

const extractedPackageName = packageNameWithScope.split("/")[1]



export interface DataEnvStackConfig {
  remoteBackend: Omit<S3BackendProps, 'key'>
  mongo: {
    provider: MongodbatlasProviderConfig
    project: ProjectConfig
    cluster: Omit<AdvancedClusterConfig, 'projectId'>
  },
}

export class DataEnvStack extends TerraformStack {
  projectId: TerraformOutput
  clusterId: TerraformOutput

  constructor(scope: Construct, name: string, config: DataEnvStackConfig) {
    super(scope, name)

    new S3Backend(this, {...config.remoteBackend, key: `${name}.tfstate`})

    new MongodbatlasProvider(this, "mongo", config.mongo.provider)

    const project = new Project(this, "project", config.mongo.project)
    const cluster = new AdvancedCluster(this, "cluster", {...config.mongo.cluster, projectId: project.id})

    this.projectId = new TerraformOutput(this, "projectId", {
      value: project.id,
    })

    this.clusterId = new TerraformOutput(this, "clusterId", {
      value: cluster.id,
    })
  }

}



export interface EnvConfig {
  mongo: {
    orgId: string
  }
}

const env: EnvConfig = {
  mongo: {
    publicKey: "omitted-pubkey",
    privateKey: "omitted-privkey",
    orgId:  "omitted-orgId", //process.env.ATLAS_ORGANIZATION_ID || '',
  }
}

const remoteBackend: Omit<S3BackendProps, 'key'> = {
  bucket: 'omitted-name',
  region: 'us-east-1',
}

const app = new App()

new DataEnvStack(app, extractedPackageName, {
  // tags,
  remoteBackend,
  mongo: {
    project: {
      name: extractedPackageName,
      orgId: env.mongo.orgId,
    },
    cluster: {
      name: extractedPackageName,
      clusterType: 'REPLICASET',
      replicationSpecs: [{
        regionConfigs: [{
          electableSpecs: {
            instanceSize: 'M2', // M0 is not supported by the Terraform adapter or cluster v5.0
            nodeCount: 3,
          },
          regionName: 'US_EAST_1',
          priority: 1, // 0 for read-only
          providerName: 'TENANT', // because M2 is cheap
          backingProviderName: 'AWS',
        }]
      }]
    },
  },
})

app.synth()

Hi @cyrfer,

are you maybe running into this issue: Show warning when usage of `npm link` causes `instanceof TerraformElement` to fail · Issue #1132 · hashicorp/terraform-cdk · GitHub ?

I.e. do you use a local monorepo or similar tooling ending in symlinked packages?

Hi @ansgarm ,

Maybe. I am using a monorepo. I also extracted common code patterns into another package within my monorepo.

I see that issue was resolved with a PR that removed the offending code. Why am I still suffering?

My usage:
npm run build -w packages/common-lib
npm run build -w packages/infra-dev
npm run synth -w packages/infra-dev

⠴ Synthesizing
[2022-12-05T09:03:04.990] [ERROR] default - /foo/bar/blah/packages/common-lib/node_modules/cdktf/lib/terraform-stack.ts:197
if (node.tryGetContext(EXCLUDE_STACK_ID_FROM_LOGICAL_IDS)) {

My environment:
typescript 4.9.3
node 16.16.0
npm 8.19.2
cdktf 0.14.2
constructs: ^10.1.180

I used a different clone of my monorepo without updating any dependencies and I tried the same commands (build, synth) and now I see this error:

⠧ Synthesizing
[2022-12-05T10:53:58.535] [ERROR] default - npm
npm [2022-12-05T10:53:58.537] [ERROR] default - ERR! code ELSPROBLEMS
npm ERR! invalid: constructs@10.1.159 /foo/clone2/node_modules/constructs
{
“error”: {
“code”: “ELSPROBLEMS”,
“summary”: “invalid: constructs@10.1.159 /foo/clone2/node_modules/constructs”,
“detail”: “”
}
}

Updating all my packages to the latest version of constructs results in the original error.

⠧ Synthesizing
[2022-12-05T11:32:50.053] [ERROR] default - /foo/clone2/packages/common-lib/node_modules/cdktf/lib/terraform-stack.ts:197
if (node.tryGetContext(EXCLUDE_STACK_ID_FROM_LOGICAL_IDS)) {

This can be resolved.

I found one of my packages depended upon cdktf 0.13.x while the others depended upon 0.14.x. When I updated all to use 0.14.x, I was able to “synth” my Typescript into terraform json.