Skip to content

Fails with Invalid loader value: "mjs" (CDK ESM module) #78

@kristiandreher

Description

@kristiandreher

I am using the @graphql-tools packages to manage the Appsync schema in my application. When running lld I get the following error message:

> yarn lld -v                                                     
yarn run v1.22.22
warning package.json: No license field
$ /<project-root>/node_modules/.bin/lld -v
Welcome to Lambda Live Debugger 🐞 version 1.2.2.
Parameters: 
 - context=undefined
 - interval=3000
 - verbose=true
 - debuggerId=80edea8f7b5fa224fdc38915ba29a40c
 - start=true
NPM module folder: /<project-root>/node_modules/lambda-live-debugger/dist
Project folder: /<project-root>
Starting the debugger (ID 80edea8f7b5fa224fdc38915ba29a40c)...
Getting resources with 'cdk' framework
[CDK] Entry file: /<project-root>/bin/esm-test-app.ts
[CDK] Using ESM format
✘ [ERROR] Invalid loader value: "mjs" [plugin injectCode]

    node_modules/@graphql-tools/load-files/esm/index.js:14:22:
      14 │ import { parse } from 'graphql';
         ╵                       ~~~~~~~~~

Error: Error building CDK code: Build failed with 1 error:
node_modules/@graphql-tools/load-files/esm/index.js:14:22: ERROR: [plugin: injectCode] Invalid loader value: "mjs"
    at CdkFramework.getLambdasDataFromCdkByCompilingAndRunning (file:///<project-root>/node_modules/lambda-live-debugger/dist/frameworks/cdkFramework.mjs:284:19)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async CdkFramework.getLambdas (file:///<project-root>/node_modules/lambda-live-debugger/dist/frameworks/cdkFramework.mjs:51:30)
    at async Object.getLambdas (file:///<project-root>/node_modules/lambda-live-debugger/dist/resourceDiscovery.mjs:43:21)
    at async Object.discoverLambdas (file:///<project-root>/node_modules/lambda-live-debugger/dist/configuration.mjs:115:26)
    at async run (file:///<project-root>/node_modules/lambda-live-debugger/dist/lldebugger.mjs:54:5) {
  [cause]: Error: Build failed with 1 error:
  node_modules/@graphql-tools/load-files/esm/index.js:14:22: ERROR: [plugin: injectCode] Invalid loader value: "mjs"
      at failureErrorWithLog (/<project-root>/node_modules/esbuild/lib/main.js:1651:15)
      at /<project-root>/node_modules/esbuild/lib/main.js:1059:25
      at runOnEndCallbacks (/<project-root>/node_modules/esbuild/lib/main.js:1486:45)
      at buildResponseToResult (/<project-root>/node_modules/esbuild/lib/main.js:1057:7)
      at /<project-root>/node_modules/esbuild/lib/main.js:1086:16
      at responseCallbacks.<computed> (/<project-root>/node_modules/esbuild/lib/main.js:704:9)
      at handleIncomingPacket (/<project-root>/node_modules/esbuild/lib/main.js:764:9)
      at Socket.readFromStdout (/<project-root>/node_modules/esbuild/lib/main.js:680:7)
      at Socket.emit (node:events:519:28)
      at addChunk (node:internal/streams/readable:559:12) {
    errors: [Getter/Setter],
    warnings: [Getter/Setter]
  }
}
Done in 1.43s.

esm-test-app-stack.ts:

import { loadFilesSync } from "@graphql-tools/load-files";
import { Duration, Stack, type StackProps } from "aws-cdk-lib";
import { Construct } from "constructs";
import * as url from "url";
import { resolve } from "path";
import { NodejsFunction, OutputFormat } from "aws-cdk-lib/aws-lambda-nodejs";
import { Runtime } from "aws-cdk-lib/aws-lambda";
import { join } from "path";

const __dirname = url.fileURLToPath(new URL(".", import.meta.url));

export class EsmTestAppStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    const schemas = loadFilesSync<string>(join(__dirname, "../schemas"));

    new NodejsFunction(this, "Lambda", {
      timeout: Duration.seconds(20),
      memorySize: 1024,
      runtime: Runtime.NODEJS_20_X,
      entry: resolve(__dirname, "./handler.ts"),
      environment: {
        NODE_OPTIONS: "--enable-source-maps",
        LOG_LEVEL: "DEBUG",
      },
      bundling: {
        minify: true,
        sourceMap: true,
        externalModules: [],
        platform: "node",
        // ESM important properties:
        mainFields: ["module", "main"],
        format: OutputFormat.ESM,
        banner:
          "const require = (await import('node:module')).createRequire(import.meta.url);",
      },
    });
  }
}

package.json

{
  "name": "esm-test-app",
  "version": "0.1.0",
  "type": "module",
  "scripts": {
    "build": "tsc"
  },
  "devDependencies": {
    "@graphql-tools/load-files": "^7.0.0",
    "@types/node": "20.14.9",
    "aws-cdk": "2.152.0",
    "graphql": "^16.9.0",
    "lambda-live-debugger": "^1.2.2",
    "tsx": "^4.17.0",
    "typescript": "~5.5.3"
  },
  "dependencies": {
    "aws-cdk-lib": "2.152.0",
    "constructs": "^10.0.0"
  }
}

Metadata

Metadata

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions